wufeng 2 жил өмнө
parent
commit
e3d2a60ddf

+ 9 - 20
app/admin/controller/Goodup.php

@@ -524,6 +524,7 @@ class Goodup extends Base
         if($company_id==''){
             return error_show(1004,"参数company_id不能为空");
         }
+         $companyinfo =$userCommon->handle("getCodeAndName",["code"=>$company_id]);
         if($supplierArr['relation_code']==$company_id){
         	 return error_show(1004,"业务公司与供应商属于同一家公司");
         }
@@ -676,8 +677,10 @@ class Goodup extends Base
                 "is_exclusive"=>$is_exclusive,
                 "customized"=>$customized,
                 "companyNo"=>$company_id,
+                "companyName"=>$companyinfo['data'][$company_id]??"",
                 "tax"=>$tax,
                 "supplierNo"=>$supplierNo,
+                "supplierName"=>$supplierArr['name']??"",
                 "good_size"=>$good_size,
                 "is_auth"=>$is_auth,
                 "is_stock"=>$is_stock,
@@ -896,6 +899,7 @@ class Goodup extends Base
         if($company_id==''){
             return error_show(1004,"参数company_id不能为空");
         }
+        $companyinfo =$userCommon->handle("getCodeAndName",["code"=>$company_id]);
         if($supplierArr['relation_code']==$company_id){
         	 return error_show(1004,"业务公司与供应商属于同一家公司");
         }
@@ -999,6 +1003,8 @@ class Goodup extends Base
                 "good_unit"=>$unit,
                 "good_type"=>$good_type,
                 "companyNo"=>$company_id,
+                "companyName"=>$companyinfo['data'][$company_id]??'',
+                "supplierName"=>$supplierArr['name']??"",
                 "moq"=>$moq,
                 "is_exclusive"=>$is_exclusive,
                 "customized"=>$customized,
@@ -1501,18 +1507,6 @@ class Goodup extends Base
             return error_show(1005, "删除失败," . $exception->getMessage());
         }
 
-
-//        $data = Db::name("good_basic")->where(["spuCode"=>$supcode,"is_del"=>0])->select()->toArray();
-//        if(empty($data)){
-//            return error_show(1004,"未找到商品数据");
-//        }
-//        $up= Db::name("good_basic")->where(["spuCode"=>$supcode,"is_del"=>0])->save(["is_del"=>1]);
-//        if($up){
-//            ProcessOrder::workdel(["order_type"=>"CGD","order_code"=>$supcode]);
-//            return app_show(0,"更新成功");
-//        }else{
-//            return error_show(1005,"更新失败");
-//        }
     }
 
     //添加上线商品
@@ -1537,14 +1531,6 @@ class Goodup extends Base
         if($online_remark===""){
             return error_show(1004,"参数online_remark不能为空");
         }
-//        $token = isset($this->post['token'])&& $this->post['token']!='' ? trim($this->post['token']):"";
-//        if($token==''){
-//            return error_show(105,"参数token不能为空");
-//        }
-//        $user =GetUserInfo($token);
-//        if(empty($user)||$user['code']!=0){
-//            return error_show(1002,"用户数据不存在");
-//        }
         $createrid= $this->uid;//isset($user["data"]['id']) ?  $user["data"]['id'] : "";
         $creater= $this->uname;//isset($user["data"]['nickname']) ?  $user["data"]['nickname'] : "";
 
@@ -2359,6 +2345,7 @@ class Goodup extends Base
         if($company_id==''){
             return error_show(1004,"参数companyNo不能为空");
         }
+          $companyinfo =$userCommon->handle("getCodeAndName",["code"=>$company_id]);
         if($supplierArr['relation_code']==$company_id){
         	 return error_show(1004,"业务公司与供应商属于同一家公司");
         }
@@ -2487,11 +2474,13 @@ class Goodup extends Base
                 "good_unit"=>$unit,
                 "good_type"=>$good_type,
                 "companyNo"=>$company_id,
+                "companyName"=>$companyinfo['data'][$company_id]??"",
                 "moq"=>$moq,
                 "is_exclusive"=>$is_exclusive,
                 "customized"=>$customized,
                 "tax"=>$tax,
                 "supplierNo"=>$supplierNo,
+                "supplierName"=>$supplierArr['name'],
                 "is_auth"=>$is_auth,
                 "good_size"=>$good_size,
                 "auth_img"=>$auth_img,

+ 195 - 317
app/admin/controller/Sale.php

@@ -7,7 +7,7 @@ use app\abutment\model\SupplierUser;
 use app\admin\model\DataGroup as DataGroupModel;
 use app\admin\model\GoodLog;
 use app\admin\model\GoodStockInfo;
-use app\admin\model\ProcessOrder;
+use app\admin\model\OrderOutChild;use app\admin\model\ProcessOrder;
 use app\admin\model\SaleInfo;
 use Exception;
 use think\App;
@@ -42,8 +42,6 @@ class Sale extends Base
         if(!isset($tmp['code']) || $tmp['code']!=0) return json_show($tmp['code'],$tmp['message'],$tmp['data']);
         if(!isset($tmp['data'][$customer_code])) return json_show(1004, "未找到客户数据");
         if(!isset($tmp['data'][$supplierNo])) return json_show(1004, "未找到平台供应商数据");
-
-
         $goodtype = isset($this->post['goodtype']) && $this->post['goodtype'] !== "" ? intval($this->post['goodtype']) : "1";
         $order_type = isset($this->post['order_type']) && $this->post['order_type'] !== "" ? intval($this->post['order_type']) : "1";
         $sendtype = isset($this->post['sendtype']) && $this->post['sendtype'] !== "" ? intval($this->post['sendtype']) : "";
@@ -70,8 +68,8 @@ class Sale extends Base
         $paytime = isset($this->post['paytime']) && $this->post['paytime'] != "" ? $this->post['paytime'] : "";
         $workNo = isset($this->post['workNo']) && $this->post['workNo'] != "" ? trim($this->post['workNo']) : "";
         $ct = Db::name('good_platform')->alias('a')->join('good b', 'b.spuCode=a.spuCode', 'left')
