cqp 7 달 전
부모
커밋
0dbaad0f4b

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

@@ -7,11 +7,14 @@ use App\Model\BoxDetail;
 use App\Model\Depart;
 use App\Model\InOutRecord;
 use App\Model\Inventory;
+use App\Model\OutBoundOrder;
 use App\Model\Product;
 use App\Model\ProductInventory;
 use App\Model\ProductPriceDetail;
 use App\Model\PurchaseOrderInfoForOutBound;
+use App\Model\ReturnExchangeOrder;
 use App\Service\Box\BoxHookService;
+use App\Service\CheckService;
 use App\Service\EmployeeService;
 use App\Service\MeasureService;
 use App\Service\OaService;
@@ -34,7 +37,7 @@ class TestController extends BaseController
 
     }
 
-    public function aa(){
+    public function aa(){$this->test1();
 //        $array = (new SalesOrderService())->salesOrderPdf(['id' => 26604],['id'=>1,'head'=>['id' =>2]]);
 //        return view('pdf.salesOrder',['order' => $array]);
         $send_data[] = [
@@ -118,7 +121,21 @@ die;
 
 
 
-
+    public function test1(){
+        $service = new CheckService();
+        $service->recordReturnExchangeOrder([],ReturnExchangeOrder::where('order_number',"TH202502161134307965")->first()->toArray());
+dd(1);
+        $data = OutBoundOrder::where('del_time',0)->select('data_id')->get()->toArray();
+        $data = array_column($data,'data_id');
+        $data = ReturnExchangeOrder::where('del_time',0)
+            ->whereIn('data_id',$data)
+            ->where('type',ReturnExchangeOrder::Order_type)
+            ->get()->toArray();
+        dd($data);
+        foreach ($data as $value){
+        }
+        dd(1);
+    }
     public function clear(){
         $in_record = InOutRecord::select('top_depart_id')
             ->groupBy('top_depart_id')

+ 13 - 0
app/Model/ReturnExchangeOrderForOutboundInfo.php

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

+ 29 - 1
app/Service/CheckService.php

@@ -28,6 +28,7 @@ use App\Model\PurchaseOrderInfoForOutBound;
 use App\Model\PurchaseOrderSpecial;
 use App\Model\PurchaseOrderSpecialInfo;
 use App\Model\ReturnExchangeOrder;
+use App\Model\ReturnExchangeOrderForOutboundInfo;
 use App\Model\ReturnExchangeOrderProductInfo;
 use App\Model\SalesOrder;
 use App\Model\SalesOrderInfo;
@@ -1013,7 +1014,7 @@ class CheckService extends Service
             ->where('return_exchange_id',$order['id'])
             ->get()->toArray();
         if(empty($result)) return [false,'退换货单产品信息不存在或已被删除'];
-        $insert = $update =[];
+        $insert = $update = $insert2 = [];
         $time = time();
         foreach ($result as $value){
             $key = $value['product_id'] . $value['storehouse_id'];
@@ -1047,6 +1048,13 @@ class CheckService extends Service
                                 'id' => $out['id'],
                                 'return_number' => bcadd($out['return_number'], $t,2),
                             ];
+
+                            $insert2[] = [
+                                'order_number' => $order['order_number'],
+                                'out_bound_order_info_id' => $out['id'],
+                                'number' => $t,
+                                'crt_time' => $time
+                            ];
                         }
                     }
                 }else{
@@ -1077,6 +1085,8 @@ class CheckService extends Service
         $bool = InOutRecord::insert($insert);
         if(! $bool) return [false,'流水写入失败'];
 
+        if(! empty($insert2)) ReturnExchangeOrderForOutboundInfo::insert($insert2);
+
         if(! empty($update)){
             foreach ($update as $value){
                 OutBoundOrderInfo::where('id', $value['id'])
@@ -1656,6 +1666,24 @@ class CheckService extends Service
         $bool = InOutRecord::insert($result);
         if(! $bool) return [false, '流水写入失败'];
 
+        $info = ReturnExchangeOrderForOutboundInfo::where('del_time',0)
+            ->where('order_number',$data['order_number'])
+            ->get()->toArray();
+        if(! empty($info)){
+            foreach ($info as $value){
+                //出库单占用出库数量解放
+                OutBoundOrderInfo::where('id',$value['out_bound_order_info_id'])
+                    ->lockForUpdate()
+                    ->update([
+                        'return_number' => DB::raw('return_number - ('. $value['number'] . ')'),
+                    ]);
+            }
+            //记录信息标记删除
+            ReturnExchangeOrderForOutboundInfo::where('del_time',0)
+                ->where('order_number',$data['order_number'])
+                ->update(['del_time' => $time]);
+        }
+
         //写入流水
         return [true, ''];
     }

+ 27 - 2
app/Service/OperationLogService.php

@@ -11,6 +11,8 @@ use App\Model\FollowUpRecordFile;
 use App\Model\OperationLog;
 use App\Model\OperationLogDetail;
 use App\Model\OrderOperation;
+use App\Model\OutBoundOrder;
+use App\Model\ReturnExchangeOrder;
 use App\Model\SalesOrder;
 use App\Model\SalesOrderInfo;
 use App\Model\SysMenu;
@@ -85,9 +87,33 @@ class OperationLogService extends Service
             $tmp = $detail_data_list[$v['id']] ?? [];
             $v['data'] = $tmp;
         }
+
+        $out = [];
+        $sales_order = isset($data['sales_order']) && $data['sales_order'] ? 1 : 0;
+        if(! empty($sales_order)){
+            $id = SalesOrder::where('order_number', $data['order_number'])->value('id');
+            $out = OutBoundOrder::where('del_time',0)
+                ->where('type',OutBoundOrder::out_type_one)
+                ->where('data_id',$id)
+                ->select('order_number')
+                ->get()->toArray();
+            $out = array_column($out,'order_number');
+
+            $out2 = ReturnExchangeOrder::where('del_time',0)
+                ->where('type', ReturnExchangeOrder::Order_type)
+                ->where('data_id',$id)
+                ->select('order_number')
+                ->get()->toArray();
+            $out2 = array_column($out2,'order_number');
+            $out = array_merge_recursive($out,$out2);
+        }
+
         //按钮类功能的操作日志
         $log_list2 = OrderOperation::where('del_time',0)
             ->where('order_number',$data['order_number'])
+            ->when(! empty($out), function ($query) use ($out) {
+                return $query->OrWhereIn('order_number',$out);
+            })
             ->select('order_number','msg','user_id','crt_time')
             ->get()->toArray();
         foreach ($log_list2 as $key => $value){
@@ -138,8 +164,7 @@ class OperationLogService extends Service
         }
         $list_final = array_merge($list_final, $log_list3);
 
-        if(isset($data['sales_order'])){
-            $id = SalesOrder::where('order_number', $data['order_number'])->value('id');
+        if(! empty($sales_order)){
             $detail = SalesOrderInfo::where('del_time',0)
                 ->where('sales_order_id', $id)
                 ->whereIn('type',[SalesOrderInfo::type_seven,SalesOrderInfo::type_eight])

+ 74 - 21
app/Service/OutBoundOrderService.php

@@ -459,14 +459,17 @@ class OutBoundOrderService extends Service
             ->when(! empty($out_bound_id), function ($query) use ($out_bound_id) {
                 return $query->where('out_bound_id', '<>', $out_bound_id);
             })
-            ->select('product_id', 'number', 'final_amount')
+            ->select('product_id', 'number', 'final_amount','return_number')
             ->get()->toArray();
         foreach ($save as $value){
             if(isset($product_map[$value['product_id']])){
-                $number = bcadd($value['number'], $product_map[$value['product_id']],2);
-                $product_map[$value['product_id']] = $number;
+                $number = bcadd($value['number'], $product_map[$value['product_id']]['number'],2);
+                $return_number = bcadd($value['return_number'], $product_map[$value['product_id']]['return_number'],2);
+                $product_map[$value['product_id']]['number'] = $number;
+                $product_map[$value['product_id']]['return_number'] = $return_number;
             }else{
-                $product_map[$value['product_id']] = $value['number'];
+                $product_map[$value['product_id']]['number'] = $value['number'];
+                $product_map[$value['product_id']]['return_number'] = $value['return_number'];
             }
         }
 
@@ -493,30 +496,68 @@ class OutBoundOrderService extends Service
         }
 
         foreach ($product as $value){
-            //合同出库产品
-            $p1 = $product_map[$value['product_id']] ?? 0;
+            //合同出库产品明细
+            $p1 = $product_map[$value['product_id']] ?? [];
+            //合同出库产品数量
+            $p1_number = $p1['number'] ?? 0;
+            //合同出库后退货产品数量
+            $p1_return_number = $p1['return_number'] ?? 0;
+            //出库数量 - 退货数量 = 已出数量
+            $p_re = bcsub($p1_number,$p1_return_number,2);
+
             //合同退货产品
             $p2 = $product_map2[$value['product_id']] ?? 0;
-            $number = bcsub(bcsub($value['number'], $p1,2), $p2,2);
-
-            if($p1 > 0) {
-                $state = 2;
-                $state_title = "已出库";
+            $p2_re = bcsub($p2,$p1_return_number,2);
+            //合同 - 已出 - 退货 = 剩余能出
+            $number = bcsub(bcsub($value['number'], $p_re,2), $p2_re,2);
+
+            // 1 2 不能出 0 能  0 黄色 1 红色 2灰色
+            if($p_re > 0) {
+                if($number <= 0){
+                    $state = 2;
+                    $state_title = "已出库";
+                }else{
+                    $state = 0;
+                    $state_title = "未完全出库";
+                }
             }else{
-                if($p2 > 0){
-                    $state_title = "已退货";
+                if($number <= 0){
                     $state = 1;
+                    $state_title = "已退货";
                 }else{
-                    $state_title = "未出库";
                     $state = 0;
+                    $state_title = "未出库";
                 }
             }
 
+//            if($p1_number > 0){
+//                if($p1_return_number > 0) {
+//                    $state_title = "出库后退货";
+//                    $state = 0;
+//                }else{
+//                    $state = 2;
+//                    $state_title = "已出库";
+//                }
+//            } else{
+//                if($p2 > 0){
+//                    if($p1_return_number > 0) {
+//                        $state_title = "出库后退货";
+//                        $state = 0;
+//                    }else{
+//                        $state_title = "已退货";
+//                        $state = 1;
+//                    }
+//                }else{
+//                    $state_title = "未出库";
+//                    $state = 0;
+//                }
+//            }
+
             $tmp = $map[$value['product_id']] ?? [];
 
             $return[] = [
                 'number' => $number, //可出数量
-                'out_number' => $p1, //已出库数量
+                'out_number' => $p_re, //已出库数量
                 'return_number' => $p2, //已退货数量
                 'state' => $state,
                 'state_title' => $state_title,
@@ -564,14 +605,17 @@ class OutBoundOrderService extends Service
             ->when(! empty($out_bound_id), function ($query) use ($out_bound_id) {
                 return $query->where('out_bound_id', '<>', $out_bound_id);
             })
-            ->select('product_id', 'number', 'final_amount')
+            ->select('product_id', 'number', 'final_amount','return_number')
             ->get()->toArray();
         foreach ($save as $value){
             if(isset($product_map[$value['product_id']])){
-                $number = bcadd($value['number'], $product_map[$value['product_id']],2);
-                $product_map[$value['product_id']] = $number;
+                $number = bcadd($value['number'], $product_map[$value['product_id']]['number'],2);
+                $return_number = bcadd($value['return_number'], $product_map[$value['product_id']]['return_number'],2);
+                $product_map[$value['product_id']]['number'] = $number;
+                $product_map[$value['product_id']]['return_number'] = $return_number;
             }else{
-                $product_map[$value['product_id']] = $value['number'];
+                $product_map[$value['product_id']]['number'] = $value['number'];
+                $product_map[$value['product_id']]['return_number'] = $value['return_number'];
             }
         }
 
@@ -598,9 +642,18 @@ class OutBoundOrderService extends Service
         }
 
         foreach ($product as $value){
-            $p1 = $product_map[$value['product_id']] ?? 0;
+            $p1 = $product_map[$value['product_id']] ?? [];
+            //合同出库产品数量
+            $p1_number = $p1['number'] ?? 0;
+            //合同出库后退货产品数量
+            $p1_return_number = $p1['return_number'] ?? 0;
+            //可再出数量
+            $p_re = bcsub($p1_number,$p1_return_number,2);
+
             $p2 = $product_map2[$value['product_id']] ?? 0;
-            $number = bcsub(bcsub($value['number'], $p1,2), $p2,2);
+            $p2_re = bcsub($p2,$p1_return_number,2);
+            $number = bcsub(bcsub($value['number'], $p_re,2), $p2_re,2);
+
             if($number <= 0) continue;
 
             $tmp = $map[$value['product_id']] ?? [];