cqpCow 2 anni fa
parent
commit
c21ef3540f
1 ha cambiato i file con 45 aggiunte e 7 eliminazioni
  1. 45 7
      app/Service/FinishedOrderService.php

+ 45 - 7
app/Service/FinishedOrderService.php

@@ -10,6 +10,7 @@ use App\Model\Equipment;
 use App\Model\FinishedOrder;
 use App\Model\FinishedOrderScrapp;
 use App\Model\FinishedOrderSub;
+use App\Model\OrdersProduct;
 use App\Model\OrdersProductProcess;
 use App\Model\Process;
 use App\Model\SaleOrdersProduct;
@@ -167,6 +168,15 @@ class FinishedOrderService extends Service
                     ]);
 
                 if(! empty($insert_waste)) $process_model->insert($insert_waste);
+
+                //生产订单数量
+                if(! empty($waste[$key])){
+                    $num = $waste[$key];
+                    OrdersProduct::where('id',$value['order_product_id'])->update([
+                        'production_quantity' => DB::raw("production_quantity + {$num}"),
+                        'scrapp_num' => DB::raw("scrapp_num + {$num}"),
+                    ]);
+                }
             }
 
             //反写数量
@@ -232,6 +242,9 @@ class FinishedOrderService extends Service
     public function orderRule($data){
         if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
         if($this->isEmpty($data,'quantity')) return [false,'请填写完工数量!'];
+        foreach ($data['quantity'] as $value){
+            if(! is_numeric($value) && $value < 0) return [false,'请填写正确的完工数量!'];
+        }
         if($this->isEmpty($data,'finish_id') && $this->isEmpty($data,'team_id')) return [false,'人员和班组不能都为空!'];
 
         $bool = DispatchSub::whereIn('id',$data['id'])->where('job_status',1)->exists();
@@ -242,8 +255,13 @@ class FinishedOrderService extends Service
             ->orderBy('id','desc')
             ->get()->toArray();
 
+        $waste = [];
+        foreach ($data['waste'] as $key => $value){
+            $waste[$key] = array_sum(array_column($value,'num'));
+        }
         foreach ($result as $key => $value){
-            if(($data['quantity'][$key] + $value['finished_num']) > $value['dispatch_quantity']) return [false,'完工数量不能大于派工数量'];
+            $tmp = $waste[$key] ?? 0;
+            if(($data['quantity'][$key] + $value['finished_num'] + $tmp) > $value['dispatch_quantity']) return [false,'完工数量加上损耗数量不能大于派工数量'];
         }
 
         return [true, $result];
@@ -439,14 +457,16 @@ class FinishedOrderService extends Service
             //本地数据写入-----------
             DB::beginTransaction();
 
-            $waste = [];
-            foreach ($data as $key => $value){
+            $waste = $waste2 = [];
+            foreach ($data as $value){
                 if(! empty($value['waste'])){
                     foreach ($value['waste'] as $v){
                         if(isset($waste[$value['id']])){
                             $waste[$value['id']] += $v['num'];
+                            $waste2[$value['order_product_id']] += $v['num'];
                         }else{
                             $waste[$value['id']] = $v['num'];
+                            $waste2[$value['order_product_id']] = $v['num'];
                         }
                     }
                 }
@@ -460,7 +480,14 @@ class FinishedOrderService extends Service
                         'waste_num' => $waste[$value['id']] ?? 0,
                         'job_status' => 0
                     ]);
-
+                //生产订单数量
+                if(! empty($waste2[$value['order_product_id']])){
+                    $num = $waste2[$value['order_product_id']];
+                    OrdersProduct::where('id',$value['order_product_id'])->update([
+                        'production_quantity' => DB::raw("production_quantity + {$num}"),
+                        'scrapp_num' => DB::raw("scrapp_num + {$num}"),
+                    ]);
+                }
                 //损耗
                 $insert_waste = [];
                 //工序
@@ -524,15 +551,25 @@ class FinishedOrderService extends Service
         $bool = DispatchSub::whereIn('id',$dispatch_id)->where('job_status',1)->exists();
         if($bool) return [false,'正在队列中,请不要重复操作!',''];
 
-        $post = [];
+        $post = $waste = [];
         foreach ($data as $value){
-            if(empty($value['quantity'])) return [false,'数量必须填写!',''];
+            if(! is_numeric($value['quantity']) && $value['quantity'] < 0) return [false,'请填写正确的完工数量!'];
             if(empty($value['finished_id']) && empty($value['team_id'])) return [false,'人员和班组必须填写一项!',''];
             if(isset($post[$value['id']])){
                 $post[$value['id']] += $value['quantity'];
             }else{
                 $post[$value['id']] = $value['quantity'];
             }
+
+            if(! empty($value['waste'])){
+                foreach ($value['waste'] as $v){
+                    if(isset($waste[$value['id']])){
+                        $waste[$value['id']] += $v['num'];
+                    }else{
+                        $waste[$value['id']] = $v['num'];
+                    }
+                }
+            }
         }
 
         $result = DispatchSub::whereIn('id',$dispatch_id)
@@ -541,7 +578,8 @@ class FinishedOrderService extends Service
             ->get()->toArray();
 
         foreach ($result as $key => $value){
-            if(($post[$value['id']] + $value['finished_num']) > $value['dispatch_quantity']) return [false,"{$value['dispatch_no']}单号的完工数量不能大于派工数量",''];
+            $tmp = $waste[$value['id']] ?? 0;
+            if(($post[$value['id']] + $value['finished_num'] + $tmp) > $value['dispatch_quantity']) return [false,"完工数量加上损耗数量不能大于派工数量",''];
         }
 
         return [true, $result, $post];