Bläddra i källkod

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

wugg 11 månader sedan
förälder
incheckning
3a96a23fdf

+ 9 - 10
app/admin/command/GetOrderInfoAndInvoiceInfo.php

@@ -40,6 +40,7 @@ class GetOrderInfoAndInvoiceInfo extends Command
 					$this->GetOrderInfo($value);
 				}
 				if($value['status']==2){
+					
 					if($value['KPLX']==1){
 							$red=Db::name("invoice_red")->where(["invRed"=>$value['invNo'],"is_del"=>0])->find();
 							if($red){
@@ -51,12 +52,16 @@ class GetOrderInfoAndInvoiceInfo extends Command
 							$this->insertTicket($value['result'],$invNo);
 					}else{
 							$invNo = $value['invNo'];
-							$invoicePoo= Db::name('invoice_pool')->where(['invNo'=>$value['invNo'],'is_del'=>0])
-							->findOrEmpty();
 							Db::name("invoice_pool")->where(["invNo"=>$value['invNo'],"is_del"=>0])->update(["status"=>4,"seller_check"=>1,"buyer_check"=>1,"updatetime"=>date("Y-m-d H:i:s")]);
 							$this->insertTicket($value['result'],$invNo);
-							if($invoicePoo['is_comon']==1)event("comonOrder",["invNo"=>$invNo,"type"=>"inv"]);
-							
+					}
+					if(isset($invNo)&&$invNo!=''){
+						$is_comon= Db::name('invoice_pool')->where(['invNo'=>$invNo,'is_del'=>0])
+																					->value('is_comon');
+						if ($is_comon == 1) {
+							event('comonOrder' ,['invNo'=>$invNo ,'type' =>$value['KPLX']==0?'inv':'rinv']);
+							$output->writeln( "【 $date 】通用订单验票完成".$invNo.$value['KPLX']==0?'开票':'退票');
+						}
 					}
 					Db::name("invoice_interface")->where($value)->update(["is_check"=>1,"updatetime"=>date("Y-m-d H:i:s")]);
 					
@@ -93,7 +98,6 @@ class GetOrderInfoAndInvoiceInfo extends Command
     }
 
     protected function GetOrderInfo($order){
-//    	$invoice=Config::get("invoice");
     	$invoiceConf=Config::get('invoice');
     	if(!isset($invoiceConf[$order['XHFSBH']])){
     		Db::name('invoice_interface')->where($order)->update(['status'=>4,'remark'=>"金税配置不存在",'updatetime'=>date('Y-m-d H:i:s')]);
@@ -132,7 +136,6 @@ class GetOrderInfoAndInvoiceInfo extends Command
 
     protected function insertTicket($data,$invNo=''){
 	    $json= json_decode($data,true);
-
 		if(is_array($json)&&!empty($json)){
 			$invinfo =Db::name("invoice_ticket")->where(["invNo"=>$invNo,'type'=>$json['KPLX'],'is_del'=>0])->findOrEmpty();
 			if(empty($invinfo)){
@@ -193,7 +196,6 @@ class GetOrderInfoAndInvoiceInfo extends Command
 									0 HSBZ,
 									tax as SL,
 									-taxPrice as SE")->select()->toArray();
-//					$data = $invinfo['DDMXXX']?json_decode($invinfo['DDMXXX'],true):[];
 				}
 			}
 			foreach ($data as $value){
@@ -249,16 +251,13 @@ class GetOrderInfoAndInvoiceInfo extends Command
 	                              "updatetime"=>date("Y-m-d H:i:s"),
 	                          ];
                           }
-
                           $qrdup = Db::name("qrd_info")->where($qrdinfo)->update($update);
                           if($qrdup==false){
-//                              return "确认单信息更新失败";
                               echo "$invNo 确认单信息更新失败 \r\n";break;
                           }
                           $assoc=["status"=>$status==4?2:3,"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){
-//                              return "确认单关联信息更新失败";
                                echo "$invNo 确认单关联信息更新失败 \r\n";break;
                           }
                       }

+ 1 - 1
app/admin/command/QueryInvalidInvoice.php

@@ -53,7 +53,7 @@ class QueryInvalidInvoice extends Command
 			if($ticket==false)throw new \Exception($data['invNo']."发票详情数据更新失败");
 			$infoup =Db::name("invoice_good")->where(["invNo"=>$data['invNo'],"is_del"=>0])->update(["goodNum"=>0,"updatetime"=>date("Y-m-d H:i:s")]);
             if($infoup==false)throw  new \Exception($data['invNo']."发票商品信息修改失败");
-			  $qrdArr=Db::name("assoc")->where(["viceCode"=>$data['invNo'],"is_del"=>0,"status"=>2])->column("id,orderCode,cancel_fee");
+			$qrdArr=Db::name("assoc")->where(["viceCode"=>$data['invNo'],"is_del"=>0,"status"=>2])->column("id,orderCode,cancel_fee");
                      if(!empty($qrdArr)){
                           foreach ($qrdArr as $value){
                               $qrdinfo =Db::name("qrd_info")->where(["sequenceNo"=>$value['orderCode']])->find();

+ 18 - 16
app/admin/controller/ComonOrder.php

@@ -39,8 +39,8 @@ class ComonOrder extends Base
     
     public function list(){
         $post = $this->request->only(["start"=>"","end"=>"","cxCode"=>"","orderCode"=>[],"customerNo"=>"",
-        "companyNo"=>"",'status'=>[],'relaComNo'=>'','platform_type'=>'','inv_status'=>'','pay_status'=>'', 'page'=>1,'size'=>15],"post","trim");
-        $where=[["qrd.is_del","=",0],['cgd.is_del','=',0]];
+        'cgd_status'=>'',"companyNo"=>"",'status'=>[],'relaComNo'=>'','platform_type'=>'','inv_status'=>'','pay_status'=>'', 'page'=>1,'size'=>15],"post","trim");
+        $where=[["qrd.is_del","=",0],['cgd.is_del','=',0],['qrd.totalPrice','<>',0],['cgd.totalPrice','<>',0]];
         $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']))];
         $post['cxCode']==''?:$where[]=["comon_order.cxCode","like","%{$post['cxCode']}%"];
@@ -50,10 +50,11 @@ class ComonOrder extends Base
         $post['inv_status']==''?:$where[]=["qrd.inv_status","=",$post['inv_status']];
         $post['pay_status']==''?:$where[]=["qrd.pay_status","=",$post['pay_status']];
         $post['platform_type']==''?:$where[]=["comon_order.platform_type","=",$post['platform_type']];
+        $post['cgd_status']===''?:$where[]=['cgd.cgd_status','=',$post['cgd_status']];
         $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']]);
+        $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']]);
         $this->success("0",["list"=>$list->items(),"count"=>$list->total()]);
     }
     //通用订单创建对账单
@@ -265,23 +266,24 @@ class ComonOrder extends Base
         $qrdlist = [];
         $list=$this->model->with(['qrd','cgd'])->where(['cgdNo'=>array_column($pay->toArray(),"cgdNo")])->select()
         ->toArray();
+        $qrdArr= array_column($list,"qrd","cgdNo");
+        $cgdArr= array_column($list,"cgd","cgdNo");
         foreach ($pay as $item){
-        	$list=$this->model->with(['qrd',"cgd"])->where(["cgdNo"=>$item->cgdNo])->findOrEmpty();
-        	if($list->isEmpty())continue;
         	
-        	$list->cgd->catInfo = json_decode($list->cgd->catInfo,true);
-        	$list->qrd->catInfo = json_decode($list->qrd->catInfo,true);
-        	 $cgdlist[] =$list->cgd->toArray();
+        	if(isset($qrdArr[$item['cgdNo']])==false)continue;
+        	$qrdArr[$item['cgdNo']]['catInfo'] = json_decode($qrdArr[$item['cgdNo']]['catInfo'],true);
+        	$cgdArr[$item['cgdNo']]['catInfo'] = json_decode($cgdArr[$item['cgdNo']]['catInfo'],true);
+        	$cgdlist[] =$cgdArr[$item['cgdNo']];
         	 $invArr = Db::name('assoc')
                 ->alias('a')
                 ->leftJoin('invoice_good b', 'a.viceCode=b.invNo AND b.orderCode =a.orderCode')
-                ->where(['a.status' => [1, 2], 'a.is_del' => 0, 'a.type' => 1, 'a.orderCode' => $list->qrd->sequenceNo])->group
+                ->where(['a.status' => [1, 2], 'a.is_del' => 0, 'a.type' => 1, 'a.orderCode' => $qrdArr[$item['cgdNo']]['sequenceNo']])->group
                 ('a.status')->column('sum(b.goodNum) as goodNum', 'a.status');
-             $list->qrd->goodNum =$list->qrd->goodNum - $list->qrd->thNum;
-             $list->qrd->inv_num = $invArr[1]??0;
-             $list->qrd->ainv_num = $invArr[2]??0;
-             $list->qrd->winv_num  =$list->qrd->goodNum-  $list->qrd->inv_num-$list->qrd->ainv_num;
-        	 $qrdlist[] =$list->qrd->toArray();
+        	 $qrdArr[$item['cgdNo']]['goodNum'] -= $qrdArr[$item['cgdNo']]['thNum'];
+        	 $qrdArr[$item['cgdNo']]['inv_num'] = $invArr[1]??0;
+        	 $qrdArr[$item['cgdNo']]['ainv_num'] = $invArr[2]??0;
+        	 $qrdArr[$item['cgdNo']]['winv_num'] = $qrdArr[$item['cgdNo']]['goodNum']-$qrdArr[$item['cgdNo']]['inv_num']-$qrdArr[$item['cgdNo']]['ainv_num'];
+        	 $qrdlist[] =$qrdArr[$item['cgdNo']];
         }
          $payinfo->cgdlist =$cgdlist;
          $payinfo->qrdlist =$qrdlist;

+ 32 - 18
app/admin/controller/Good.php

@@ -3,11 +3,10 @@ declare (strict_types = 1);
 
 namespace app\admin\controller;
 
-use app\admin\model\GoodChange;use think\App;use think\facade\Validate;
+use app\admin\model\GoodChange;use app\admin\model\GoodCombind;use think\App;use think\facade\Validate;
 class Good extends Base
 {
 	protected $model=null;
-	#protected $novalidate=["*"];
     public function __construct(App $app) {
     	parent::__construct($app);
     	$this->model=new \app\admin\model\Good();
@@ -17,17 +16,21 @@ class Good extends Base
 	* @throws \think\exception\DbException
 	 */
     public function list(){
-    	$param=$this->request->param(["spuCode"=>"","status"=>"","good_name"=>"",'companyNo'=>'','supplierNo'=>'',
-    	'creater'=>'','isZx'=>'','isChange'=>'',"cat_diff"=>"","tax_diff"=>"","is_diff"=>"","start"=>"",'end'=>'',
-    	'page'=>'1','size'=>'15'],"post","trim");
+    	$param=$this->request->param(["spuCode"=>"","status"=>"","good_name"=>"",'companyNo'=>'','relaComNo'=>'',
+    	'supplierNo'=>'','cgd_supplierNo'=>'','creater'=>'','isZx'=>'','isChild'=>0,'isCombind'=>'','isChange'=>'',"cat_diff"=>"",
+    	"tax_diff"=>"","is_diff"=>"","start"=>"",'end'=>'','page'=>'1','size'=>'15'],"post","trim");
     	$where=[];
     	$param["spuCode"]==""?: $where[]=['spuCode','like',"%{$param['spuCode']}%"];
     	$param["good_name"]==""?: $where[]=['good_name','like',"%{$param['good_name']}%"];
     	$param["companyNo"]==""?: $where[]=['companyNo','like',"%{$param['companyNo']}%"];
-    	$param["supplierNo"]==""?: $where[]=['supplierNo','like',"%{$param['supplierNo']}%"];
+    	$param["relaComNo"]==""?: $where[]=['companyNo|supplierNo','like',"%{$param['relaComNo']}%"];
+    	$param["supplierNo"]==""?: $where[]=['supplierNo|cgd_supplierNo','like',"%{$param['supplierNo']}%"];
+    	$param['cgd_supplierNo']==''?: $where[]=['cgd_supplierNo','like',"%{$param['cgd_supplierNo']}%"];
     	$param["creater"]==""?: $where[]=['creater','like',"%{$param['creater']}%"];
     	$param["status"]===""?: $where[]=['status','=',$param['status']];
-    	$param["isZx"]==""?: $where[]=['isZx','=',$param['isZx']];
+    	$param["isZx"]===""?: $where[]=['isZx','=',$param['isZx']];
+    	$param["isChild"]==""?: $where[]=['isChild','=',$param['isChild']];
+    	$param["isCombind"]==""?: $where[]=['isCombind','=',$param['isCombind']];
     	$param["isChange"]===""?: $where[]=['isChange','=',$param['isChange']];
     	$param["is_diff"]==""?: $where[]=['cat_diff|tax_diff','=',2];
     	$param["cat_diff"]==""?: $where[]=['cat_diff','=',$param['cat_diff']];
@@ -73,14 +76,12 @@ class Good extends Base
             $tax= $item['tax'];
         	$item['tax'] = bcdiv(str_replace('%', '', $item['tax']), "100", 2);
         	if($param['status']==1){
-//        		if($good->cgd_to_pay)$this->error("商品{$item['spuCode']}已参与采购付款回票对账");
         	    $temp["cgd_inv_cat_code"]=$catArr[$item['cat_code']]['merge_code'];
         	    $temp["cgd_inv_cat_name"]=$catArr[$item['cat_code']]['short_name'];
         	    $temp["cgd_inv_good_name"]= $item['inv_good_name'];
         	    $temp["cgd_inv_tax"]= $item['tax'];
         	}
         	if($param['status']==2){
-//        	    if($good->qrd_to_pay)$this->error("商品{$item['spuCode']}已参与销售回款开票结算");
         	    $check = CheckTax($item['is_discount'],$item['tax'],$item['inv_tag'],$item['addTax'],$message);
         	    if($check==false)$this->error("商品{$item['spuCode']}{$message}");
         	    $temp['inv_cat_code']=$catArr[$item['cat_code']]['merge_code'];
@@ -113,21 +114,30 @@ class Good extends Base
         if($valid->check($param)==false)$this->error($valid->getError());
         $info = $this->model->where(["spuCode"=>$param['spuCode']])->findOrEmpty();
         if($info->isEmpty())$this->error("商品信息不存在");
+            $info->combind=[];
+    		if($info->isCombind==1){
+    			$good = GoodCombind::with(['child'])->where(['spuCode'=>$info->spuCode,'is_del'=>0])->select();
+    		    $info->combind = $good->isEmpty()?[]:$good->toArray();
+    		}
         $this->success("获取成功",$info);
     }
     //导出列表
     public function exportDiff(){
-    	$param=$this->request->param(['spuCode'=>'','status'=>'','good_name'=>'','companyNo'=>'','supplierNo'=>'',
-    	'creater'=>'','isZx'=>'','cat_diff'=>'','tax_diff'=>'',"start"=>"",'end'=>'','is_diff'=>''],'post','trim');
+    	$param=$this->request->param(['spuCode'=>'','status'=>'','good_name'=>'','companyNo'=>'','supplierNo'=>'','relaComNo'=>'',
+    	'cgd_supplierNo'=>'','creater'=>'','isZx'=>'','cat_diff'=>'','tax_diff'=>'','isChild'=>0,"start"=>"",'end'=>'','is_diff'=>''],
+    	'post','trim');
     	ini_set('memory_limit' , '-1');
     	$where=[];
     	$param['spuCode']==''?: $where[]=['spuCode','like',"%{$param['spuCode']}%"];
     	$param['good_name']==''?: $where[]=['good_name','like',"%{$param['good_name']}%"];
     	$param['companyNo']==''?: $where[]=['companyNo','like',"%{$param['companyNo']}%"];
-    	$param['supplierNo']==''?: $where[]=['supplierNo','like',"%{$param['supplierNo']}%"];
+    	$param['supplierNo']==''?: $where[]=['supplierNo|cgd_supplierNo','like',"%{$param['supplierNo']}%"];
+    	$param['relaComNo']==''?: $where[]=['companyNo|supplierNo','like',"%{$param['relaComNo']}%"];
+    	$param['cgd_supplierNo']==''?: $where[]=['cgd_supplierNo','like',"%{$param['cgd_supplierNo']}%"];
     	$param['creater']==''?: $where[]=['creater','like',"%{$param['creater']}%"];
     	$param['status']===''?: $where[]=['status','=',$param['status']];
     	$param['isZx']==''?: $where[]=['isZx','=',$param['isZx']];
+    	$param['isChild']==''?: $where[]=['isChild','=',$param['isChild']];
     	$param['is_diff']==''?: $where[]=['cat_diff|tax_diff','=',2];
     	$param['cat_diff']==''?: $where[]=['cat_diff','=',$param['cat_diff']];
     	$param['tax_diff']==''?: $where[]=['tax_diff','=',$param['tax_diff']];
@@ -145,26 +155,30 @@ class Good extends Base
     public function export(){
 		ini_set('memory_limit' , '-1');
 		$param=$this->request->param(['spuCode'=>'','status'=>'','good_name'=>'','companyNo'=>'','supplierNo'=>'',
-    	'creater'=>'','isZx'=>'','isChange'=>'','cat_diff'=>'','tax_diff'=>'','is_diff'=>'','start'=>'','end'=>''
-    	],'post','trim');
+		'cgd_supplierNo'=>'','relaComNo'=>'','creater'=>'','isZx'=>'','isChild'=>0,'isChange'=>'','cat_diff'=>'','tax_diff'=>'',
+		'is_diff'=>'','start'=>'','end'=>''],'post','trim');
     	$where=[];
     	$param['spuCode']==''?: $where[]=['spuCode','like',"%{$param['spuCode']}%"];
     	$param['good_name']==''?: $where[]=['good_name','like',"%{$param['good_name']}%"];
     	$param['companyNo']==''?: $where[]=['companyNo','like',"%{$param['companyNo']}%"];
-    	$param['supplierNo']==''?: $where[]=['supplierNo','like',"%{$param['supplierNo']}%"];
+    	$param['supplierNo']==''?: $where[]=['supplierNo|cgd_supplierNo','like',"%{$param['supplierNo']}%"];
+    	$param['relaComNo']==''?: $where[]=['companyNo|supplierNo','like',"%{$param['relaComNo']}%"];
+    	$param['cgd_supplierNo']==''?: $where[]=['cgd_supplierNo','like',"%{$param['cgd_supplierNo']}%"];
     	$param['creater']==''?: $where[]=['creater','like',"%{$param['creater']}%"];
     	$param['status']===''?: $where[]=['status','=',$param['status']];
     	$param['isZx']==''?: $where[]=['isZx','=',$param['isZx']];
+    	$param['isChild']===''?: $where[]=['isChild','=',$param['isChild']];
     	$param['isChange']===''?: $where[]=['isChange','=',$param['isChange']];
     	$param['is_diff']==''?: $where[]=['cat_diff|tax_diff','=',2];
     	$param['cat_diff']==''?: $where[]=['cat_diff','=',$param['cat_diff']];
     	$param['tax_diff']==''?: $where[]=['tax_diff','=',$param['tax_diff']];
     	$param['start']==''?: $where[]=['addtime','>=',date('Y-m-d 00:00:00',strtotime($param['start']))];
     	$param['end']==''?: $where[]=['addtime','<=',date('Y-m-d 23:59:59',strtotime($param['end']))];
-		$header=['商品编码','卖出方公司编号','卖出方公司','买入方公司编号','买入方公司','商品名称','采购类目编码','采购类目名称','采购开票商品名称',
+		$header=['商品编码','卖出方公司编号','卖出方公司','买入方公司编号','买入方公司',"源头供应商编号","源头供应商名称",'商品名称','采购类目编码','采购类目名称','采购开票商品名称',
 		'财务类目编码','财务类目名称','财务开票商品名称','状态','增值税管理内容','创建人','创建时间'];
-		$list= $this->model->export($where,['spuCode','supplierNo','supplierName','companyNo','companyName','good_name','cgd_inv_cat_code','cgd_inv_cat_name','
-				cgd_inv_good_name','inv_cat_code','inv_cat_name','inv_good_name','status','addTax','creater','addtime']);
+		$field=['spuCode','supplierNo','supplierName','companyNo','companyName','cgd_supplierNo','cgd_supplierName','good_name','cgd_inv_cat_code','cgd_inv_cat_name','
+				cgd_inv_good_name','inv_cat_code','inv_cat_name','inv_good_name','status','addTax','creater','addtime'];
+		$list= $this->model->export($where,$field);
 		excelExport('结算类目设置导出表',$header,$list);
 	}
     /**

+ 17 - 9
app/admin/controller/OrderInv.php

@@ -911,21 +911,29 @@ class OrderInv extends Base{
 	            $invNum =isset($this->post['invNum'])&&$this->post['invNum']!=''?trim($this->post['invNum']):"";
 	            $open_date =isset($this->post['open_date'])&&$this->post['open_date']!=''?trim($this->post['open_date']):"";
 	            $checkCode =isset($this->post['checkCode'])&&$this->post['checkCode']!=''?trim($this->post['checkCode']):"";
-	            $subtotal_fee =isset($this->post['subtotal_fee'])&&$this->post['subtotal_fee']!=''?floatval($this->post['subtotal_fee']):"";
-	            if($invCode==='') return error_show(1004,"参数 invCode 不能为空");
+	            $subtotal_fee =isset($this->post['subtotal_fee'])&&$this->post['subtotal_fee']!=''?floatval($this->post['subtotal_fee']):0;
+	            $total_fee =isset($this->post['total_fee'])&&$this->post['total_fee']!=''?floatval($this->post['total_fee']):0;
 	            if($invNum==='') return error_show(1004,"参数 invNum 不能为空");
 	            if($open_date==='') return error_show(1004,"参数 open_date 不能为空");
 	            if(in_array($invinfo['inv_type'],['normal','roll',"toll",'electronic'])){
                	    if($checkCode==='') return error_show(1004,"参数 checkCode 不能为空");
                }
-	            if($subtotal_fee==='') return error_show(1004,"参数 subtotal_fee 不能为空");
+	           //全电子发票
+	           if(in_array($invinfo['inv_type'],['fully_digitalized_special_electronic','fully_digitalized_normal_electronic'])){
+	           	    //全电发票传含税金额
+	              if($total_fee=='') return error_show(1004,'参数 total_fee 不能为空');
+	           }else{
+	           	//全电发票无invCode
+	           	 if($invCode==='') return error_show(1004,'参数 invCode 不能为空');
+	           	 if($subtotal_fee=='') return error_show(1004,'参数 subtotal_fee 不能为空');
+	           }
             }
         }
-//电子普票 只能红冲 不能作废
-//电子专票 只能红冲 不能作废
-//纸质专票 当月可以作废 次月红冲
-//纸质普票  当月作废 次月红冲
-//专票 红冲先做红字申请
+		//电子普票 只能红冲 不能作废
+		//电子专票 只能红冲 不能作废
+		//纸质专票 当月可以作废 次月红冲
+		//纸质普票  当月作废 次月红冲
+		//专票 红冲先做红字申请
 
          Db::startTrans();
          try{
@@ -964,7 +972,7 @@ class OrderInv extends Base{
 		                        "inv_code"=>$invCode,
 		                        "inv_number"=>$invNum,
 		                        "check_code"=>$checkCode,
-		                        "inv_total"=>0,
+		                        "inv_total"=>$total_fee,
 		                        "inv_subtotal"=>$subtotal_fee,
 		                        "open_date"=>$open_date,
 		                        "item"=>'',

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

@@ -7,7 +7,6 @@ use app\admin\model\ReportCode;use think\App;
 use think\Exception;
 use think\facade\Db;
 use think\facade\Validate;
-use think\queue\command\Retry;
 
 class OrderPay extends Base{
     public function __construct(App $app) {parent::__construct($app);}
@@ -159,7 +158,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,cxCode")->findOrEmpty();
+                            $qrd =Db::name("qrd_info")->where(["sequenceNo"=>$value['orderCode']])->field("id,status,is_comon,pay_fee,apay_fee,wpay_fee,pay_status,totalPrice,cxCode")->findOrEmpty();
                             if(empty($qrd)){
                                 Db::rollback();
                                 return error_show(1005,"未找到销售单数据");
@@ -180,7 +179,7 @@ class OrderPay extends Base{
                                 Db::rollback();
                                 return error_show(1005,"销售单更新失败");
                             }
-                            if($update['pay_status']==3){
+                            if($update['pay_status']==3 && $qrd['is_comon']==0){
                             	(new \app\admin\model\ComonOrder())->where(["cxCode"=>$qrd['cxCode'],"status"=>-1])->update(["status"=>0]);
                             }
                             $asscup =[

+ 61 - 32
app/admin/controller/Payment.php

@@ -4,7 +4,7 @@ declare (strict_types = 1);
 namespace app\admin\controller;
 
 
-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 app\admin\model\CgdInfo;use app\admin\model\FhdChild;use app\admin\model\GoodCombind;use app\admin\model\InvoicePay;use app\admin\model\InvoicePool;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;
@@ -52,47 +52,37 @@ class Payment extends Base
         $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];
         }
         if($endTime!=""){
-//            $condition.=" and `b`.`addtime` <= '{$endTime}'";
              $condition[]=['b.addtime','<=',$endTime];
         }
 
         if($supplierNo!=""){
-//            $condition.=" and `a`.`supplierNo` = '$supplierNo'";
              $condition[]=['a.supplierNo','=',$supplierNo];
         }
          if($supplierName!=""){
-//            $condition.=" and `a`.`supplierName` like '%$supplierName%'";
             $condition[]=['a.supplierName','like',"%$supplierName%"];
         }
         if($companyNo!=""){
         	 $condition[]=['a.companyNo','=',$companyNo];
-//            $condition.=" and (`a`.`companyNo` = '$companyNo')";
         }
         $relaComNo= isset($post['relaComNo'])&&$post['relaComNo']!="" ? trim($post['relaComNo']) :"";
          if($relaComNo!=""){
          	$condition[]=['a.companyNo|a.supplierNo','=',$relaComNo];
-//            $condition.=" and (`a`.`companyNo` = '$relaComNo' or `a`.`supplierNo` = '$relaComNo')";
         }
 
         if($payNo!=""){
         	 $condition[]=['a.payNo','like',"%$payNo%"];
-//            $condition.=" and `a`.`payNo` like '%{$payNo}%'";
         }
          if($dzNo!=""){
          	 $condition[]=['b.dzNo','like',"%$dzNo%"];
-//            $condition.=" and `b`.`dzNo` like '%{$dzNo}%'";
         }
         if($apply!=""){
         	 $condition[]=['b.apply_name','like',"%$apply%"];
-//            $condition .=" and b.apply_name like '%{$apply}%'";
         }
         if($paystatus!=""){
         	 $condition[]=['b.status','=',$paystatus];
-//            $condition .=" and `b`.`status` = {$paystatus}";
         }
        if(isset($post['is_comon'])&&$post['is_comon']!=='') $condition []=['is_comon','=',$post['is_comon']];
         $page =  isset($post['page'])&&$post['page']!="" ? intval($post['page']) :1;
@@ -214,12 +204,6 @@ class Payment extends Base
         if($companyName !=''){
             $condition[]=["companyName","like","%$companyName%"];
         }
-//        if($paystatus!=""){
-//             $condition[]=["pay_status","=",$paystatus];
-//        }
-//        if($inv_status!=""){
-//            $condition[]=["inv_status","=",$inv_status];
-//        }
         if($status!=""){
             $condition[]=["status","=",$status];
         }
@@ -238,9 +222,11 @@ class Payment extends Base
         foreach ($list as $key=>$value){
             $value['ordeNum'] = Db::name("pay_info")->where([["payNo","=",$value["payNo"]],["is_del","=",0]])->count();
             $tag =Db::name("tag_log")->alias("a")->leftJoin("order_tag b","a.tag_id=b.id")->where
-            (["code"=>$value['payNo'],"a.status"=>1])->column("b.tag_name,a.tag_img,a.tag_remark","b.type");
+            (["code"=>$value['payNo'],"a.status"=>1])->column("a.id,b.tag_name,a.tag_img,a.tag_remark","b.type");
             $value['inv_tag_name']=$tag[2]['tag_name']??'';
+            $value['inv_tag_id']=$tag[2]['id']??'0';
             $value['pay_tag_name']=$tag[1]['tag_name']??'';
+            $value['pay_tag_id']=$tag[1]['id']??'0';
             $value['pay_tag_img']=$tag[1]['tag_img']??'';
             $value['inv_tag_img']=$tag[2]['tag_img']??'';
             $value['inv_tag_remark']=$tag[2]['tag_remark']??'';
@@ -267,8 +253,12 @@ class Payment extends Base
             return error_show(1003,"采购单数据不能为空");
         }
         $statusAll = array_column($cgdall,"status");
+        $isComonAll = array_unique(array_column($cgdall,'is_comon')) ;
+        if(count($isComonAll)>1){
+          return error_show(1003,"采购单业务类型不一致");
+        }
         if(in_array(1,$statusAll)){
-          return error_show(1003,"采购单存在已对账数据");
+          return error_show(1003,'采购单存在已对账数据');
         }
         if(in_array(2,$statusAll)){
           return error_show(1003,"采购单存在不核算数据");
@@ -299,6 +289,7 @@ class Payment extends Base
                 "apply_id"=>$this->uid,
                 "apply_name"=>$this->uname,
                 "total_fee"=>0,
+                "is_comon"=>$isComonAll[0],
                 "supplierNo"=>$supplierNo[0],
                 "supplierName"=>$supplierName[0],
                 "companyNo"=>$companyNo[0],
@@ -534,6 +525,16 @@ class Payment extends Base
        	    if(!empty($stages)) return error_show(1004,"对账单存在未解除的付款申请单");
        	    $hpinv = Db::name("pay_invoice")->where(['status'=>[0,1,2,3,4,9],"payNo"=>$payNo,"is_del"=>0])->findOrEmpty();
        	    if(!empty($hpinv)) return error_show(1004,"对账单存在未解除的回票申请单");
+       	    if($data['inv_tag']==1)$this->error("存在回票标签未解除");
+       	    if($data['pay_tag']==1)$this->error("存在付款标签未解除");
+       	    if($data['is_comon']==1){
+       	    	$invoceAr=InvoicePay::where(["payNo"=>$payNo])->column("invNo");
+       	    	if(!empty($invoceAr)){
+       	    		$ist= InvoicePool::where([["invNo","in",$invoceAr],["status","in",[0,1,2,3,4]]])->select()
+       	    		->isEmpty();
+       	    		if($ist==false)$this->error('通用订单存在开票申请未解除');
+       	    	}
+       	    }
        }
         Db::startTrans();
         try{
@@ -881,12 +882,20 @@ class Payment extends Base
         if($sequenceNo!=""){
           $condition []=["sequenceNo","like","%$sequenceNo%"];
         }
-
+        
+		$Total = isset($post['total']) && $post['total']!='' ? trim($post['total']) :'';
+        if($Total!=''){
+          $condition []=['totalPrice',$Total==1?"=":'>',0];
+        }
          $orderCode = isset($post['qrdCode']) && $post['qrdCode']!='' ? trim($post['qrdCode']) :"";
         if($orderCode!=""){
           $condition []=["qrdCode","like","%$orderCode%"];
         }
         $status = isset($post['status']) && $post['status']!=='' ? intval($post['status']) :"";
+        $cgd_status = isset($post['cgd_status']) && $post['cgd_status']!=='' ? intval($post['cgd_status']) :"";
+        if($cgd_status!==''){
+        	  $condition[]=['cgd_status','=',$cgd_status];
+        }
         if($status!==""){
            if($status!==''){
             if($status==3){
@@ -918,7 +927,7 @@ class Payment extends Base
           $condition []=["bkCode","like","%$bkCode%"];
         }
 
-         $goodNo = isset($post['goodNo']) && $post['goodNo']!='' ? trim($post['goodNo']) :"";
+        $goodNo = isset($post['goodNo']) && $post['goodNo']!='' ? trim($post['goodNo']) :"";
         if($goodNo!=""){
           $condition []=["goodNo","like","%$goodNo%"];
         }
@@ -977,11 +986,12 @@ class Payment extends Base
 
 
     public function cgdQuery(){
-		$post = $this->request->only(["cgdNoArr"=>[],"qrdNoArr"=>[],"status"=>"","is_comon"=>"","relaComNo"=>'',"companyNo"=>"","supplierNo"=>""],"post");
+		$post = $this->request->only(["cgdNoArr"=>[],"qrdNoArr"=>[],"status"=>"","cgd_status"=>"","is_comon"=>"","relaComNo"=>'',"companyNo"=>"","supplierNo"=>""],"post");
 		$valid=Validate::rule([
 			"cgdNoArr|采购单编号集合"=>"requireWithout:qrdNoArr|array",
 		    "qrdNoArr|销售单编号集合"=>"requireWithout:cgdNoArr|array",
-			"status|采购单状态"=>"number|in:0,1,2,3",
+			"status|采购单对账状态"=>"number|in:0,1,2,3",
+			"cgd_status|采购单状态"=>"number|in:0,1,2,3,4",
 			"is_comon|是否通用订单"=>"number|in:0,1",
 			]);
 		if($valid->check($post)==false) return error_show(1004,$valid->getError());
@@ -989,10 +999,26 @@ class Payment extends Base
          	$cgdNo = Db::name("qrd_info")->where(["sequenceNo"=>$post['qrdNoArr']])->column("cgdNo");
          	$post["cgdNoArr"]=array_merge($post["cgdNoArr"],$cgdNo);
          }
+		 
         $condition = [["cgdSource|cgdType","<>",1],['is_del',"=",0],["sequenceNo","in",$post["cgdNoArr"]]];
         $companyNo = isset($post['companyNo']) && $post['companyNo']!='' ? trim($post['companyNo']) :"";
         if($companyNo!=""){
           $condition []=["companyNo","=",$companyNo];
+        }
+         $Total=isset($post['total']) && $post['total'] != '' ? trim($post['total']) : '';
+	   		    if ($Total != '') {
+	   			    $condition []=[
+	   				    'totalPrice' ,
+	   				    $Total == 1 ? '=' : '>' ,
+	   				    0
+	   			    ];
+	   		    }
+        if($post['cgd_status']!==''){
+	        $condition []=[
+	      		        'cgd_status' ,
+	      		        '=' ,
+	      		        $post['cgd_status']
+	      	        ];
         }
         if(isset($post['is_comon'])&& $post['is_comon']!=='') $condition []=['is_comon','=',$post['is_comon']];
          $relaComNo= isset($post['relaComNo'])&&$post['relaComNo']!="" ? trim($post['relaComNo']) :"";
@@ -1038,9 +1064,13 @@ class Payment extends Base
         $cgdinfo['pay_type']=Db::name('supplier_info')->where('code',$cgdinfo['supplierNo'])->value('pay_method','');
         $cgdinfo["cgd_pay_status"]=$payinfo['pay_status']??1;
         $cgdinfo["cgd_inv_status"]=$payinfo['inv_status']??1;
-        $cgdinfo["cgd_status"]=$payinfo['status']??0;
+        $cgdinfo["pay_status"]=$payinfo['status']??0;
         $cgdinfo['goodNum'] =$cgdinfo['goodNum']- $cgdinfo['thNum'];
         $cgdinfo['sendNum'] =$cgdinfo['sendNum']- $cgdinfo['thNum'];
+        $cgdinfo['child']=[];
+        $list=(new GoodCombind())->where("spuCode",$cgdinfo['goodNo'])->visible(["child"])->with(["child"])
+        ->select();
+        if($list->isEmpty()==false)$cgdinfo['child']=array_column($list->toArray(),'child');
         return app_show(0,"获取成功",$cgdinfo);
     }
     //todo
@@ -1077,7 +1107,9 @@ class Payment extends Base
 	        }
         $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");
+            (["code"=>$payNo,"a.status"=>1])->column("a.id,b.tag_name,a.tag_img,a.tag_remark","b.type");
+            $payinfo['inv_tag_id']=$tag[2]['id']??'0';
+            $payinfo['pay_tag_id']=$tag[1]['id']??'0';
             $payinfo['inv_tag_name']=$tag[2]['tag_name']??'';
             $payinfo['pay_tag_name']=$tag[1]['tag_name']??'';
             $payinfo['pay_tag_img']=$tag[1]['tag_img']??'';
@@ -1587,7 +1619,6 @@ class Payment extends Base
             $value['invStatus_cn'] = $this->invStatus[$value['invStatus']]??'';
             $value['item_list'] = isset($invoinfo['item_list']) &&$invoinfo['item_list']!='' ?json_decode($invoinfo['item_list'],true):"";
             $value['has_account'] = (int)isset($supp_account['data'][$value['supplierNo']]);
-
         }
 
         //结算invlist这个接口当用payNo筛选的时候,返回列表里需要加一项统计筛选后列表的inv_subtotal_amount、total字段的和
@@ -1783,7 +1814,6 @@ class Payment extends Base
     	 return app_show(0,"获取成功",["list"=>$list,"count"=>$count]);
     }
 
-
     public function hpinvReturn(){
 		$param =$this->request->only(["hpNo"=>"","reason"=>""],"post","trim");
 		$valide=Validate::rule([
@@ -1895,10 +1925,10 @@ class Payment extends Base
 			if($invup==false)throw new Exception("回票更新失败");
 
 			$paydata=[
-				 "ainv_fee"=>$pay['ainv_fee']-$invinfo['inv_fee'],
-                  "winv_fee"=>$pay['winv_fee']+$invinfo['inv_fee'],
-                  "inv_status" => $pay['inv_fee']==0 &&($pay['ainv_fee']-$invinfo['inv_fee'])==0?1:2,
-                   "updatetime" => date("Y-m-d H:i:s")
+				"ainv_fee"=>$pay['ainv_fee']-$invinfo['inv_fee'],
+               "winv_fee"=>$pay['winv_fee']+$invinfo['inv_fee'],
+               "inv_status" => $pay['inv_fee']==0 &&($pay['ainv_fee']-$invinfo['inv_fee'])==0?1:2,
+               "updatetime" => date("Y-m-d H:i:s")
 			];
 			$oayup =Db::name("pay")->where($pay)->update($paydata);
 			if($oayup==false)throw new Exception("对账更新失败");
@@ -1918,7 +1948,6 @@ class Payment extends Base
 			Db::rollback();
 			return error_show(1005,$e->getMessage());
 		}
-
     }
 
      public function hpinvReturnInfo(){

+ 154 - 48
app/admin/controller/Sale.php

@@ -3,9 +3,10 @@
 
 namespace app\admin\controller;
 
-use think\App;
+use app\admin\model\CgdInfo;use app\admin\model\InvoicePool;use app\admin\model\Pay;use app\admin\model\TradePool;use think\App;
 use think\facade\Db;use think\facade\Validate;
 class Sale extends Base{
+	#public $novalidate=["*"];
     public function __construct(App $app) {parent::__construct($app);}
     /** 获取列表
     * @return \think\response\Json|void
@@ -153,10 +154,12 @@ class Sale extends Base{
         foreach ( $list as $ky=>$value){
             $value['catInfo'] = json_decode($value['catInfo'],true);
             $tag =Db::name("tag_log")->alias("a")->leftJoin("order_tag b","a.tag_id=b.id")->where
-            (["code"=>$value['sequenceNo'],"a.status"=>1])->column("b.tag_name,a.tag_img,a.tag_remark","b.type");
+            (["code"=>$value['sequenceNo'],"a.status"=>1])->column("a.id,b.tag_name,a.tag_img,a.tag_remark","b.type");
             $value['goodNum'] = $value['goodNum'] -$value['thNum'];
             $value['sendNum'] = $value['sendNum'] -$value['thNum'];
             $value['inv_tag_name']=$tag[4]['tag_name']??'';
+            $value['inv_tag_id']=$tag[4]['id']??'0';
+            $value['pay_tag_id']=$tag[3]['id']??'0';
             $value['pay_tag_name']=$tag[3]['tag_name']??'';
             $value['pay_tag_img']=$tag[3]['tag_img']??'';
             $value['inv_tag_img']=$tag[4]['tag_img']??'';
@@ -371,10 +374,12 @@ class Sale extends Base{
         $qrdinfo['goodinfo'] =$goodinfo;
         $qrdinfo['catInfo'] = json_decode($qrdinfo['catInfo'],true);
         $tag =Db::name("tag_log")->alias("a")->leftJoin("order_tag b","a.tag_id=b.id")
-        ->where(["code"=>$qrdinfo['sequenceNo'],"a.status"=>1])->column("b.tag_name,a.tag_img,a.tag_remark","b.type");
+        ->where(["code"=>$qrdinfo['sequenceNo'],"a.status"=>1])->column("a.id,b.tag_name,a.tag_img,a.tag_remark","b.type");
         $qrdinfo['inv_tag_name']=$tag[4]['tag_name']??'';
         $qrdinfo['pay_tag_name']=$tag[3]['tag_name']??'';
         $qrdinfo['pay_tag_img']=$tag[3]['tag_img']??'';
+         $qrdinfo['inv_tag_id']=$tag[4]['id']??'0';
+          $qrdinfo['pay_tag_id']=$tag[3]['id']??'0';
         $qrdinfo['pay_tag_remark']=$tag[3]['tag_remark']??'';
         $qrdinfo['inv_tag_img']=$tag[4]['tag_img']??'';
         $qrdinfo['inv_tag_remark']=$tag[4]['tag_remark']??'';
@@ -389,63 +394,164 @@ class Sale extends Base{
     public function OrderIsCheck(){
     	  $post =$this->request->only(["orderCode"=>'',"isCgd"=>0,"is_cgd_check"=>0],"post","trim");
     	  $vali=Validate::rule([
-    	  	"orderCode|销售单单号"=>"require|max:255",
-    	  	"isCgd|是否退采购单"=>"require|in:0,1",
-    	  	"is_cgd_check|只退采购单"=>"in:0,1"
+	            "orderCode|销售单单号"=>"require|max:255",
+	            "isCgd|是否退采购单"=>"require|in:0,1",
+	            "is_cgd_check|只退采购单"=>"in:0,1"
     	  	]);
     	  if($vali->check($post)==false) return error_show(1004,$vali->getError());
+    	  $data=[];
     	  if($post['is_cgd_check']==0){
-    	  	  $qrdinf =Db::name('qrd_info')->where(['sequenceNo|cxCode'=>$post['orderCode'],'status'=>1,'is_del'=>0])
-    	  	  ->field('sequenceNo,inv_tag,pay_tag')->select()->toArray();
+    	  	  $qrdinf =Db::name('qrd_info')->where(['sequenceNo|cxCode'=>$post['orderCode'],'is_del'=>0])
+    	  	  ->field('sequenceNo,ownerName,companyName,inv_tag,pay_tag')->select()->toArray();
 	          if(!empty($qrdinf)){
-	          	$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);
+	          	foreach ($qrdinf as $item){
+	          	    if($item['inv_tag']==1){
+	          	    	$temp=["type"=>"结算销售单开票标签","username"=> $item['ownerName'],"orderCode"=>$item['sequenceNo'],
+	          	    	"companyName"=>$item['companyName']];
+	          	    	$data[]=$temp;
+	          	    }
+	          	    
+	          	    if($item['pay_tag']==1){
+	          	    	$temp=['type'=>'结算销售单付款标签','username'=> $item['ownerName'],'orderCode'=>$item['sequenceNo'],'companyName'=>$item['companyName']];
+	          	    	$data[]=$temp;
+	          	    }
+	          	     $asscoinfo =Db::name('assoc')->where(['orderCode'=>$item['sequenceNo'],'status'=>[1,2],'is_del'=>0])->column
+	                    ('viceCode','type');
+	          	     if(isset($asscoinfo[1])){
+	          	     	$uname = InvoicePool::where("invNo",$asscoinfo[1])->value("apply_name",'');
+	          	    	$temp=['type'=>'结算销售单开票申请','username'=> $uname,'orderCode'=>$asscoinfo[1],'companyName'=>$item['companyName']];
+	          	    	$data[]=$temp;
+	          	    }
+	          	     if(isset($asscoinfo[2])){
+	          	     	$uname = TradePool::where('logNo',$asscoinfo[2])->value('apply_name','');
+	          	     	$temp=['type'=>'结算销售单资金认领','username'=> $uname,'orderCode'=>$asscoinfo[2],'companyName'=>$item['companyName']];
+	          	     	 $data[]=$temp;
+	          	      }
+	          	}
+//	           if(empty($data)==false) $this->error("结算存在进行中业务",1005,$data);
 	          }
-	          $cgdinfo =Db::name('cgd_info')->where(['cxCode'=>$post['orderCode'],'status'=>1,'is_del'=>0])->column('sequenceNo');
+	          $cgdinfo =Db::name('cgd_info')->where(['cxCode'=>$post['orderCode'],'status'=>1,'is_del'=>0])->field('sequenceNo,companyName')->findOrEmpty();
 	           if(!empty($cgdinfo)){
-		            $message='';
-		            $payinfo = Db::name('pay_info')->where(['cgdNo'=>$cgdinfo,'status'=>1,'is_del'=>0])->column('payNo');
-		            if(!empty($payinfo))$message.='对账单编号:'.implode(',',$payinfo)."\n";
-		            $hp = Db::name('pay_invoice')->where(['payNo'=>$payinfo,'is_del'=>0,'status'=>[1,2,3,4]])->column('hpNo');
-		            if(!empty($hp))$message.='对账单回票编号:'.implode(',',$hp)."\n";
-		            $paydz = Db::name('pay_payment')->where(['payNo'=>$payinfo,'is_del'=>0,'status'=>[1,2,3,4]])->column('dzNo');
-		            if(!empty($paydz))$message.='对账单付款编号:'.implode(',',$paydz)."\n";
-		            return error_show(1005,$message);
+		           $payNo = Db::name('pay_info')->where(['cgdNo'=>$cgdinfo['sequenceNo'],'status'=>1,'is_del'=>0])->value('payNo','');
+		           if($payNo!=''){
+		           	    $uname = Pay::where("payNo",$payNo)->value("apply_name",'');
+		           	    $data[]=['type'=>'采购对账单','username'=> $uname,'orderCode'=>$payNo,'companyName'=>$cgdinfo['companyName']];
+		           	    
+		           	    $hp = Db::name('pay_invoice')->where(['payNo'=>$payNo,'is_del'=>0,'status'=>[1,2,3,4]])
+		           	    ->column('hpNo,apply_name');
+			            if(!empty($hp)){
+			            	foreach ($hp as $item){
+			            		$data[]=['type'=>'采购对账单回票','username'=> $item['apply_name'],'orderCode'=>$item['hpNo'],'companyName'=>$cgdinfo['companyName']];
+			            	}
+			            }
+			            $paydz = Db::name('pay_payment')->where(['payNo'=>$payNo,'is_del'=>0,'status'=>[1,2,3,4]])
+			            ->column('dzNo,apply_name');
+			             if(!empty($paydz)){
+			            	foreach ($paydz as $item){
+			            		$data[]=['type'=>'采购对账单付款','username'=> $item['apply_name'],'orderCode'=>$item['dzNo'],'companyName'=>$cgdinfo['companyName']];
+			            	}
+			            }
+			            
+		           }
 	           }
 	           if($post['isCgd']==1){
-		           $cgdinfo =Db::name('cgd_info')->where(['qrdCode'=>$post['orderCode'],'status'=>1,'is_del'=>0])->column('sequenceNo');
-		           if(!empty($cgdinfo)){
-		                $message='';
-			            $payinfo = Db::name('pay_info')->where(['cgdNo'=>$cgdinfo,'status'=>1,'is_del'=>0])->column('payNo');
-			            if(!empty($payinfo))$message.='对账单编号:'.implode(',',$payinfo)."\n";
-			            $hp = Db::name('pay_invoice')->where(['payNo'=>$payinfo,'is_del'=>0,'status'=>[1,2,3,4]])->column('hpNo');
-			            if(!empty($hp))$message.='对账单回票编号:'.implode(',',$hp)."\n";
-			            $paydz = Db::name('pay_payment')->where(['payNo'=>$payinfo,'is_del'=>0,'status'=>[1,2,3,4]])->column('dzNo');
-			            if(!empty($paydz))$message.='对账单付款编号:'.implode(',',$paydz)."\n";
-			            return error_show(1005,$message);
+			           $cgdinfo =Db::name('cgd_info')->where(['qrdCode'=>$post['orderCode'],'is_del'=>0])->field('sequenceNo,companyName')->findOrEmpty();
+			           if(!empty($cgdinfo)){
+				           $payNo = Db::name('pay_info')->where(['cgdNo'=>$cgdinfo['sequenceNo'],'status'=>1,'is_del'=>0])->value('payNo','');
+				           if($payNo!=''){
+				           	    $uname = Pay::where('payNo',$payNo)->value('apply_name','');
+				                $data[]=['type'=>'采购对账单','username'=> $uname,'orderCode'=>$payNo,'companyName'=>$cgdinfo['companyName']];
+				                 $hp = Db::name('pay_invoice')->where(['payNo'=>$payNo,'is_del'=>0,'status'=>[1,2,3,4]])
+					                ->column('hpNo,apply_name');
+						            if(!empty($hp)){
+						                foreach ($hp as $item){
+						                    $data[]=['type'=>'采购对账单回票','username'=> $item['apply_name'],'orderCode'=>$item['hpNo'],'companyName'=>$cgdinfo['companyName']];
+						                }
+						            }
+						            $paydz = Db::name('pay_payment')->where(['payNo'=>$payNo,'is_del'=>0,'status'=>[1,2,3,4]])
+						            ->column('dzNo,apply_name');
+						             if(!empty($paydz)){
+						                foreach ($paydz as $item){
+						                    $data[]=['type'=>'采购对账单付款','username'=> $item['apply_name'],'orderCode'=>$item['dzNo'],'companyName'=>$cgdinfo['companyName']];
+						                }
+						            }
+				            }
+							$comoOrder = CgdInfo::where(['mainCode'=>$cgdinfo['sequenceNo'],'is_comon'=>2,'status'=>1])->field('sequenceNo,companyName')->findOrEmpty();
+				             if(!empty($comoOrder)){
+				             							$payNo = Db::name('pay_info')->where(['cgdNo'=>$comoOrder['sequenceNo'],'status'=>1,'is_del'=>0])->value('payNo','');
+				             				           if($payNo!=''){
+				             				           	 $uname = Pay::where('payNo',$payNo)->value('apply_name','');
+				             				                $data[]=['type'=>'源头采购对账单','username'=> $uname,'orderCode'=>$payNo,'companyName'=>$comoOrder['companyName']];
+				             				                
+				             				                 $hp = Db::name('pay_invoice')->where(['payNo'=>$payNo,'is_del'=>0,'status'=>[1,2,3,4]])
+											                ->column('hpNo,apply_name');
+												            if(!empty($hp)){
+												                foreach ($hp as $item){
+												                    $data[]=['type'=>'源头采购对账单回票','username'=> $item['apply_name'],'orderCode'=>$item['hpNo'],'companyName'=>$cgdinfo['companyName']];
+												                }
+												            }
+												            $paydz = Db::name('pay_payment')->where(['payNo'=>$payNo,'is_del'=>0,'status'=>[1,2,3,4]])
+												            ->column('dzNo,apply_name');
+												             if(!empty($paydz)){
+												                foreach ($paydz as $item){
+												                    $data[]=['type'=>'源头采购对账单付款','username'=> $item['apply_name'],'orderCode'=>$item['dzNo'],'companyName'=>$cgdinfo['companyName']];
+												                }
+												            }
+				             				            }
+				              }
+			           }
 		           }
-	           }
+	           
     	  }else{
-    	  	        $cgdinfo =Db::name('cgd_info')->where(['sequenceNo'=>$post['orderCode'],'status'=>1,'is_del'=>0])->column('sequenceNo');
+                $cgdinfo =Db::name('cgd_info')->where(['sequenceNo'=>$post['orderCode'],'status'=>1,'is_del'=>0])->field('sequenceNo,companyName')->findOrEmpty();
 		           if(!empty($cgdinfo)){
-		                $message='';
-			            $payinfo = Db::name('pay_info')->where(['cgdNo'=>$cgdinfo,'status'=>1,'is_del'=>0])->column('payNo');
-			            if(!empty($payinfo))$message.='对账单编号:'.implode(',',$payinfo)."\n";
-			            $hp = Db::name('pay_invoice')->where(['payNo'=>$payinfo,'is_del'=>0,'status'=>[1,2,3,4]])->column('hpNo');
-			            if(!empty($hp))$message.='对账单回票编号:'.implode(',',$hp)."\n";
-			            $paydz = Db::name('pay_payment')->where(['payNo'=>$payinfo,'is_del'=>0,'status'=>[1,2,3,4]])->column('dzNo');
-			            if(!empty($paydz))$message.='对账单付款编号:'.implode(',',$paydz)."\n";
-			            return error_show(1005,$message);
+		                $payNo = Db::name('pay_info')->where(['cgdNo'=>$cgdinfo['sequenceNo'],'status'=>1,'is_del'=>0])->value('payNo','');
+			           if($payNo!=''){
+			           	 $uname = Pay::where('payNo',$payNo)->value('apply_name','');
+			                $data[]=['type'=>'采购对账单','username'=> $uname,'orderCode'=>$payNo,'companyName'=>$cgdinfo['companyName']];
+			                
+				                 $hp = Db::name('pay_invoice')->where(['payNo'=>$payNo,'is_del'=>0,'status'=>[1,2,3,4]])
+					                ->column('hpNo,apply_name');
+						            if(!empty($hp)){
+						                foreach ($hp as $item){
+						                    $data[]=['type'=>'采购对账单回票','username'=> $item['apply_name'],'orderCode'=>$item['hpNo'],'companyName'=>$cgdinfo['companyName']];
+						                }
+						            }
+						            $paydz = Db::name('pay_payment')->where(['payNo'=>$payNo,'is_del'=>0,'status'=>[1,2,3,4]])
+						            ->column('dzNo,apply_name');
+						             if(!empty($paydz)){
+						                foreach ($paydz as $item){
+						                    $data[]=['type'=>'采购对账单付款','username'=> $item['apply_name'],'orderCode'=>$item['dzNo'],'companyName'=>$cgdinfo['companyName']];
+						                }
+						            }
+			            }
+			           }
+			             $comoOrder = CgdInfo::where(['mainCode'=>$post['orderCode'],'is_comon'=>2,'status'=>1])->field('sequenceNo,companyName')->findOrEmpty();
+			            if(!empty($comoOrder)){
+							$payNo = Db::name('pay_info')->where(['cgdNo'=>$comoOrder['sequenceNo'],'status'=>1,'is_del'=>0])->value('payNo','');
+				           if($payNo!=''){
+				               $uname = Pay::where('payNo',$payNo)->value('apply_name','');
+				               	$data[]=['type'=>'源头采购对账单','username'=> $uname,'orderCode'=>$payNo,'companyName'=>$comoOrder['companyName']];
+				               	$hp = Db::name('pay_invoice')->where(['payNo'=>$payNo,'is_del'=>0,'status'=>[1,2,3,4]])
+				               	->column('hpNo,apply_name');
+				               	if(!empty($hp)){
+				               	foreach ($hp as $item){
+				               		$data[]=['type'=>'源头采购对账单回票','username'=> $item['apply_name'],'orderCode'=>$item['hpNo'],'companyName'=>$cgdinfo['companyName']];
+				               	 }
+				               }
+				               	$paydz = Db::name('pay_payment')->where(['payNo'=>$payNo,'is_del'=>0,'status'=>[1,2,3,4]])
+				               	->column('dzNo,apply_name');
+				               	if(!empty($paydz)){
+				               	foreach ($paydz as $item){
+				               		$data[]=['type'=>'源头采购对账单付款','username'=> $item['apply_name'],'orderCode'=>$item['dzNo'],'companyName'=>$cgdinfo['companyName']];
+				               	}
+				               	 }
+				           }
+				            }
+			            
 		           }
-    	  }
+    	  
     	
-    	   return app_show(0,"不存在对账订单");
+    	  empty($data)?$this->success("不存在对账订单"):$this->error("存在对账业务数据",1005,$data);
     }
 }

+ 86 - 10
app/admin/controller/TagGood.php

@@ -3,10 +3,11 @@
 
 namespace app\admin\controller;
 
-use think\App;
+use app\admin\model\OrderTag;use app\admin\model\Pay;use app\admin\model\QrdInfo;use app\admin\model\TagLog;use think\App;
 use think\facade\Db;
 
 class TagGood extends Base{
+	#public $novalidate=['*'];
     public function __construct(App $app) {parent::__construct($app);}
     //新建标签
     public function create(){
@@ -149,14 +150,6 @@ class TagGood extends Base{
         if($type==''){
            return error_show(1004,"参数 type 不能为空");
         }
-//          if($this->post['relaComNo']!=""){
-//        	$companyNo = isset($this->post['relaComNo'])&& $this->post['relaComNo']!="" ? trim($this->post['relaComNo']) :"";
-//        }else{
-//        	 $companyNo = isset($this->post['companyNo'])&& $this->post['companyNo']!="" ? trim($this->post['companyNo']) :"";
-//        }
-//         if($companyNo==''){
-//          return error_show(1004,"参数 companyNo 不能为空");
-//        }
         $tag =Db::name("order_tag")->where([['tag_name',"=",$tagName],['companyNo',"=",$taginfo['companyNo']],
         ['type',"=",$type], ["id","<>",$id],["is_del","=",0]])->find();
         if($tag!=false){
@@ -249,6 +242,33 @@ class TagGood extends Base{
 	        return error_show(1004,$e->getMessage());
         }
     }
+    
+    public function checkTag(){
+        $param= $this->request->post(["logid"=>''],"post","trim");
+        $loginfo = TagLog::where("id",$param['logid'])->findOrEmpty();
+        if($loginfo->isEmpty())$this->error('未找到标签关联数据');
+        $tag = OrderTag::where("id",$loginfo->tag_id)->findOrEmpty();
+        if($tag->isEmpty())$this->error('未找到标签信息数据');
+        TagLog::startTrans();
+        $message="";
+        try{
+        	 if($tag['type']==1 || $tag['type']==2){
+        	 	$message="对账单{$loginfo->code}{$tag->tag_name}";
+		          $this->payReTag($tag['type'],$loginfo->code,$loginfo->tag_fee);
+	        }
+	        if($tag['type']==3|| $tag['type']==4){
+	        	$message="销售单{$loginfo->code}{$tag->tag_name}";
+		          $this->qrdReTag($tag['type'],$loginfo->code,$loginfo->tag_fee);
+	        }
+	        $loginfo->status=0;
+	        $loginfo->save();
+        }catch (\Exception $exception){
+        	TagLog::rollback();
+        	$this->error($exception->getMessage());
+        }
+        TagLog::commit();
+        $this->success("{$message}数据标签解除");
+    }
 	/**
 	* @param $tagId 标签类型 1 付款2回票
 	* @param $code  对账单编号
@@ -285,6 +305,34 @@ class TagGood extends Base{
 		 $resulr= Db::name("pay")->where($pay)->update($update);
 		 return $resulr? app_show(0,"标签添加成功"):error_show(1004,"标签添加失败");
     }
+    
+    	/**解除标签
+	* @param $tagId 标签类型 1 付款2回票
+	* @param $code  对账单编号
+	* @param $total_fee 标签金额
+	* @return \think\response\Json|void
+	* @throws \think\db\exception\DbException
+	*/
+    private  function payReTag($tagId,$code,$total_fee){
+		 $pay=Pay::where(['payNo'=>$code,'is_del'=>0])->findOrEmpty();
+		 if($pay->isEmpty())throw  new \Exception("未找到对账单数据");
+		 if($tagId==1){
+		 	if($pay['pay_tag_fee']<$total_fee)throw  new \Exception('对账单付款标签金额不足');
+		 	$pay->pay_tag_fee=$pay->pay_tag_fee-$total_fee;
+		 	$pay->wpay_fee=$pay->wpay_fee+$total_fee;
+		 	$pay->pay_status = $pay->wpay_fee==0 && $pay->pay_fee==0?3:($pay->apay_fee==0?1:2);
+		 	$pay->pay_tag=0;
+		 }
+		 if($tagId==2){
+		 	if($pay['inv_tag_fee']<$total_fee)throw  new \Exception('对账单回票标签金额不足');
+		 	$pay->inv_tag_fee=$pay->inv_tag_fee-$total_fee;
+		 	$pay->winv_fee=$pay->winv_fee+$total_fee;
+		 	$pay->inv_status = $pay->winv_fee==0 && $pay->inv_fee==0?3:($pay->ainv_fee==0?1:2);
+		 	$pay->inv_tag=0;
+		 }
+		 $resulr= $pay->save();
+		if($resulr==false)throw  new \Exception("对账单更新失败");
+    }
 	/**
 	* @param $tagId 标签类型 3 回款4开票
 	* @param $code 销售单编号
@@ -310,7 +358,7 @@ class TagGood extends Base{
 		 }
 		 if($tagId==4){
 		 	if($qrd['winv_fee']+$qrd['inv_tag_fee']<$total_fee){
-		 		return	error_show(1004,"对账单未金额不足");
+		 		return	error_show(1004,"对账单未开票金额不足");
 		 	}
 		 	$update['winv_fee']=$qrd['winv_fee']+$qrd['inv_tag_fee']-$total_fee;
 		 	$status = $update['winv_fee']==0 &&$qrd['inv_fee']==0 ? 3:($qrd['ainv_fee']==0?1:2);
@@ -321,4 +369,32 @@ class TagGood extends Base{
 		 $resulr= Db::name("qrd_info")->where($qrd)->update($update);
 		 return $resulr? app_show(0,"标签添加成功"):error_show(1004,"标签添加失败");
     }
+    
+    /** 解除标签销售单
+	* @param $tagId 标签类型 3 回款4开票
+	* @param $code 销售单编号
+	* @param $total_fee 标签金额
+	 * @return \think\response\Json|void
+	* @throws \think\db\exception\DbException
+	 */
+    private function qrdReTag($tagId,$code,$total_fee){
+    	$qrd=QrdInfo::where(['sequenceNo'=>$code,'is_del'=>0])->findOrEmpty();
+		 if($qrd->isEmpty())throw  new \Exception('未找到销售单数据');
+		  if($tagId==3){
+		 	if($qrd->pay_tag_fee<$total_fee)throw  new \Exception('销售单回款标签金额不足');
+		 	$qrd->pay_tag_fee=$qrd->pay_tag_fee-$total_fee;
+		 	$qrd->wpay_fee=$qrd->wpay_fee+$total_fee;
+		 	$qrd->pay_status = $qrd->wpay_fee==0 && $qrd->pay_fee==0?3:($qrd->apay_fee==0?1:2);
+		 	$qrd->pay_tag=0;
+		 }
+		 if($tagId==4){
+		 	if($qrd->pay_tag_fee<$total_fee)throw  new \Exception('销售单开票标签金额不足');
+		 	$qrd->inv_tag_fee=$qrd->inv_tag_fee-$total_fee;
+		 	$qrd->winv_fee=$qrd->winv_fee+$total_fee;
+		 	$qrd->inv_status = $qrd->winv_fee==0 && $qrd->inv_fee==0?3:($qrd->ainv_fee==0?1:2);
+		 	$qrd->inv_tag=0;
+		 }
+		 $resulr= $qrd->save();
+		if($resulr==false)throw  new \Exception('销售单更新失败');
+    }
 }

+ 15 - 10
app/admin/controller/Track.php

@@ -33,20 +33,23 @@ class Track extends Base
     	 	]);
     	 $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');
+    	 $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");
+    	  $sale = QrdInfo::where(['cxCode|sequenceNo'=>array_unique($outChild),'is_del'=>0])
+    	  ->field("if(cxCode=='',sequenceNo,cxCode) as cxCode,ownerName,ownerid")
+    	  ->select()->toArray();
+    	  $saleName =array_column($sale,'ownerName',"cxCode");
+    	  $saleId =array_column($sale,'ownerid',"cxCode");
     	 $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();
+    	    if(!isset($outChild[$item['outChildCode']]))$this->error("发货工单{$item['outChildCode']}未找到或未发货");
     	    $temp=[
     	    	"TrackCode"=>makeNo("TK"),
     	    	"orderCode"=>$outChild[$item['outChildCode']],
     	    	"cgdNo"=>$cgdArr[$outChild[$item['outChildCode']]]??"",
-    	    	"saler"=>$sale['ownerName']??"",
-    	    	"salerid"=>$sale['ownerid']??"",
+    	    	"saler"=>$saleName[$outChild[$item['outChildCode']]]??"",
+    	    	"salerid"=>$saleId[$outChild[$item['outChildCode']]]??"",
     	    	"outChildCode"=>$item['outChildCode'],
     	    	"supplierNo"=>$item['supplierNo'],
     	    	"supplierName"=>$supplier[$item['supplierNo']]??"",
@@ -74,7 +77,7 @@ class Track extends Base
         $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']];
+        $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')));
@@ -173,6 +176,7 @@ class Track extends Base
         try{
         	$payinfo=[];
             foreach ($objall as $item){
+            	if($item->status!=0) throw new \Exception("{$item->TrackCode}已对账");
             	           $temp=[];
                            $temp['cgdNo']=$item['TrackCode'];
                            $temp['total_fee']=$item['post_fee'];
@@ -189,11 +193,11 @@ class Track extends Base
 			                $data['winv_fee']= bcadd($data['winv_fee'],$item['post_fee'],2);
             }
         	$info =(new PayInfo())->saveAll($payinfo);
-            if(empty($info)==false){
+            if($info){
                   $create=$pay->save($data);
                   if($create)$objall->update(['status'=>1]);
-            }
-            $pay->commit();
+	                $pay->commit();
+            }else throw new \Exception("对账单生成失败");
         }catch (\Exception $e){
         	$pay->rollback();
         	$this->error($e->getMessage());
@@ -254,6 +258,7 @@ class Track extends Base
 				$data['winv_fee']= bcadd($data['winv_fee'],$item['post_fee'],2);
 				if(!empty($add)&& in_array($item['TrackCode'],$add)){
 					$temp=[];
+					if($item->status!=0) throw new \Exception("{$item->TrackCode}已对账");
 					$temp['cgdNo']=$item['TrackCode'];
 					$temp['total_fee']=$item['post_fee'];
 					$temp['apay_fee']=0;

+ 31 - 3
app/admin/listener/ComonQrd.php

@@ -15,6 +15,7 @@ class ComonQrd
     {
 		if($event['type']=="pay")$this->payComon($event);
 		if($event['type']=="inv")$this->invComon($event);
+		if($event['type']=="rinv")$this->returnInv($event);
 		if($event['type']=="check")$this->checkPay($event);
     }
     
@@ -22,6 +23,7 @@ class ComonQrd
     	$payinfo = Pay::where("payNo",$data['payNo'])->findOrEmpty();
     	if($payinfo->isEmpty()) return;
     	if($payinfo->is_comon!=1)return;
+    	if(!in_array($payinfo->status,[1,2]))return;
     	$qrdNo = PayInfo::alias("a")->leftJoin("ComonOrder b","a.cgdNo=b.cgdNo")->where(["payNo"=>$data['payNo'],"is_del"=>0,"a.status"=>1])->column("orderCode");
     	$qrdinfo = QrdInfo::where([["sequenceNo","in",$qrdNo],["wpay_fee",">",0]])->select();
     	if($qrdinfo->isEmpty())return;
@@ -71,7 +73,6 @@ class ComonQrd
     
     protected function invComon($data){
     	$invinfo =InvoicePool::where(['invNo'=>$data['invNo']])->findOrEmpty();
-    	
     	if($invinfo->isEmpty())return;
     	if($invinfo->status!=4 ||$invinfo->is_comon!=1 )return;
     	$invpay =InvoicePay::where(['invNo'=>$data['invNo']])->findOrEmpty();
@@ -80,6 +81,7 @@ class ComonQrd
     	$payinfo = Pay::where('payNo',$invpay['payNo'])->findOrEmpty();
     	if($payinfo->isEmpty()) return;
     	if($payinfo->is_comon!=1)return;
+    	if(!in_array($payinfo->status,[1,2]))return;
     	$ticket =InvoiceTicket::where(["invNo"=>$data['invNo'],"type"=>0])->json(['item'])->findOrEmpty();
     	if($ticket->isEmpty())return;
     	$pay_fee=0;
@@ -115,7 +117,7 @@ class ComonQrd
     	$this->CheckComonOrder($payinfo);
     	$payinfo->save();
     	PayInvoice::create($payinvoice);
-    	    	if(!empty($ticket->item)){
+    	if(!empty($ticket->item)){
     	    		$itemArr=[];
     	    		foreach ($ticket->item as $item){
     	    		    $temp=[];
@@ -128,7 +130,7 @@ class ComonQrd
     	    		    $temp['tax_rate']=strval($item['SL']*100)."%";
     				    $itemArr[]=$temp;
     			    }
-    		    }
+    	}
     		    $info=[
     			    'payNo'          =>$invpay['payNo'] ,
     			    'hpNo'           =>$payinvoice['hpNo'] ,
@@ -155,6 +157,9 @@ class ComonQrd
     			    'change_field'   =>'' ,
     		    ];
     		    InvoiceInfo::create($info);
+    		    $invpay->hpNo = $payinvoice['hpNo'];
+    		    $invpay->status =1;
+    		    $invpay->save();
     }
      protected function checkPay($data){
     	$payinfo = Pay::where('payNo',$data['payNo'])->findOrEmpty();
@@ -183,4 +188,27 @@ class ComonQrd
 		        }
     		}
     }
+    
+    public function returnInv($data){
+            $invinfo =InvoicePool::where(['invNo'=>$data['invNo'],"status"=>[5,6,7,8,9]])->findOrEmpty();
+        	if($invinfo->isEmpty())return;
+        	if($invinfo->is_comon!=1 )return;
+        	$invpay =InvoicePay::where(['invNo'=>$data['invNo']])->findOrEmpty();
+        	if($invpay->isEmpty())return;
+        	if($invpay->status!=1 )return;
+        	$payinfo = Pay::where('payNo',$invpay['payNo'])->findOrEmpty();
+        	if($payinfo->isEmpty()) return;
+        	if($payinfo->is_comon!=1)return;
+        	$payinvoice = PayInvoice::where(["hpNo"=>$invpay->hpNo,"status"=>4])->findOrEmpty();
+        	if($payinvoice->isEmpty())return;
+        	$payinvoice->status=10;
+        	$payinvoice->save();
+        	 $payinfo->winv_fee = $payinfo->winv_fee+$payinvoice->inv_fee;
+        	 $payinfo->ainv_fee = $payinfo->ainv_fee-$payinvoice->inv_fee;
+        	 $payinfo->inv_status = ($payinfo->winv_fee==0 &&$payinfo->inv_fee==0)?3:($payinfo->ainv_fee==0?2:1);
+        	 $this->CheckComonOrder($payinfo);
+        	  $payinfo->save();
+        	  $invpay->status =2;
+        	  $invpay->save();
+    }
 }

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

@@ -0,0 +1,16 @@
+<?php
+declare (strict_types = 1);
+
+namespace app\admin\model;
+
+use think\Model;
+
+/**
+ * @mixin \think\Model
+ */
+class GoodCombind extends Model
+{
+    public function child(){
+    	return $this->belongsTo(Good::class,"childCode","spuCode");
+    }
+}

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

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

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

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

+ 2 - 1
app/admin/model/TagLog.php

@@ -10,5 +10,6 @@ use think\Model;
  */
 class TagLog extends Model
 {
-    //
+     protected $createTime='addtime';
+    protected $updateTime='updatetime';
 }

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

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

+ 1 - 2
app/command/Report.php

@@ -1123,7 +1123,6 @@ class Report extends Command
 		strtotime($param['end']))]];
 		$list = Db::name("qrd_info")->alias("a")
 		->rightJoin("assoc b","a.sequenceNo=b.orderCode")
-//		->leftJoin("cgd_info c","c.sequenceNo = a.cgdNo and c.is_del=0")
 		->field("	a.department 部门,
 						a.ownerName 销售人员,
 						platName 平台类型,
@@ -1329,7 +1328,7 @@ class Report extends Command
 	}
 	
 	private function X(){
-		$where=[["a.is_stock","=",1],["c.wsm_type","in",[2,5]],["a.is_del","=",0],['b.is_del','=',0],['c.is_del','=',0],];
+		$where=[['a.is_stock','=',1],['c.wsm_type','in',[2,5]],['a.is_del','=',0],['b.is_del','=',0],['c.is_del','=',0],];
 		$Db= Db::connect('mysql_wsm');
 		$list =$Db->name('good_basic')->alias('a')
 		->leftJoin('good_stock b','a.spuCode = b.spuCode')

+ 25 - 6
app/command/good.php

@@ -3,7 +3,7 @@ declare (strict_types = 1);
 
 namespace app\command;
 
-use think\console\Command;
+use app\admin\model\GoodCombind;use think\console\Command;
 use think\console\Input;
 use think\console\input\Argument;
 use think\console\input\Option;
@@ -25,14 +25,13 @@ class good extends Command
         // 指令输出
 	    $this->date=date("Y-m-d H:i:s",time()-3600);
 	    $goodset =Cache::store("redis")->get("goodSet");
-	    if($goodset ==1) return;
+//	    if($goodset ==1) return;
 	    Cache::store("redis")->set("goodSet",1,1800);
 	    try{
 		    $this->goodBasic();
 		    $this->goodZx();
-//		    Cache::store("redis")->set("goodSet",0);
+            $this->GoodBind();
 	    }catch (\Exception $e){
-//		    Cache::store("redis")->set("goodSet",0);
 		    $output->writeln("【".date("Y-m-d H:i:s")."】".$e->getMessage());
 	    }
 
@@ -63,6 +62,10 @@ class good extends Command
 					"cat_name"=>$v['cat_id'],
 					"unit_name"=>$v['good_unit'],
 					"isZx"=>$v['isZx'],
+					"isCombind"=>$v['is_combind'],
+					"isChild"=>$v['isChild'],
+					"cgd_supplierNo"=>$v['cgd_supplier_code'],
+					"cgd_supplierName"=>$v['cgd_supplier_name'],
 					"exam_info"=>"",
 					"status"=>0,
 					"addtime"=>date("Y-m-d H:i:s"),
@@ -88,7 +91,7 @@ class good extends Command
             ->withAttr("good_unit",function ($m){
             	return Db::connect('mysql_wsm')->name('unit')->where("id",$m)->value("unit","");
             })->field("spuCode,good_name,cat_id,good_unit,craft_desc,after_sales,supplierNo,companyNo,supplierName,companyName,good_img,
-            good_info_img,good_thumb_img,creater,createrid,is_stock,0 isZx")
+            good_info_img,good_thumb_img,creater,createrid,is_stock,0 isZx,is_combind,cgd_supplier_code,cgd_supplier_name,isChild")
             ->where("updatetime",">=", $this->date)
             ->where("status","=", 1)
             ->select()->toArray();
@@ -105,9 +108,25 @@ class good extends Command
             	return Db::connect('mysql_wsm')->name('unit')->where("id",$v)->value("unit","");
             })
             ->field("spuCode,good_name,craft_desc,'' after_sales,cat_id,good_unit,supplierNo,companyNo,supplierName,companyName,good_img,
-            good_info_img,good_thumb_img,creater,createrid,0 is_stock,1 isZx")
+            good_info_img,good_thumb_img,creater,createrid,0 is_stock,1 isZx,is_combind,cgd_supplier_code,cgd_supplier_name,isChild")
             ->where("addtime",">=", $this->date)
             ->select()->toArray();
     	     return $this->addGood($list);
     }
+    
+    public function GoodBind(){
+    	$list =Db::connect('mysql_wsm')->name("good_combind")
+    	 ->where('createtime','>=', $this->date)
+    	 ->select();
+    	if(empty($list)==false){
+    		$add=[];
+    		foreach($list as $item){
+    			unset($item['id']);
+    			$ist=GoodCombind::where(["spuCode"=>$item['spuCode'],"childCode"=>$item['childCode']])->findOrEmpty();
+    			if($ist->isEmpty())$add[]=$item;
+    		}
+    	    (new \app\admin\model\GoodCombind())->saveAll($add);
+    	}
+    	
+    }
 }

+ 15 - 6
app/command/handleCxData.php

@@ -52,7 +52,7 @@ class handleCxData extends command
 				    $qrd_insert_data=$wait_insert_data=$cgd_insert_data=[];
 				    $data['cat_name']=is_array($data['cat_name']) ? $data['cat_name'] : json_decode($data['cat_name'],true);
 				    if ($result['order_type'] == 1) {
-					    $data['total_price']=$data['total_price'] - $data['th_fee'] - $data['diff_fee'];
+					    $data['total_price']=round($data['total_price'],2) - $data['th_fee'] - $data['diff_fee'];
 					    $exitReport=Db::name('report_code')->where('qrdNo' , $data['orderCode'])->findOrEmpty();
 					    $repostinsert=[
 						    'qrdNo'=>$data['orderCode'] ,
@@ -306,7 +306,7 @@ class handleCxData extends command
 					
 				    } else {
 					    //已存在
-					    $data['total_fee']=$data['total_fee'] - $data['th_fee'] - $data['diff_fee'];
+					    $data['total_fee']=round($data['total_fee'],2) - $data['th_fee'] - $data['diff_fee'];
 					    $exitReport=Db::name('report_code')->where('cgdNo' , $data['cgdNo'])->findOrEmpty();
 					    $repostinsert=[
 						    'qrdNo'=>$data['qrdNo'] ,
@@ -343,7 +343,7 @@ class handleCxData extends command
 									      'cgdSource'=>$data['order_source'] ,//采购单来源',
 									      'companyNo'=>$data['companyNo'] ,//业务公司编号',
 									      'companyName'=>$data['companyName'] ,//业务公司',
-									       'is_comon'=>ComonOrder::is_common($data['cgdNo']),
+									       'is_comon'=>isset($data['mainCode'])?2: ComonOrder::is_common($data['cgdNo']),
 									      'cgdTime'=>$data['addtime'] ,//采购下单时间',
 									      'bkCode'=>$data['bkcode'] ,//备库单编号',
 									      'qrdCode'=>$data['qrdNo'] ,//确认单编号',
@@ -379,6 +379,7 @@ class handleCxData extends command
 									      'isStock'=>$data['is_stock'] ,//是否库存品',
 									      'goodNum'=>$data['good_num'] ,//下单数量',
 									      'totalPrice'=>$data['total_fee'] ,//采购总货款',
+									      'origin_total'=>$data['origin_total'] ,//采购总货款',
 									      'supplierNo'=>$data['supplierNo'] ,//供应商编号',
 									      'supplierName'=>$data['supplier_name'] ,//供应商名称',
 									      'apay_fee'=>0 ,//已付款金额',
@@ -394,6 +395,8 @@ class handleCxData extends command
 									      'wsmCode'=>$data['wsm_code'] ,//仓库编号',
 									      'remark'=>'' ,//备注',
 									      'cxCode'=>$data['oldCode'] ?? '' ,//备注,
+									      'mainCode'=>$data['mainCode'] ?? '' ,//备注,
+									      'cgd_status'=>$data['status'] ?? '0' ,//备注,
 									      'pay_status'=>$data['total_fee'] == 0 ? 3 : 1 ,//付款情况',
 									      'inv_status'=>$data['total_fee'] == 0 ? 3 : 1 ,//开票情况',
 									      'diff_weight'=>$data['diff_weight'] ,//工差重量',
@@ -432,7 +435,7 @@ class handleCxData extends command
 									       'supplierNo'=>$data['supplierNo'] ,//供应商编号',
 									      'supplierName'=>$data['supplier_name'] ,//供应商名称',
 									      'goodModel'=>'' ,//商品型号',
-									       'is_comon'=>ComonOrder::is_common($data['cgdNo']),
+									       'is_comon'=>isset($data['mainCode'])?2: ComonOrder::is_common($data['cgdNo']),
 									      'goodMaterial'=>'' ,//商品材质',
 									      'goodUnit'=>$data['unit'] ,//商品单位',
 									      'goodDesc'=>$data['cost_desc'] ,//工艺说明',
@@ -449,6 +452,7 @@ class handleCxData extends command
 									      'openPrice'=>$data['open_fee'] ,//开模费',
 									      'costPrice'=>$data['teach_fee'] ,//工艺费',
 									      'deliveryPrice'=>$data['delivery_fee'] ,//物流费',
+									      'origin_total'=>$data['origin_total'] ,//采购总货款',
 									      'sendType'=>$data['send_type'] ,//发货方式',
 									      'bkCreater'=>$data['bkcreater'] ,//备库申请人',
 									      'sendStatus'=>$data['send_status'] ,//发货状态',
@@ -459,6 +463,8 @@ class handleCxData extends command
 									      'wsmCode'=>$data['wsm_code'] ,//仓库编号',
 									      'remark'=>'' ,//备注',
 									      'cxCode'=>$data['oldCode'] ?? '' ,//备注,
+									       'mainCode'=>$data['mainCode'] ?? '' ,//备注,
+									      'cgd_status'=>$data['status'] ?? '0' ,//备注,
 									      'check_rate'=>'' ,//修正后的税率',
 									      'updatetime'=>$date ,
 									      'supplier_origin_price'=>$data['supplier_origin_price'],//供应商采购成本
@@ -491,7 +497,7 @@ class handleCxData extends command
 							    'goodType'=>$data['good_type'] ,//商品类型',
 							    'goodBrand'=>$data['brand'] ,//商品品牌',
 							    'goodModel'=>'' ,//商品型号',
-							     'is_comon'=>ComonOrder::is_common($data['cgdNo']),
+							     'is_comon'=>isset($data['mainCode'])?2: ComonOrder::is_common($data['cgdNo']),
 							    'firstCat'=>$data['cat_name'][0]['cat_name'] ?? "" ,//商品一级分类',
 							    'secCat'=>!isset($data['cat_name'][1]) ? '' : $data['cat_name'][1]['cat_name'] ,//二级分类,
 							    'thirdCat'=>!isset($data['cat_name'][2]) ? '' : $data['cat_name'][2]['cat_name'] ,
@@ -519,6 +525,7 @@ class handleCxData extends command
 							    'isStock'=>$data['is_stock'] ,//是否库存品',
 							    'goodNum'=>$data['good_num'] ,//下单数量',
 							    'totalPrice'=>$data['total_fee'] ,//采购总货款',
+							    'origin_total'=>$data['origin_total'] ,//采购总货款',
 							    'supplierNo'=>$data['supplierNo'] ,//供应商编号',
 							    'supplierName'=>$data['supplier_name'] ,//供应商名称',
 							    'apay_fee'=>0 ,//已付款金额',
@@ -528,7 +535,7 @@ class handleCxData extends command
 							    'sendType'=>$data['send_type'] ,//发货方式',
 							    'bkCreater'=>$data['bkcreater'] ,//备库申请人',
 							    'sendStatus'=>$data['send_status'] ,//发货状态',
-							     'qrdSend'=>$data['qrdSend'] ,
+							    'qrdSend'=>$data['qrdSend'] ,
 							    'wsendNum'=>$data['wsend_num'] ,//未发货数量',
 							    'sendNum'=>$data['send_num'] ,//已发货数量',
 							    'wareHouse'=>$data['wsm_code'] ,//仓库名称',
@@ -541,7 +548,9 @@ class handleCxData extends command
 							    'thNum'=>$data['th_num'] ,//退货数量',
 							    'th_fee'=>$data['th_fee'] ,//退货金额',
 							    'check_rate'=>'' ,//修正后的税率',
+							    'cgd_status'=>$data['status'] ?? '0' ,//备注,
 							    'cxCode'=>$data['oldCode'] ?? '' ,//备注,
+							     'mainCode'=>$data['mainCode'] ?? '' ,//备注,
 							    'is_del'=>0 ,
 							    'addtime'=>$date ,
 							    'updatetime'=>$date ,