cqp hai 2 meses
pai
achega
81bb2dee8f

+ 2 - 2
app/Http/Controllers/Api/TestController.php

@@ -121,9 +121,9 @@ die;
 
 
 
-    public function test1(){
+    public function test1(){dd(222);
         $service = new CheckService();
-        $service->recordReturnExchangeOrder([],ReturnExchangeOrder::where('order_number',"TH202502161134307965")->first()->toArray());
+        $service->recordReturnExchangeOrder([],ReturnExchangeOrder::where('order_number',"TH202503071106328078")->first()->toArray());
 dd(1);
         $data = OutBoundOrder::where('del_time',0)->select('data_id')->get()->toArray();
         $data = array_column($data,'data_id');

+ 13 - 0
app/Model/PurchaseOrderInfoForOutboundInfo.php

@@ -0,0 +1,13 @@
+<?php
+
+namespace App\Model;
+
+use Illuminate\Database\Eloquent\Model;
+
+class PurchaseOrderInfoForOutboundInfo extends Model
+{
+    protected $table = "purchase_order_info_for_outbound_info"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+}

+ 78 - 3
app/Service/CheckService.php

@@ -25,6 +25,7 @@ use App\Model\ProductInventorySet;
 use App\Model\PurchaseOrder;
 use App\Model\PurchaseOrderInfo;
 use App\Model\PurchaseOrderInfoForOutBound;
+use App\Model\PurchaseOrderInfoForOutboundInfo;
 use App\Model\PurchaseOrderSpecial;
 use App\Model\PurchaseOrderSpecialInfo;
 use App\Model\ReturnExchangeOrder;
@@ -995,26 +996,48 @@ class CheckService extends Service
 //        }
 
         //合同 退货
-        $map = [];
+        $map = $outbound = [];
         if($order['type'] == ReturnExchangeOrder::Order_type){
             //查找 出库数据的产品
             $product = OutBoundOrderInfo::where('del_time',0)
                 ->where('data_id', $order['data_id'])
                 ->where('type', OutBoundOrder::out_type_one)
                 ->whereColumn('number','>','return_number')
-                ->select('id','product_id','number','return_number')
+                ->select('id','product_id','number','return_number','out_bound_id')
                 ->get()->toArray();
 
             foreach($product as $value){
                 $map[$value['product_id']][] = $value;
             }
+
+            //采购占用数量
+            $purchase = PurchaseOrderInfoForOutBound::where('del_time',0)
+                ->whereIn('data_id', array_unique(array_column($product,'out_bound_id')))
+                ->where('type',PurchaseOrderInfoForOutBound::type_one)
+                ->where('from_order_type',PurchaseOrderInfoForOutBound::from_type_zero)
+                ->where('is_use',PurchaseOrderInfoForOutBound::is_use)
+                ->whereColumn('number','>','return_number')
+                ->get()->toArray();
+            foreach ($purchase as $value){
+                $key = $value['data_id'] . $value['product_id'];
+                $num = bcsub($value['number'],$value['return_number'],2);
+                if(isset($outbound[$key])){
+                    $tmp = bcadd($num, $outbound[$key]['number'],2);
+                    $outbound[$key]['number'] = $tmp;
+                }else{
+                    $outbound[$key] = [
+                        'id' => $value['id'],
+                        'number' => $num,
+                    ];
+                }
+            }
         }
 
         $result = ReturnExchangeOrderProductInfo::where('del_time',0)
             ->where('return_exchange_id',$order['id'])
             ->get()->toArray();
         if(empty($result)) return [false,'退换货单产品信息不存在或已被删除'];
-        $insert = $update = $insert2 = [];
+        $insert = $update = $insert2 = $update2 = [];
         $time = time();
         foreach ($result as $value){
             $key = $value['product_id'] . $value['storehouse_id'];
@@ -1055,6 +1078,22 @@ class CheckService extends Service
                                 'number' => $t,
                                 'crt_time' => $time
                             ];
+
+                            $out_key = $out['out_bound_id'] . $value['product_id'];
+                            if(isset($outbound[$out_key])){
+                                $num = $outbound[$out_key]['number'];
+                                $id = $outbound[$out_key]['id'];
+                                if($t > $num){
+                                    $update2_num = $num;
+                                }else{
+                                    $update2_num = $t;
+                                }
+                                if(isset($update2[$id])){
+                                    $update2[$id] = bcadd($update2_num, $update2[$id],2);
+                                }else{
+                                    $update2[$id] = $update2_num;
+                                }
+                            }
                         }
                     }
                 }else{
@@ -1093,6 +1132,24 @@ class CheckService extends Service
                     ->update(['return_number' => $value['return_number']]);
             }
         }
