瀏覽代碼

Merge branch 'wugg-dev' of wugg/phpstock into version1.5

wugg 2 年之前
父節點
當前提交
59c3abd3b6

+ 32 - 27
app/admin/controller/After.php

@@ -1960,14 +1960,11 @@ class After extends Base
         $orderCode = makeNo("QR");
 
         if ($is_stock == 1) {
-            $stock = 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])
-                ->field("a.id,a.wait_in_stock,a.usable_stock,a.wait_out_stock")
-                ->find();
-            if ($stock == false || $stock['usable_stock'] < $good_num) return error_show(1003, "库存数量不足");
-			$stock_num =Db::name("good_stock_info")->where(["stockid"=>$stock['id']])->sum('balance_num');
+				$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){
               return error_show(1003, "批次库存数量不足"); //库存不足
             }
@@ -2177,6 +2174,14 @@ class After extends Base
                 if ($is_stock == 0) $this->createCgd($cgd, $standing_book_da);
                 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){
+	                             throw new Exception('库存商品更新库存失败');
+	                        }
 //                    $bol = $this->RelaCgd([
 //                        'orderCode' => $orderCode,
 //                        "good_num" => $good_num,
@@ -2187,25 +2192,25 @@ class After extends Base
 //                        'order_source' => $data['order_source'],
 //                    ], $standing_book_da);
 
-                    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('库存商品更新库存失败'); //库存不足
-                        }
-                        //商品变动日志表,good_log_code字段存储采购单号
-                        $good_data[] = ['good_log_code' => $orderCode, "stock_id" => $stock['id'], "type" => 2, 'stock' => $good_num, "stock_name" => "usable_stock"];
-                        $good_data[] = ['good_log_code' => $orderCode, "stock_id" => $stock['id'], "type" => 1, 'stock' => $good_num, "stock_name" => "wait_out_stock"];
-                        GoodLog::LogAdd($token, $good_data, "XSQRD");
-                    }
+//                    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('库存商品更新库存失败'); //库存不足
+//                        }
+//                        //商品变动日志表,good_log_code字段存储采购单号
+//                        $good_data[] = ['good_log_code' => $orderCode, "stock_id" => $stock['id'], "type" => 2, 'stock' => $good_num, "stock_name" => "usable_stock"];
+//                        $good_data[] = ['good_log_code' => $orderCode, "stock_id" => $stock['id'], "type" => 1, 'stock' => $good_num, "stock_name" => "wait_out_stock"];
+//                        GoodLog::LogAdd($token, $good_data, "XSQRD");
+//                    }
 
                 }
 

+ 3 - 70
app/admin/controller/Reorder.php

@@ -701,20 +701,6 @@ class Reorder extends Base
                                         Db::rollback();
                                         return error_show(1004, "地址发货单更新失败");
                                     }
-//                                    $ordersend = Db::name("order_send")->where(["outCode" => $value['outCode']])->find();
-//                                    if ($ordersend['send_num'] < $value['return_num']) {
-//                                        Db::rollback();
-//                                        return error_show(1004, "发货单发货数量不足");
-//                                    }
-//                                    $ordersend['send_num'] -= $value['return_num'];
-//                                    $ordersend['status'] = $ordersend['send_num'] <= 0 ? 0 : 1;
-//                                    $ordersend['updatetime'] = date("Y-m-d H:i:s");
-//                                    $sendip = Db::name("order_send")->save($ordersend);
-//                                    if ($sendip == false) {
-//                                        Db::rollback();
-//                                        return error_show(1004, "发货单更新失败");
-//                                    }
-
                                 }
                             }
                         }
@@ -741,63 +727,9 @@ class Reorder extends Base
                             Db::rollback();
                             return error_show(1005, '销售单订单更新失败');
                         }
