wugg 8 ay önce
ebeveyn
işleme
1d619f3f2a
2 değiştirilmiş dosya ile 232 ekleme ve 34 silme
  1. 3 1
      app/admin/controller/Exec.php
  2. 229 33
      app/admin/controller/OrderInv.php

+ 3 - 1
app/admin/controller/Exec.php

@@ -8,7 +8,9 @@ use think\App;
 use think\facade\Validate;
 class Exec extends Base{
 
-	public function __construct(App $app) {parent::__construct($app);}
+	public function __construct(App $app) {
+	    parent::__construct($app);
+	}
 
 	public function list(){
 		$param=$this->request->param(["name"=>"","type"=>"","status"=>"","companyNo"=>"",'relaComNo'=>'',"page"=>1,"size"=>15],"post","trim");

+ 229 - 33
app/admin/controller/OrderInv.php

@@ -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());
+		 }
+
+    }
+
 }