cqpCow 2 år sedan
förälder
incheckning
be77d73a96

+ 26 - 0
app/Http/Controllers/Api/DispatchController.php

@@ -88,4 +88,30 @@ class DispatchController extends BaseController
             return $this->json_return(201,$data);
         }
     }
+
+    public function dispatchMobileOrderList(Request $request)
+    {
+        $service = new DispatchService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->dispatchMobileOrderList($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    public function dispatchMobileOrderDetailsList(Request $request)
+    {
+        $service = new DispatchService();
+        $user = $request->get('auth');
+        list($status,$data) = $service->dispatchMobileOrderDetailsList($request->all());
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
 }

+ 12 - 0
app/Http/Controllers/Api/FinishedOrderController.php

@@ -74,4 +74,16 @@ class FinishedOrderController extends BaseController
             return $this->json_return(201,$data);
         }
     }
+
+    public function mobileAdd(Request $request){
+        $service = new FinishedOrderService();
+        $userData = $request->userData->toArray();
+        list($status,$data) = $service->mobileAdd($request->all(),$userData);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
 }

+ 94 - 0
app/Service/DispatchService.php

@@ -451,4 +451,98 @@ class DispatchService extends Service
             ]);
         }
     }
+
+    //设备上的去完工列表
+    public function dispatchMobileOrderList($data){
+        $model = DispatchSub::where('del_time',0)
+            ->select('id','product_title','product_no','dispatch_quantity','finished_num','dispatch_no')
+            ->where('process_id',$data['process_id'])
+            ->whereRaw('dispatch_quantity > finished_num')
+            ->orderBy('id','desc');
+
+        $list = $model->get()->toArray();
+        $list = $this->fillDispatchMobileOrderList($list);
+
+        return [true,$list];
+    }
+
+    public function fillDispatchMobileOrderList($data){
+        if(empty($data)) return $data;
+
+        date_default_timezone_set("PRC");
+        foreach ($data as $key => $value){
+            $data[$key]['un_finished_quantity'] = $value['dispatch_quantity'] - $value['finished_num'];
+        }
+
+        $return['product_num'] = count($data);
+        $return['finished_num'] = array_sum(array_column($data, 'finished_num'));
+        $return['un_finished_quantity'] = array_sum(array_column($data, 'un_finished_quantity'));
+        $return['data'] = $data;
+        unset($data);
+
+        return $return;
+    }
+
+    //设备上完工填写数据的页面
+    public function dispatchMobileOrderDetailsList($data){
+        if(empty($data['id'])) return [false,'派工单ID不能为空!'];
+
+        $dispatch = DispatchSub::whereIn('id',$data['id'])
+            ->where('del_time',0)
+            ->select('id','product_title','product_no','dispatch_no',DB::raw('(dispatch_quantity - finished_num) as quantity'))
+            ->get()->toArray();
+
+        $sub = DispatchEmpSub::where('del_time',0)
+            ->whereIn('dispatch_no',array_column($dispatch,'dispatch_no'))
+            ->select('dispatch_no','equipment_id','team_id','employee_id')
+            ->get()->toArray();
+
+        $sub_map = [];
+        foreach ($sub as $s){
+            $array = [
+                'equipment_id' => $s['equipment_id'],
+                'team_id' => $s['team_id'],
+                'employee_id' => $s['employee_id'],
+            ];
+            if(empty($sub_map[$s['dispatch_no']])){
+                $sub_map[$s['dispatch_no']][] = $array;
+            }else{
+                if(! in_array($array,$sub_map[$s['dispatch_no']])) {
+                    $sub_map[$s['dispatch_no']][] = $array;
+                }
+            }
+        }
+
+        $return_list = $return_details = [];
+        foreach ($dispatch as $value){
+            $dispatch_tmp = $sub_map[$value['dispatch_no']];
+            $counts = count($dispatch_tmp) ?? 1;
+            // 计算每个人应该得到的数量
+            $per_person = floor($value['quantity'] / $counts);
+            // 计算最后一个人拿到的数量
+            $last_person = $value['quantity'] - ($per_person * ($counts - 1));
+            foreach ($dispatch_tmp as $k => $t){
+                $dispatch_tmp[$k]['id'] = $value['id'];
+                $dispatch_tmp[$k]['product_title'] = $value['product_title'];
+                $dispatch_tmp[$k]['product_no'] = $value['product_no'];
+                $dispatch_tmp[$k]['dispatch_no'] = $value['dispatch_no'];
+                if ($k == $counts - 1) {
+                    $dispatch_tmp[$k]['quantity'] = (int)$last_person;
+                }else{
+                    $dispatch_tmp[$k]['quantity'] = (int)$per_person;
+                }
+            }
+
+            //列数据
+            $return_list = array_merge_recursive($return_list,$dispatch_tmp);
+
+            //总数量
+            $return_details[$value['id']] = $value['quantity'];
+        }
+
+        $return['list'] = $return_list;
+        $return['list_details'] = $return_details;
+
+        return [true, $return];
+    }
 }

+ 108 - 0
app/Service/FinishedOrderService.php