-//                        $ordernum = Db::name("order_num")->where(['orderCode' => $info['orderCode']])->find();
-//                        if ($ordernum == false) {
-//                            Db::rollback();
-//                            return error_show(1005, '未找到关联采购单');
-//                        }
-//                        $ordernum['send_num'] -= $info['num'];
-//                        $orderup = Db::name("order_num")->save($ordernum);
-//                        if ($orderup == false) {
-//                            Db::rollback();
-//                            return error_show(1005, '关联数据更新失败');
-//                        }
-//                        $cgd = Db::name("purchease_order")->where(["cgdNo" => $ordernum['cgdNo'], "is_del" => 0])->find();
-//                        if ($cgd == false) {
-//                            Db::rollback();
-//                            return error_show(1005, '未找到采购单数据');
-//                        }
-//                        $cgd['th_fee'] += round($cgd['good_price'] * $info['num'], 2);
-//                        $cgd['th_num'] += $info['num'];
-//                        if($cgd['th_num']==$cgd['send_num']&& $cgd['wsend_num']==0){
-//                            $cgd['status']=4;
-//                        }
-//                        $cgd['updatetime'] = date("Y-m-d H:i:s");
-//                        $cgdup = Db::name("purchease_order")->save($cgd);
-//                        if ($cgdup == false) {
-//                            Db::rollback();
-//                            return error_show(1005, '采购单数据更新失败');
-//                        }
-//                        if ($cgd['bkcode'] != "") {
-//                            $bk = Db::name("purchease_order")->where(["bkcode" => $cgd['bkcode'], "order_type" => 1,"order_source"=>0, "is_del" => 0])
-//                                ->find();
-//                            if ($bk == false) {
-//                                Db::rollback();
-//                                return error_show(1005, '未找到备库单数据');
-//                            }
-//                            $orderbk = Db::name("order_bk")->where(['cgdNo' => $bk['cgdNo'], "is_del" => 0])->find();
-//                            if ($orderbk == false) {
-//                                Db::rollback();
-//                                return error_show(1005, '备库单未完全入库');
-//                            }
-//                            $merge_num = Db::name("purchease_order")->where(["bkcode" => $bk['bkcode'], "order_type"
-//                                => 1, "is_del" => 0])->where("order_source","<>",0)
-//                                ->field("sum(send_num)-sum(th_num) as num")->find();
-//
-//                            $orderbk['balance_num'] = $orderbk['total_num'] - $merge_num['num'];
-//                            $orderbk['merge_num'] = $merge_num['num'];
-//                            $orderbk['updatetime'] = date("Y-m-d H:i:s");
-//                            $orderbkup = Db::name("order_bk")->save($orderbk);
-//                            if ($orderbkup == false) {
-//                                Db::rollback();
-//                                return error_show(1005, '备库单库存数据释放失败');
-//                            }
-//                        }
-
-
-                    } else {
 
-                        if ($info['is_th'] == 1) {
+                    }else{
+						if ($info['is_th'] == 1){
                             $orderinfo['th_num'] += $info['num'];
                             if($orderinfo['th_num']==$orderinfo['send_num']&& $orderinfo['wsend_num']==0){
                                 $orderinfo['status']=3;
@@ -1005,6 +937,7 @@ class Reorder extends Base
                         			 Db::rollback();
                                     return error_show(1005, '可售商品Bn库存数入库失败');
                         		}
+                        		$ve['updatetime']=date("Y-m-d H:i:s");
 								$up=Db::name("sale_info")->save($ve);
                         		if($up==false){
                         			 Db::rollback();

+ 73 - 82
app/admin/controller/Sale.php

@@ -6,7 +6,7 @@ use app\abutment\model\SupplierRelationUser;
 use app\abutment\model\SupplierUser;
 use app\admin\model\GoodLog;
 use app\admin\model\GoodStockInfo;use app\admin\model\ProcessOrder;
-use Exception;
+use app\admin\model\SaleInfo;use Exception;
 use think\App;
 use think\facade\Cache;
 use think\facade\Config;
@@ -95,7 +95,7 @@ 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")
+            ->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 == false || $stock['usable_stock'] < $good_num) {
@@ -203,11 +203,6 @@ class Sale extends Base
         }
         $remark = isset($this->post['remark']) && $this->post['remark'] !== "" ? trim($this->post['remark']) : "";
         $proof_id = isset($this->post['proof_id']) && $this->post['proof_id'] !== "" ? intval($this->post['proof_id']) : 0;
-
-//        $apply_id = GetUserInfo($token);
-//        if (empty($apply_id) || $apply_id['code'] != 0) {
-//            return error_show(1002, "申请人数据不存在");
-//        }
         $rm = $this->uid;
         $ri = $this->uname;
         Db::startTrans();
@@ -301,36 +296,15 @@ class Sale extends Base
                     }
                 } else {
                     $outstatus = 1;
-//                    $bol = $this->RelaCgd([
-//                        'orderCode' => $orderCode,
-//                        "good_num" => $good_num,
-//                        "spuCode" => $spuCode,
-//                        "companyNo" => $supplierNo,
-//                        "cost_fee" => isset($good['cost_fee']) ? $good['cost_fee'] : 0,
-//                        'order_type' => $data['order_type'],
-//                        'order_source' => $data['order_source'],
-//                    ], $standing_book_da);
-//                    if ($bol == false) {
-//                        Db::rollback();
-//                        return error_show(1002, "库存商品关联采购单失败");
-//                    }
-
-                       $stockid= Db::name("good_stock")->alias("a")
+                    $stockid= 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")
 		            ->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);
+                    $stockinfo =GoodStockInfo::OrderBn($orderCode,$stockid,$good_num);
                         if($stockinfo==false){
                         	 Db::rollback();
                             return error_show(1002, "更新库存失败");
                         }
-                        //商品变动日志表,good_log_code字段存储采购单号
-//                        $good_data[] = ['good_log_code' => $orderCode, "stock_id" => $stock['id'], "type" => 2, 'stock' => $good_num, "stock_name" => "usable_stock"];
-//                        $good_data[] = ['good_log_code' => $orderCode, "stock_id" => $stock['id'], "type" => 1, 'stock' => $good_num, "stock_name" => "wait_out_stock"];
-//                        GoodLog::LogAdd($this->post['token'], $good_data, "XSQRD");
-
-
                 }
 
                 if ($sendtype == 1) {
@@ -749,16 +723,16 @@ class Sale extends Base
                             $status = 1;
                         }
                     }else{
-                    	$stockid=Db::name("sale_info")->where(["orderCode"=>$orderCode])->value("stockid","");
-                    	if($stockid==''){
-                    		Db::rollback();
-                    		return error_show(1005,"未找到对应库存仓库");
-                    	}
-                    	$cgdinfo = Db::name("good_stock")->where(["id"=>$stockid])->findOrEmpty();
-                    	if(empty($cgdinfo)){
-                    		Db::rollback();
-                    		return error_show(1005,"未找到对应库存仓库");
-                    	}
+//                    	$stockid=Db::name("sale_info")->where(["orderCode"=>$orderCode])->value("stockid","");
+//                    	if($stockid==''){
+//                    		Db::rollback();
+//                    		return error_show(1005,"未找到对应库存仓库");
+//                    	}
+//                    	$cgdinfo = Db::name("good_stock")->where(["id"=>$stockid])->findOrEmpty();
+//                    	if(empty($cgdinfo)){
+//                    		Db::rollback();
+//                    		return error_show(1005,"未找到对应库存仓库");
+//                    	}
                     }
 
                     $out = [
@@ -774,7 +748,7 @@ class Sale extends Base
                         "send_num" => $num,
                         "check_num" => 0,
                         "error_num" => 1,
-                        "wsm_code" => $cgdinfo['wsm_code'],
+                        "wsm_code" => $cgdinfo['wsm_code']??'',
                         "order_type" => $etid['order_type'],
                         "status" => $status,
                         "addtime" => date("Y-m-d H:i:s"),
@@ -1879,38 +1853,40 @@ class Sale extends Base
                 }
             } else {
 
-                $stock = Db::name("good_stock")->alias("a")->leftJoin("warehouse_info b", "a.wsm_code=b.wsm_code")->where
-                (["spuCode" => $good['spuCode'], "a.is_del" => 0, "a.status" => 1, "b.wsm_type" => 5, "b.companyNo"
-                => $data['companyNo']])->field("a.id,a.usable_stock,a.wait_out_stock,a.wsm_code")->find();
-                if ($stock == false || $stock['usable_stock'] < $data['good_num']) {
-                    return 1; //库存不足
-                }
-			$stock_num =Db::name("good_stock_info")->where(["stockid"=>$stock['id']])->sum('balance_num');
-            if($stock_num <  $data['good_num']){
-              return 1; //库存不足
-            }
+//                $stock = Db::name("good_stock")->alias("a")->leftJoin("warehouse_info b", "a.wsm_code=b.wsm_code")->where
+//                (["spuCode" => $good['spuCode'], "a.is_del" => 0, "a.status" => 1, "b.wsm_type" => 5, "b.companyNo"
+//                => $data['companyNo']])->field("a.id,a.usable_stock,a.wait_out_stock,a.wsm_code")->find();
+//                if ($stock == false || $stock['usable_stock'] < $data['good_num']) {
+//                    return 1; //库存不足
+//                }
+//			$stock_num =Db::name("good_stock_info")->where(["stockid"=>$stock['id']])->sum('balance_num');
+//            if($stock_num <  $data['good_num']){
+//              return 1; //库存不足
+//            }
+            $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_name>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;
+	            }
 //                $bol = $this->RelaCgd(['orderCode' => $orderCode, "good_num" => $data['good_num'], "spuCode" => $good['spuCode'], "companyNo" => $data['companyNo'], "cost_fee" => $goodlass['cost_fee'], 'order_type' => $cgd['order_type'], 'order_source' => $cgd['order_source']], $standing_book_data);
 //                if ($bol == false) {
 //                    return 3;//关联采购失败
 //                }