+        if(! empty($update2)){
+            foreach ($update2 as $key => $value){
+                $insert3[] = [
+                    'order_number' => $order['order_number'],
+                    'purchase_order_info_id' => $key,
+                    'number' => $value,
+                    'crt_time' => $time
+                ];
+
+                PurchaseOrderInfoForOutBound::where('id', $key)
+                    ->lockForUpdate()
+                    ->update([
+                        'return_number' => DB::raw('return_number + ('. $value . ')'),
+                    ]);
+            }
+
+            if(! empty($insert3)) PurchaseOrderInfoForOutboundInfo::insert($insert3);
+        }
 
         return [true,''];
     }
@@ -1684,6 +1741,24 @@ class CheckService extends Service
                 ->update(['del_time' => $time]);
         }
 
+        $info = PurchaseOrderInfoForOutboundInfo::where('del_time',0)
+            ->where('order_number',$data['order_number'])
+            ->get()->toArray();
+        if(! empty($info)){
+            foreach ($info as $value){
+                //退换货退合同 合同占用的采购或盘点占用出库数量解放
+                PurchaseOrderInfoForOutBound::where('id',$value['purchase_order_info_id'])
+                    ->lockForUpdate()
+                    ->update([
+                        'return_number' => DB::raw('return_number - ('. $value['number'] . ')'),
+                    ]);
+            }
+            //记录信息标记删除
+            PurchaseOrderInfoForOutboundInfo::where('del_time',0)
+                ->where('order_number',$data['order_number'])
+                ->update(['del_time' => $time]);
+        }
+
         //写入流水
         return [true, ''];
     }

+ 10 - 6
app/Service/InventoryService.php

@@ -450,16 +450,18 @@ class InventoryService extends Service
             ->whereIn('purchase_order_id',array_unique(array_column($purchase_product,'purchase_order_id')))
             ->where('type',PurchaseOrderInfoForOutBound::type_one)
             ->where('from_order_type',PurchaseOrderInfoForOutBound::from_type_one)
-            ->select('purchase_order_id','product_id','number')
+            ->select('purchase_order_id','product_id','number','return_number')
             ->get()->toArray();
         $purchase_product_outbound_map = [];
         foreach ($purchase_product_outbound as $value){
             $key = $value['purchase_order_id'] . $value['product_id'];
+            $tmp = bcsub($value['number'],$value['return_number'],2);
+            if($tmp <= 0) continue;
             if(isset($purchase_product_outbound_map[$key])){
-                $total_number = bcadd($purchase_product_outbound_map[$key], $value['number'],2);
+                $total_number = bcadd($purchase_product_outbound_map[$key], $tmp,2);
                 $purchase_product_outbound_map[$key] = $total_number;
             }else{
-                $purchase_product_outbound_map[$key] = $value['number'];
+                $purchase_product_outbound_map[$key] = $tmp;
             }
         }
 
@@ -521,16 +523,18 @@ class InventoryService extends Service
             ->when(! empty($id), function ($query) use ($id) {
                 return $query->where('data_id', '<>', $id);
             })