@@ -346,4 +346,112 @@ class FinishedOrderService extends Service
             ]);
         }
     }
+
+    public function mobileAdd($data,$user){
+        //数据校验以及填充
+        list($status,$msg,$count_arr) = $this->orderMobileRule($data);
+        if(!$status) return [$status,$msg];
+
+        try{
+            DB::beginTransaction();
+
+            //生产数据的源数据
+            $result = $msg;
+            $time = time();
+
+            date_default_timezone_set("PRC");
+
+            $insert_sql_server = [];
+            foreach ($result as $key => $value){
+                $quantity_tmp = $count_arr[$value['id']];
+                $result[$key]['quantity'] = $quantity_tmp;
+
+                $finished_num = $quantity_tmp + $value['finished_num'];
+                DispatchSub::where('id',$value['id'])
+                    ->update([
+                        'finished_num' => $finished_num,
+                    ]);
+
+                //工序表
+                $process_model = new OrdersProductProcess(['channel' => date("Ymd",$value['out_order_no_time'])]);
+
+                foreach ($data as $d){
+                    if($d['id'] == $value['id']){
+                        $process_model->where('order_product_id',$value['order_product_id'])
+                            ->where('process_id',$value['process_id'])
+                            ->where('dispatch_no',$value['dispatch_no'])
+                            ->take($d['quantity'])
+                            ->update([
+                                'finished_time' => $time,
+                                'status' => 2,
+                                'finished_id' => $d['finished_id'],
+                                'team_id' => $d['team_id'],
+                                'equipment_id' => $d['equipment_id']
+                            ]);
+                    }
+                }
+
+                $process_id = $process_model->select('process_id')
+                    ->where('sort',$process_model->where('del_time',0)
+                        ->where('order_product_id',$value['order_product_id'])
+                        ->max('sort'))
+                    ->first();
+
+                if(empty($process_id)){
+                    DB::rollBack();
+                    return [false,"未找到最后一道工序"];
+                }
+                $process_id = $process_id->process_id;
+                if($process_id == $value['process_id']){
+                    $insert_sql_server[] = $result[$key];
+                }
+            }
+
+            //反写数量
+            $this->writeFinishedQuantity(array_column($result,'sale_orders_product_id'));
+
+            if(! empty($insert_sql_server)){
+                //生成产成品入库
+                $sqlServerModel = new FyySqlServerService();
+                list($status,$msg) = $sqlServerModel->U8Rdrecord10Save($insert_sql_server);
+                if(! $status) {
+                    DB::rollBack();
+                    return [false,$msg];
+                }
+            }
+
+            DB::commit();
+        }catch (\Exception $e){
+            DB::rollBack();
+            return [false,$e->getLine().':'.$e->getMessage()];
+        }
+
+        return [true,'保存成功!'];
+    }
+
+    public function orderMobileRule($data){
+        if(empty($data)) return [false,'数据不能为空!',''];
+
+        $post = [];
+        foreach ($data as $value){
+            if(empty($value['quantity'])) 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'];
+            }
+        }
+
+        $result = DispatchSub::whereIn('id',array_unique(array_column($data,'id')))
+            ->select('id','finished_num','dispatch_quantity','out_order_no_time','process_id','dispatch_no','order_product_id','sale_orders_product_id','order_no','product_no','product_title')
+            ->orderBy('id','desc')
+            ->get()->toArray();
+
+        foreach ($result as $key => $value){
+            if(($post[$value['id']] + $value['finished_num']) > $value['dispatch_quantity']) return [false,"{$value['dispatch_no']}单号的完工数量不能大于派工数量",''];
+        }
+
+        return [true, $result,$post];
+    }
 }

+ 8 - 3
routes/api.php

@@ -130,12 +130,17 @@ Route::group(['middleware'=> ['checkLogin']],function ($route){
     $route->any('dispatchOrderList', 'Api\DispatchController@dispatchOrderList');
     $route->any('dispatchOrderDel', 'Api\DispatchController@dispatchOrderDel');
 
-    //工序完工
+    //设备上的工序去完工列表
+    $route->any('finishedOrderList', 'Api\DispatchController@dispatchMobileOrderList');
+    $route->any('finishedOrderDetailsList', 'Api\DispatchController@dispatchMobileOrderDetailsList');
+    $route->any('mobileFinishedOrderAdd', 'Api\FinishedOrderController@mobileAdd');
+
+    //工序完工(暂时没用)
     $route->any('finishedOrderAdd', 'Api\FinishedOrderController@add');
     $route->any('finishedOrderEdit', 'Api\FinishedOrderController@edit');
     $route->any('finishedOrderDetail', 'Api\FinishedOrderController@orderDetail');
-    $route->any('finishedOrderDel', 'Api\FinishedOrderController@del');
-    $route->any('finishedOrderList', 'Api\FinishedOrderController@orderList');
+//    $route->any('finishedOrderDel', 'Api\FinishedOrderController@del');
+//    $route->any('finishedOrderList', 'Api\FinishedOrderController@orderList');
 
     //删除单据统一入口
     $route->any('delOrders','Api\DeleteOrderController@del');