-                if (isset($stock)) {
-                    $stck = [
-                        "usable_stock" => $stock['usable_stock'] - $data['good_num'],
-                        "wait_out_stock" => $stock['wait_out_stock'] + $data['good_num'],
-                        "updatetime" => date("Y-m-d H:i:s")
-                    ];
-                    $upad = Db::name("good_stock")->where($stock)->update($stck);
-                    if ($upad == false) {
-                        return 2; //库存更新失败
-                    }
-                     $stockinfo =GoodStockInfo::OrderBn($orderCode,$stock['id'],$data['good_num']);
+                if (!empty($stockid)) {
+
+                     $stockinfo =GoodStockInfo::OrderBn($orderCode,$stockid,$data['good_num']);
                         if($stockinfo==false){
                         	      return 2; //库存不足
                         }
                     //商品变动日志表,good_log_code字段存储采购单号
-                    $good_data[] = ['good_log_code' => $orderCode, "stock_id" => $stock['id'], "type" => 2, 'stock' => $data['good_num'], "stock_name" => "usable_stock"];
-                    $good_data[] = ['good_log_code' => $orderCode, "stock_id" => $stock['id'], "type" => 1, 'stock' => $data['good_num'], "stock_name" => "wait_out_stock"];
-                    GoodLog::LogAdd($this->post['token'], $good_data, "XSQRD");
+//                    $good_data[] = ['good_log_code' => $orderCode, "stock_id" => $stock['id'], "type" => 2, 'stock' => $data['good_num'], "stock_name" => "usable_stock"];
+//                    $good_data[] = ['good_log_code' => $orderCode, "stock_id" => $stock['id'], "type" => 1, 'stock' => $data['good_num'], "stock_name" => "wait_out_stock"];
+//                    GoodLog::LogAdd($this->post['token'], $good_data, "XSQRD");
                 }
 
             }
