|
@@ -2486,7 +2486,7 @@ class OrderInv extends Base{
|
|
|
if($value["inv_total"]==""&& in_array($value['inv_type'],["fully_digitalized_special_electronic", "fully_digitalized_normal_electronic"])){
|
|
|
return error_show(1005,"第".($key+1)."行缺少发票金额数据");
|
|
|
}
|
|
|
- if($value["inv_subtotal"]==""){
|
|
|
+ if($value["inv_subtotal"]=="" && !in_array($value['inv_type'],['fully_digitalized_special_electronic', 'fully_digitalized_normal_electronic'])){
|
|
|
return error_show(1005,"第".($key+1)."行缺少发票税后金额数据");
|
|
|
}
|
|
|
if($value["open_date"]==""){
|
|
@@ -2557,7 +2557,7 @@ class OrderInv extends Base{
|
|
|
}
|
|
|
if($inpool[$key]['inv_type']!= $val['inv_type']) throw new Exception("{$key}发票类型有误");
|
|
|
$update=[
|
|
|
- "status"=>in_array($val['inv_type'],["fully_digitalized_special_electronic", "fully_digitalized_normal_electronic"])?4:3,
|
|
|
+ "status"=>3,
|
|
|
"open_type"=>$inpool[$key]['open_type']??3,
|
|
|
"updatetime"=>date("Y-m-d H:i:s")
|
|
|
];
|
|
@@ -2568,38 +2568,38 @@ class OrderInv extends Base{
|
|
|
}
|
|
|
|
|
|
if($update['status']==4){
|
|
|
- $qrdArr=Db::name("assoc")->where(["viceCode"=>$key,"is_del"=>0])->column("id,orderCode,cancel_fee");
|
|
|
- if(!empty($qrdArr)){
|
|
|
- foreach ($qrdArr as $value){
|
|
|
- $qrdinfo =Db::name("qrd_info")->where(["sequenceNo"=>$value['orderCode']])->find();
|
|
|
- if($qrdinfo==false){
|
|
|
- Db::rollback();
|
|
|
- return error_show(1003,"确认单信息未找到");
|
|
|
- }
|
|
|
- if($qrdinfo['inv_fee']<$value['cancel_fee']){
|
|
|
- Db::rollback();
|
|
|
- return error_show(1003,"确认单信息开票金额不足");
|
|
|
- }
|
|
|
- $update =[
|
|
|
- "ainv_fee"=>$qrdinfo['ainv_fee']+$value['cancel_fee'],
|
|
|
- "inv_fee"=>$qrdinfo['inv_fee']-$value['cancel_fee'],
|
|
|
- "invtime"=>date("Y-m-d H:i:s"),
|
|
|
- "inv_status"=>$qrdinfo['winv_fee']==0 &&($qrdinfo['inv_fee']-$value['cancel_fee'])==0 ? 3 : 2,
|
|
|
- "updatetime"=>date("Y-m-d H:i:s"),
|
|
|
- ];
|
|
|
- $qrdup = Db::name("qrd_info")->where($qrdinfo)->update($update);
|
|
|
- if($qrdup==false){
|
|
|
- Db::rollback();
|
|
|
- return error_show(1003,"确认单信息更新失败");
|
|
|
- }
|
|
|
- $assoc=["status"=>2,"assoc_time"=>date("Y-m-d H:i:s"),"updatetime"=>date("Y-m-d H:i:s")];
|
|
|
- $assocup =Db::name("assoc")->where($value)->update($assoc);
|
|
|
- if($assocup==false){
|
|
|
- Db::rollback();
|
|
|
- return error_show(1003,"确认单关联信息更新失败");
|
|
|
+ $qrdArr=Db::name("assoc")->where(["viceCode"=>$key,"is_del"=>0])->column("id,orderCode,cancel_fee");
|
|
|
+ if(!empty($qrdArr)){
|
|
|
+ foreach ($qrdArr as $value){
|
|
|
+ $qrdinfo =Db::name("qrd_info")->where(["sequenceNo"=>$value['orderCode']])->find();
|
|
|
+ if($qrdinfo==false){
|
|
|
+ Db::rollback();
|
|
|
+ return error_show(1003,"确认单信息未找到");
|
|
|
+ }
|
|
|
+ if($qrdinfo['inv_fee']<$value['cancel_fee']){
|
|
|
+ Db::rollback();
|
|
|
+ return error_show(1003,"确认单信息开票金额不足");
|
|
|
+ }
|
|
|
+ $update =[
|
|
|
+ "ainv_fee"=>$qrdinfo['ainv_fee']+$value['cancel_fee'],
|
|
|
+ "inv_fee"=>$qrdinfo['inv_fee']-$value['cancel_fee'],
|
|
|
+ "invtime"=>date("Y-m-d H:i:s"),
|
|
|
+ "inv_status"=>$qrdinfo['winv_fee']==0 &&($qrdinfo['inv_fee']-$value['cancel_fee'])==0 ? 3 : 2,
|
|
|
+ "updatetime"=>date("Y-m-d H:i:s"),
|
|
|
+ ];
|
|
|
+ $qrdup = Db::name("qrd_info")->where($qrdinfo)->update($update);
|
|
|
+ if($qrdup==false){
|
|
|
+ Db::rollback();
|
|
|
+ return error_show(1003,"确认单信息更新失败");
|
|
|
+ }
|
|
|
+ $assoc=["status"=>2,"assoc_time"=>date("Y-m-d H:i:s"),"updatetime"=>date("Y-m-d H:i:s")];
|
|
|
+ $assocup =Db::name("assoc")->where($value)->update($assoc);
|
|
|
+ if($assocup==false){
|
|
|
+ Db::rollback();
|
|
|
+ return error_show(1003,"确认单关联信息更新失败");
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- }
|
|
|
+ }
|
|
|
}
|
|
|
$val['inv_type'] = $this->kingInvoice[$val['inv_type']];
|
|
|
$list[]=$val;
|
|
@@ -2664,4 +2664,200 @@ class OrderInv extends Base{
|
|
|
$up= $info->save();
|
|
|
return $up? app_show(0,"修改成功"):error_show(1004,"修改失败");
|
|
|
}
|
|
|
+ //万宇数据传递
|
|
|
+ public function importInvByWanyu(){
|
|
|
+ $param =$this->request->only(['data'=>[]],'post');
|
|
|
+ if(empty($param['data']))return error_show(1004,'参数 data 不能为空');
|
|
|
+ $total=[];
|
|
|
+ $list=[];
|
|
|
+ foreach ($param['data'] as $key=>$value){
|
|
|
+
|
|
|
+ if($value['invNo']==''){
|
|
|
+ return error_show(1005,'第'.($key+1).'行缺少发票申请编号数据');
|
|
|
+ }
|
|
|
+ if($value['inv_type']===''){
|
|
|
+ return error_show(1005,'第'.($key+1).'行缺少发票类型数据');
|
|
|
+ }
|
|
|
+ if(!in_array($value['inv_type'],$this->invName)) return error_show(1005,'第'.($key+1).'行发票类型数据有误');
|
|
|
+ if($value['inv_code']=='' && !in_array($value['inv_type'],[ 'fully_digitalized_special_electronic', 'fully_digitalized_normal_electronic'])){
|
|
|
+ return error_show(1005,'第'.($key+1).'行缺少发票代码数据');
|
|
|
+ }
|
|
|
+ if($value['inv_number']==''){
|
|
|
+ return error_show(1005,'第'.($key+1).'行缺少发票号码数据');
|
|
|
+ }
|
|
|
+// if($value['inv_total']==''&& in_array($value['inv_type'],['fully_digitalized_special_electronic', 'fully_digitalized_normal_electronic'])){
|
|
|
+// return error_show(1005,'第'.($key+1).'行缺少发票金额数据');
|
|
|
+// }
|
|
|
+// if($value['inv_subtotal']=='' && !in_array($value['inv_type'],['fully_digitalized_special_electronic', 'fully_digitalized_normal_electronic'])){
|
|
|
+// return error_show(1005,'第'.($key+1).'行缺少发票税后金额数据');
|
|
|
+// }
|
|
|
+ if($value['open_date']==''){
|
|
|
+ return error_show(1005,'第'.($key+1).'行缺少发票开票日期数据');
|
|
|
+ }
|
|
|
+ //电子票校验码必传
|
|
|
+ if($value['check_code']=='' && in_array($value['inv_type'],['normal','roll','toll','electronic'])){
|
|
|
+ return error_show(1005,'第'.($key+1).'行缺少发票校验码数据');
|
|
|
+ }
|
|
|
+ if($value['seller_id']=="") return error_show(1005,"第".($key+1)."行缺少销售方纳税识别号数据");
|
|
|
+ if($value['seller_title']=="") return error_show(1005,"第".($key+1)."行缺少销售方名称数据");
|
|
|
+ if($value['seller_addr']=="") return error_show(1005,"第".($key+1)."行缺少销售方地址数据");
|
|
|
+ if($value['seller_mobile']=="") return error_show(1005,"第".($key+1)."行缺少销售方联系方式数据");
|
|
|
+ if($value['seller_bank']=="") return error_show(1005,"第".($key+1)."行缺少销售方银行数据");
|
|
|
+ if($value['seller_bankNo']=="") return error_show(1005,"第".($key+1)."行缺少销售方银行账户数据");
|
|
|
+ if($value['buyer_id']=="") return error_show(1005,"第".($key+1)."行缺少购买方纳税识别号数据");
|
|
|
+ if($value['buyer_title']=="") return error_show(1005,"第".($key+1)."行缺少购买方名称数据");
|
|
|
+ if($value['buyer_addr']=="") return error_show(1005,"第".($key+1)."行缺少购买方地址数据");
|
|
|
+ if($value['buyer_mobile']=="") return error_show(1005,"第".($key+1)."行缺少购买方联系方式数据");
|
|
|
+ if($value['buyer_bank']=="") return error_show(1005,"第".($key+1)."行缺少购买方银行数据");
|
|
|
+ if($value['buyer_bankNo']=="") return error_show(1005,"第".($key+1)."行缺少购买方银行账户数据");
|
|
|
+ if($value['buyer_title']=="") return error_show(1005,"第".($key+1)."行缺少购买方名称数据");
|
|
|
+ if($value['XMMC']=="") return error_show(1005,"第".($key+1)."行缺少购买方名称数据");
|
|
|
+ if($value['GGXH']=="") return error_show(1005,"第".($key+1)."行缺少购买方名称数据");
|
|
|
+ if($value['DW']=="") return error_show(1005,"第".($key+1)."行缺少购买方名称数据");
|
|
|
+ if($value['SPSL']=="") return error_show(1005,"第".($key+1)."行缺少购买方名称数据");
|
|
|
+ if($value['DJ']=="") return error_show(1005,"第".($key+1)."行缺少购买方名称数据");
|
|
|
+ if($value['JE']=="") return error_show(1005,"第".($key+1)."行缺少购买方名称数据");
|
|
|
+ if($value['SL']=="") return error_show(1005,"第".($key+1)."行缺少购买方名称数据");
|
|
|
+ if($value['SE']=="") return error_show(1005,"第".($key+1)."行缺少购买方名称数据");
|
|
|
+ if($value['JSHJ']=="") return error_show(1005,"第".($key+1)."行缺少购买方名称数据");
|
|
|
+ if(isset($total[$value['invNo']])){
|
|
|
+ $total[$value['invNo']]['inv_subtotal']+= $value['JE'];
|
|
|
+ $total[$value['invNo']]['inv_total']+= $value['JSHJ'];
|
|
|
+ $total[$value['invNo']]['tax_fee']+= $value['SE'];
|
|
|
+ $item_t= json_decode($total[$value['invNo']]['item'],true);
|
|
|
+ $item_t[]=[
|
|
|
+ 'XMMC'=>$value['XMMC'],
|
|
|
+ 'GGXH'=>$value['GGXH'],
|
|
|
+ 'DW'=>$value['DW'],
|
|
|
+ 'SPSL'=>$value['SPSL'],
|
|
|
+ 'DJ'=>$value['DJ'],
|
|
|
+ 'JE'=>$value['JE'],
|
|
|
+ 'SL'=>$value['SL'],
|
|
|
+ 'SE'=>$value['SE'],
|
|
|
+ 'SPBM'=>$value['SPBM'],
|
|
|
+ 'JSHJ'=>$value['JSHJ'],
|
|
|
+ ];
|
|
|
+ $total[$value['invNo']]['item']=json_encode($item_t,JSON_UNESCAPED_UNICODE);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ $item=[[
|
|
|
+ 'XMMC'=>$value['XMMC'],
|
|
|
+ 'GGXH'=>$value['GGXH'],
|
|
|
+ 'DW'=>$value['DW'],
|
|
|
+ 'SPSL'=>$value['SPSL'],
|
|
|
+ 'DJ'=>$value['DJ'],
|
|
|
+ 'JE'=>$value['JE'],
|
|
|
+ 'SL'=>$value['SL'],
|
|
|
+ 'SE'=>$value['SE'],
|
|
|
+ 'SPBM'=>$value['SPBM'],
|
|
|
+ 'JSHJ'=>$value['JSHJ'],
|
|
|
+ ]];
|
|
|
+ $temp=[];
|
|
|
+ $temp['invNo'] = $value['invNo'];
|
|
|
+ $temp['type'] = $value['type'];
|
|
|
+ $temp['inv_type'] =$value['inv_type'];
|
|
|
+ $temp['inv_code'] = $value['inv_code'];
|
|
|
+ $temp['inv_number'] = $value['inv_number'];
|
|
|
+ $temp['inv_subtotal'] = $value['JE'];
|
|
|
+ $temp['inv_total'] = $value['JSHJ'];
|
|
|
+ $temp['check_code'] = $value['check_code']??'';
|
|
|
+ $temp['seller_id'] = $value['seller_id']??'';
|
|
|
+ $temp['seller_title'] = $value['seller_title']??'';
|
|
|
+ $temp['seller_addr'] = $value['seller_addr']??'';
|
|
|
+ $temp['seller_mobile'] = $value['seller_mobile']??'';
|
|
|
+ $temp['seller_bank'] = $value['seller_bank']??'';
|
|
|
+ $temp['seller_bankNo'] = $value['seller_bankNo']??'';
|
|
|
+ $temp['buyer_id'] = $value['buyer_id']??'';
|
|
|
+ $temp['buyer_title'] = $value['buyer_title']??'';
|
|
|
+ $temp['buyer_addr'] = $value['buyer_addr']??'';
|
|
|
+ $temp['buyer_mobile'] = $value['buyer_mobile']??'';
|
|
|
+ $temp['buyer_bank'] = $value['buyer_bank']??'';
|
|
|
+ $temp['buyer_bankNo'] = $value['buyer_bankNo']??'';
|
|
|
+ $temp['tax_fee'] = $value['SE']??'';
|
|
|
+ $temp['remark'] = $value['remark']??'';
|
|
|
+ $temp['item'] =json_encode($item,JSON_UNESCAPED_UNICODE);
|
|
|
+ $temp['pdfstream'] = '';
|
|
|
+ $temp['open_date'] = date('Y-m-d H:i:s',strtotime($value['open_date']));
|
|
|
+ $temp['status'] =1;
|
|
|
+ $temp['is_del'] = 0;
|
|
|
+ $temp['addtime'] = date('Y-m-d H:i:s');
|
|
|
+ $temp['updatetime'] = date('Y-m-d H:i:s');
|
|
|
+ $total[$value['invNo']]=$temp;
|
|
|
+ }
|
|
|
+
|
|
|
+ Db::startTrans();
|
|
|
+ try{
|
|
|
+ $keyarr =array_keys($total);
|
|
|
+ $inpool = Db::name('invoice_pool')->where([['invNo','in',$keyarr],['open_type','in',[0,2,3]],['is_del','=',0],['status','=',2]])->column('winv_fee,invNo,inv_value,inv_type','invNo');
|
|
|
+
|
|
|
+ foreach ($total as $key=>$val){
|
|
|
+ if(!isset($inpool[$key])) throw new Exception("{$key}发票数据不存在或状态有误");
|
|
|
+ if(in_array($val['inv_type'],['fully_digitalized_special_electronic', 'fully_digitalized_normal_electronic']) && $inpool[$key]['winv_fee']!=$val['inv_total']){
|
|
|
+ throw new Exception("{$key}全电发票面金额小于未开票金额");
|
|
|
+ }
|
|
|
+ if($inpool[$key]['inv_type']!= $val['inv_type']) throw new Exception("{$key}发票类型有误");
|
|
|
+ $update=[
|
|
|
+ 'status'=>4,
|
|
|
+ 'open_type'=>$inpool[$key]['open_type']??3,
|
|
|
+ 'updatetime'=>date('Y-m-d H:i:s')
|
|
|
+ ];
|
|
|
+ $up =Db::name('invoice_pool')->where([['invNo','=',$key],['is_del','=',0]])->save($update);
|
|
|
+ if(!$up){
|
|
|
+ Db::rollback();
|
|
|
+ return error_show(1005,'发票状态更新失败');
|
|
|
+ }
|
|
|
+
|
|
|
+ if($update['status']==4){
|
|
|
+ $qrdArr=Db::name('assoc')->where(['viceCode'=>$key,'is_del'=>0])->column('id,orderCode,cancel_fee');
|
|
|
+ if(!empty($qrdArr)){
|
|
|
+ foreach ($qrdArr as $value){
|
|
|
+ $qrdinfo =Db::name('qrd_info')->where(['sequenceNo'=>$value['orderCode']])->find();
|
|
|
+ if($qrdinfo==false){
|
|
|
+ Db::rollback();
|
|
|
+ return error_show(1003,'确认单信息未找到');
|
|
|
+ }
|
|
|
+ if($qrdinfo['inv_fee']<$value['cancel_fee']){
|
|
|
+ Db::rollback();
|
|
|
+ return error_show(1003,'确认单信息开票金额不足');
|
|
|
+ }
|
|
|
+ $update =[
|
|
|
+ 'ainv_fee'=>$qrdinfo['ainv_fee']+$value['cancel_fee'],
|
|
|
+ 'inv_fee'=>$qrdinfo['inv_fee']-$value['cancel_fee'],
|
|
|
+ 'invtime'=>date('Y-m-d H:i:s'),
|
|
|
+ 'inv_status'=>$qrdinfo['winv_fee']==0 &&($qrdinfo['inv_fee']-$value['cancel_fee'])==0 ? 3 : 2,
|
|
|
+ 'updatetime'=>date('Y-m-d H:i:s'),
|
|
|
+ ];
|
|
|
+ $qrdup = Db::name('qrd_info')->where($qrdinfo)->update($update);
|
|
|
+ if($qrdup==false){
|
|
|
+ Db::rollback();
|
|
|
+ return error_show(1003,'确认单信息更新失败');
|
|
|
+ }
|
|
|
+ $assoc=['status'=>2,'assoc_time'=>date('Y-m-d H:i:s'),'updatetime'=>date('Y-m-d H:i:s')];
|
|
|
+ $assocup =Db::name('assoc')->where($value)->update($assoc);
|
|
|
+ if($assocup==false){
|
|
|
+ Db::rollback();
|
|
|
+ return error_show(1003,'确认单关联信息更新失败');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $val['inv_type'] = $this->kingInvoice[$val['inv_type']];
|
|
|
+ $list[]=$val;
|
|
|
+ }
|
|
|
+
|
|
|
+ $inticket =Db::name('invoice_ticket')->insertAll($list);
|
|
|
+ if(!$inticket){
|
|
|
+ Db::rollback();
|
|
|
+ return error_show(1005,'发票数据录入失败');
|
|
|
+ }
|
|
|
+ Db::commit();
|
|
|
+ return app_show(0,'发票数据录入成功');
|
|
|
+
|
|
|
+ }catch (\Exception $e){
|
|
|
+ Db::rollback();
|
|
|
+ return error_show(1008,$e->getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
}
|