chenqp 8 kuukautta sitten
vanhempi
commit
546b02cfe8
2 muutettua tiedostoa jossa 103 lisäystä ja 105 poistoa
  1. 75 85
      app/Service/CheckService.php
  2. 28 20
      app/Service/SalesOrderService.php

+ 75 - 85
app/Service/CheckService.php

@@ -798,39 +798,64 @@ class CheckService extends Service
 //            if($sales_order_type == SalesOrder::Order_type_two) return [true, self::minus_one];
 //        }
 
+        //合同 退货
+        $construction_pro = [];
+        if($order['type'] == ReturnExchangeOrder::Order_type){
+            //查找合同下  已经下施工的产品
+            $construction_id = Construction::where('del_time',0)
+                ->where('sales_order_id', $order['data_id'])
+                ->selcet('id')
+                ->get()->toArray();
+            $construction_id = array_column($construction_id,'id');
+            $product = ConstructionProductInfo::where('del_time',0)
+                ->whereIn('construction_id',$construction_id)
+                ->select('product_id','number')
+                ->get()->toArray();
+            foreach ($product as $value){
+                if(isset($construction_pro[$value['product_id']])){
+                    $construction_pro[$value['product_id']] += $value['number'];
+                }else{
+                    $construction_pro[$value['product_id']] = $value['number'];
+                }
+            }
+        }
+
         $result = ReturnExchangeOrderProductInfo::where('del_time',0)
             ->where('return_exchange_id',$order['id'])
             ->get()->toArray();
         if(empty($result)) return [false,'退换货单产品信息不存在或已被删除'];
