wugg 2 роки тому
батько
коміт
5327181c61

+ 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,

+ 71 - 144
app/admin/controller/Sale.php

@@ -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,13 @@ 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, "未找到可以发货得采购单数据");
+	                            	throw new Exception("未找到可以发货得采购单数据");
 	                            }
 	                            $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 +352,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,8 +381,8 @@ 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 {
                                 //修改状态,添加待办
                                 ActionLog::logAdd(['id'=>$rm,'nickname'=>$ri], [
@@ -450,10 +438,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 +451,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 +486,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 +584,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 +606,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 +614,7 @@ class Sale extends Base
                 return true;
             }
         } else {
-            return false;
+            throw new Exception("采购单生成失败");
         }
 
     }
@@ -655,8 +642,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 +680,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,8 +741,8 @@ 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 {
                         //修改状态,添加待办
                         ActionLog::logAdd(['id'=>$rm,'nickname'=>$ri], [
@@ -888,11 +818,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) {

+ 29 - 0
app/admin/model/GoodStockInfo.php

@@ -237,6 +237,35 @@ class GoodStockInfo extends Model
 		}
 		return $result;
 	}
+	/**
+	* @param string $childCode 分单编号
+	* @param int $stockid 库存id
+	 */
+	static function ChildAddBn(string $childCode='',int $stockid=0){
+		$data=self::where(["stockid"=>$stockid,"bnCode"=>$bn])->findOrEmpty()->toArray();
+		if(empty($data)){
+			$data=[
+				"stockid"=>$stockid,
+				"bnCode"=>$bn,
+				"total_num"=>$num,
+				"used_num"=>0,
+				"balance_num"=>$num,
+				"origin_price"=>$origin_price,
+				"addtime"=>date("Y-m-d H:i:s"),
+				"updatetime"=>date("Y-m-d H:i:s")
+				];
+			$result=self::insert($data);
+		}else{
+			$total_num = $data["balance_num"]+$num;
+			if($total_num> $data["total_num"]) throw new Exception("批次入库数量超过总数",1006);
+			$temp=[];
+			$temp["balance_num"]=$total_num;
+			$temp["used_num"]=$data["used_num"]-$num;
+			$temp["updatetime"]=date("Y-m-d H:i:s");
+			$result=self::update($temp,$data)->getNumRows();
+		}
 
+		return $result;
+	}
 
 }