cqpCow 1 год назад
Родитель
Сommit
0a5c2f6e88

+ 7 - 8
app/Service/ConstructionService.php

@@ -406,7 +406,7 @@ class ConstructionService extends Service
         if(empty($data['depart_id'])) $data['depart_id'] = $this->getDepart($user);
         $data['top_depart_id'] = $user['depart_map'][$data['depart_id']] ?? 0;
 
-        $product_submit = $product_save = [];
+        $product_submit = [];
         foreach ($data['product'] as $value){
             if(empty($value['number'])) return [false,'产品数量不能为空'];
             $res = $this->checkNumber($value['number']);
@@ -418,12 +418,10 @@ class ConstructionService extends Service
                 $product_submit[$value['product_id']] = $value['number'];
             }
         }
-        $order_number = "";
-        if(! $is_add) $order_number = $data['order_number'];
-        list($status,$msg) = (new ProductInventoryService())->compareStock(array_keys($product_submit), [
-            'order_number' => $order_number,
-            'product' => $product_submit
-        ]);
+
+        $id = $data['id'] ?? 0;
+        $product_save = $this->getSaveDetail($id);
+        list($status,$msg) = (new ProductInventoryService())->compareStock(array_keys($product_submit), $product_submit, $product_save);
         if(! $status) return [false, $msg];
 
         if($is_add){
@@ -431,7 +429,6 @@ class ConstructionService extends Service
             if($bool) return [false,'工单编号已存在,请重新获取'];
         }else{
             if(empty($data['id'])) return [false,'ID不能为空'];
-            $product_save = $this->getSaveDetail($data['id']);
         }
 
         return [true, [$product_submit, $product_save]];
@@ -499,6 +496,8 @@ class ConstructionService extends Service
      */
     public function getSaveDetail($id){
         $product_save = [];
+        if(empty($id)) return $product_save;
+
         $sub = ConstructionProductInfo::where('construction_id',$id)
             ->where('del_time',0)
             ->get()->toArray();

+ 6 - 6
app/Service/InvoiceOrderService.php

@@ -271,7 +271,7 @@ class InvoiceOrderService extends Service
             if(empty($sales)) return [false,'合同不存在或已被删除'];
             if($sales['sales_order_type'] != SalesOrder::Order_type_two) return [false,'非快递件合同'];
         }
-        $product_submit = $product_save = [];
+        $product_submit = [];
         foreach ($data['product'] as $value){
             if(empty($value['number'])) return [false,'产品数量不能为空'];
             $res = $this->checkNumber($value['number']);
@@ -283,10 +283,9 @@ class InvoiceOrderService extends Service
                 $product_submit[$value['product_id']] = $value['number'];
             }
         }
-        list($status,$msg) = (new ProductInventoryService())->compareStock(array_keys($product_submit), [
-            'order_number' => $data['order_number'] ?? "",
-            'product' => $product_submit
-        ]);
+        $order_number = $data['order_number'] ?? '';
+        $product_save = $this->getSaveDetail($order_number);
+        list($status,$msg) = (new ProductInventoryService())->compareStock(array_keys($product_submit), $product_submit, $product_save);
         if(! $status) return [false, $msg];
 
         if($is_check){
@@ -295,7 +294,6 @@ class InvoiceOrderService extends Service
             $data['order_number'] = $order_number;
         }else{
             if($this->isEmpty($data,'order_number')) return [false,'发货单号不能为空!'];
-            $product_save = $this->getSaveDetail($data['order_number']);
         }
 
         return [true, [$product_submit, $product_save]];
@@ -308,6 +306,8 @@ class InvoiceOrderService extends Service
      */
     public function getSaveDetail($order_number){
         $product_save = [];
+        if(empty($order_number)) return $product_save;
+
         $sub = InvoiceOrderInfo::where('order_number',$order_number)
             ->where('del_time',0)
             ->get()->toArray();

+ 11 - 46
app/Service/ProductInventoryService.php

@@ -114,16 +114,8 @@ class ProductInventoryService extends Service
     }
 
     //比较库存
-    public static function compareStock($product_id = [],$data){
-        if(empty($product_id) || empty($data['product'])) return [false,'比较参数不能为空'];
-
-        $pro = Product::whereIn('id',$product_id)
-            ->pluck('title','id')
-            ->toArray();
-        $setting_map = Setting::where('setting_name','lock_number')
-            ->pluck('setting_value','setting_name')
-            ->toArray();
-        $product_map = $data['product'];
+    public static function compareStock($product_id = [],$product_submit = [], $product_save = []){
+        if(empty($product_id) || empty($product_submit)) return [false,'比较参数不能为空'];
 
         //库存
         $array = ProductInventory::whereIn('product_id',$product_id)
@@ -132,54 +124,27 @@ class ProductInventoryService extends Service
             ->get()->toArray();
         if(empty($array)) return [false,'未找到产品库存数据'];
 
-        //已保存单据的产品数量
-        $map = [];
-        if(! empty($setting_map['lock_number']) && ! empty($data['order_number'])){
-            if(strpos($data['order_number'],InvoiceOrder::prefix) !== false){
-                $id = InvoiceOrder::where('order_number',$data['order_number'])
-                    ->where('del_time',0)
-                    ->value('id');
-                $model = new InvoiceOrderInfo();
-            }else{
-                foreach (Construction::$prefix as $value){
-                    if(strpos($data['order_number'],$value) !== false){
-                        $model = new ConstructionProductInfo();
-                    }
-                }
-                $id = Construction::where('order_number',$data['order_number'])
-                    ->where('del_time',0)
-                    ->value('id');
-            }
-            if(! empty($model) && ! empty($id)){
-                $save = $model->where('del_time',0)
-                    ->where('id',$id)
-                    ->select('product_id','number')
-                    ->get()->toArray();
-                foreach ($save as $value){
-                    $key = $value['product_id'];
-                    if(isset($map[$key])){
-                        $map[$key] += $value['number'];
-                    }else{
-                        $map[$key] = $value['number'];
-                    }
-                }
-            }
-        }
+        $pro = Product::whereIn('id',$product_id)
+            ->pluck('title','id')
+            ->toArray();
+        $setting_map = Setting::where('setting_name','lock_number')
+            ->pluck('setting_value','setting_name')
+            ->toArray();
 
         //比较
         foreach ($array as $value){
             $pro_tmp = $pro[$value['product_id']] ?? '';
             if(! $pro_tmp) return [false,'异常产品数据'];
-            if(! isset($product_map[$value['product_id']])) return [false,'产品:' . $pro_tmp.'库存不足'];
+            if(! isset($product_submit[$value['product_id']])) return [false,'产品:' . $pro_tmp.'库存不足'];
 
             if(! empty($setting_map['lock_number'])){//真实库存
-                $tmp = $map[$value['product_id']] ?? 0;//已保存数量
+                $tmp = $product_save[$value['product_id']] ?? 0;//已保存数量
                 $tmp_lock = ($value['lock_number'] > 0 ? $value['lock_number'] : 0) - $tmp;
                 $number = $value['number'] - ($tmp_lock > 0 ? $tmp_lock : 0);
             }else{
                 $number = $value['number'];
             }
-            if($product_map[$value['product_id']] > $number) return [false,$pro_tmp . '数量不足,当前数量:'. $number];
+            if($product_submit[$value['product_id']] > $number) return [false,$pro_tmp . '数量不足,当前数量:'. $number];
         }
 
         return [true,''];