-            ->where(['a.skuCode' => $good_code])->field("b.*,a.skuCode,a.platform_code,a.plat_code")->find();
-        if ($ct == false) {
+            ->where(['a.skuCode' => $good_code])->field("b.*,a.skuCode,a.platform_code,a.plat_code")->findOrEmpty();
+        if (empty($ct)) {
             return error_show(1002, "未找到商品数据");
         }
 
@@ -90,13 +88,9 @@ class Sale extends Base
             }
         }
         if ($goodinfo['is_stock'] == 1) {
-            $stock_num = Db::name("good_stock")->alias("a")
-            ->leftJoin("warehouse_info b", "a.wsm_code=b.wsm_code")
-            ->leftJoin("good_stock_info c", "a.id=c.stockid and c.balance_num>0")
-            ->where(["spuCode" => $spuCode, "a.is_del" => 0, "a.status" => 1, "b.wsm_type" => 5, "b.companyNo" =>$supplierNo])
-            ->sum('balance_num');
+           $stock_num = Db::name("good")->where(["spuCode"=> $spuCode])->value("usable_stock",0);
             if($stock_num < $good_num){
-                return error_show(1003, "库存数量不足");
+                return error_show(1003, "商品可用库存数量不足");
             }
             $origin_price = 0;
         } else {
@@ -203,6 +197,9 @@ class Sale extends Base
         $ri = $this->uname;
         Db::startTrans();
         try {
+        	$goodStock = Db::name("good")->where(["spuCode"=> $spuCode])->lock(true)->field("spuCode,usable_stock")
+        	->findOrEmpty();
+        	if(empty($goodStock)) throw new Exception("未找到商品数据");
             $data = [
                 "orderCode" => $orderCode,
                 "good_code" => $spuCode,
@@ -255,7 +252,6 @@ class Sale extends Base
             $paytime == "" ? "" : $data['paytime'] = $paytime;
             $datainfo = Db::name('sale')->insert($data, true);
             if ($datainfo > 0) {
-
                 //修改状态,添加待办
                 ActionLog::logAdd(['id'=>$this->uid,'nickname'=>$this->uname], [
                     "order_code" => $orderCode,//销售单code
@@ -281,8 +277,7 @@ class Sale extends Base
                     $actupp = Db::name("activity_info")->where(["skuCode" => $skuCode, "activity_code" => $actcode,
                         "is_del" => 0, "status" => 1])->save($actup);
                     if ($actupp == false) {
-                        Db::rollback();
-                        return error_show(1002, "活动库存修改失败");
+                    	throw new Exception("活动库存修改失败");
                     }
                 }
                 $outstatus = 0;
@@ -290,20 +285,16 @@ class Sale extends Base
                 if ($is_stock == 0) {
                     $bol = $this->createCgd($cgd, $standing_book_da);
                     if ($bol == false) {
-                        Db::rollback();
-                        return error_show(1002, "订单创建失败");
+                       throw new Exception("订单创建失败");
                     }
                 } else {
                     $outstatus = 1;
-                    $stockid= Db::name("good_stock")->alias("a")
-		            ->leftJoin("warehouse_info b", "a.wsm_code=b.wsm_code")
-		            ->where(["spuCode" => $spuCode, "a.is_del" => 0, "a.status" => 1, "b.wsm_type" => 5, "b.companyNo" =>$supplierNo])
-		            ->column('a.id');
-                    $stockinfo =GoodStockInfo::OrderBn($orderCode,$stockid,$good_num);
-                        if($stockinfo==false){
-                        	 Db::rollback();
-                            return error_show(1002, "更新库存失败");
-                        }
+                    $stockUp =[
+                    	"usable_stock"=>$goodStock['usable_stock']-$good_num,
+                    	"updatetime"=>date("Y-m-d H:i:s"),
+                    	];
+					$goodStockUp = Db::name("good")->where($goodStock)->update($stockUp);
+					if($goodStockUp==false) throw new Exception("商品可用库存更新失败");
                 }
 
                 if ($sendtype == 1) {
@@ -343,14 +334,7 @@ class Sale extends Base
 	                            $order = Db::name("order_num")->where(["orderCode" => $orderCode, "status" => 1])->where([["wsend_num", ">=", 0]])
 	                                ->lock(true)->find();
 	                            if ($order == false) {
-	                                return error_show(1004, "未找到可以发货得采购单数据");
-	                            }
-	                            $order['wsend_num'] -= $num;
-	                            $order['send_num'] += $num;
-	                            $or = Db::name("order_num")->save($order);
-	                            if ($or == false) {
-	                                Db::rollback();
-	                                return error_show(1002, "发货地址添加创建失败");
+	                            	throw new Exception("未找到可以发货得采购单数据");
 	                            }
 	                            $tep = [
 	                                "cgdNo" => $order['cgdNo'],
@@ -362,14 +346,12 @@ class Sale extends Base
 	                            ];
 	                            $sen = Db::name("order_send")->save($tep);
 	                            if ($sen == false) {
-	                                Db::rollback();
-	                                return error_show(1002, "发货地址添加创建失败");
+	                               throw new Exception("发货地址添加创建失败");
 	                            }
 
 	                            $cgdinfo = Db::name("purchease_order")->where(["cgdNo" => $order['cgdNo']])->find();
 	                            if ($cgdinfo == false) {
-	                                Db::rollback();
-	                                return error_show(1002, "未匹配到采购数据");
+	                                 throw new Exception("未匹配到采购数据");
 	                            }
                             }
                             $out = [
@@ -393,9 +375,10 @@ class Sale extends Base
                             ];
                             $ou = Db::name("order_out")->insertGetId($out);
                             if ($ou == false) {
-                                Db::rollback();
-                                return error_show(1002, "发货地址添加创建失败");
+                                throw new Exception("发货地址添加创建失败");
+//                                return error_show(1002, "发货地址添加创建失败");
                             } else {
+                            	OrderOutChild::makeChild($outCode);
                                 //修改状态,添加待办
                                 ActionLog::logAdd(['id'=>$rm,'nickname'=>$ri], [
                                     "order_code" => $outCode,//出库单号
@@ -450,10 +433,9 @@ class Sale extends Base
                                 else $standing_book_da['outCode'] = [$outCode];
                                 }
                               }
-
                          else {
-                            Db::rollback();
-                            return error_show(1002, "发货地址添加创建失败");
+                           throw new Exception("发货地址添加创建失败");
+//                            return error_show(1002, "发货地址添加创建失败");
                         }
                     }
                 }
@@ -464,9 +446,9 @@ class Sale extends Base
 
                 Db::commit();
                 return app_show(0, "订单创建成功", ["order_code" => $orderCode]);
+            }else{
+                throw new Exception("订单创建失败");
             }
-            Db::rollback();
-            return error_show(1002, "订单创建失败");
         } catch (\Exception $e) {
             Db::rollback();
             return error_show(1005, $e->getMessage());
@@ -499,7 +481,7 @@ class Sale extends Base
             ];
             $in = Db::name("warehouse_info")->insert($inwsm);
             if ($in == false) {
-                return false;
+               throw new Exception("虚拟供应商仓库创建失败");
             }
         } else {
             $wsm_code = $wsm['wsm_code'];
@@ -597,7 +579,7 @@ class Sale extends Base
             ];
             $re = Db::name("order_num")->save($rela);
             if ($re == false) {
-                return false;
+                throw new Exception("采购单销售单关联失败");
             } else {
                 $stokc = Db::name("good_stock")->where(['spuCode' => $data['spuCode'], "wsm_code" => $wsm_code, "is_del" => 0])->find();
                 if ($stokc == false) {
@@ -619,7 +601,7 @@ class Sale extends Base
                 }
                 $stoc = Db::name("good_stock")->save($stokc);
                 if ($stoc == false) {
-                    return false;
+                     throw new Exception("商品待入库存更新失败");
                 }
                 $good_data[] = ['good_log_code' => $cgdCode, "stock_id" => isset($stoc['id']) ? $stoc['id'] : Db::name("good_stock")->getLastInsID(), "type" => 1,
                     'stock' => $data['good_num'], "stock_name" => "wait_in_stock"];
@@ -627,7 +609,7 @@ class Sale extends Base
                 return true;
             }
         } else {
-            return false;
+            throw new Exception("采购单生成失败");
         }
 
     }