@@ -1995,7 +1971,7 @@ class Sale extends Base
                             "send_num" => $num,
                             "check_num" => 0,
                             "error_num" => 0,
-                            "wsm_code" => $good['is_stock'] == 1 ?$stock['wsm_code']:$cgdinfo['wsm_code'],
+                            "wsm_code" => $good['is_stock'] == 1 ?'':$cgdinfo['wsm_code'],
                             "order_type" => 1,
                             "status" => $good['is_stock'] == 1 ? 1 : 0,
                             "addtime" => date("Y-m-d H:i:s"),
@@ -3573,16 +3549,16 @@ class Sale extends Base
 	                    return error_show(1002, "发货地址添加创建失败");
 	                }
                 }else{
-					$stockid=Db::name("sale_info")->where(["orderCode"=>$orderCode])->value("stockid","");
-                    	if($stockid==''){
-                    		Db::rollback();
-                    		return error_show(1005,"未找到对应库存仓库");
-                    	}
-                    	$cgd = Db::name("good_stock")->where(["id"=>$stockid])->findOrEmpty();
-                    	if(empty($cgd)){
-                    		Db::rollback();
-                    		return error_show(1005,"未找到对应库存仓库");
-                    	}
+//					$stockid=Db::name("sale_info")->where(["orderCode"=>$orderCode])->value("stockid","");
+//                    	if($stockid==''){
+//                    		Db::rollback();
+//                    		return error_show(1005,"未找到对应库存仓库");
+//                    	}
+//                    	$cgd = Db::name("good_stock")->where(["id"=>$stockid])->findOrEmpty();
+//                    	if(empty($cgd)){
+//                    		Db::rollback();
+//                    		return error_show(1005,"未找到对应库存仓库");
+//                    	}
                 }
 
                 $data = [
@@ -3787,7 +3763,8 @@ class Sale extends Base
                     'holder_id' => $einfo['apply_id']
                 ]);
 
