浏览代码

Merge branch 'dev-wgg' of wugg/cxinv into dev

wugg 1 年之前
父节点
当前提交
4b8f6fc69f

+ 26 - 15
app/admin/controller/ComonOrder.php

@@ -40,7 +40,7 @@ class ComonOrder extends Base
     
     public function list(){
         $post = $this->request->only(["start"=>"","end"=>"","cxCode"=>"","customerNo"=>"","companyNo"=>"",'status'=>[],
-        'relaComNo'=>'','platform_type'=>'','inv_status'=>'','pay_status'=>'','page'=>1,'size'=>15],"post","trim");
+        'relaComNo'=>'','platform_type'=>'','inv_status'=>'','pay_status'=>'', 'page'=>1,'size'=>15],"post","trim");
         $where=[];
         $post['start']==''?:$where[]=["comon_order.addtime",">=",date("Y-m-d 00:00:00",strtotime($post['start']))];
         $post['end']==''?:$where[]=["comon_order.addtime","<=",date("Y-m-d 23:59:59",strtotime($post['end']))];
@@ -49,13 +49,11 @@ class ComonOrder extends Base
         empty($post['status'])?:$where[]=['comon_order.status','in',$post['status']];
         $post['inv_status']==''?:$where[]=["qrd.inv_status","=",$post['inv_status']];
         $post['pay_status']==''?:$where[]=["qrd.pay_status","=",$post['pay_status']];
-//        $post['status']==''?:$where[]=["comon_order.status","=",$post['status']];
         $post['platform_type']==''?:$where[]=["comon_order.platform_type","=",$post['platform_type']];
         $post['companyNo']==''?:$where[]=["comon_order.companyNo|comon_order.supplierNo","=",$post['companyNo']];
         $post['relaComNo']==''?:$where[]=["comon_order.companyNo|comon_order.supplierNo|comon_order.customerNo","=",
         $post['relaComNo']];
-        $list=$this->model->withJoin(["qrd","cgd"],"left")->where($where)->order("id desc")->paginate
-        (["page"=>$post['page'],"list_rows"=>$post['size']]);
+        $list=$this->model->withJoin(["qrd","cgd"],"left")->where($where)->order("id desc")->paginate (["page"=>$post['page'],"list_rows"=>$post['size']]);
         $this->success("0",["list"=>$list->items(),"count"=>$list->total()]);
     }
     //通用订单创建对账单
@@ -334,9 +332,22 @@ class ComonOrder extends Base
         if($company->isEmpty())$this->error('订单业务公司开票信息未找到');
          $customer = CompanyInfo::whereIn('companyNo',array_keys($customerArr))->findOrEmpty();
         if($customer->isEmpty())$this->error('订单客户公司开票信息未找到');
-        if($company['denomination']!=''&& $invfee>intval($company['denomination'])*10000){
-           $this->error("开票面额不能超过{$company['denomination']}万元");
-        }
+        if (in_array($param['invtype'] ,
+        		   [
+        			   'fully_digitalized_special_electronic' ,
+        			   'fully_digitalized_normal_electronic'
+        		   ]
+        	   )) {
+        		   //全电发票限制金额
+        		   if ($invfee > 10000000) {
+        		   	$this->error('开票面额不能超过一千万元');
+        		   }
+        	   }
+        	   else {//全电发票
+        		   if ($company['denomination'] != '' && $invfee > intval($company['denomination']) * 10000) {
+        			   $this->error( "开票面额不能超过{$company['denomination']}万元");
+        		   }
+        	   }
         $platform = array_column($qrdinfo,'platform_type');
         if(count(array_unique($platform))!=1){
         	$this->error("订单平台类型不一致");
@@ -377,20 +388,20 @@ class ComonOrder extends Base
                        'invNo'=>$invNo,
                         'orderCode'=>$item['sequenceNo'],
                         'goodNo'=>$qrdinfo[$item['sequenceNo']]['goodNo'],
-                        'goodName'=>$good_info[$qrdinfo[$item['sequenceNo']]['goodNo']]['inv_good_name']??$qrdinfo[$item['sequenceNo']]['goodName'] ,
-                        'catName'=>$good_info[$qrdinfo[$item['sequenceNo']]['goodNo']]['inv_cat_name']??$qrdinfo[$item['sequenceNo']]['thirdCat'],
-                        'catNo'=>$good_info[$qrdinfo[$item['sequenceNo']]['goodNo']]['inv_cat_code']??'',
+                        'goodName'=>$goodInfo[$qrdinfo[$item['sequenceNo']]['goodNo']]['inv_good_name']??$qrdinfo[$item['sequenceNo']]['goodName'] ,
+                        'catName'=>$goodInfo[$qrdinfo[$item['sequenceNo']]['goodNo']]['inv_cat_name']??$qrdinfo[$item['sequenceNo']]['thirdCat'],
+                        'catNo'=>$goodInfo[$qrdinfo[$item['sequenceNo']]['goodNo']]['inv_cat_code'],
                         'goodPrice'=>round($item['inv_fee']/$item['num'],8),
                         'unitName'=>$qrdinfo[$item['sequenceNo']]['goodUnit'],
                         'goodNum'=>$item['num'],
                         'specInfo'=>$item['sequenceNo'],
                         'totalPrice'=>$item['inv_fee'],
                         'totalTax'=>$item['inv_fee'],
-                        'tax'=>$good_info[$qrdinfo[$item['sequenceNo']]['goodNo']]['inv_tax']??$qrdinfo[$item['sequenceNo']]['tax'],
-                        'is_discount'=>$good_info[$qrdinfo[$item['sequenceNo']]['goodNo']]['is_discount']??0,
-                        'addTax'=>$good_info[$qrdinfo[$item['sequenceNo']]['goodNo']]['addTax']??'',
-                        'inv_tag'=>$good_info[$qrdinfo[$item['sequenceNo']]['goodNo']]['inv_tag']??'',
-                        'taxPrice'=>round($item['inv_fee']*($good_info[$qrdinfo[$item['sequenceNo']]['goodNo']]['inv_tax']??$qrdinfo[$item['sequenceNo']]['tax']),2),
+                        'tax'=>$goodInfo[$qrdinfo[$item['sequenceNo']]['goodNo']]['inv_tax']??$qrdinfo[$item['sequenceNo']]['tax'],
+                        'is_discount'=>$goodInfo[$qrdinfo[$item['sequenceNo']]['goodNo']]['is_discount'],
+                        'addTax'=>$goodInfo[$qrdinfo[$item['sequenceNo']]['goodNo']]['addTax'],
+                        'inv_tag'=>$goodInfo[$qrdinfo[$item['sequenceNo']]['goodNo']]['inv_tag'],
+                        'taxPrice'=>round($item['inv_fee']*($goodInfo[$qrdinfo[$item['sequenceNo']]['goodNo']]['inv_tax']??$qrdinfo[$item['sequenceNo']]['tax']),2),
                         'addtime'=>date('Y-m-d H:i:s'),
                         'updatetime'=>date('Y-m-d H:i:s')
                     ];

+ 3 - 2
app/admin/controller/DepartTips.php

@@ -3,13 +3,14 @@
 
 namespace app\admin\controller;
 