-            ->select('purchase_order_id','product_id','number')
+            ->select('purchase_order_id','product_id','number','return_number')
             ->get()->toArray();
         $purchase_product_outbound_map = [];
         foreach ($purchase_product_outbound as $value){
             $key = $value['purchase_order_id'] . $value['product_id'];
+            $tmp = bcsub($value['number'],$value['return_number'],2);
+            if($tmp <= 0) continue;
             if(isset($purchase_product_outbound_map[$key])){
-                $total_number = bcadd($purchase_product_outbound_map[$key], $value['number'],2);
+                $total_number = bcadd($purchase_product_outbound_map[$key], $tmp,2);
                 $purchase_product_outbound_map[$key] = $total_number;
             }else{
-                $purchase_product_outbound_map[$key] = $value['number'];
+                $purchase_product_outbound_map[$key] = $tmp;
             }
         }
 

+ 15 - 9
app/Service/PurchaseOrderService.php

@@ -837,16 +837,18 @@ class PurchaseOrderService extends Service
             ->whereIn('purchase_order_id',array_unique(array_column($purchase_product,'purchase_order_id')))
             ->where('type',PurchaseOrderInfoForOutBound::type_one)
             ->where('from_order_type',PurchaseOrderInfoForOutBound::from_type_zero)
-            ->select('purchase_order_id','product_id','number')
+            ->select('purchase_order_id','product_id','number','return_number')
             ->get()->toArray();
         $purchase_product_outbound_map = [];
         foreach ($purchase_product_outbound as $value){
             $key = $value['purchase_order_id'] . $value['product_id'];
+            $tmp = bcsub($value['number'],$value['return_number'],2);
+            if($tmp <= 0) continue;
             if(isset($purchase_product_outbound_map[$key])){
-                $total_number = bcadd($purchase_product_outbound_map[$key], $value['number'],2);
+                $total_number = bcadd($purchase_product_outbound_map[$key], $tmp,2);
                 $purchase_product_outbound_map[$key] = $total_number;
             }else{
-                $purchase_product_outbound_map[$key] = $value['number'];
+                $purchase_product_outbound_map[$key] = $tmp;
             }
         }
 
@@ -947,16 +949,18 @@ class PurchaseOrderService extends Service
             ->when(! empty($id), function ($query) use ($id) {
                 return $query->where('data_id', '<>', $id);
             })
-            ->select('purchase_order_id','product_id','number')
+            ->select('purchase_order_id','product_id','number','return_number')
             ->get()->toArray();
         $purchase_product_outbound_map = [];
         foreach ($purchase_product_outbound as $value){
             $key = $value['purchase_order_id'] . $value['product_id'];
+            $tmp = bcsub($value['number'],$value['return_number'],2);
+            if($tmp <= 0) continue;
             if(isset($purchase_product_outbound_map[$key])){
-                $total_number = bcadd($purchase_product_outbound_map[$key], $value['number'],2);
+                $total_number = bcadd($purchase_product_outbound_map[$key], $tmp,2);
                 $purchase_product_outbound_map[$key] = $total_number;
             }else{
-                $purchase_product_outbound_map[$key] = $value['number'];
+                $purchase_product_outbound_map[$key] = $tmp;
             }
         }
 
@@ -1057,16 +1061,18 @@ class PurchaseOrderService extends Service
             ->whereIn('purchase_order_id',array_column($purchase_product,'purchase_order_id'))
             ->where('type',PurchaseOrderInfoForOutBound::type_one)
             ->where('from_order_type',PurchaseOrderInfoForOutBound::from_type_zero)
-            ->select('purchase_order_id','product_id','number')
+            ->select('purchase_order_id','product_id','number','return_number')
             ->get()->toArray();
         $purchase_product_outbound_map = [];
         foreach ($purchase_product_outbound as $value){
             $key = $value['purchase_order_id'] . $value['product_id'];
+            $tmp = bcsub($value['number'],$value['return_number'],2);
+            if($tmp <= 0) continue;
             if(isset($purchase_product_outbound_map[$key])){
-                $total_number = bcadd($purchase_product_outbound_map[$key], $value['number'],2);
+                $total_number = bcadd($purchase_product_outbound_map[$key], $tmp,2);
                 $purchase_product_outbound_map[$key] = $total_number;
             }else{
-                $purchase_product_outbound_map[$key] = $value['number'];
+                $purchase_product_outbound_map[$key] = $tmp;
             }
         }