@@ -655,8 +637,15 @@ class Sale extends Base
         $userCommon= new \app\admin\common\User();
         Db::startTrans();
         try {
-
+        	$GoodModel=Db::name("good");
+        	if(in_array($etid['order_type'],[3,4])){
+        		$GoodModel=Db::name("good_zixun");
+        	}
+			$goodStock=$GoodModel->where(["spuCode"=>$etid['good_code']])->lock(true)->findOrEmpty();
             $i=1;
+        	$goodStock_num =$goodStock['usable_stock']??0;
+        	$total_num = array_sum(array_column($addrlist,"receipt_quantity"));
+        	if($goodStock_num<$total_num && $etid['is_stock'] == 1) throw new Exception("库存品库存数不足发货");
             foreach ($addrlist as $value) {
                 $temp = [];
                 $addrs = [];
@@ -686,107 +675,43 @@ class Sale extends Base
                 if ($vmp > 0) {
                     $num = $value['receipt_quantity'];
                       $outCode = makeNo("DF");
-                    //维护商品所在仓库的库存 --- start
-                    if ($etid['is_stock'] != 1){
-                    	$order = Db::name("order_num")->where(["orderCode" => $orderCode, "status" => 1])->where([["wsend_num", ">=", 0]])
-                        ->find();
-                    if (empty($order) || $order['wsend_num'] < $num) {
-                        return error_show(1004, "未找到可以发货得采购单数据");
-                    }
-
-                    //改变编码规则,将原来的outCode后两位换成序列号
+                      //改变编码规则,将原来的outCode后两位换成序列号
                     //str_pad字符串填充
                     $outCode = substr($outCode, 0, -2) . str_pad($i, 2, '0', STR_PAD_LEFT);
                     $i++;
-
-                    $order['send_num'] += $num;
-                    $order['wsend_num'] -= $num;
-                    $or = Db::name("order_num")->save($order);
-                    if ($or == false) {
-                        Db::rollback();
-                        return error_show(1002, "发货地址添加创建失败");
-                    }
-                     $tep = [
-                        "cgdNo" => $order['cgdNo'],
-                        "outCode" => $outCode,
-                        "send_num" => $num,
-                        "status" => 1,
-                        "addtime" => date("Y-m-d H:i:s"),
-                        "updatetime" => date("Y-m-d H:i:s")
-                    ];
-                    $sen = Db::name("order_send")->save($tep);
-                    if ($sen == false) {
-                        Db::rollback();
-                        return error_show(1002, "发货地址添加创建失败");
-                    }
-                    $cgdinfo = Db::name("purchease_order")->where(["cgdNo" => $order['cgdNo']])->find();
-                    if ($cgdinfo == false) {
-                        Db::rollback();
-                        return error_show(1002, "未匹配到采购数据");
-                    }
-                    $temp = Db::name('good_stock')
-                        ->field('id,usable_stock,wait_out_stock')
-                        ->where(['spuCode' => $etid['good_code'], 'wsm_code' => $cgdinfo['wsm_code']])
-                        ->find();
-                    	//非库存品 导入地址生成发货单时占用库存 可用库存进入待出库
-                        if ($temp == false || ($temp['usable_stock'] - $num) < 0) {
-                            $status = 0;
+                    //维护商品所在仓库的库存 --- start
+                    if ($etid['is_stock'] != 1){
+                    	//查找关联采购单
+                    	$order = Db::name("order_num")->where(["orderCode" => $orderCode, "status" => 1])->findOrEmpty();
+	                    if (empty($order)) {
+	                         throw new Exception("未找到可以发货得采购单数据");
+	                    }
+	                    $tep = [
+	                        "cgdNo" => $order['cgdNo'],
+	                        "outCode" => $outCode,
+	                        "send_num" => $num,
+	                        "status" => 1,
+	                        "addtime" => date("Y-m-d H:i:s"),
+	                        "updatetime" => date("Y-m-d H:i:s")
+	                    ];
+	                    $sen = Db::name("order_send")->save($tep);
+	                    if ($sen == false) {
+	                        throw new Exception("发货地址添加创建失败");
+	                    }
+	                    $cgdinfo = Db::name("purchease_order")->where(["cgdNo" => $order['cgdNo']])->find();
+	                    if ($cgdinfo == false) {
+	                        throw new Exception("采购单数据不存在");
+	                    }
+                        if ($goodStock_num==0) {
+                                $status = 0;
                         } else {
-                            if (($temp['usable_stock'] - $num) < 0) {
-                                Db::rollback();
-                                return error_show(1004, '库存不足');
-                            }
-
-                            $up = Db::name('good_stock')
-                                ->where('id', $temp['id'])
-                                ->update([
-                                    'usable_stock' => $temp['usable_stock'] - $num,
-                                    'wait_out_stock' => $temp['wait_out_stock'] + $num,
-                                    'updatetime' => date('Y-m-d H:i:s'),
-                                ]);
-                            if ($up == false) {
-                                Db::rollback();
-                                return error_show(1004, '库存更新失败');
-                            }
-                            $good_data[] = ['good_log_code' => $outCode, "stock_id" => $temp['id'], "type" => 1, 'stock' => $num, "stock_name" => "wait_out_stock"];
-                            $good_data[] = ['good_log_code' => $outCode, "stock_id" => $temp['id'], "type" => 2, 'stock' => $num, "stock_name" => "usable_stock"];
-                            GoodLog::LogAdd(['id'=>$this->uid,'nickname'=>$this->uname], $good_data, "CKD");
+                            if (($goodStock_num - $num) < 0)throw new Exception("非库存品可用库存不足");
+                            $goodStock_num =- $num;
                             $status = 1;
                         }
                     }else{
-                    	$order = Db::name("order_num")->where(["orderCode" => $orderCode, "status" => 1])->where([["wsend_num", ">=", 0]])
-                        ->find();
-                    	if($order!=false){
-                    		$outCode = substr($outCode, 0, -2) . str_pad($i, 2, '0', STR_PAD_LEFT);
-		                    $i++;
-
-		                    $order['send_num'] += $num;
-		                    $order['wsend_num'] -= $num;
-		                    $or = Db::name("order_num")->save($order);
-		                    if ($or == false) {
-		                        Db::rollback();
-		                        return error_show(1002, "发货地址添加创建失败");
-		                    }
-		                     $tep = [
-		                        "cgdNo" => $order['cgdNo'],
-		                        "outCode" => $outCode,
-		                        "send_num" => $num,
-		                        "status" => 1,
-		                        "addtime" => date("Y-m-d H:i:s"),
-		                        "updatetime" => date("Y-m-d H:i:s")
-		                    ];
-		                    $sen = Db::name("order_send")->save($tep);
-		                    if ($sen == false) {
-		                        Db::rollback();
-		                        return error_show(1002, "发货地址添加创建失败");
-		                    }
-		                    $cgdinfo = Db::name("purchease_order")->where(["cgdNo" => $order['cgdNo']])->find();
-		                    if ($cgdinfo == false) {
-		                        Db::rollback();
-		                        return error_show(1002, "未匹配到采购数据");
-		                    }
-                    	}
-
+                    if ($goodStock_num==0 ||($goodStock_num - $num) < 0)throw new Exception("库存品可用库存不足");
+                    $goodStock_num =- $num;
 					$status=1;
                     }
 
@@ -811,9 +736,11 @@ class Sale extends Base
                     ];
                     $ou = Db::name("order_out")->insertGetId($out);
                     if ($ou == false) {
-                        Db::rollback();
-                        return error_show(1002, "发货地址添加创建失败");
+                        throw new Exception("发货单创建失败");
+//                        return error_show(1002, "发货地址添加创建失败");
                     } else {
+                    	OrderOutChild::makeChild($outCode);
+
                         //修改状态,添加待办
                         ActionLog::logAdd(['id'=>$rm,'nickname'=>$ri], [
                             "order_code" => $outCode,//出库单号
@@ -888,11 +815,8 @@ class Sale extends Base
                     return error_show(1002, "发货地址添加创建失败");
                 }
             }
-//            $OrderBn = GoodStockInfo::OrderBn($orderCode,$stock_id,$num);
-//		      if($OrderBn==false){
-//		        Db::rollback();
-//		        return error_show(1004,"Bn库存数关联订单失败");
-//		      }
+            $usable = $GoodModel->where($goodStock)->update(["usable_stock"=>$goodStock_num,"updatetime"=>date("Y-m-d H:i:s")]);
+            if($usable==false) throw new Exception("商品可用库存数更新失败");
             Db::commit();
             return app_show(0, "发货地址添加完成");
         } catch (\Exception $e) {
@@ -1235,6 +1159,7 @@ class Sale extends Base
                                 Db::rollback();
                                 return error_show(1002, "发货地址添加创建失败");
                             } else {
+                            	OrderOutChild::makeChild($outCode);
                                 //修改状态,添加待办
                                 ActionLog::logAdd(['id'=>$rm,'nickname'=>$ri], [
                                     "order_code" => $outCode,//出库单号
@@ -1257,14 +1182,7 @@ class Sale extends Base
                                 //将发货编号添加到台账中
                                 $standing_book_data['outCode'][] = $outCode;
                             }
-                            $order['send_num'] += $value['receipt_quantity'];
-                            $order['wsend_num'] -= $value['receipt_quantity'];
-                            if ($order['wsend_num'] < 0) {
-                                Db::rollback();
-                                return error_show(1002, "发货数量已超出总数");
-                            }
-                            $ups = Db::name("order_num")->save($order);
-                            if ($ups) {
+
                                 $tep = [
                                     "cgdNo" => $order['cgdNo'],
                                     "outCode" => $outCode,
@@ -1278,8 +1196,6 @@ class Sale extends Base
                                     Db::rollback();
                                     return error_show(1002, "发货地址添加创建失败");
                                 }
-                            }
-
                         } else {
                             Db::rollback();
                             return error_show(1002, "发货地址添加创建失败");
@@ -1348,8 +1264,8 @@ class Sale extends Base
         try {
             $plan = Db::name("project_plan")->where(["planNo" => $planNo, "is_del" => 0])->lock(true)->find();
             if ($plan == false) {
-                Db::rollback();
-                return error_show(1004, "未找到方案信息");
+                 throw new Exception("未找到方案信息");
+//                return error_show(1004, "未找到方案信息");
             }
             $feedid = array_column($feedbackid, "feedback_id");
             $feedbacks = Db::name("project_feedback")
@@ -1360,8 +1276,8 @@ class Sale extends Base
                 $good = [];
                 $feedback = $feedbacks[$value['feedback_id']]??[];
                 if (empty($feedback)) {
-                    Db::rollback();
-                    return error_show(1002, "反馈数据未找到");
+                    throw new Exception("反馈数据未找到");
+//                    return error_show(1002, "反馈数据未找到");
                 }
                 $key = array_search($feedback['id'], $feedid);
                 $price = $feedbackid[$key];
@@ -1385,8 +1301,8 @@ class Sale extends Base
                 $standing_book_data = ['projectNo' => $plan['projectNo'], 'updatetime' => date('Y-m-d H:i:s')];
                 if ($value['sendtype'] == 1) {
                     if (!isset($value['addrlist']) || empty($value['addrlist'])) {
-                        Db::rollback();
-                        return error_show(1002, "订单地址不能为空");
+                      throw new Exception("订单地址不能为空");
+//                        return error_show(1002, "订单地址不能为空");
                     }
                     $good['addrlist'] = $value['addrlist'];
                     $good['send_num'] = array_sum(array_column($value['addrlist'], "receipt_quantity"));
@@ -1395,38 +1311,21 @@ class Sale extends Base
 
                     $feed = $this->project_good($good, $standing_book_data);
                     if ($feed !== true) {
-                        Db::rollback();
-                        switch ($feed) {
-                            case 1:
-                                $msg = '库存不足';
-                                break;
-                            case 2:
-                                $msg = '库存更新失败';
-                                break;
-                            case 3:
-                                $msg = '关联采购失败';
-                                break;
-                            case 4:
-                                $msg = '商品信息未找到';
-                                break;
-                            default:
-                                $msg = '咨询订单生成失败';
-
-                        }
-                        return error_show(1002, $msg);
+                        throw new Exception("订单生成失败");
+//                        return error_show(1002, $msg);
                     }
                 } else {
                     $feed = $this->project_zx($good, $standing_book_data);
                     if ($feed == false) {
-                        Db::rollback();
-                        return error_show(1002, "咨询订单生成失败");
+                        throw new Exception("咨询订单生成失败");
+//                        return error_show(1002, "咨询订单生成失败");
                     }
                 }
                 $old_fk_status = $feedback['status'];
                 $fed = Db::name("project_feedback")->where($feedback)->save(['status' => 2, "updatetime" => date("Y-m-d H:i:s")]);
                 if ($fed == false) {
-                    Db::rollback();
-                    return error_show(1002, "项目订单生成失败");
+                    throw new Exception("项目反馈更新失败");
+//                    return error_show(1002, "项目订单生成失败");
                 }
 
                 //处理台账(一个项目会生成多个销售订单,第一个更新,其余的新增)
@@ -1459,8 +1358,8 @@ class Sale extends Base
 //            $plan['updatetime']=date("Y-m-d H:i:s");
             $in = Db::name("project_plan")->where($plan)->save(['status' => 2, "updatetime" => date("Y-m-d H:i:s")]);
             if ($in == false) {
-                Db::rollback();
-                return error_show(1002, "项目订单生成失败");
+                 throw new Exception("项目方案状态更新失败");
+//                return error_show(1002, "项目订单生成失败");
             } else {
                 //修改状态,添加待办,只记录动作
                 ActionLog::logAdd(['id'=>$this->uid,'nickname'=>$this->uname], [
@@ -1475,8 +1374,8 @@ class Sale extends Base
 //            $project['updatetime']=date("Y-m-d H:i:s");
             $pr = Db::name("project")->where($project)->save(["updatetime" => date("Y-m-d H:i:s"), "status" => 6]);
             if ($pr == false) {
-                Db::rollback();
-                return error_show(1002, "项目订单生成失败");
+               throw new Exception("项目状态更新失败");
+//                return error_show(1002, "项目订单生成失败");
             } else {
                 //修改状态,添加待办
                 ActionLog::logAdd(['id'=>$this->uid,'nickname'=>$this->uname], [
@@ -1711,13 +1610,13 @@ class Sale extends Base
             ];
             $good = Db::name("good_zixun")->insert($limt);
             if (!$good) {
-                return false;
+                throw new Exception("咨询商品录入失败");
             }
             if ($data['sendtype'] == 1 && !empty($data['addrlist'])) {
-                $order = Db::name("order_num")->where(["orderCode" => $orderCode, "status" => 1])->where([["wsend_num", ">=", 0]])
+                $order = Db::name("order_num")->where(["orderCode" => $orderCode, "status" => 1])
                     ->find();
                 if ($order == false) {
-                    return false;
+                    throw new Exception("关联采购单信息未找到");
                 }
                 $i = 1;
                 foreach ($data['addrlist'] as $value) {
@@ -1771,8 +1670,9 @@ class Sale extends Base
                         ];
                         $ou = Db::name("order_out")->insertGetId($out);
                         if ($ou == false) {
-                            return false;
+                             throw new Exception("发货单生成失败");
                         }
+                        OrderOutChild::makeChild($outCode);
                         //修改状态,添加待办
                         ActionLog::logAdd(['id'=>$this->uid,'nickname'=>$this->uname], [
                             "order_code" => $outCode,//项目编码
@@ -1791,13 +1691,6 @@ class Sale extends Base
                             'wait_id'=>$holder_id,
                             'wait_name'=>$holder_name,
                         ]);
-                        $order['send_num'] += $value['receipt_quantity'];
-                        $order['wsend_num'] -= $value['receipt_quantity'];
-                        if ($order['wsend_num'] < 0) {
-                            return false;
-                        }
-                        $ups = Db::name("order_num")->save($order);
-                        if ($ups) {
                             $tep = [
                                 "cgdNo" => $order['cgdNo'],
                                 "outCode" => $outCode,
@@ -1808,14 +1701,14 @@ class Sale extends Base
                             ];
                             $sen = Db::name("order_send")->save($tep);
                             if ($sen == false) {
-                                return false;
+                                  throw new Exception("发货单关联采购单生成失败");
                             }
 
                             $standing_book_data['outCode'][] = $outCode;
-                        }
+
 
                     } else {
-                        return false;
+                      throw new Exception("地址录入失败");
                     }
                 }
             }
@@ -1839,11 +1732,13 @@ class Sale extends Base
             ->field("a.*,b.skuCode,b.platform_code")->find();
 
         if ($good == false) {
-            return 4; //商品信息未找到
+//            return 4; //商品信息未找到
+            throw new Exception("商品信息未找到");
         }
         $goodlass = Db::name("good_ladder")->where(["skuCode" => $data['skuCode'], "is_del" => 0, "status" => 1])->where([["min_num", "<=", $data['good_num']]])->order("min_num desc")->find();
         if ($goodlass == false) {
-            return 4;//商品信息未找到
+//            /return 4;//商品信息未找到
+            throw new Exception("商品售价信息未找到");
         }
         $sale_price = $goodlass['sale_price'];
         $origin_price = 0;
@@ -1851,7 +1746,8 @@ class Sale extends Base
             $origin = Db::name("good_nake")->where([["spuCode", "=", $data['spuCode']], ["min_num", "<=", $data['good_num']],
                 ["is_del", "=", 0]])->order("min_num desc")->find();
             if ($origin == false) {
-                return 4;//商品信息未找到
+//                return 4;//商品信息未找到
+                throw new Exception("商品成本售价信息未找到");
             }
             $origin_price = $origin['nake_total'];
         }
@@ -1974,28 +1870,21 @@ class Sale extends Base
             if ($good['is_stock'] == 0) {
                 $bol = $this->createCgd($cgd, $standing_book_data);
                 if ($bol == false) {
-                    return 3;//关联采购失败
+//                    return 3;//关联采购失败
+                    throw new Exception("采购单生成失败");
                 }
             } else {
 
-            $stock_arr = Db::name("good_stock")->alias("a")
-	            ->leftJoin("warehouse_info b", "a.wsm_code=b.wsm_code")
-	            ->leftJoin("good_stock_info c", "a.id=c.stockid and c.balance_num>0")
-	            ->where(["spuCode" => $good['spuCode'], "a.is_del" => 0, "a.status" => 1, "b.wsm_type" => 5, "b.companyNo" =>$data['companyNo']])
-	            ->column('stockid,balance_num');
-                $stock_num = array_sum(array_column($stock_arr,"balance_num"));
-                $stockid = array_unique(array_column($stock_arr,"stockid"));
-	            if($stock_num < $data['good_num']){
-	                return 1;
+	            if($good['usable_stock'] < $data['good_num']){
+	              throw new Exception("可用库存数不足");
 	            }
-                if (!empty($stockid)) {
-
-                     $stockinfo =GoodStockInfo::OrderBn($orderCode,$stockid,$data['good_num']);
-                        if($stockinfo==false){
-                        	      return 2; //库存不足
-                        }
-                }
-
+                $stockUp =[
+                    	"usable_stock"=>$good['usable_stock']-$data['good_num'],
+                    	"updatetime"=>date("Y-m-d H:i:s"),
+                    	];
+					$goodStockUp = Db::name("good")->where(['spuCode'=>$good['spuCode'],"usable_stock"=>$good['usable_stock']])->update
+					($stockUp);
+					if($goodStockUp==false) throw new Exception("商品可用库存更新失败");
             }
             if ($data['sendtype'] == 1 && !empty($data['addrlist'])) {
                 $i = 1;
@@ -2030,22 +1919,12 @@ class Sale extends Base
                             $outCode = substr($outCode, 0, -2) . str_pad($i, 2, '0', STR_PAD_LEFT);
 	                        $i++;
                             if ($good['is_stock'] != 1) {
-	                        $order = Db::name("order_num")->where(["orderCode" => $orderCode, "status" => 1])->where([["wsend_num", ">=", 0]])
-	                            ->lock(true)->find();
+	                        $order = Db::name("order_num")->where(["orderCode" => $orderCode, "status" => 1])
+	                            ->find();
 	                        if ($order == false) {
-	                            return 3;
+	                             throw new Exception("关联采购单信息未找到");
 	                        }
 
-	                        //改变编码规则,将原来的outCode后两位换成序列号
-	                        //str_pad字符串填充
-
-	                        $order['wsend_num'] -= $num;
-	                        $order['send_num'] += $num;
-	                        $or = Db::name("order_num")->save($order);
-	                        if ($or == false) {
-
-	                            return 3;
-	                        }
 	                        $tep = [
 	                            "cgdNo" => $order['cgdNo'],
 	                            "outCode" => $outCode,
@@ -2056,13 +1935,11 @@ class Sale extends Base
 	                        ];
 	                        $sen = Db::name("order_send")->save($tep);
 	                        if ($sen == false) {
-
-	                            return 3;
+								throw new Exception("发货单关联采购单信息失败");
 	                        }
 	                        $cgdinfo = Db::name("purchease_order")->where(["cgdNo" => $order['cgdNo']])->find();
 	                        if ($cgdinfo == false) {
-
-	                            return 4;
+	                           throw new Exception("采购单信息未找到");
 	                        }
                         }
                         $out = [
@@ -2086,8 +1963,9 @@ class Sale extends Base
                         ];
                         $ou = Db::name("order_out")->insertGetId($out);
                         if ($ou == false) {
-                            return 0;
+                            throw new Exception("发货单生成失败");
                         } else {
+                        	OrderOutChild::makeChild($outCode);
                             $standing_book_data['outCode'][] = $outCode;
                             //修改状态,添加待办
                             if($good['is_stock'] == 1){
@@ -2117,7 +1995,7 @@ class Sale extends Base
                             ]);
                         }
                     } else {
-                        return false;
+                        throw new Exception("地址录入失败");
                     }
                 }
             }
@@ -4208,42 +4086,42 @@ class Sale extends Base
                     Db::rollback();
                     return error_show(1002, "库存更新失败");
                 }
-                	$outsend =Db::name("order_send")->where(["outCode"=> $outCode])->findOrEmpty();
-                	if(empty($outsend)){
-                			Db::rollback();
-                             return error_show(1002, "未找到关联采购单");
-                		}
-                	$cgdinfo= Db::name("purchease_order")->where(["cgdNo"=>$outsend['cgdNo'],"is_del"=>0])
-                	->findOrEmpty();
-                	$bn_code =makeNo("BN");
-                	$bnin=GoodStockInfo::AddBn($stokc["id"],$bn_code,$outinfo['send_num'],$cgdinfo['good_price']??0);
-	                 if($bnin==false){
-	                      Db::rollback();
-	                      return error_show(1004,"库存bn数据新增失败");
-	                 }
-	                 $bnup =GoodStockInfo::OrderBn($outinfo['orderCode'],$stokc["id"],$outinfo['send_num'],0);
-	                 if($bnup==false){
-	                      Db::rollback();
-	                      return error_show(1004,"库存bn库存数更新失败");
-	                 }
-					$outsend['bnCode']=$bn_code;
-					$outsend['updatetime']=date("Y-m-d H:i:s");
-					$ps=Db::name("order_send")->save($outsend);
-					if($ps==false){
-						Db::rollback();
-	                    return error_show(1004,"库存bn库存数更新失败");
-					}
+//                	$outsend =Db::name("order_send")->where(["outCode"=> $outCode])->findOrEmpty();
+//                	if(empty($outsend)){
+//                			Db::rollback();
+//                             return error_show(1002, "未找到关联采购单");
+//                		}
+//                	$cgdinfo= Db::name("purchease_order")->where(["cgdNo"=>$outsend['cgdNo'],"is_del"=>0])
+//                	->findOrEmpty();
+//                	$bn_code =makeNo("BN");
+//                	$bnin=GoodStockInfo::AddBn($stokc["id"],$bn_code,$outinfo['send_num'],$cgdinfo['good_price']??0);
+//	                 if($bnin==false){
+//	                      Db::rollback();
+//	                      return error_show(1004,"库存bn数据新增失败");
+//	                 }
+//	                 $bnup =GoodStockInfo::OrderBn($outinfo['orderCode'],$stokc["id"],$outinfo['send_num'],0);
+//	                 if($bnup==false){
+//	                      Db::rollback();
+//	                      return error_show(1004,"库存bn库存数更新失败");
+//	                 }
+//					$outsend['bnCode']=$bn_code;
+//					$outsend['updatetime']=date("Y-m-d H:i:s");
+//					$ps=Db::name("order_send")->save($outsend);
+//					if($ps==false){
+//						Db::rollback();
+//	                    return error_show(1004,"库存bn库存数更新失败");
+//					}
 	                 $good_data[] = ['good_log_code' => $outCode, "stock_id" => $stokc['id'], "type" => 2, 'stock' => $outinfo['send_num'], "stock_name" => "wait_out_stock"];
 	                 GoodLog::LogAdd(['id' => $uid, 'nickname' => $uname], $good_data, "CKD");
                 }else{
-                	$saleinfo =Db::name("sale_info")->where(["orderCode"=>$outinfo['orderCode']])->select()->toArray();
-                	if (!empty($saleinfo)){
-                		$bnup =SaleInfo::SendStock($outinfo['orderCode'],$outinfo['send_num']);
-		                 if($bnup==false){
-		                      Db::rollback();
-		                      return error_show(1004,"库存bn库存数更新失败");
-		                 }
-                	}else{
+//                	$saleinfo =Db::name("sale_info")->where(["orderCode"=>$outinfo['orderCode']])->select()->toArray();
+//                	if (!empty($saleinfo)){
+//                		$bnup =SaleInfo::SendStock($outinfo['orderCode'],$outinfo['send_num']);
+//		                 if($bnup==false){
+//		                      Db::rollback();
+//		                      return error_show(1004,"库存bn库存数更新失败");
+//		                 }
+//                	}else{
                 	$stokc = Db::name("good_stock")->where(['spuCode' => $einfo['good_code'], "wsm_code" => $outinfo['wsm_code'], "is_del" => 0])->find();
 		                if ($stokc == false) {
 		                    Db::rollback();
@@ -4263,12 +4141,12 @@ class Sale extends Base
 		                    Db::rollback();
 		                    return error_show(1002, "库存更新失败");
 		                }
-		            }
+//		            }
 
                 }
 
 
-                Cache::store("redis")->handler()->lPush("SENDOUT", $outCode);
+//                Cache::store("redis")->handler()->lPush("SENDOUT", $outCode);
                 Db::commit();
 
 
@@ -5042,31 +4920,31 @@ class Sale extends Base
                             ->where('id', $stock['id'])
                             ->update($stock);
                         if ($stock_rs == false) throw new Exception($value['outCode'] . '库存更新失败');
-		                    $outsend =Db::name("order_send")->where(["outCode"=> $value['outCode']])->findOrEmpty();
-		                    if(empty($outsend)){
-		                    	Db::rollback();
-		                        return error_show(1002, "未找到关联采购单");
-		                    }
-		                    $cgdinfo= Db::name("purchease_order")->where(["cgdNo"=>$outsend['cgdNo'],"is_del"=>0])
-		                    ->findOrEmpty();
-		                    $bn_code =makeNo("BN");
-		                    $bnin=GoodStockInfo::AddBn($stock["id"],$bn_code,$order_out_infos[$value['outCode']]['send_num'],$cgdinfo['good_price']??0);
-			                 if($bnin==false){
-			                      Db::rollback();
-			                      return error_show(1004,"库存bn数据新增失败");
-			                 }
-			                 $bnup =GoodStockInfo::OrderBn($order_out_infos[$value['outCode']]['orderCode'],$stock["id"],$order_out_infos[$value['outCode']]['send_num'],0);
-			                 if($bnup==false){
-			                      Db::rollback();
-			                      return error_show(1004,"库存bn库存数更新失败");
-			                 }
-			                    $outsend['bnCode']=$bn_code;
-								$outsend['updatetime']=date("Y-m-d H:i:s");
-								$ps=Db::name("order_send")->save($outsend);
-								if($ps==false){
-									Db::rollback();
-				                    return error_show(1004,"库存bn库存数更新失败");
-								}
+//		                    $outsend =Db::name("order_send")->where(["outCode"=> $value['outCode']])->findOrEmpty();
+//		                    if(empty($outsend)){
+//		                    	Db::rollback();
+//		                        return error_show(1002, "未找到关联采购单");
+//		                    }
+//		                    $cgdinfo= Db::name("purchease_order")->where(["cgdNo"=>$outsend['cgdNo'],"is_del"=>0])
+//		                    ->findOrEmpty();
+//		                    $bn_code =makeNo("BN");
+//		                    $bnin=GoodStockInfo::AddBn($stock["id"],$bn_code,$order_out_infos[$value['outCode']]['send_num'],$cgdinfo['good_price']??0);
+//			                 if($bnin==false){
+//			                      Db::rollback();
+//			                      return error_show(1004,"库存bn数据新增失败");
+//			                 }
+//			                 $bnup =GoodStockInfo::OrderBn($order_out_infos[$value['outCode']]['orderCode'],$stock["id"],$order_out_infos[$value['outCode']]['send_num'],0);
+//			                 if($bnup==false){
+//			                      Db::rollback();
+//			                      return error_show(1004,"库存bn库存数更新失败");
+//			                 }
+//			                    $outsend['bnCode']=$bn_code;
+//								$outsend['updatetime']=date("Y-m-d H:i:s");
+//								$ps=Db::name("order_send")->save($outsend);
+//								if($ps==false){
+//									Db::rollback();
+//				                    return error_show(1004,"库存bn库存数更新失败");
+//								}
 						 }
                         $good_data[] = [
                             'good_log_code' => $value['outCode'],
@@ -5082,14 +4960,14 @@ class Sale extends Base
 //	                      Db::rollback();
 //	                      return error_show(1004,"库存bn库存数更新失败");
 //	                 }
-	                 $saleinfo =Db::name("sale_info")->where(["orderCode"=>$order_out_infos[$value['outCode']]['orderCode']])->select()->toArray();
-                	if (!empty($saleinfo)){
-                		$bnup =SaleInfo::SendStock($order_out_infos[$value['outCode']]['orderCode'],$order_out_infos[$value['outCode']]['send_num']);
-		                 if($bnup==false){
-		                      Db::rollback();
-		                      return error_show(1004,"库存bn库存数更新失败");
-		                 }
-                	}else{
+//	                 $saleinfo =Db::name("sale_info")->where(["orderCode"=>$order_out_infos[$value['outCode']]['orderCode']])->select()->toArray();
+//                	if (!empty($saleinfo)){
+//                		$bnup =SaleInfo::SendStock($order_out_infos[$value['outCode']]['orderCode'],$order_out_infos[$value['outCode']]['send_num']);
+//		                 if($bnup==false){
+//		                      Db::rollback();
+//		                      return error_show(1004,"库存bn库存数更新失败");
+//		                 }
+//                	}else{
                 	$stokc = Db::name("good_stock")->where(['spuCode' =>$sale_infos[$order_out_infos[$value['outCode']]['orderCode']]['good_code'], "wsm_code" => $order_out_infos[$value['outCode']]['wsm_code'], "is_del" => 0])->find();
 		                if ($stokc == false) {
 		                    Db::rollback();
@@ -5109,14 +4987,14 @@ class Sale extends Base
 		                    Db::rollback();
 		                    return error_show(1002, "库存更新失败");
 		                }
-		            }
+//		            }
 
 
                     }
 
 
                 } else throw new Exception($value['outCode'] . '发货失败');
-                Cache::store("redis")->handler()->lPush("SENDOUT",$value['outCode']);
+//                Cache::store("redis")->handler()->lPush("SENDOUT",$value['outCode']);
 
 
                 //如果是有赞订单的话,将发货信息推到有赞

+ 27 - 6
app/admin/model/GoodStockInfo.php

@@ -80,11 +80,8 @@ class GoodStockInfo extends Model
 		    }
 			$up=self::update($update,$item);
 		    if($up==false)  throw new Exception("库存批次库存更新失败",1006);
-		    if($isstock==1) {
-		    	$stup=self::name("good_stock")->where($stock)->update($stockup);
-		    	if($stup==false)  throw new Exception("库存更新失败",1006);
-
-		    }
+		    $stup=self::name("good_stock")->where($stock)->update($stockup);
+		    if($stup==false)  throw new Exception("库存更新失败",1006);
 		    $list[]=$temp;
 		}
 		return $list;
@@ -237,6 +234,30 @@ class GoodStockInfo extends Model
 		}
 		return $result;
 	}