-
 use think\App;
 use think\Exception;
 use think\facade\Db;
 use think\facade\Validate;
 class DepartTips extends Base{
-	public function __construct(App $app) {parent::__construct($app);}
+	public function __construct(App $app) {
+		parent::__construct($app);
+	}
 
 	public function list(){
 		$post = $this->request->only(["year"=>"","month"=>"","companyNo"=>"","page"=>1,"size"=>15],"post","trim");

+ 11 - 2
app/admin/controller/OrderInv.php

@@ -72,9 +72,18 @@ class OrderInv extends Base{
         $good=[];
         $invNo=makeNo("INV");
         $invfee=array_sum(array_column($orderArr,'inv_fee'));
-        if($company['denomination']!=''&& $invfee>intval($company['denomination'])*10000){
-                return error_show(1004,"开票面额不能超过{$company['denomination']}万元");
+       if(in_array($invtype,['fully_digitalized_special_electronic','fully_digitalized_normal_electronic'])){
+	           	     //全电发票限制金额
+        		   if ($invfee > 10000000) {
+        		   	$this->error('开票面额不能超过一千万元');
+        		   }
+        	   }
+        	   else {//全电发票
+        		   if ($company['denomination'] != '' && $invfee > intval($company['denomination']) * 10000) {
+        			   $this->error( "开票面额不能超过{$company['denomination']}万元");
+        		   }
         }
+        
         $platform = array_column($orderArr,'platform_type');
         if(count(array_unique($platform))!=1){
             return error_show(1004,"订单平台类型不一致");

+ 16 - 9
app/admin/controller/OrderPay.php

@@ -159,7 +159,7 @@ class OrderPay extends Base{
                     $qrdArr=Db::name("assoc")->where(["viceCode"=>$logNo,"status"=>1,"is_del"=>0])->select()->toArray();
                     if(!empty($qrdArr)){
                         foreach ($qrdArr as $value){
-                            $qrd =Db::name("qrd_info")->where(["sequenceNo"=>$value['orderCode']])->field("id,status,pay_fee,apay_fee,wpay_fee,pay_status,totalPrice")->findOrEmpty();
+                            $qrd =Db::name("qrd_info")->where(["sequenceNo"=>$value['orderCode']])->field("id,status,pay_fee,apay_fee,wpay_fee,pay_status,totalPrice,cxCode")->findOrEmpty();
                             if(empty($qrd)){
                                 Db::rollback();
                                 return error_show(1005,"未找到销售单数据");
@@ -180,6 +180,9 @@ class OrderPay extends Base{
                                 Db::rollback();
                                 return error_show(1005,"销售单更新失败");
                             }
+                            if($update['pay_status']==3){
+                            	(new \app\admin\model\ComonOrder())->where(["cxCode"=>$qrd['cxCode'],"status"=>-1])->update(["status"=>0]);
+                            }
                             $asscup =[
                                 "status"=>2,
                                 "assoc_time"=>date("Y-m-d H:i:s"),
@@ -1045,7 +1048,7 @@ class OrderPay extends Base{
         	   $all_order=Db::name('qrd_info')
                 ->where('is_del', 0)
                 ->whereIn('sequenceNo',$value['orderCode'])
-                ->field('id,customerNo,status,pay_fee,apay_fee,wpay_fee,pay_status,totalPrice,platform_type')
+                ->field('id,customerNo,status,pay_fee,apay_fee,wpay_fee,pay_status,totalPrice,platform_type,cxCode')
                 ->findOrEmpty();
         	   if(empty($all_order))throw new Exception("{$value['orderCode']}销售单未找到数据");
         	   if($all_order['wpay_fee']<$value['trad_fee'])throw new Exception("{$value['orderCode']}销售单未付款金额不足核销金额");
@@ -1053,6 +1056,7 @@ class OrderPay extends Base{
                 $OrderCodeToLogNo = substr(makeNo('TRC'), 0, -3).str_pad($i,3,'0',STR_PAD_LEFT);
                 //资金数据更新处理
 				$balance = bcsub($all_trade['balance'], $value['trad_fee'], 2);
+				
                 $tradeUp=Db::name('trade')
                     ->where($all_trade)
                     ->update([
@@ -1062,17 +1066,22 @@ class OrderPay extends Base{
                         'updatetime' =>date("Y-m-d H:i:s"),
                     ]);
                if($tradeUp==false ) throw new Exception("{$value['tradNo']}资金更新失败");
+               
 				//订单数据更新处理
-                $orderUp=Db::name('qrd_info')
-                    ->where($all_order)
-                    ->update([
+				$update=[
                         'apay_fee' => bcadd($all_order['apay_fee'], $value['trad_fee'], 2),
                         'wpay_fee' => bcsub($all_order['wpay_fee'], $value['trad_fee'], 2),
                         'pay_status' => bcsub($all_order['wpay_fee'], $value['trad_fee'], 2)==0 &&$all_order['pay_fee']==0? 3:2,
                         'status' => 1,
-                        'updatetime' => date("Y-m-d H:i:s")
-                    ]);
+                        'updatetime' => date('Y-m-d H:i:s')
+                    ];
+                $orderUp=Db::name('qrd_info')
+                    ->where($all_order)
+                    ->update($update);
                 if($orderUp==false ) throw new Exception("{$value['orderCode']}销售单更新失败");
+                 if($update['pay_status']==3){
+                    (new \app\admin\model\ComonOrder())->where(['cxCode'=>$all_order['cxCode'],'status'=>-1])->update(['status'=>0]);
+                 }
                 //资金订单关联数据
                 $assoc_insert_data[]=[
                 	'assocNo' => $OrderCodeToAssocNo,
@@ -1119,8 +1128,6 @@ class OrderPay extends Base{
             Db::rollback();
             return error_show(1004, '批量认领资金失败,' . $exception->getMessage());
         }
-
-
     }
 
 }

+ 120 - 43
app/admin/controller/Payment.php

@@ -4,7 +4,7 @@ declare (strict_types = 1);
 namespace app\admin\controller;
 
 
-use app\admin\model\ReportCode;
+use app\admin\model\CgdInfo;use app\admin\model\FhdChild;use app\admin\model\Pay;use app\admin\model\PayInfo;use app\admin\model\ReportCode;
 use think\App;use think\Exception;
 use think\facade\Config;
 use think\facade\Db;
@@ -15,7 +15,6 @@ class Payment extends Base
     protected $invoiceType;
 
     protected $invName;
-//
 //    发票状态,取值范围:
 //
 //    正常:valid
@@ -35,10 +34,9 @@ class Payment extends Base
     public function paymentList()
     {
         $post = $this->post;
-        $condition = [["a.is_del","=",0]];
+        $condition = [["a.is_del","=",0],['pay_type','=',$post['pay_type']??1]];
         $check = checkRole($this->roleid,[79,119]);
         if($check){
-//            $condition[]=" and b.apply_id={$this->uid}";
             $condition[]=["b.apply_id","=",$this->uid];
         }
          $startTime= isset($post['startTime'])&&$post['startTime']!="" ? date("Y-m-d 00:00:00",strtotime($post['startTime']))
@@ -53,7 +51,6 @@ class Payment extends Base
         $apply= isset($post['apply_name'])&&$post['apply_name']!="" ? trim($post['apply_name']) :"";
         $paystatus= isset($post['status'])&&$post['status']!="" ? $post['status'] :"";
         $dzNo= isset($post['dzNo'])&&$post['dzNo']!="" ? trim($post['dzNo']) :"";
-
         if($startTime!=""){
 //            $condition.=" and `b`.`addtime` >= '{$startTime}'";
              $condition[]=['b.addtime','>=',$startTime];
@@ -153,7 +150,7 @@ class Payment extends Base
     public function payList()
     {
         $post = $this->post;
-        $condition = [["is_del","=",0]];
+        $condition = [["is_del","=",0],['pay_type','=',$post['pay_type']??1]];
         $check = checkRole($this->roleid,[77,117]);
         if($check){
             $condition[]=["apply_id","=",$this->uid];
@@ -529,7 +526,7 @@ class Payment extends Base
         $remark = isset($post['remark']) && $post['remark']!=""? trim($post['remark']):"";
         $cgdNo = Db::name("pay_info")->where(["payNo"=>$payNo,"is_del"=>0])->column("cgdNo");
        if(empty($cgdNo)){
-           return error_show(1004,"未能找到对应采购单数据");
+           return error_show(1004,"未能找到对应对账数据");
        }
        if($status==4){
        	    $stages = Db::name("pay_payment")->where(['status'=>[0,1,2,3,4],"payNo"=>$payNo,"is_del"=>0])
@@ -549,11 +546,14 @@ class Payment extends Base
             if($result){
 
                 if($status==3 || $status==4){
-                     $cgdup =Db::name("cgd_info")->where(["sequenceNo"=>$cgdNo,"status"=>1])->update(['status'=>0,"updatetime"=>date("Y-m-d H:i:s")]);
-                       if($cgdup==false){
-                            Db::rollback();
-                           return error_show(1004,"对账驳回失败");
-                       }
+                	if($data['pay_type']==1){
+                		CgdInfo::where(['sequenceNo'=>$cgdNo,'status'=>1])->update(['status'=>0,
+                		'updatetime'=>date('Y-m-d H:i:s')]);
+                		
+                	}else{
+                		\app\admin\model\Track::where(["TrackCode"=>$cgdNo,"status"=>1])->update(["status"=>0]);
+                	}
+                     
                        $payinfoup =Db::name("pay_info")->where(["payNo"=>$payNo,"is_del"=>0])->update(['status'=>0,"updatetime"=>date("Y-m-d H:i:s")]);
                        if($payinfoup==false){
                             Db::rollback();
@@ -565,7 +565,7 @@ class Payment extends Base
                      }
                 }
                Db::commit();
-                if(($status==3 || $status==4)&&$data['is_common']==1){
+                if(($status==3 || $status==4)&&$data['is_comon']==1){
                 	event("comonOrder",["payNo"=>$payNo,"type"=>"check"]);
                 }
                return app_show(0,"状态更新成功");
@@ -603,7 +603,7 @@ class Payment extends Base
 	    }
        $cgdNo = Db::name("pay_info")->where(["payNo"=>$payNo,"is_del"=>0])->column("cgdNo");
        if(empty($cgdNo)){
-           return error_show(1004,"未能找到对应采购单数据");
+           return error_show(1004,"未能找到对应对账数据");
        }
        Db::startTrans();
        try{
@@ -616,11 +616,13 @@ class Payment extends Base
                    return error_show(1004,"对账删除失败");
                }
                if(in_array($data['status'],[0,1,2])){
-               	 $cgdup =Db::name("cgd_info")->where(["sequenceNo"=>$cgdNo,"status"=>1])->update(['status'=>0,"updatetime"=>date("Y-m-d H:i:s")]);
-	               if($cgdup==false){
-	                    Db::rollback();
-	                   return error_show(1004,"对账删除失败");
-	               }
+               	 if($data['pay_type']==1){
+                		CgdInfo::where(['sequenceNo'=>$cgdNo,'status'=>1])->update(['status'=>0,
+                		'updatetime'=>date('Y-m-d H:i:s')]);
+                		
+                	}else{
+                		\app\admin\model\Track::where(['TrackCode'=>$cgdNo,'status'=>1])->update(['status'=>0]);
+                }
                }
 
                foreach ($cgdNo as $value){
@@ -654,7 +656,7 @@ class Payment extends Base
            return error_show(1004,"未找到对账信息");
         }
         $cgdNo =Db::name("pay_info")->where(["payNo"=>$payNo,"is_del"=>0])->column("cgdNo");
-        if(empty($cgdNo))  return error_show(1004,"未找到对账采购单信息");
+        if(empty($cgdNo))  return error_show(1004,"未找到对账数据信息");
         if($payinfo['status']!=2){
               return error_show(1004,"对账未审核完成");
         }
@@ -741,7 +743,7 @@ class Payment extends Base
             return error_show(1005,"对账信息未完成审核");
         }
         $cgdNo =Db::name("pay_info")->where(["payNo"=>$payment['payNo'],"is_del"=>0])->column("cgdNo");
-        if(empty($cgdNo))  return error_show(1004,"未找到对账采购单信息");
+        if(empty($cgdNo))  return error_show(1004,"未找到对账数据信息");
         $remark = isset($post['remark'])? trim($post['remark']) :"";
         $image = isset($post['return_image'])? trim($post['return_image']) :"";
         $return_time = isset($post['return_time'])? trim($post['return_time']) :date("Y-m-d H:i:s");
@@ -824,7 +826,7 @@ class Payment extends Base
             return error_show(1005,"未找到付款信息");
         }
         $cgdNo =Db::name("pay_info")->where(["payNo"=>$payment['payNo'],"is_del"=>0])->column("cgdNo");
-        if(empty($cgdNo))  return error_show(1004,"未找到对账采购单信息");
+        if(empty($cgdNo))  return error_show(1004,"未找到对账数据信息");
        Db::startTrans();
        try{
            $paym = Db::name("pay_payment")->where($payment)->update(["is_del"=>1,"updatetime"=>date("Y-m-d H:i:s")]);
@@ -1013,6 +1015,8 @@ class Payment extends Base
          $payArr=Db::name('supplier_info')->whereIn('code',array_unique(array_column($list,'supplierNo')))->column('pay_method','code');
         foreach ($list as &$value){
         	$value['pay_type']=$payArr[$value['supplierNo']]??'';
+        	$value['goodNum'] =$value['goodNum']- $value['thNum'];
+        	$value['sendNum'] =$value['sendNum']- $value['thNum'];
         }
          return app_show(0,"获取成功",$list);
     }
@@ -1035,6 +1039,8 @@ class Payment extends Base
         $cgdinfo["cgd_pay_status"]=$payinfo['pay_status']??1;
         $cgdinfo["cgd_inv_status"]=$payinfo['inv_status']??1;
         $cgdinfo["cgd_status"]=$payinfo['status']??0;
+        $cgdinfo['goodNum'] =$cgdinfo['goodNum']- $cgdinfo['thNum'];
+        $cgdinfo['sendNum'] =$cgdinfo['sendNum']- $cgdinfo['thNum'];
         return app_show(0,"获取成功",$cgdinfo);
     }
     //todo
@@ -1049,12 +1055,26 @@ class Payment extends Base
         if($payinfo==false){
               return error_show(1004,"对账单数据未找到");
         }
-           $pay =Db::name("pay_info")->alias("a")->leftJoin("cgd_info b","a.cgdNo=b.sequenceNo")
-        ->where(["a.is_del"=>0,"b.is_del"=>0,"a.payNo"=>$payNo])->field("b.*")
-        ->select()->toArray();
-        foreach ($pay as &$value){
-            $value['catInfo'] = json_decode($value['catInfo'],true);
-        }
+        if($payinfo['pay_type']==1){
+	        $pay =Db::name("pay_info")->alias("a")->leftJoin("cgd_info b","a.cgdNo=b.sequenceNo")
+	        ->where(["a.is_del"=>0,"b.is_del"=>0,"a.payNo"=>$payNo])->field("b.*")
+	        ->select()->toArray();
+	        foreach ($pay as &$value){
+	            $value['catInfo'] = json_decode($value['catInfo'],true);
+	            $value['goodNum'] =$value['goodNum']- $value['thNum'];
+	            $value['sendNum'] =$value['sendNum']- $value['thNum'];
+	            if($payinfo['is_comon']==1){
+	                $value['qrdCode'] = (new \app\admin\model\ComonOrder())->where(['cgdNo'=>$value['sequenceNo']])->value("orderCode",'');
+	            }
+	        }
+	        }else{
+	            $pay =Db::name('pay_info')->alias('a')
+	            ->leftJoin('track b','a.cgdNo=b.TrackCode')
+	            ->leftJoin('fhd_child c','b.outChildCode=c.outChildCode')
+		        ->where(['a.is_del'=>0,"a.status"=>1,'a.payNo'=>$payNo])
+		        ->field('b.*,c.outCode,c.good_name,c.spuCode,c.post_name,c.post_code')
+		        ->select()->toArray();
+	        }
         $payinfo['pay_type']=Db::name('supplier_info')->where('code',$payinfo['supplierNo'])->value('pay_method','');
         $tag =Db::name("tag_log")->alias("a")->leftJoin("order_tag b","a.tag_id=b.id")->where
             (["code"=>$payNo,"a.status"=>1])->column("b.tag_name,a.tag_img,a.tag_remark","b.type");
@@ -1189,7 +1209,7 @@ class Payment extends Base
 		}
 		if(empty($daList))  return error_show(1004,"录入数据不能为空");
           $cgdNo =Db::name("pay_info")->where(["payNo"=>$payNo,"is_del"=>0])->column("cgdNo");
-        if(empty($cgdNo))  return error_show(1004,"未找到对账采购单信息");
+        if(empty($cgdNo))  return error_show(1004,"未找到对账数据信息");
         Db::startTrans();
         try{
 
@@ -1216,11 +1236,12 @@ class Payment extends Base
     {
         try {
 
-            $param = $this->request->only(['list', 'companyNo'], 'post', 'trim');
+            $param = $this->request->only(['list', 'companyNo', 'is_comon'], 'post', 'trim');
 
             $validate = Validate::rule([
                 'list' => 'require|array|max:100',
                 'companyNo|卖出方公司编号' => 'require|max:255|checkCompanyNo:',
+                'is_comon|是否通用对账' => 'require|number|in:0,1',
             ]);
             $validate->extend('checkCompanyNo', function ($val, $rule, $da) {
 
@@ -1258,7 +1279,7 @@ class Payment extends Base
             $payinfo = Db::name('pay')
                 ->where('is_del', 0)
                 ->whereIn('payNo', $payNo)
-                ->column('id,payNo,supplierNo,supplierName,status', 'payNo');
+                ->column('id,payNo,supplierNo,supplierName,status,is_comon', 'payNo');
             $Supp=[];
 	        if ($this->level == 2) {
 		        //判断是否开通供应商账号
@@ -1270,6 +1291,7 @@ class Payment extends Base
             $da_insert = $payNo_hpNo = [];
             $date = date('Y-m-d H:i:s');
             $unique=[];
+            $diesa=[];
             foreach ($param['list'] as $item) {
 
                 if (!$val->check($item)) throw new Exception($val->getError());
@@ -1277,6 +1299,9 @@ class Payment extends Base
                 $unique[]=$item['invoiceNumber'];
                 if (!isset($payinfo[$item['payNo']])) throw new Exception('对账单数据未找到');
                 if ($payinfo[$item['payNo']]['status'] != 2) throw new Exception('对账单数据未完成审核');
+                if($payinfo[$item['payNo']]['is_comon'] != $param['is_comon']){
+                    $diesa[]=$item['payNo'];
+                }
                 if ($this->level == 2) {
                     if ( isset($Supp[$payinfo[$item['payNo']]['supplierNo']])) throw new Exception("该供应商{$payinfo[$item['payNo']]['supplierName']}已经开通账号,不允许当前账号操作");
                 }
@@ -1309,12 +1334,14 @@ class Payment extends Base
 
                 $payNo_hpNo[$item['payNo']] = $hpNo;
             }
-
+			if(empty($diesa)==false){
+				$this->error("对账单不符合对账要求",10004,$diesa);
+			}
             $cgdNo = Db::name('pay_info')
                 ->where('is_del', 0)
                 ->whereIn('payNo', $payNo)
                 ->column('cgdNo', 'payNo');
-            if (empty($cgdNo)) throw new Exception('未找到对账采购单信息');
+            if (empty($cgdNo)) throw new Exception('未找到对账数据信息');
             Db::startTrans();
             try {
 
@@ -1377,7 +1404,7 @@ class Payment extends Base
             return error_show(1005,"对账信息未完成审核");
         }
          $cgdNo =Db::name("pay_info")->where(["payNo"=>$payment['payNo'],"is_del"=>0])->column("cgdNo");
-        if(empty($cgdNo))  return error_show(1004,"未找到对账采购单信息");
+        if(empty($cgdNo))  return error_show(1004,"未找到对账数据信息");
         if($payinfo['inv_fee']< $payment['inv_fee'])return error_show(1005,"对账回票申请金额有误,请确认回票申请金额");
         $remark = $post['remark']??'';
         Db::startTrans();
@@ -1443,7 +1470,7 @@ class Payment extends Base
     public function InvList()
     {
         $post = $this->post;
-        $condition = [["a.is_del","=",0 ],["b.is_del","=",0 ]];
+        $condition = [["a.is_del","=",0 ],["b.is_del","=",0 ],['pay_type','=',$post['pay_type']??1]];
         $invtype = isset($post['invType'])&&$post['invType']!='' ? intval($post['invType']):"";
         $check = checkRole($this->roleid,[82,120]);
         if($check){
@@ -1452,6 +1479,7 @@ class Payment extends Base
         if ($invtype!=''){
             $condition[]=["a.invType","=",$invtype];
         }
+       
         $companyNo = isset($post['companyNo'])&&$post['companyNo']!='' ? trim($post['companyNo']):"";
         if($companyNo!=""){
         	 $condition[]=["b.companyNo","=",$companyNo];
@@ -1607,7 +1635,7 @@ class Payment extends Base
             return error_show(1005,"对账信息未完成审核");
         }
         $cgdNo =Db::name("pay_info")->where(["payNo"=>$payinv['payNo'],"is_del"=>0])->column("cgdNo");
-        if(empty($cgdNo))  return error_show(1004,"未找到对账采购单信息");
+        if(empty($cgdNo))  return error_show(1004,"未找到对账数据信息");
         Db::startTrans();
         try{
             $update=["is_del"=>1,"updatetime"=>date("Y-m-d H:i:s")];
@@ -1804,8 +1832,8 @@ class Payment extends Base
     }
 	public function hpinvReturnList(){
 		$param =$this->request->only(["relaComNo"=>"","companyNo"=>"","supplierNo"=>"","start"=>"","end"=>"","returnCode"=>"",
-		"status"=>"","hpNo"=>"","is_comon"=>"","payNo"=>"","page"=>1,"size"=>15],"post","trim");
-		$condition=[["a.is_del","=",0],['a.returnType',"=",1]];
+		"status"=>"","hpNo"=>"","is_comon"=>"","payNo"=>"","pay_type"=>"","page"=>1,"size"=>15],"post","trim");
+		$condition=[["a.is_del","=",0],['a.returnType',"=",1],['pay_type','=',$param['pay_type']??1]];
 		 $check = checkRole($this->roleid,[132,130]);
         if($check){
             $condition []=["a.apply_id","=",$this->uid];
@@ -1955,8 +1983,8 @@ class Payment extends Base
     }
     public function stageReturnList(){
 		$param =$this->request->only(["relaComNo"=>"","companyNo"=>"","supplierNo"=>"","start"=>"","end"=>"","returnCode"=>"","payNo"=>"",
-		"status"=>"","dzNo"=>"","is_comon"=>"","page"=>1,"size"=>15],"post","trim");
-		$condition=[["a.is_del","=",0],['a.returnType',"=",2]];
+		"status"=>"","dzNo"=>"","pay_type"=>"","is_comon"=>"","page"=>1,"size"=>15],"post","trim");
+		$condition=[["a.is_del","=",0],['a.returnType',"=",2],['pay_type','=',$param['pay_type']??1]];
 		  $check = checkRole($this->roleid,[131,129]);
         if($check){
             $condition []=["a.apply_id","=",$this->uid];
@@ -2164,20 +2192,69 @@ class Payment extends Base
 				"payNo|对账申请编号"=>"require|max:255",
 			]);
 		if($valide->check($param)==false)return error_show(1004,$valide->getError());
-		$payinfo =Db::name("pay")->where(["payNo"=>$param['payNo'],"is_del"=>0])->findOrEmpty();
+		$payinfo =Db::name("pay")->where(["payNo"=>$param['payNo'],"is_del"=>0,"pay_type"=>1])->findOrEmpty();
 		if(empty($payinfo)) return error_show(1005,'对账单信息未找到');
 		$cgdlist =Db::name("pay_info")->alias("a")
 		->leftJoin("cgd_info b","a.cgdNo=b.sequenceNo")
 		->where(["a.payNo"=>$param['payNo'],"a.status"=>1,"a.is_del"=>0])
 		->field("a.payNo'对账单号',b.sequenceNo '采购单编号',b.qrdCode '销售单编号',b.supplierName '供货商',b.companyName '业务公司',
-		b.goodName '商品名称',b.goodUnit '单位',b.goodNum '商品数量',b.goodPrice'商品单价',b.totalPrice'总货款',b.tax/100 '税率',if(b.cxCode='',b.qrdCode,b.cxCode) 销售主单号")
+		b.goodName '商品名称',b.goodUnit '单位',(b.goodNum-b.thNum) '商品数量',b.goodPrice'商品单价',b.totalPrice'总货款',b.tax/100 '税率',if(b.cxCode='',b.qrdCode,b.cxCode) 销售主单号")
 		->select()
 		->toArray();
 		if(empty($cgdlist))$cgdlist=["暂无数据"=>''];
 
 		excelExport("{$param['payNo']}对账采购单详情",array_keys($cgdlist[0]),$cgdlist);
 	}
-
+		/** 导出对账单采购单信息
+		    */
+	public function payTrackExport(){
+		$param = $this->request->only(['payNo'=>''],'post','trim');
+    	$valide=Validate::rule([
+				'payNo|对账申请编号'=>'require|max:255',
+			]);
+		if($valide->check($param)==false)return error_show(1004,$valide->getError());
+		$payinfo =Db::name('pay')->where(['payNo'=>$param['payNo'],'is_del'=>0,'pay_type'=>2])->findOrEmpty();
+		if(empty($payinfo)) return error_show(1005,'对账单信息未找到');
+		$cgdlist =Pay::alias("e")
+		->leftJoin("pay_info a","a.payNo=e.payNo and a.status=1 and a.is_del=0")
+		->leftJoin("track b","a.cgdNo=b.TrackCode")
+		->leftJoin("fhd_child c","c.outChildCode=b.outChildCode")
+		->where(['e.payNo'=>$param['payNo']])
+		->field("a.payNo 对账单号,
+			e.total_fee 对账单总金额,
+			e.status 对账单状态,
+			e.apply_name 对账单创建人,
+			e.addtime 对账单创建时间,
+			b.TrackCode 发货运单号,
+			b.outChildCode 发货工单号,
+			c.outCode 发货单号,
+			b.orderCode 销售单号,
+			b.cgdNo 采购单号,
+			c.order_source 订单来源,
+			c.order_type 商品类型,
+			c.good_name 商品名称,
+			b.supplierNo 物流供应商编号,
+			b.supplierName 物流供应商名称,
+			b.companyNo 业务公司编号,
+			b.companyName 业务公司名称,
+			b.post_fee 物流费,
+			b.apply_name 运费单创建人,
+			b.create_time 运费单创建时间")
+			->withAttr("对账单状态",function ($v){
+				return Pay::$status[$v]??"";
+			})
+			->withAttr('订单来源',function ($v){
+				return FhdChild::$order_source[$v]??'';
+			})
+			->withAttr('商品类型',function ($v){
+				return FhdChild::$order_type[$v]??'';
+			})
+			->select()->toArray();
+//		$this->success("",$cgdlist);
+		if(empty($cgdlist))$cgdlist=['暂无数据'=>''];
+
+		excelExport("{$param['payNo']}对账运费单详情",array_keys($cgdlist[0]),$cgdlist);
+	}
 //	/**校验供应商下面是否有操作账户
 //	* @param $supplierNo 供应商账户
 //	 * @return array

+ 8 - 3
app/admin/controller/Sale.php

@@ -395,10 +395,15 @@ class Sale extends Base{
     	  	]);
     	  if($vali->check($post)==false) return error_show(1004,$vali->getError());
     	  if($post['is_cgd_check']==0){
-    	  	  $qrdinf =Db::name('qrd_info')->where(['sequenceNo|cxCode'=>$post['orderCode'],'status'=>1,'is_del'=>0])->column('sequenceNo');
+    	  	  $qrdinf =Db::name('qrd_info')->where(['sequenceNo|cxCode'=>$post['orderCode'],'status'=>1,'is_del'=>0])
+    	  	  ->field('sequenceNo,inv_tag,pay_tag')->select();
 	          if(!empty($qrdinf)){
-	            $asscoinfo =Db::name('assoc')->where(['orderCode'=>$qrdinf,'status'=>[1,2],'is_del'=>0])->column('viceCode','type');
-	            $message='';
+	          	$message='';
+	            if(in_array(1,array_column($qrdinf,'inv_tag')))$message.="结算订单存在开票标签\r\n";
+	            if(in_array(1,array_column($qrdinf,'pay_tag')))$message.="结算订单存在付款标签\r\n";
+	            $asscoinfo =Db::name('assoc')->where(['orderCode'=>array_column($qrdinf,"sequenceNo"),'status'=>[1,2],'is_del'=>0])->column
+	            ('viceCode','type');
+	            
 	            if(isset($asscoinfo[1]))$message.='开票申请编号:'.$asscoinfo[1]."\r\n";
 	            if(isset($asscoinfo[2]))$message.='资金认领编号:'.$asscoinfo[2]."\r\n";
 	            return error_show(1005,$message);

+ 286 - 0
app/admin/controller/Track.php

@@ -0,0 +1,286 @@
+<?php
+declare (strict_types = 1);
+
+namespace app\admin\controller;
+
+use app\admin\model\CgdInfo;
+use app\admin\model\CompanyInfo;
+use app\admin\model\FhdChild;
+use app\admin\model\Pay;
+use app\admin\model\PayInfo;
+use app\admin\model\QrdInfo;
+use app\admin\model\SupplierInfo;
+use think\App;
+use think\facade\Validate;
+
+class Track extends Base
+{
+	protected $model=null;
+    public function __construct(App $app) {
+    	parent::__construct($app);
+    	$this->model=new \app\admin\model\Track();
+    }
+    //运费单创建
+    public function create(){
+    	 $param = $this->request->post('list/a', '', 'trim');
+    	 if(empty($param))$this->error("参数不能为空");
+    	 $rule =Validate::rule([
+    	 	"outChildCode|发货工单编号"=>"require|max:255",
+    	 	"supplierNo|物流供货商"=>'require|max:255',
+    	 	"companyNo|业务公司"=>'require|max:255',
+    	 	"post_fee|物流费用"=>'require|float',
+    	 	]);
+    	 $supplier = (new SupplierInfo())->where(["code"=>array_unique(array_column($param,"supplierNo"))])->column("name","code");
+    	 $business = (new CompanyInfo())->where(["companyNo"=>array_unique(array_column($param,"companyNo"))])->column("company_name","companyNo");
+    	 $outChild = (new FhdChild())->where(["outChildCode"=>array_unique(array_column($param,'outChildCode'))])
+    	 ->column('orderCode','outChildCode');
+    	 $cgdArr = (new CgdInfo())->where(["qrdCode"=>array_unique($outChild)])->column("sequenceNo","qrdCode");
+    	 $data=[];
+    	 foreach ($param as $item){
+    	    if($rule->check($item)==false)$this->error($rule->getError());
+    	    if(!isset($outChild[$item['outChildCode']]))$this->error("发货工单未找到或未发货");
+    	    $sale = QrdInfo::where(["cxCode|sequenceNo"=>$outChild[$item['outChildCode']]])->findOrEmpty();
+    	    $temp=[
+    	    	"TrackCode"=>makeNo("TK"),
+    	    	"orderCode"=>$outChild[$item['outChildCode']],
+    	    	"cgdNo"=>$cgdArr[$outChild[$item['outChildCode']]]??"",
+    	    	"saler"=>$sale['ownerName']??"",
+    	    	"salerid"=>$sale['ownerid']??"",
+    	    	"outChildCode"=>$item['outChildCode'],
+    	    	"supplierNo"=>$item['supplierNo'],
+    	    	"supplierName"=>$supplier[$item['supplierNo']]??"",
+    	    	'companyNo'=>$item['companyNo'],
+    	    	'companyName'=>$business[$item['companyNo']]??'',
+    	    	'post_fee'=>$item['post_fee'],
+    	    	'apply_name'=>$this->uname,
+    	    	'apply_id'=>$this->uid,
+    	    	];
+    	    $data[]=$temp;
+    	 }
+    	 $this->model->saveAll($data);
+    	 $this->success("运费单创建成功");
+    }
+    //***列表
+    public function list(){
+        $param=$this->request->param(["outChildCode"=>"","order_type"=>"","order_source"=>"","supplierNo"=>"",
+        "companyNo"=>"","status"=>"","orderCode"=>"","cgdNo"=>"",'page'=>1,'size'=>10],"post","trim");
+        $where=[];
+        $param['outChildCode']==''?:$where[]=["outChildCode","like","%{$param['outChildCode']}%"];
+        $param['orderCode']==''?:$where[]=["orderCode","like","%{$param['orderCode']}%"];
+        $param['cgdNo']==''?:$where[]=["cgdNo","like","%{$param['cgdNo']}%"];
+        $param['order_type']==''?:$where[]=["order_type","=",$param['order_type']];
+        $param['order_source']==''?:$where[]=["order_source","=",$param['order_source']];
+        $param['supplierNo']==''?:$where[]=["supplierNo","=",$param['supplierNo']];
+        $param['companyNo']==''?:$where[]=["companyNo","=",$param['companyNo']];
+        $param['status']==''?:$where[]=["status","=",$param['status']];
+        $list=$this->model->with(['fhdChild'])->where($where)->order("id desc")->paginate(["list_rows"=>$param['size'],
+        "page"=>$param['page']]);
+        $supp_account = check_has_account_by_supplierNos(array_unique(array_column($list->items(),'supplierNo')));
+         foreach ($list->items() as &$value){
+            $value['has_account'] = (int)isset($supp_account['data'][$value['supplierNo']]);
+            
+        }
+        $this->success("获取成功",["list"=>$list->items(),"count"=>$list->total()]);
+    }
+    
+        //***列表
+    public function fhdList(){
+        $param=$this->request->param(['outChildCode'=>'','order_type'=>'','order_source'=>'','supplierNo'=>'',
+        'companyNo'=>'','orderCode'=>'','page'=>1,'size'=>10],'post','trim');
+        $where=[];
+        $param['outChildCode']==''?:$where[]=['outChildCode','like',"%{$param['outChildCode']}%"];
+        $param['orderCode']==''?:$where[]=['orderCode','like',"%{$param['orderCode']}%"];
+        $param['order_type']==''?:$where[]=['order_type','=',$param['order_type']];
+        $param['order_source']==''?:$where[]=['order_source','=',$param['order_source']];
+        $param['supplierNo']==''?:$where[]=['supplierNo','=',$param['supplierNo']];
+        $param['companyNo']==''?:$where[]=['companyNo','=',$param['companyNo']];
+       
+        $list=(new FhdChild())->where($where)->order('id desc')->paginate(['list_rows'=>$param['size'],
+        'page'=>$param['page']]);
+        $this->success('获取成功',['list'=>$list->items(),'count'=>$list->total()]);
+    }
+       //***列表
+    public function info(){
+        $param=$this->request->param(["id"=>""],'post','trim');
+        $valid=Validate::rule(["id"=>"require|number|gt:0"]);
+        if($valid->check($param)==false)$this->error($valid->getError());
+        $list=$this->model->with(['fhdChild'])->order('id desc')->findOrEmpty($param['id']);
+        $this->success('获取成功',$list);
+    }
+        //***列表
+    public function query(){
+        $param=$this->request->param(['outChildCode'=>[],'order_type'=>'','order_source'=>'','supplierNo'=>'',
+        'companyNo'=>'','status'=>'','orderCode'=>[],'cgdNo'=>[],"page"=>1,"size"=>100],'post','trim');
+        $where=[];
+        empty($param['outChildCode'])??$where[]=['outChildCode','in',$param['outChildCode']];
+        empty($param['cgdNo'])??$where[]=['cgdNo','in',$param['cgdNo']];
+        empty($param['orderCode'])??$where[]=['orderCode','in',$param['orderCode']];
+//        $param['orderCode']==''??$where[]=['orderCode','like',"%{$param['orderCode']}%"];
+//        $param['cgdNo']==''??$where[]=['cgdNo','like',"%{$param['cgdNo']}%"];
+        $param['order_type']==''??$where[]=['order_type','=',$param['order_type']];
+        $param['order_source']==''??$where[]=['order_source','=',$param['order_source']];
+        $param['supplierNo']==''??$where[]=['supplierNo','=',$param['supplierNo']];
+        $param['companyNo']==''??$where[]=['companyNo','=',$param['companyNo']];
+        $param['status']==''??$where[]=['status','=',$param['status']];
+        $list=$this->model->with(['fhdChild'])->order('id desc')->paginate(['list_rows'=>$param['size'],
+        'page'=>$param['page']]);
+        $this->success('获取成功',['list'=>$list->items(),'count'=>$list->total()]);
+    }
+
+	public function PayAdd(){
+	    $param=$this->request->param(['cids'=>[]],'post','trim');
+	    $valid = Validate::rule(['cids|对账数据集合'=>'require|array']);
+	    if($valid->check($param)==false)$this->error($valid->getError());
+	    $PayObject = new \app\admin\model\Track();
+	    $objall= $PayObject->where(['id'=>$param['cids']])->select();
+	    if($objall->isEmpty()) $this->error('对账数据不能为空');
+	    $supplierNo= array_column($objall->toArray(),'supplierNo');
+        $supplierName= array_column($objall->toArray(),'supplierName');
+        if(count(array_unique($supplierNo))>1){
+            $this->error('对账数据供应商不唯一');
+        }
+        $companyNo= array_column($objall->toArray(),'companyNo');
+        $companyName= array_column($objall->toArray(),'companyName');
+        if(count(array_unique($companyNo))>1){
+            $this->error('对账数据业务公司不唯一');
+        }
+        if ($this->level == 2) {
+                    //判断是否开通供应商账号
+        $temp = check_has_account_by_supplierNos([$supplierNo[0]]);
+         if (isset($temp['data'][$supplierNo[0]])) $this->error( '该供应商已经开通账号,不允许当前账号操作');
+        }
+        $pay= new Pay();
+        $data = [
+        	    'payNo'=>makeNo('PAY'),
+        	    'apply_id'=>$this->uid,
+                'apply_name'=>$this->uname,
+                'total_fee'=>'0',
+                'pay_type'=>2,
+                'supplierNo'=>$supplierNo[0],
+                'supplierName'=>$supplierName[0],
+                'companyNo'=>$companyNo[0],
+                'companyName'=>$companyName[0],
+                'wpay_fee'=>'0',
+                'apay_fee'=>'0',
+                'ainv_fee'=>'0',
+                'winv_fee'=>'0',
+                'remark'=>'',
+                'status'=>1,
+        	];
+        $pay->startTrans();
+        try{
+        	$payinfo=[];
+            foreach ($objall as $item){
+            	           $temp=[];
+                           $temp['cgdNo']=$item['TrackCode'];
+                           $temp['total_fee']=$item['post_fee'];
+                           $temp['apay_fee']=0;
+                           $temp['wpay_fee']=$item['post_fee'];
+                           $temp['winv_fee']=0;
+                           $temp['ainv_fee']=$item['post_fee'];
+                           $temp['payNo']=$data['payNo'];
+                           $temp['addtime']=date('Y-m-d H:i:s');
+                           $temp['updatetime']=date('Y-m-d H:i:s');
+                           $payinfo[]=$temp;
+                            $data['total_fee']=bcadd($data['total_fee'],$item['post_fee'],2);
+			                $data['wpay_fee']= bcadd($data['wpay_fee'],$item['post_fee'],2);
+			                $data['winv_fee']= bcadd($data['winv_fee'],$item['post_fee'],2);
+            }
+        	$info =(new PayInfo())->saveAll($payinfo);
+            if(empty($info)==false){
+                  $create=$pay->save($data);
+                  if($create)$objall->update(['status'=>1]);
+            }
+            $pay->commit();
+        }catch (\Exception $e){
+        	$pay->rollback();
+        	$this->error($e->getMessage());
+        }
+        $this->success('对账单添加成功',['payNo'=>$data['payNo']]);
+	}
+	
+	/**对账单未对账前编辑8**/
+	public function PaySave(){
+		$param=$this->request->param(['cids'=>[],'payNo'=>''],'post','trim');
+	    $valid = Validate::rule(['cids|对账数据集合'=>'require|array','payNo|对账编号'=>'require']);
+	    if($valid->check($param)==false)$this->error($valid->getError());
+	    $PayObject = new \app\admin\model\Track();
+	    $pay= new Pay();
+	    $objall= $PayObject->where(['id'=>$param['cids']])->select();
+	    if($objall->isEmpty()) $this->error('对账数据不能为空');
+	    $PayInfo = $pay->where(['payNo'=>$param['payNo']])->findOrEmpty();
+	    if($PayInfo->isEmpty()) $this->error('未找到对账单数据');
+	    
+	    $supplierNo= array_column($objall->toArray(),'supplierNo');
+        $supplierName= array_column($objall->toArray(),'supplierName');
+        if(count(array_unique($supplierNo))>1){
+            $this->error('对账数据供应商不唯一');
+        }
+        $companyNo= array_column($objall->toArray(),'companyNo');
+        $companyName= array_column($objall->toArray(),'companyName');
+        if(count(array_unique($companyNo))>1){
+            $this->error('对账数据业务公司不唯一');
+        }
+        if ($this->level == 2) {
+                    //判断是否开通供应商账号
+                    $temp = check_has_account_by_supplierNos([$supplierNo[0]]);
+                    if (isset($temp['data'][$supplierNo[0]])) $this->error( '该供应商已经开通账号,不允许当前账号操作');
+        }
+        $trackArr = PayInfo::where(['payNo'=>$param['payNo'],'is_del'=>0,'status'=>1])->column('cgdNo');
+        $add=$remove=[];
+        if(empty($trackArr)==false){
+        	$remove= array_diff($trackArr,array_column($objall->toArray(),'TrackCode'));
+        	$add= array_diff(array_column($objall->toArray(),'TrackCode'),$trackArr);
+        }
+        $data = [
+        	    'apply_id'=>$this->uid,
+                'apply_name'=>$this->uname,
+                'total_fee'=>'0',
+                'supplierNo'=>$supplierNo[0],
+                'supplierName'=>$supplierName[0],
+                'companyNo'=>$companyNo[0],
+                'companyName'=>$companyName[0],
+                'wpay_fee'=>'0',
+                'winv_fee'=>'0',
+        	];
+        $pay->startTrans();
+        try{
+            $payinfo=[];
+            foreach ($objall as $item){
+            	$data['total_fee']=bcadd($data['total_fee'],$item['post_fee'],2);
+				$data['wpay_fee']= bcadd($data['wpay_fee'],$item['post_fee'],2);
+				$data['winv_fee']= bcadd($data['winv_fee'],$item['post_fee'],2);
+				if(!empty($add)&& in_array($item['TrackCode'],$add)){
+					$temp=[];
+					$temp['cgdNo']=$item['TrackCode'];
+					$temp['total_fee']=$item['post_fee'];
+					$temp['apay_fee']=0;
+					$temp['wpay_fee']=$item['post_fee'];
+					$temp['winv_fee']=0;
+					$temp['ainv_fee']=$item['post_fee'];
+					$temp['payNo']=$param['payNo'];
+					$temp['addtime']=date('Y-m-d H:i:s');
+					$temp['updatetime']=date('Y-m-d H:i:s');
+					$payinfo[]=$temp;
+				}
+				        
+            }
+        	if(!empty($payinfo))(new PayInfo())->saveAll($payinfo);
+        	$up = $PayInfo->save($data);
+            if($up){
+                 $objall->update(['status'=>1]);
+                 if(!empty($remove)){
+                 	$PayObject->where(['TrackCode'=>$remove,'status'=>1])->update(['status'=>0]);
+                    PayInfo::where(['cgdNo'=>$remove,'status'=>1,'is_del'=>0])->update(['status'=>0,'is_del'=>1]);
+                 }
+                 
+            }
+            $pay->commit();
+        }catch (\Exception $exception){
+            $pay->rollback();
+            $this->error($exception->getMessage());
+        }
+        $this->success('更新成功');
+	}
+}
+

+ 60 - 11
app/admin/listener/ComonQrd.php

@@ -3,7 +3,7 @@ declare (strict_types = 1);
 
 namespace app\admin\listener;
 
-use app\admin\model\InvoicePay;use app\admin\model\InvoicePool;use app\admin\model\InvoiceTicket;use app\admin\model\Pay;use app\admin\model\PayInfo;use app\admin\model\PayInvoice;use app\admin\model\QrdInfo;use app\admin\model\TagLog;use think\facade\Config;
+use app\admin\model\InvoiceInfo;use app\admin\model\InvoicePay;use app\admin\model\InvoicePool;use app\admin\model\InvoiceTicket;use app\admin\model\Pay;use app\admin\model\PayInfo;use app\admin\model\PayInvoice;use app\admin\model\QrdInfo;use app\admin\model\TagLog;use think\facade\Config;
 class ComonQrd
 {
     /**
@@ -115,6 +115,47 @@ class ComonQrd
     	$this->CheckComonOrder($payinfo);
     	$payinfo->save();
     	PayInvoice::create($payinvoice);
+    	PayInvoice::create($payinvoice);
+    	    	if(!empty($ticket->item)){
+    	    		$itemArr=[];
+    	    		foreach ($ticket->item as $item){
+    	    		    $temp=[];
+    	    		    $temp['name']=$item['XMMC'];
+    	    		    $temp['unit']=$item['DW'];
+    	    		    $temp['quantity']=$item['SPSL'];
+    	    		    $temp['unit_price']=$item['DJ'];
+    	    		    $temp['amount']=$item['JE'];
+    	    		    $temp['tax']=$item['SE'];
+    	    		    $temp['tax_rate']=strval($item['SL']*100)."%";
+    				    $itemArr[]=$temp;
+    			    }
+    		    }
+    		    $info=[
+    			    'payNo'          =>$invpay['payNo'] ,
+    			    'hpNo'           =>$payinvoice['hpNo'] ,
+    			    'type'           =>$invinfo['inv_type'] ,
+    			    'number'         =>$ticket->inv_number ,
+    			    'code'           =>$ticket->inv_code ,
+    			    'check_code'     =>$ticket->check_code ,
+    			    'issue_date'     =>date('Ymd' ,strtotime($ticket->open_date)) ,
+    			    'buyer_name'     =>$ticket->buyer_title ,
+    			    'buyer_id'       =>$ticket->buyer_id ,
+    			    'buyer_address'  =>$ticket->buyer_addr . $ticket->buyer_mobile ,
+    			    'buyer_bank'     =>$ticket->buyer_bank . $ticket->buyer_bankNo ,
+    			    'seller_name'    =>$ticket->seller_title ,
+    			    'seller_id'      =>$ticket->seller_id ,
+    			    'seller_address' =>$ticket->seller_addr . $ticket->seller_mobile ,
+    			    'seller_bank'    =>$ticket->seller_bank . $ticket->seller_bankNo ,
+    			    'subtotal_amount'=>$ticket->inv_subtotal ,
+    			    'subtotal_tax'   =>$ticket->tax_fee ,
+    			    'total'          =>$ticket->inv_total ,
+    			    'item_list'      =>json_encode($itemArr,JSON_UNESCAPED_UNICODE) ,
+    			    'receiver'       =>$ticket->reciver ,
+    			    'issuer'         =>$ticket->issuer ,
+    			    'reviewer'       =>$ticket->reviewer ,
+    			    'change_field'   =>'' ,
+    		    ];
+    		    InvoiceInfo::create($info);
     }
      protected function checkPay($data){
     	$payinfo = Pay::where('payNo',$data['payNo'])->findOrEmpty();
@@ -124,15 +165,23 @@ class ComonQrd
     	
     }
     public function CheckComonOrder($payinfo){
-        if($payinfo->inv_status==3 &&$payinfo->pay_status==3){
-            PayInfo::alias('a')->leftJoin('ComonOrder b','a.cgdNo=b.cgdNo')
-            ->where(['payNo'=>$payinfo->payNo,'is_del'=>0,'a.status'=>1])
-            ->update(["b.status"=>2]);
-        }
-        if($payinfo->inv_status==1 &&$payinfo->pay_status==1){
-            PayInfo::alias('a')->leftJoin('ComonOrder b','a.cgdNo=b.cgdNo')
-            ->where(['payNo'=>$payinfo->payNo,'is_del'=>0,'a.status'=>1])
-            ->update(['b.status'=>0]);
-        }
+    	if($payinfo->status==3||$payinfo->status==4 ){
+	        PayInfo::alias('a')
+	        ->leftJoin('ComonOrder b','a.cgdNo=b.cgdNo')
+	            ->where(['payNo'=>$payinfo->payNo,'is_del'=>0,'a.status'=>0])
+	            ->update(['b.status'=>0]);
+    	}else{
+    		if($payinfo->inv_status==3 &&$payinfo->pay_status==3){
+	            PayInfo::alias('a')
+	            ->leftJoin('ComonOrder b','a.cgdNo=b.cgdNo')
+	            ->where(['payNo'=>$payinfo->payNo,'is_del'=>0,'a.status'=>1])
+	            ->update(["b.status"=>2]);
+		        }elseif($payinfo->inv_status!=3|| $payinfo->pay_status!=3){
+		            PayInfo::alias('a')
+		            ->leftJoin('ComonOrder b','a.cgdNo=b.cgdNo')
+		            ->where(['payNo'=>$payinfo->payNo,'is_del'=>0,'a.status'=>1])
+		            ->update(['b.status'=>1]);
+		        }
+    		}
     }
 }

+ 16 - 0
app/admin/model/FhdChild.php

@@ -0,0 +1,16 @@
+<?php
+declare (strict_types = 1);
+
+namespace app\admin\model;
+
+use think\Model;
+
+/**
+ * @mixin \think\Model
+ */
+class FhdChild extends Model
+{
+   	public static $order_source=[1 => '直接下单', 2 => '咨询', 3 => '项目', 4 => '平台', 5 => '有赞', 6 => '售后补换货', 7 => '报备转单',
+	 8 => '支付渠道', 9 => '采销录单',10 => '结算录单', 11 => '业务报备单',];
+	public static $order_type=[1=>'库存商品',2=>'非库存商品',3=>'咨询商品',4=>'报备商品'];
+}

+ 14 - 0
app/admin/model/InvoiceInfo.php

@@ -0,0 +1,14 @@
+<?php
+declare (strict_types = 1);
+
+namespace app\admin\model;
+
+use think\Model;
+
+/**
+ * @mixin \think\Model
+ */
+class InvoiceInfo extends Model
+{
+    //
+}

+ 3 - 1
app/admin/model/Pay.php

@@ -10,5 +10,7 @@ use think\Model;
  */
 class Pay extends Model
 {
-    //
+       protected $createTime='addtime';
+    protected $updateTime='updatetime';
+    public static $status=["待提交","待买方审核","审核通过","审核驳回","对账单无效"];
 }

+ 2 - 0
app/admin/model/PayInfo.php

@@ -10,6 +10,8 @@ use think\Model;
  */
 class PayInfo extends Model
 {
+	protected $createTime='addtime';
+    protected $updateTime='updatetime';
     public function Comon(){
     	return $this->belongsTo(ComonOrder::class,"cgdNo","cgdNo");
     }

+ 1 - 0
app/admin/model/PayInvoice.php

@@ -11,4 +11,5 @@ use think\Model;
 class PayInvoice extends Model
 {
     //
+    public static $invStatus=[0=>'待验证','1'=>'正常','2'=>'已作废','3'=>'已红冲'];
 }

+ 1 - 3
app/admin/model/ReportCode.php

@@ -26,7 +26,5 @@ class ReportCode extends Model
     public function __destruct(){
       $this->save();
     }
-    public function beat(){
-    
-    }
+
 }

+ 21 - 0
app/admin/model/Track.php

@@ -0,0 +1,21 @@
+<?php
+declare (strict_types = 1);
+
+namespace app\admin\model;
+
+use think\Model;use think\model\concern\SoftDelete;
+
+/**
+ * @mixin \think\Model
+ */
+class Track extends Model
+{
+	use SoftDelete;
+	protected $createTime="create_time";
+	protected $updateTime="update_time";
+	protected $deleteTime= "delete_time";
+	
+    public function fhdChild(){
+        return $this->belongsTo(FhdChild::class,"outChildCode","outChildCode");
+    }
+}

+ 1 - 0
app/admin/route/app.php

@@ -149,6 +149,7 @@ Route::rule("stagereturnlist","admin/Payment/stageReturnList");
 Route::rule("stagereturnstatus","admin/Payment/stageReturnStatus");
 Route::rule("stagereturninfo","admin/Payment/stageReturnInfo");
 Route::rule("paycgdexport","admin/Payment/payCgdExport");
+Route::rule("paytrackxport","admin/Payment/payTrackExport");
 
 Route::rule("returninvinfo","admin/OrderInv/returnInfo");
 Route::rule("tradeloginfo","admin/OrderPay/logInfo");

+ 1 - 1
app/command/handleCxData.php

@@ -283,7 +283,7 @@ class handleCxData extends command
 							    'diff_weight'=>$data['diff_weight'] ,//工差重量,
 							    'diff_fee'=>$data['diff_fee'] ,//工差金额,
 							    'area'=>$data['customer_name'] ,//公司,
-							    'customerAttr'=>$all_branch[$data['customer_code']]['parent'] ,//客户属性,
+							    'customerAttr'=>$all_branch[$data['customer_code']]['parent']??"" ,//客户属性,
 							    'branch'=>$all_branch[$data['customer_code']]['branch'] ?? '' ,//分公司,从客户表中查
 							    'cgdNo'=>$data['cgdNo'] ,//采购单号,
 							    'thNum'=>$data['th_num'] ,//退货数量,