cqpCow 1 år sedan
förälder
incheckning
63b47ad2c4
2 ändrade filer med 66 tillägg och 5 borttagningar
  1. 1 1
      app/Service/ProductService.php
  2. 65 4
      app/Service/ReturnExchangeOrderService.php

+ 1 - 1
app/Service/ProductService.php

@@ -495,7 +495,7 @@ class ProductService extends Service
                         ->orWhereIn('depart_id', $depart_id);
                 })->select('product_id')->get()
                 ->toArray();
-            $model->whereIn('id',array_column($product_id,'product_id'));
+            $model->whereIn('id',array_unique(array_column($product_id,'product_id')));
         }
         if(! empty($data['title'])) $model->where('title', 'LIKE', '%'.$data['title'].'%');
         if(isset($data['state'])) $model->where('state', $data['state']);

+ 65 - 4
app/Service/ReturnExchangeOrderService.php

@@ -109,6 +109,9 @@ class ReturnExchangeOrderService extends Service
                 ReturnExchangeOrderRange::insert($insert);
             }
 
+            //锁定库存
+            ProductInventoryService::changeLockNumber($msg[0],$msg[1]);
+
             DB::commit();
         }catch (\Throwable $e){
             DB::rollBack();
@@ -208,6 +211,9 @@ class ReturnExchangeOrderService extends Service
                 ReturnExchangeOrderRange::insert($insert);
             }
 
+            //锁定库存
+            ProductInventoryService::changeLockNumber($msg[0]);
+
             DB::commit();
         }catch (\Throwable $e){
             DB::rollBack();
@@ -250,6 +256,7 @@ class ReturnExchangeOrderService extends Service
             ->where('state','>',ReturnExchangeOrder::State_zero)->exists();
         if($bool) return [false,'退换货单已确认,删除失败!'];
 
+        $product_save_minus = $this->getSaveDetailMinus($data['id']);
         try{
             DB::beginTransaction();
             ReturnExchangeOrder::where('id',$data['id'])->update([
@@ -262,6 +269,9 @@ class ReturnExchangeOrderService extends Service
                 'del_time'=>time()
             ]);
 
+            //锁定库存
+            ProductInventoryService::changeLockNumber([], $product_save_minus);
+
             DB::commit();
         }catch (\Throwable $e){
             DB::rollBack();
@@ -275,6 +285,20 @@ class ReturnExchangeOrderService extends Service
         $model = ReturnExchangeOrder::where('del_time',0)
             ->select('id','order_number','sales_order_id','difference_amount','state','crt_time','crt_id','mark')
             ->orderby('id', 'desc');
+
+        //getALL传入后无视设置范围
+        if(empty($data['getAll']) && $user['id'] != Employee::SPECIAL_ADMIN) {
+            $user_id = $user['id'];
+            $depart_id = $user['depart_range'];
+            $return_exchange_id = ReturnExchangeOrderRange::where('del_time',0)
+                ->where(function ($query) use($user_id, $depart_id) {
+                    $query->where('employee_id',$user_id)
+                        ->orWhereIn('depart_id', $depart_id);
+                })->select('return_exchange_id')->get()
+                ->toArray();
+            $model->whereIn('id',array_unique(array_column($return_exchange_id,'return_exchange_id')));
+        }
+
         if(! empty($data['order_number'])) $model->where('order_number', 'LIKE', '%'.$data['order_number'].'%');
         if(isset($data['state'])) $model->where('state',$data['state']);
         if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])) {
@@ -313,18 +337,30 @@ class ReturnExchangeOrderService extends Service
         $sale = SalesOrder::where('del_time',0)->where('id',$data['sales_order_id'])->first();
         if(empty($sale)) return [false,'合同不存在或已被删除'];
         if($sale['state'] < SalesOrder::State_two) return [false,'合同未施工,不能进行退换货操作'];
-
+        if(empty($data['product_one'])) return [false,'退货产品不能为空'];
         foreach ($data['product_one'] as $value){
-            if(empty($value['number'])) return [false,'产品数量不能为空'];
+            if(empty($value['number'])) return [false,'退货产品数量不能为空'];
             $res = $this->checkNumber($value['number']);
             if(! $res) return [false,'请输入正确的退货产品数量'];
         }
+        $product_submit_minus = $product_save_minus = [];
         if($data['model_type'] == ReturnExchangeOrder::Model_type_two){
+            if(empty($data['product_two'])) return [false,'换货产品不能为空'];
             foreach ($data['product_two'] as $value){
-                if(empty($value['number'])) return [false,'产品数量不能为空'];
+                if(empty($value['number'])) return [false,'换货产品数量不能为空'];
                 $res = $this->checkNumber($value['number']);
                 if(! $res) return [false,'请输入正确的换货产品数量'];
+                if(isset($product_submit_minus[$value['product_id']])){
+                    $product_submit_minus[$value['product_id']] += $value['number'];
+                }else{
+                    $product_submit_minus[$value['product_id']] = $value['number'];
+                }
             }
+
+            $id = $data['id'] ?? '';
+            $product_save_minus = $this->getSaveDetailMinus($id);
+            list($status,$msg) = (new ProductInventoryService())->compareStock(array_keys($product_submit_minus), $product_submit_minus, $product_save_minus);
+            if(! $status) return [false, $msg];
         }
 
         //所属部门 以及  顶级部门
@@ -337,9 +373,34 @@ class ReturnExchangeOrderService extends Service
             if(empty($order_number)) return [false,'退换货单号生成失败!'];
             $data['order_number'] = $order_number;
         }else{
+            if($this->isEmpty($data,'id')) return [false,'退换货单ID不能为空!'];
             if($this->isEmpty($data,'order_number')) return [false,'退换货单号不能为空!'];
         }
 
-        return [true, ''];
+        return [true, [$product_submit_minus,$product_save_minus]];
+    }
+
+    /**
+     * 获取保存详情
+     * @param $order_number
+     * @return array
+     */
+    public function getSaveDetailMinus($id = 0){
+        $product_save = [];
+        if(empty($id)) return $product_save;
+
+        $sub = ReturnExchangeOrderProductInfo::where('return_exchange_id',$id)
+            ->where('type',ReturnExchangeOrderProductInfo::type_two)
+            ->where('del_time',0)
+            ->get()->toArray();
+        foreach ($sub as $value){
+            if(isset($product_save[$value['product_id']])){
+                $product_save[$value['product_id']] += $value['number'];
+            }else{
+                $product_save[$value['product_id']] = $value['number'];
+            }
+        }
+
+        return $product_save;
     }
 }