-
+	/**分单分配bn号
+	* @param string $childCode 分单编号
+	* @param int $stockid 库存id
+	 */
+	static function ChildAddBn(string $childCode='',int $stockid=0){
+		$child = OrderOutChild::get(["outChildCode"=>$childCode,"is_del"=>0])->findOrEmpty();
+		if(empty($child))throw new Exception("未找到分单数据",1006);
+		$bnArr=self::SaleBn($stockid,$child['num']);
+        if(empty($bnArr)) throw new Exception("未找到Bn库存数据",1006);
+        $ordBn=[];
+        foreach ($bnArr as $value){
+	        $saleBn=[
+	        "orderCode"=>$child['orderCode'],
+	        "outCode"=>$child['outCode'],
+	        "childCode"=>$childCode,
+	        "bnCode"=>$value['bnCode'],
+	        "num"=>$value['num'],
+	        "origin_price"=>$value['origin_price'],
+	        "addtime"=>date("Y-m-d H:i:s"),
+	        "updatetime"=>date("Y-m-d H:i:s"),
+	        ];
+	        $ordBn[]=$saleBn;
+        }
+		return self::name("child_bn")->insertAll($ordBn);
+	}
 
 }

+ 65 - 0
app/admin/model/OrderOutChild.php

@@ -0,0 +1,65 @@
+<?php
+declare (strict_types = 1);
+
+namespace app\admin\model;
+
+use app\admin\common\YouZan;use think\Model;
+
+/**
+ * @mixin \think\Model
+ */
+class OrderOutChild extends Model
+{   /**
+	* @param array $sale 销售单信息
+	* @param string $outCode 发货单信息
+	* @param int $num 发货单数量
+	* @throws \Exception
+	 */
+    static function makeChild(string $outCode=''){
+    	if($outCode=='')throw new \Exception("分单发货单单号不能为空");
+    	$out=self::name("order_out")->where(["outCode"=>$outCode,"is_del"=>0])->findOrEmpty();
+		if(empty($out)) throw new \Exception("发货单信息为找到");
+		if($out['send_status']!=0) throw new \Exception("发货单拆单状态有误");
+		$sale = self::name("sale")->where(["orderCode"=>$out['orderCode'],"is_del"=>0])->findOrEmpty();
+		if(empty($sale)) throw new \Exception("订单信息为找到");
+		if($sale['wsend_num']<$out['send_num']) throw new \Exception("订单待发货数量不足");
+		$num= $out['send_num'];
+		$wsmlist = self::name("good_stock")->alias("a")
+			->leftJoin("warehouse_info b","a.wsm_code=b.wsm_code")
+			->field("a.id,a.usable_stock,a.wait_out_stock,b.wsm_code,b.supplierNo,b.supplierName")
+			->where(["spuCode"=>$sale['good_code'],"a.is_del"=>0])->findOrEmpty();
+		if($wsmlist['usable_stock']<$num) return false;
+		$outinfo = self::name("order_out")->where(["outCode"=>$outCode,"is_del"=>0])->findOrEmpty();
+		if(empty($outinfo))throw new \Exception("发货单信息未找到");
+		$child=[
+			"outChildCode"=>makeNo("TCD"),
+			"outCode"=>$outCode,
+			"orderCode"=>$sale['orderCode'],
+			"companyNo"=>$sale['companyNo'],
+			"companyName"=>$sale['companyName'],
+			"supplierNo"=>$sale['supplierNo'],
+			"supplierName"=>$sale['supplierName'],
+			"cutomer_code"=>$sale['cutomer_code'],
+			"spuCode"=>$sale['good_code'],
+			"skuCode"=>$sale['skuCode'],
+			"good_name"=>$sale['good_name'],
+			"order_type"=>$sale['order_type'],
+			"order_source"=>$sale['order_source'],
+			"total_num"=>$num,
+			"num"=>$num,
+			"wsm_code"=>$wsmlist['wsm_code'],
+			"apply_id"=>$outinfo['apply_id'],
+			"apply_name"=>$outinfo['apply_name'],
+			"addrid"=>$outinfo['addrid'],
+			"addtime"=>date("Y-m-d H:i:s"),
+			"updatetime"=>date("Y-m-d H:i:s")
+		];
+		$childout=self::insert($child);
+		if($childout==false)throw new \Exception("分单失败");
+		$outup=self::name("order_out")->where(["outCode"=>$outCode,"is_del"=>0])->update(["send_status"=>1,"status"=>1,"updatetime"=>date("Y-m-d H:i:s")]);
+		if($outup==false)throw new \Exception("发货单信息更新失败");
+		$bnadd = GoodStockInfo::ChildAddBn($child['outChildCode'],$wsmlist['id']);
+		if($bnadd==false)throw new \Exception("库存更新失败");
+		return true;
+    }
+}