-        $insert = $insert2 = [];
+        $insert = [];
         $time = time();
         foreach ($result as $value){
             $key = $value['product_id'] . $value['storehouse_id'];
             $prefix = ReturnExchangeOrder::$prefix[$value['return_or_exchange']] ?? '';
             if($value['return_or_exchange'] == ReturnExchangeOrderProductInfo::type_one){
                 //退货
-                if(isset($insert[$key])){
-                    $insert[$key]['number'] += $value['number'];
+                if($order['type'] == ReturnExchangeOrder::Order_type){
+                    //合同
+                    $c_number = $construction_pro[$value['product_id']] ?? 0;
+                    if($c_number == 0) {
+                        //未下施工 这个退货不需要加回来  不需要流水
+                        continue;
+                    }else{
+                        if($c_number >= $value['number']) {
+                            //加回来退货的数据
+                            $number = $value['number'];
+                        }else{
+                            //加回来施工的数量
+                            $number = $c_number;
+                        }
+                    }
                 }else{
-                    $insert[$key] = [
-                        'product_id' => $value['product_id'],
-                        'number' => $value['number'],
-                        'order_type' => $prefix,
-                        'order_number' => $order['order_number'],
-                        'crt_time' => $time,
-                        'storehouse_id' => $value['storehouse_id'],
-                        'depart_id' => $order['depart_id'],
-                        'top_depart_id' => $order['top_depart_id'],
-                    ];
+                    // 采购
+                    $number = -($value['number']);
                 }
-            }else{
-                //换货
-                if(isset($insert2[$key])){
-                    $insert2[$key]['number'] += -($value['number']);
+                if(isset($insert[$key])){
+                    $insert[$key]['number'] += $number;
                 }else{
-                    $insert2[$key] = [
+                    $insert[$key] = [
                         'product_id' => $value['product_id'],
-                        'number' => -($value['number']),
+                        'number' => $number,
                         'order_type' => $prefix,
                         'order_number' => $order['order_number'],
                         'crt_time' => $time,
@@ -840,18 +865,13 @@ class CheckService extends Service
                     ];
                 }
             }
-
         }
         $insert = array_values($insert);
+        if(empty($insert)) return [true, self::minus_one];
+
         $bool = InOutRecord::insert($insert);
         if(! $bool) return [false,'流水写入失败'];
 
-        if(! empty($insert2)) {
-            $insert2 = array_values($insert2);
-            $bool = InOutRecord::insert($insert2);
-            if(! $bool) return [false,'流水写入失败'];
-        }
-
         return [true,''];
     }
 
@@ -1053,16 +1073,17 @@ class CheckService extends Service
 
     public function reject_record_construction($data,$order){
         //获取单据最新数据时间 正常施工数据
+        $crt_time = 0;
         $latest = InOutRecord::where('del_time',0)
             ->where('order_number',$data['order_number'])
             ->where('number','<',0)
             ->select('crt_time')
             ->orderBy('crt_time', 'desc')
             ->first();
-        $latest = $latest->toArray();
+        if(! empty($latest)) $crt_time = $latest->crt_time;
 
         $result = InOutRecord::where('del_time',0)
-            ->where('crt_time',$latest['crt_time'])
+            ->where('crt_time',$crt_time)
             ->where('order_number',$data['order_number'])
             ->where('number','<',0)
             ->select('product_id','storehouse_id','number','depart_id','order_number','top_depart_id','order_type')
@@ -1085,16 +1106,17 @@ class CheckService extends Service
 
     public function reject_record_purchase($data,$order){
         //获取单据最新数据时间 正常采购入库数据
+        $crt_time = 0;
         $latest = InOutRecord::where('del_time',0)
             ->where('order_number',$data['order_number'])
             ->where('number','>',0)
             ->select('crt_time')
             ->orderBy('crt_time', 'desc')
             ->first();
-        $latest = $latest->toArray();
+        if(! empty($latest)) $crt_time = $latest->crt_time;
 
         $result = InOutRecord::where('del_time',0)
-            ->where('crt_time',$latest['crt_time'])
+            ->where('crt_time',$crt_time)
             ->where('order_number',$data['order_number'])
             ->where('number','>',0)
             ->select('product_id','storehouse_id','number','depart_id','order_number','top_depart_id','order_type')
@@ -1117,67 +1139,35 @@ class CheckService extends Service
 
     public function reject_record_return_exchange($data,$order){
         if($order['model_type'] == ReturnExchangeOrder::Model_type_three) return [true, self::minus_one];
-//        if($order['type'] == ReturnExchangeOrder::Order_type){
-//            //快递件不记录流水
-//            $sales_order_type = SalesOrder::where('id',$order['data_id'])->value('sales_order_type');
-//            if($sales_order_type == SalesOrder::Order_type_two) return [true, self::minus_one];
-//        }
 
-        $result = ReturnExchangeOrderProductInfo::where('del_time',0)
-            ->where('return_exchange_id',$order['id'])
+        //获取单据最新数据时间 正常退换货流水数据
+        $crt_time = 0;
+        $latest = InOutRecord::where('del_time',0)
+            ->where('order_number',$data['order_number'])
+            ->select('crt_time')
+            ->orderBy('crt_time', 'desc')
+            ->first();
+        if(! empty($latest)) $crt_time = $latest->crt_time;
+
+        $result = InOutRecord::where('del_time',0)
+            ->where('crt_time',$crt_time)
+            ->where('order_number',$data['order_number'])
+            ->select('product_id','storehouse_id','number','depart_id','order_number','top_depart_id','order_type')
             ->get()->toArray();
-        if(empty($result)) return [false,'退换货单产品信息不存在或已被删除'];
-        $insert = $insert2 = [];
-        $time = time();
-        foreach ($result as $value){
-            $key = $value['product_id'] . $value['storehouse_id'];
-            $prefix = ReturnExchangeOrder::$prefix[$value['return_or_exchange']] ?? '';
-            if($value['return_or_exchange'] == ReturnExchangeOrderProductInfo::type_one){
-                //退货 扣出
-                if(isset($insert[$key])){
-                    $insert[$key]['number'] += -($value['number']);
-                }else{
-                    $insert[$key] = [
-                        'product_id' => $value['product_id'],
-                        'number' => -($value['number']),
-                        'order_type' => $prefix,
-                        'order_number' => $order['order_number'],
-                        'crt_time' => $time,
-                        'storehouse_id' => $value['storehouse_id'],
-                        'depart_id' => $order['depart_id'],
-                        'top_depart_id' => $order['top_depart_id'],
-                    ];
-                }
-            }else{
-                //换货 加回
-                if(isset($insert2[$key])){
-                    $insert2[$key]['number'] += $value['number'];
-                }else{
-                    $insert2[$key] = [
-                        'product_id' => $value['product_id'],
-                        'number' => $value['number'],
-                        'order_type' => $prefix,
-                        'order_number' => $order['order_number'],
-                        'crt_time' => $time,
-                        'storehouse_id' => $value['storehouse_id'],
-                        'depart_id' => $order['depart_id'],
-                        'top_depart_id' => $order['top_depart_id'],
-                    ];
-                }
-            }
+        if(empty($result)) return [false,'退换货流水数据未找到'];
 
+        //生成对冲数据
+        $time = time();
+        foreach ($result as $key => $value){
+            $result[$key]['number'] = - $value['number'];
+            $result[$key]['crt_time'] = $time;
         }
-        $insert = array_values($insert);
-        $bool = InOutRecord::insert($insert);
-        if(! $bool) return [false,'流水写入失败'];
 
-        if(! empty($insert2)) {
-            $insert2 = array_values($insert2);
-            $bool = InOutRecord::insert($insert2);
-            if(! $bool) return [false,'流水写入失败'];
-        }
+        $bool = InOutRecord::insert($result);
+        if(! $bool) return [false, '流水写入失败'];
 
-        return [true,''];
+        //写入流水
+        return [true, ''];
     }
 
     public function getOrderDetail($data,$user){

+ 28 - 20
app/Service/SalesOrderService.php

@@ -1051,26 +1051,8 @@ class SalesOrderService extends Service
             ->toArray();
 
         $product = $employee_two = $purchase = [];
-        if(! empty($ergs['product'])){
-            $sales_p_info = SalesOrderProductInfo::where('del_time',0)
-                ->whereIn('sales_order_id',$data_id)
-                ->get()->toArray();
-            $basic_price = BasicType::whereIn('id',array_unique(array_column($sales_p_info,'basic_type_id')))->pluck('title','id')->toArray();
-            $map = (new ProductService())->getProductDetail(array_column($sales_p_info,'product_id'));
-
-            foreach ($sales_p_info as $value){
-                $tmp = $map[$value['product_id']] ?? [];
-                $value['title'] = $tmp['title'] ?? "";
-                $value['is_edit_unit_price'] = $tmp['is_edit_unit_price'] ?? 0;
-                $value['code'] = $tmp['code'] ?? "";
-                $value['size'] = $tmp['size'] ?? "";
-                $value['unit'] = $tmp['unit'] ?? "";
-                $value['bar_code'] = $tmp['bar_code'] ?? "";
-                $value['basic_type_title'] = $basic_price[$value['basic_type_id']] ?? "";
-                $value['install_time'] = $tmp['install_time'] ?? 0;
-                $product[$value['sales_order_id']][] = $value;
-            }
-        }
+        //获取合同下的产品
+        if(! empty($ergs['product'])) $product = $this->getSalesOrderProduct($data_id);
         if(! empty($ergs['employee_two'])){
             //单据中选择的负责人
             $sales_order = SalesOrderInfo::where('del_time',0)
@@ -1205,6 +1187,32 @@ class SalesOrderService extends Service
         return $data;
     }
 
+    public function getSalesOrderProduct($data_id)
+    {
+        $product = [];
+        if(empty($data_id)) return $product;
+        $sales_p_info = SalesOrderProductInfo::where('del_time',0)
+            ->whereIn('sales_order_id',$data_id)
+            ->get()->toArray();
+        $basic_price = BasicType::whereIn('id',array_unique(array_column($sales_p_info,'basic_type_id')))->pluck('title','id')->toArray();
+        $map = (new ProductService())->getProductDetail(array_column($sales_p_info,'product_id'));
+
+        foreach ($sales_p_info as $value){
+            $tmp = $map[$value['product_id']] ?? [];
+            $value['title'] = $tmp['title'] ?? "";
+            $value['is_edit_unit_price'] = $tmp['is_edit_unit_price'] ?? 0;
+            $value['code'] = $tmp['code'] ?? "";
+            $value['size'] = $tmp['size'] ?? "";
+            $value['unit'] = $tmp['unit'] ?? "";
+            $value['bar_code'] = $tmp['bar_code'] ?? "";
+            $value['basic_type_title'] = $basic_price[$value['basic_type_id']] ?? "";
+            $value['install_time'] = $tmp['install_time'] ?? 0;
+            $product[$value['sales_order_id']][] = $value;
+        }
+
+        return $product;
+    }
+
     public function salesOrderGet($data){
         if(empty($data['model_type'])) return [false,'销售类型不能为空'];
         if(! isset(SalesOrder::$prefix[$data['model_type']])) return [false,'销售类型错误'];