-                $stokc = Db::name("good_stock")->where(['spuCode' => $einfo['good_code'], "wsm_code" => $outinfo['wsm_code'], "is_del" => 0])->find();
+                if($einfo["order_type"]!=1){
+                	$stokc = Db::name("good_stock")->where(['spuCode' => $einfo['good_code'], "wsm_code" => $outinfo['wsm_code'], "is_del" => 0])->find();
                 if ($stokc == false) {
                     Db::rollback();
                     return error_show(1002, "未找到库存数据");
@@ -3806,7 +3783,6 @@ class Sale extends Base
                     Db::rollback();
                     return error_show(1002, "库存更新失败");
                 }
-                if($einfo["order_type"]!=1){
                 	$outsend =Db::name("order_send")->where(["outCode"=> $outCode])->findOrEmpty();
                 	if(empty($outsend)){
                 			Db::rollback();
@@ -3825,11 +3801,18 @@ class Sale extends Base
 	                      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{
+					$bnup =SaleInfo::SendStock($outinfo['orderCode'],$outinfo['send_num']);
+	                 if($bnup==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");
                 Cache::store("redis")->handler()->lPush("SENDOUT", $outCode);
                 Db::commit();
 
@@ -4511,7 +4494,10 @@ class Sale extends Base
                         'holder_id' => $sale_infos[$order_out_infos[$value['outCode']]['orderCode']]['apply_id']
                     ]);
 
-                    //【库存】
+
+						 if($sale_infos[$order_out_infos[$value['outCode']]['orderCode']]["order_type"]!=1){
+						 	   //【库存】
+
                     $stock = Db::name("good_stock")
                         ->field('id,wait_out_stock,usable_stock,total_stock,updatetime')
                         ->where([
@@ -4531,7 +4517,6 @@ class Sale extends Base
                             ->where('id', $stock['id'])
                             ->update($stock);
                         if ($stock_rs == false) throw new Exception($value['outCode'] . '库存更新失败');
-						 if($sale_infos[$order_out_infos[$value['outCode']]['orderCode']]["order_type"]!=1){
 		                    $outsend =Db::name("order_send")->where(["outCode"=> $value['outCode']])->findOrEmpty();
 		                    if(empty($outsend)){
 		                            Db::rollback();
@@ -4559,6 +4544,12 @@ class Sale extends Base
                             'stock_name' => 'wait_out_stock'
                         ];
 
+                    }else{
+					$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库存数更新失败");
+	                 }
                     }
 
 

+ 10 - 9
app/admin/model/GoodStockInfo.php

@@ -55,12 +55,12 @@ class GoodStockInfo extends Model
 	* @throws \think\db\exception\DbException
 	* @throws \think\db\exception\ModelNotFoundException
 	*/
-	static function SaleBn(int $stockid,int $num){
-		$arr = self::where([["stockid","=",$stockid],["balance_num",">",0]])->select()->toArray();
+	static function SaleBn($stockid,int $num){
+		$arr = self::where([["balance_num",">",0]])->where(["stockid"=>$stockid])->select()->toArray();
 		if(empty($arr)) throw new Exception("库存批次数量不足","1006");
 		$list=[];
-		$stockid = array_column($arr,"stockid");
-		$stock=self::name("good_stock")->where([["id","in",$stockid]])->column("id,usable_stock,wait_out_stock",'id');
+		$stockid = array_unique(array_column($arr,"stockid"));
+		$stock=self::name("good_stock")->where(["id"=>$stockid])->column("id,usable_stock,wait_out_stock",'id');
 		foreach ($arr as $item) {
 			if($num<=0) break;
 			$temp=[];
@@ -71,13 +71,13 @@ class GoodStockInfo extends Model
 		    	$update['used_num']= $item['used_num']+$item['balance_num'];
 		    	$num-=$item['balance_num'];
 		    	$update['updatetime'] =date("Y-m-d H:i:s");
-		    	$temp=["bnCode"=>$item['bnCode'],"num"=>$item['balance_num'],"origin_price"=>$item["origin_price"]];
+		    	$temp=["stockid"=>$item['stockid'],"bnCode"=>$item['bnCode'],"num"=>$item['balance_num'],"origin_price"=>$item["origin_price"]];
 		    	$stockup=["usable_stock"=>$stock[$item['stockid']]['usable_stock']-$item['balance_num'],"wait_out_stock"=>$stock[$item['stockid']]['wait_out_stock']+$item['balance_num'],"updatetime"=>date("Y-m-d H:i:s")];
 		    }else{
 				$update['balance_num']=$item['balance_num']-$num;
 		    	$update['used_num']=$item['used_num']+$num;
 		    	$update['updatetime'] =date("Y-m-d H:i:s");
-		    	$temp=["bnCode"=>$item['bnCode'],"num"=>$num,"origin_price"=>$item["origin_price"]];
+		    	$temp=["stockid"=>$item['stockid'],"bnCode"=>$item['bnCode'],"num"=>$num,"origin_price"=>$item["origin_price"]];
 		    	$stockup=["usable_stock"=>$stock[$item['stockid']]['usable_stock']-$num,"wait_out_stock"=>$stock[$item['stockid']]['wait_out_stock']+$num,"updatetime"=>date("Y-m-d H:i:s")];
 				$num=0;
 		    }
@@ -105,7 +105,7 @@ class GoodStockInfo extends Model
     }
 	/**
 	* @param string $orderCode
-	* @param int $stockid
+	* @param int|array $stockid
 	* @param int $num
 	 * @return int
 	* @throws \think\Exception
@@ -113,7 +113,7 @@ class GoodStockInfo extends Model
 	* @throws \think\db\exception\DbException
 	* @throws \think\db\exception\ModelNotFoundException
 	 */
-	static function OrderBn(string $orderCode,int $stockid,int $num){
+	static function OrderBn(string $orderCode, $stockid,int $num){
         $bnArr=self::SaleBn($stockid,$num);
         if(empty($bnArr)) throw new Exception("未找到Bn库存数据",1006);
         $ordBn=[];
@@ -121,8 +121,9 @@ class GoodStockInfo extends Model
 	        $saleBn=[
 	        "orderCode"=>$orderCode,
 	        "bnCode"=>$value['bnCode'],
-	        "stockid"=>$stockid,
+	        "stockid"=>$value['stockid'],
 	        "num"=>$value['num'],
+	        "send_num"=>$value['num'],
 	        "origin_price"=>$value['origin_price'],
 	        "addtime"=>date("Y-m-d H:i:s"),
 	        "updatetime"=>date("Y-m-d H:i:s"),

+ 41 - 0
app/admin/model/SaleInfo.php

@@ -0,0 +1,41 @@
+<?php
+declare (strict_types = 1);
+
+namespace app\admin\model;
+
+use think\Model;
+
+/**
+ * @mixin \think\Model
+ */
+class SaleInfo extends Model
+{
+		/**
+		* @param string $orderCode
+		* @param int $sendNum
+		 * @return bool
+		* @throws \think\db\exception\DataNotFoundException
+		* @throws \think\db\exception\DbException
+		* @throws \think\db\exception\ModelNotFoundException
+	 */
+    static function SendStock(string $orderCode,int $sendNum){
+			$arr=self::where([["orderCode","=",$orderCode],["send_num",">",0]])->select()->toArray();
+			if(empty($arr))throw new \Error("未找到可用的批次库存数据",1006);
+			$stockid = array_unique(array_column($arr,"stockid"));
+				$stock=self::name("good_stock")->where(["id"=>$stockid])->column("id,usable_stock,wait_out_stock",'id');
+			foreach ($arr as $value){
+				$temp=["send_num"=>0,"updatetime"=>date("Y-m-d H:i:s")];
+				if($sendNum >$value['send_num']){
+					$sendNum-=$value['send_num'];
+					$stockup=["total_stock"=>$stock[$value['stockid']]['wait_out_stock']+$stock[$value['stockid']]['usable_stock'],"wait_out_stock"=>$stock[$value['stockid']]['wait_out_stock']-$value['send_num'],"updatetime"=>date("Y-m-d H:i:s")];
+				}else{
+				$temp['send_num'] =$value['send_num']-$sendNum;
+				$stockup=["total_stock"=>$stock[$value['stockid']]['wait_out_stock']+$stock[$value['stockid']]['usable_stock'],"wait_out_stock"=>$stock[$value['stockid']]['wait_out_stock']-$sendNum,"updatetime"=>date("Y-m-d H:i:s")];
+				$sendNum=0;
+				}
+				self::update($temp,$value);
+				self::name("good_stock")->update($stockup,$stock[$value['stockid']]);
+			}
+			return true;
+    }
+}

+ 49 - 35
app/command/ImportOrderFromCHandleData.php

@@ -115,18 +115,26 @@ class ImportOrderFromCHandleData extends Command
                     $is_activity = empty($extend_data['activity_name']) ? 0 : 1;
 
                     if ($goodinfo['is_stock'] == 1) {
-                        $stock = 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])
-                            ->field("a.id,a.usable_stock,a.wait_out_stock,a.wsm_code")
-                            ->find();
-
-                        if ($stock == false || $stock['usable_stock'] < $good_num) throw new Exception('库存数量不足');
-							$stock_num =Db::name("good_stock_info")->where(["stockid"=>$stock['id']])->sum('balance_num');
-				            if($stock_num <  $good_num){
-				              throw new Exception('bn库存数量不足');
-				            }
+//                        $stock = 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])
+//                            ->field("a.id,a.usable_stock,a.wait_out_stock,a.wsm_code")
+//                            ->find();
+//
+//                        if ($stock == false || $stock['usable_stock'] < $good_num) throw new Exception('库存数量不足');
+//							$stock_num =Db::name("good_stock_info")->where(["stockid"=>$stock['id']])->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库存数量不足');
+			            }
                         $origin_price = 0;
 
                     } else {
@@ -305,27 +313,34 @@ class ImportOrderFromCHandleData extends Command
                             //库存品
 //                            $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('库存商品关联采购单失败');
-
-
-                            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");
-                            }
+						 $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){
+	                             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) {
@@ -388,7 +403,7 @@ class ImportOrderFromCHandleData extends Command
                                     "send_num" => $num,
                                     "check_num" => 0,
                                     "error_num" => 0,
-                                    "wsm_code" =>$is_stock==1?$stock['wsm_code']: $cgdinfo['wsm_code'],
+                                    "wsm_code" =>$is_stock==1?'': $cgdinfo['wsm_code'],
                                     "order_type" => $order_type,
                                     "status" => $is_stock == 1 ? 1 : 0,
                                     "addtime" => date("Y-m-d H:i:s"),
@@ -516,7 +531,6 @@ class ImportOrderFromCHandleData extends Command
         } else {
             $wsm_code = $wsm['wsm_code'];
         }
-
         $cg = [
             "cgdNo" => $cgdCode,
             "bkcode" => "",

+ 45 - 30
app/command/handleYzOrderData.php

@@ -132,15 +132,22 @@ class handleYzOrderData extends Command
 //                $is_activity = empty($extend_data['activity_name']) ? 0 : 1;
 
                 if ($is_stock == 1) {
-                    $stock = 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])
-                        ->field("a.id,a.usable_stock,a.wait_out_stock")
-                        ->find();
-
-                    if ($stock == false || $stock['usable_stock'] < $good_num) throw new Exception('库存数量不足');
-
+//                    $stock = 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])
+//                        ->field("a.id,a.usable_stock,a.wait_out_stock")
+//                        ->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库存数量不足');
+			            }
                     $origin_price = 0;
 
                 } else {
@@ -366,26 +373,34 @@ class handleYzOrderData extends Command
 //                        $bol = $this->RelaCgd($cgd, $standing_book_data);
 //                        if ($bol == 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){
-		                             Db::rollback();
-		                            return error_show(1002, "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 (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){
+//		                             Db::rollback();
+//		                            return error_show(1002, "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");
+//                        }
+	                    $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){
+	                            throw new Exception('库存商品更新库存失败');
+	                        }
 
                     }
                     if ($sendtype == 1) {
@@ -455,7 +470,7 @@ class handleYzOrderData extends Command
                                 "send_num" => $num,
                                 "check_num" => 0,
                                 "error_num" => 0,
-                                "wsm_code" => $is_stock==1? $stock['wsm_code']:$cgdinfo['wsm_code'],
+                                "wsm_code" => $is_stock==1? '':$cgdinfo['wsm_code'],
                                 "order_type" => $order_type,
                                 "status" => $is_stock == 1 ? 1 : 0,
                                 "addtime" => date("Y-m-d H:i:s"),