+ 56 - 74
app/command/ImportOrderFromCHandleData.php

@@ -7,7 +7,7 @@ use app\admin\model\ActionLog;
 use app\admin\model\GoodLog;
 use app\admin\model\GoodStockInfo;
 use app\admin\model\OrderImportFromC as OIFCModel;
-use app\admin\model\ProcessOrder;
+use app\admin\model\OrderOutChild;use app\admin\model\ProcessOrder;
 use app\admin\model\Test1;
 use think\console\Command;
 use think\console\Input;
@@ -127,15 +127,15 @@ class ImportOrderFromCHandleData extends Command
 //				            if($stock_num <  $good_num){
 //				              throw new Exception('bn库存数量不足');
 //				            }
-                    $stock_num = Db::name("good_stock")->alias("a")
-                        ->leftJoin("warehouse_info b", "a.wsm_code=b.wsm_code")
-                        ->leftJoin("good_stock_info c", "a.id=c.stockid and c.balance_num>0")
-                        ->where(["spuCode" => $spuCode, "a.is_del" => 0, "a.status" => 1, "b.wsm_type" => 5, "b.companyNo" => $supplierNo])
-                        ->sum('balance_num');
-                    if ($stock_num < $good_num) {
-                        throw new Exception('bn库存数量不足');
-                    }
-                    $origin_price = 0;
+//			            $stock_num = Db::name("good_stock")->alias("a")
+//			            ->leftJoin("warehouse_info b", "a.wsm_code=b.wsm_code")
+//			            ->leftJoin("good_stock_info c", "a.id=c.stockid and c.balance_num>0")
+//			            ->where(["spuCode" => $spuCode, "a.is_del" => 0, "a.status" => 1, "b.wsm_type" => 5, "b.companyNo" =>$supplierNo])
+//			            ->sum('balance_num');
+			            if($ct['usable_stock'] < $good_num){
+			               throw new Exception('商品库存数量不足');
+			            }
+                        $origin_price = 0;
 
                 } else {
 
@@ -314,69 +314,40 @@ class ImportOrderFromCHandleData extends Command
 
                     } else {
                         //库存品
-//                            $bol = $this->RelaCgd(['orderCode' => $orderCode, "good_num" => $good_num, "spuCode" => $spuCode, "companyNo" => $supplierNo, 'order_type' => $order_type, 'order_source' => $order_source,'good_createrid'=>$ct['createrid'],'good_creater'=>$ct['creater']], $standing_book_data);
-//                            if ($bol == false) throw new Exception('库存商品关联采购单失败');
-                        $stockid = Db::name("good_stock")->alias("a")
-                            ->leftJoin("warehouse_info b", "a.wsm_code=b.wsm_code")
-                            ->where(["spuCode" => $spuCode, "a.is_del" => 0, "a.status" => 1, "b.wsm_type" => 5, "b.companyNo" => $supplierNo])
-                            ->column('a.id');
-                        $stockinfo = GoodStockInfo::OrderBn($orderCode, $stockid, intval($good_num));
-                        if ($stockinfo == false) {
-                            throw new Exception('库存商品更新库存失败');
-                        }
-
-//                            if (isset($stock)) {
-//                                $stck = [
-//                                    "usable_stock" => $stock['usable_stock'] - $good_num,
-//                                    "wait_out_stock" => $stock['wait_out_stock'] + $good_num,
-//                                    "updatetime" => date("Y-m-d H:i:s")
-//                                ];
-//                                $upad = Db::name("good_stock")
-//                                    ->where($stock)
-//                                    ->update($stck);
-//                                if ($upad == false) throw new Exception('库存商品更新库存失败');
-//								 $stockinfo =GoodStockInfo::OrderBn($orderCode,$stock['id'],$good_num);
-//		                        if($stockinfo==false){
-//		                                throw new Exception('bn库存商品更新库存失败');
-//		                        }
-//                                //商品变动日志表,good_log_code字段存储采购单号
-//                                $good_data[] = ['good_log_code' => $orderCode, "stock_id" => $datainfo, "type" => 2, 'stock' => $good_num, "stock_name" => "usable_stock"];
-//                                $good_data[] = ['good_log_code' => $orderCode, "stock_id" => $datainfo, "type" => 1, 'stock' => $good_num, "stock_name" => "wait_out_stock"];
-//                                GoodLog::LogAdd(['id' => $rm, 'nickname' => $ri], $good_data, "XSQRD");
-//                            }
-
-                    }
-                    if ($sendtype == 1) {
-                        $temp = [
-                            'orderCode' => $orderCode,
-                            'contactor' => $extend_data['contactor'],
-                            'mobile' => $extend_data['mobile'],
-                            'addr' => $extend_data['addr'],
-                            'addr_code' => $extend_data['addr_code'],
-                            'customer_code' => $customer_code,
-                            'receipt_quantity' => $extend_data['num'],//收货数量,
-                            'post_fee' => 0,
-                            'is_del' => 0,
-                            'addtime' => date("Y-m-d H:i:s"),
-                            'updatetime' => date("Y-m-d H:i:s"),
-                            'arrive_time' => $arrtime,
-                        ];
-                        $vmp = Db::name('order_addr')->insert($temp, true);
-                        if ($vmp > 0) {
-                            $num = $extend_data['num'];
-                            $outCode = makeNo("DF");
-                            if ($is_stock != 1) {
-                                $order = Db::name("order_num")
-                                    ->where(["orderCode" => $orderCode, "status" => 1])
-                                    ->where([["wsend_num", ">=", 0]])
-//	                                    ->lock(true)
-                                    ->find();
-                                if ($order == false) throw new Exception('未找到可以发货得采购单数据');
-                                $order['wsend_num'] -= $num;
-                                $order['send_num'] += $num;
-                                $or = Db::name("order_num")->save($order);
-                                if ($or == false) throw new Exception('发货地址更新失败');
+	                        $stockUp =[
+		                        "usable_stock"=>$ct['usable_stock']-$good_num,
+		                        "updatetime"=>date("Y-m-d H:i:s"),
+		                        ];
+	                        $update=Db::name("good")->where(["spuCode"=>$ct['spuCode'],"usable_stock"=>$ct['usable_stock']])->update($stockUp);
+                            if($update==false){
+	                             throw new Exception('商品更新可用库存失败');
+	                        }
 
+                        }
+                        if ($sendtype == 1) {
+                            $temp = [
+                                'orderCode' => $orderCode,
+                                'contactor' => $extend_data['contactor'],
+                                'mobile' => $extend_data['mobile'],
+                                'addr' => $extend_data['addr'],
+                                'addr_code' => $extend_data['addr_code'],
+                                'customer_code' => $customer_code,
+                                'receipt_quantity' => $extend_data['num'],//收货数量,
+                                'post_fee' => 0,
+                                'is_del' => 0,
+                                'addtime' => date("Y-m-d H:i:s"),
+                                'updatetime' => date("Y-m-d H:i:s"),
+                                'arrive_time' => $arrtime,
+                            ];
+                            $vmp = Db::name('order_addr')->insert($temp, true);
+                            if ($vmp > 0) {
+                            	 $num = $extend_data['num'];
+                                $outCode = makeNo("DF");
+                            	if($is_stock!=1){
+	                                    $order = Db::name("order_num")
+	                                    ->where(["orderCode" => $orderCode, "status" => 1])
+	                                    ->find();
+	                                if ($order == false) throw new Exception('未找到可以发货得采购单数据');
                                 $tep = [
                                     "cgdNo" => $order['cgdNo'],
                                     "outCode" => $outCode,
@@ -385,8 +356,19 @@ class ImportOrderFromCHandleData extends Command
                                     "addtime" => date("Y-m-d H:i:s"),
                                     "updatetime" => date("Y-m-d H:i:s")
                                 ];
-                                $sen = Db::name("order_send")->save($tep);
-                                if ($sen == false) throw new Exception('发货地址添加创建失败');
+                                $ou = Db::name("order_out")->insertGetId($out);
+                                if ($ou == false) throw new Exception('发货地址添加创建失败');
+                                else {
+                                	OrderOutChild::makeChild($outCode);
+                                	    //修改状态,添加待办
+                                	    if ($is_stock==1){
+                                	    	$roleid = Config('app.wsm_cgder_role');
+		                            $uids = Db::name('user_role')
+		                                ->where('is_del', 0)
+		                                ->whereIn('roleid', $roleid)
+		                                ->column('uid');
+		                            $handle_user_list=implode(',', $uids);
+                                	    }
 
                                 $cgdinfo = Db::name("purchease_order")->where(["cgdNo" => $order['cgdNo']])->find();
                                 if ($cgdinfo == false) throw new Exception('未匹配到采购数据');

+ 30 - 30
app/command/NowReportHandle.php

@@ -591,53 +591,53 @@ class NowReportHandle extends Command
     public function  GetWlb($start,$end){
         $db =Db::connect("mysql3");
         $list =$db->name("cgd_info")
-          ->where(['ShortText1617866362204'=>'客服确认单'])->whereBetweenTime('createdTime',$start,$end)->field(
+          ->where(['cgdSource'=>10,"is_del"=>0])->whereBetweenTime('createdTime',$start,$end)->field(
             "year(createdTime) AS `年`,
 					month(createdTime) AS `月`,
 					dayofmonth(createdTime) AS `日`,
-					ShortText1618270466672 '公司名称',
+					companyName '公司名称',
 					department '业务部门',
 					ownerName '业务人员',
-					ShortText1617866362204 '订单类型',
+					'网络部采购单' '订单类型',
 					'' as '商品类型',
 					'' as '发货编号',
-					Number1618240600907 '本次发货数量',
+					sendNum '本次发货数量',
 					createdTime '本次发货时间',
-					ShortText1617866360004 '确认单编号',
-					ShortText1617861001482 '商品编号',
-					ShortText1617865626160 '一级分类',
-					''as  '二级分类',
-					'' as  '三级分类',
-					 '' as '财务核算编码',
-					 ShortText1617861966146 as '商品名称',
-					 ShortText1617865685744 as '单位',
-					 Number1618240600907 '下单数量',
+					qrdCode '确认单编号',
+					goodNo '商品编号',
+					firstCat '一级分类',
+					secCat as  '二级分类',
+					thirdCat as  '三级分类',
+					 fundCode as '财务核算编码',
+					 goodName as '商品名称',
+					 goodUnit as '单位',
+					 goodNum '下单数量',
 					 '' AS `销售货款`,
-					 ShortText1618315935182 as '采购单单号',
+					 sequenceNo as '采购单单号',
 					 ownerName '采购员',
-		            Number1617865804813 AS `采购裸价`,
-		            Number1617865807879 AS `加标费`,
-		            Number1617865810822 AS `包装费`,
-		            Number1617865813284 AS `证书费`,
-		            Number1617865816181 AS `开模费`,
-		            number1618240204358 AS `工艺费`,
-		            number1618240287778 AS `物流费`,
-		            Number1617865818517 AS `成本合计`,
-		            Number1618240685904 AS `采购货款`,
-		            ShortText1617865688485 AS `采购税点`, 
-				    ShortText1620399144946 AS `供应商名称`,
+		            barePrice AS `采购裸价`,
+		            markPrice AS `加标费`,
+		            packPrice AS `包装费`,
+		            certPrice AS `证书费`,
+		            openPrice AS `开模费`,
+		            costPrice AS `工艺费`,
+		            deliveryPrice AS `物流费`,
+		            goodPrice AS `成本合计`,
+		            totalPrice AS `采购货款`,
+		            tax AS `采购税点`, 
+				    supplierName AS `供应商名称`,
 					'否'as '是否库存品',
-		            '' as '发货方式',
+		            '包邮' as '发货方式',
 		            '' AS `退货编号`,
-					'' AS `退货数量`,
-					'' as '退货金额',
+					thNum AS `退货数量`,
+					th_fee as '退货金额',
 					'' as '售前退货数量',
 					'' as '售前退货金额'
                     ")->cursor();
         $data=[];
         foreach($list as $value){
-            $value['销售货款'] = $db->name("qrd_info")->where(['sequenceNo'=>$value['确认单编号']])->value('Number1618248813613','');
-            $value['财务核算编码'] = $db->name("cat")->where(['cat_name'=>$value['一级分类']])->value('fund_code','');
+            $value['销售货款'] = $db->name("qrd_info")->where(['sequenceNo'=>$value['确认单编号']])->value('totalPrice','');
+//            $value['财务核算编码'] = $db->name("cat")->where(['cat_name'=>$value['一级分类']])->value('fund_code','');
             yield $data[] = $value;
         }
         return $data;

+ 29 - 24
app/command/handleYzOrderData.php

@@ -5,7 +5,7 @@ namespace app\command;
 use app\admin\common\User;
 use app\admin\model\ActionLog;
 use app\admin\model\GoodLog;
-use app\admin\model\GoodStockInfo;use app\admin\model\ProcessOrder;
+use app\admin\model\GoodStockInfo;use app\admin\model\OrderOutChild;use app\admin\model\ProcessOrder;
 use think\console\Command;
 use think\console\Input;
 use think\console\Output;
@@ -146,15 +146,18 @@ class handleYzOrderData extends Command
 //                        ->find();
 //
 //                    if ($stock == false || $stock['usable_stock'] < $good_num) throw new Exception('库存数量不足');
-                    $stock_num = Db::name("good_stock")
-                        ->alias("a")
-                        ->leftJoin("warehouse_info b", "a.wsm_code=b.wsm_code")
-                        ->leftJoin("good_stock_info c", "a.id=c.stockid and c.balance_num>0")
-                        ->where(["spuCode" => $spuCode, "a.is_del" => 0, "a.status" => 1, "b.wsm_type" => 5, "b.companyNo" => $supplierNo])
-                        ->sum('balance_num');
-                    if ($stock_num < $good_num) {
-                        throw new Exception('bn库存数量不足');
-                    }
+//                    $stock_num = Db::name("good_stock")
+//                        ->alias("a")
+//                        ->leftJoin("warehouse_info b", "a.wsm_code=b.wsm_code")
+//                        ->leftJoin("good_stock_info c", "a.id=c.stockid and c.balance_num>0")
+//                        ->where(["spuCode" => $spuCode, "a.is_del" => 0, "a.status" => 1, "b.wsm_type" => 5, "b.companyNo" => $supplierNo])
+//                        ->sum('balance_num');
+//                    if ($stock_num < $good_num) {
+//                        throw new Exception('bn库存数量不足');
+//                    }
+                    if($ct['usable_stock'] < $good_num){
+			               throw new Exception('商品库存数量不足');
+			            }
                     $origin_price = 0;
 
                 } else {
@@ -429,13 +432,21 @@ class handleYzOrderData extends Command
 //                            $good_data[] = ['good_log_code' => $orderCode, "stock_id" => $datainfo, "type" => 1, 'stock' => $good_num, "stock_name" => "wait_out_stock"];
 //                            GoodLog::LogAdd(['id' => $rm, 'nickname' => $ri], $good_data, "XSQRD");
 //                        }
-                        $stockid = Db::name("good_stock")->alias("a")
-                            ->leftJoin("warehouse_info b", "a.wsm_code=b.wsm_code")
-                            ->where(["spuCode" => $spuCode, "a.is_del" => 0, "a.status" => 1, "b.wsm_type" => 5, "b.companyNo" => $supplierNo])
-                            ->column('a.id');
-                        $stockinfo = GoodStockInfo::OrderBn($orderCode, $stockid, intval($good_num));
-                        if ($stockinfo == false)  throw new Exception('库存商品更新库存失败');
-
+//                        $stockid = Db::name("good_stock")->alias("a")
+//                            ->leftJoin("warehouse_info b", "a.wsm_code=b.wsm_code")
+//                            ->where(["spuCode" => $spuCode, "a.is_del" => 0, "a.status" => 1, "b.wsm_type" => 5, "b.companyNo" => $supplierNo])
+//                            ->column('a.id');
+//                        $stockinfo = GoodStockInfo::OrderBn($orderCode, $stockid, intval($good_num));
+//                        if ($stockinfo == false)  throw new Exception('库存商品更新库存失败');
+					 //库存品
+	                        $stockUp =[
+		                        "usable_stock"=>$ct['usable_stock']-$good_num,
+		                        "updatetime"=>date("Y-m-d H:i:s"),
+		                        ];
+	                        $update=Db::name("good")->where(["spuCode"=>$ct['spuCode'],"usable_stock"=>$ct['usable_stock']])->update($stockUp);
+                            if($update==false){
+	                             throw new Exception('商品更新可用库存失败');
+	                        }
 
                     }
                     if ($sendtype == 1) {
@@ -479,15 +490,8 @@ class handleYzOrderData extends Command
                         	if ($is_stock != 1) {
 	                            $order = Db::name("order_num")
 	                                ->where(["orderCode" => $orderCode, "status" => 1])
-	                                ->where([["wsend_num", ">=", 0]])
-	                                ->lock(true)
 	                                ->find();
 	                            if ($order == false) throw new Exception('未找到可以发货得采购单数据');
-	                            $order['wsend_num'] -= $num;
-	                            $order['send_num'] += $num;
-	                            $or = Db::name("order_num")->save($order);
-	                            if ($or == false) throw new Exception('发货地址更新失败');
-
 	                            $tep = [
 	                                "cgdNo" => $order['cgdNo'],
 	                                "outCode" => $outCode,
@@ -524,6 +528,7 @@ class handleYzOrderData extends Command
                             $ou = Db::name("order_out")->insertGetId($out);
                             if ($ou == false) throw new Exception('发货地址添加创建失败');
                             else {
+                            	OrderOutChild::makeChild($outCode);
                                 //修改状态,添加待办
                                 ActionLog::logAdd(['id' => $rm, 'nickname' => $ri], [
                                     "order_code" => $outCode,//出库单号