Эх сурвалжийг харах

工单处理 简化工单创建 方法

ajun 4 жил өмнө
parent
commit
d3f7faef7a

+ 101 - 75
app/Services/WorkOrderService.php

@@ -10,6 +10,7 @@ use App\Traits\ServiceAppAop;
 use App\WorkOrder;
 use App\WorkOrderType;
 use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Database\Eloquent\Collection;
 use Illuminate\Support\Carbon;
 use Illuminate\Support\Facades\Auth;
 
@@ -19,18 +20,9 @@ class WorkOrderService
 
     protected $modelClass = WorkOrder::class;
 
-    protected $work_type_relation = [
-        '拦截' => '订单拦截',
-        '信息更改' => '订单收件信息修改',
-        '其他' => '订单其他异常',
-        '快递异常' => '订单快递异常',
-        '错漏发' => '快递错漏发',
-        '破损' => '快递破损',
-    ];
-
     /**
      * 获取可生成工单的问题件类型
-     * @return Builder[]|\Illuminate\Database\Eloquent\Collection
+     * @return Builder[]|Collection
      */
     public function getIssueType()
     {
@@ -44,75 +36,107 @@ class WorkOrderService
      */
     public function build($params): array
     {
-        $types = [];
-        $work_order_types = [];
-        $data = Carbon::now();
-        $creator_id = Auth::user()['id'];
-        $parent = WorkOrderType::query()->firstOrCreate(['name' => '订单', 'prent_id' => 0, 'level' => 1]);
         foreach ($params as $param) {
-            $order = Order::query()->where('code', $param['order_no'])->first();
             $type_name = $param['order_issue_type'];
-            if (!$param['order_issue_type']) {
-                $order_issue_type_id = 0;
-                $work_order_type_id = 0;
+            if ($type_name == '拦截') {
+                $this->createInterceptWorkOrder($param);
+            } else if ($type_name == '信息更改') {
+                $this->createInformationChangeWorkOrder($param);
+            } else if ($type_name == '快递异常') {
+                $this->createExpressAbnormalWorkOrder($param);
+            } else if ($type_name == '错漏发') {
+                $this->createMistakeWorkOrder($param);
+            } else if ($type_name == '破损') {
+                $this->createDamagedWorkOrder($param);
             } else {
-                if (!array_key_exists($type_name, $types)) {
-                    $types[$type_name] = OrderIssueType::query()->where('name', $type_name)->first();
-                    $work_order_type_name = $this->work_type_relation[$type_name] ?? $type_name;
-                    $work_order_types[$type_name] = WorkOrderType::query()->firstOrCreate(
-                        ['name' => $work_order_type_name],
-                        ['prent_id' => $parent['id'], 'table_name' => 'orders', 'level' => 2]
-                    );
-                }
-                $order_issue_type_id = $types[$type_name]['id'] ?? 0;
-                $work_order_type_id = $work_order_types[$type_name]['id'] ?? 0;
-            }
-            switch ($type_name) {
-                case '拦截':
-                    $remark = "拦截订单";
-                    break;
-                case '信息更改':
-                case '其他':
-                case '快递异常':
-                case '错漏发':
-                case '破损':
-                    $remark = $param['remark'] ?? '';
-                    break;
-                default:
-                    $work_order_type_id = 0;
-                    $remark = $param['remark'] ?? '';
-                    $order_issue_type_id = 0;
-                    break;
-            }
-            $inner_params[] = [
-                'order_id' => $order['id'],
-                'creator_id' => $creator_id,
-                'work_order_type_id' => $work_order_type_id ?? 0,
-                'owner_id' => $order['owner_id'] ?? '',
-                'grad' => $param['grad'] ?? 1,
-                'remark' => $remark,
-                'outer_table_name' => 'orders',
-                'order_issue_type_id' => $order_issue_type_id ?? 0,
-                'uniquely_tag' => $order['code'] ?? null,
-                'status' => 1,
-                'created_at' => $data,
-                'updated_at' => $data,
-            ];
-        }
-        if (isset($inner_params)) {
-            WorkOrder::query()->insert($inner_params);
-            $workOrders = WorkOrder::query()->with('owner','order')->whereIn('order_id',data_get($inner_params,"*.order_id"))->where('created_at',">=",$data)->get();
-            foreach ($workOrders as $workOrder){
-                $user = Auth::user();
-                $remark = $workOrder->remark;
-                $ownerName = $workOrder->owner->name ?? '';
-                $clientCode = $workOrder->order->client_code ?? '';
-                $msg = $user["name"]."建立了新工单<br/>".$ownerName.":".$clientCode."<br/>".$remark;
-                NotificationService::SingleRegister($msg,$clientCode,"订单管理-问题件");
+                $this->createDefaultWorkOrder($param);
             }
-            return ['success' => true];
         }
-        return ['success' => false, 'message' => '参数异常'];
+        return ['success' => true];
+    }
+
+    public function createAndNotification($order, $orderIssueType, $remake): WorkOrder
+    {
+        $user = Auth::user();
+        /** @var WorkOrder $workOrder */
+        $workOrder = WorkOrder::query()->create([
+            'order_id' => $order->id,
+            'creator_id' => $user["id"],
+            'owner_id' => $order->owner_id,
+            'remark' => $remake,
+            'outer_table_name' => 'orders',
+            'order_issue_type_id' => $orderIssueType->id,
+            'uniquely_tag' => $order->code,
+            'status' => 1,
+        ]);
+        $workOrder->notification();
+        return $workOrder;
+    }
+
+    /**
+     * 拦截
+     */
+    public function createInterceptWorkOrder($param): WorkOrder
+    {
+        $orderIssueType = OrderIssueType::query()->firstOrCreate(['name' => '拦截']);
+        $order = Order::query()->where('code', $param['order_no'])->first();
+        $remake = '拦截订单';
+        return $this->createAndNotification($order, $orderIssueType, $remake);
+    }
+
+    /**
+     * 错漏发
+     */
+    public function createMistakeWorkOrder($param): WorkOrder
+    {
+        $orderIssueType = OrderIssueType::query()->firstOrCreate(['name' => '错漏发']);
+        $order = Order::query()->where('code', $param['order_no'])->first();
+        $remake = $param['remake'] ?? '';
+        return $this->createAndNotification($order, $orderIssueType, $remake);
+    }
+
+    /**
+     * 破损
+     */
+    public function createDamagedWorkOrder($param): WorkOrder
+    {
+        $orderIssueType = OrderIssueType::query()->firstOrCreate(['name' => '破损']);
+        $order = Order::query()->where('code', $param['order_no'])->first();
+        $remake = $param['remake'] ?? '';
+        return $this->createAndNotification($order, $orderIssueType, $remake);
+    }
+
+    /***
+     * 快递异常
+     */
+    public function createExpressAbnormalWorkOrder($param): WorkOrder
+    {
+        $orderIssueType = OrderIssueType::query()->firstOrCreate(['name'=>  '快递异常']);
+        $order = Order::query()->where('code', $param['order_no'])->first();
+        $remake = $param['remake'] ?? '';
+        return $this->createAndNotification($order, $orderIssueType, $remake);
+    }
+
+    /***
+     * 信息更改
+     */
+    public function createInformationChangeWorkOrder($param): WorkOrder
+    {
+        $orderIssueType = OrderIssueType::query()->firstOrCreate(['name' => '信息更改']);
+        $order = Order::query()->where('code', $param['order_no'])->first();
+        $remake = $param['remake'] ?? '';
+        return $this->createAndNotification($order, $orderIssueType, $remake);
+    }
+
+    /**
+     * 其他
+     */
+    public function createDefaultWorkOrder($param): WorkOrder
+    {
+        $orderIssueType = OrderIssueType::query()->firstOrCreate(['name' => '其他']);
+        $order = Order::query()->where('code', $param['order_no'])->first();
+        $remake = $param['remake'] ?? '';
+        return $this->createAndNotification($order, $orderIssueType, $remake);
     }
 
     /**
@@ -191,7 +215,7 @@ class WorkOrderService
     }
 
     /**
-     * 标记已有 问题件的工单
+     * 标记已有 问题件 的工单
      * @param $workOrders
      */
     public function tags(&$workOrders)
@@ -222,4 +246,6 @@ class WorkOrderService
         $order_issue_query = OrderIssueType::query()->select('id')->where('name', '拦截');
         return WorkOrder::query()->whereIn('order_id', $package_query)->whereIn('order_issue_type_id', $order_issue_query)->exists();
     }
+
+
 }

+ 12 - 0
app/WorkOrder.php

@@ -2,6 +2,7 @@
 
 namespace App;
 
+use App\Services\NotificationService;
 use App\Traits\ModelTimeFormat;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Database\Eloquent\Model;
@@ -9,6 +10,7 @@ use Illuminate\Database\Eloquent\Model;
 use App\Traits\ModelLogChanging;
 use Illuminate\Database\Eloquent\Relations\BelongsTo;
 use Illuminate\Database\Eloquent\SoftDeletes;
+use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Gate;
 
 class WorkOrder extends Model
@@ -154,4 +156,14 @@ class WorkOrder extends Model
         }]);
     }
 
+    public function notification()
+    {
+        $user = Auth::user();
+        $this->loadMissing('owner','order');
+        $remark = $this->remark;
+        $ownerName = $this->owner->name ?? '';
+        $clientCode = $this->order->client_code ?? '';
+        $msg = $user["name"]."建立了新工单<br/>".$ownerName.":".$clientCode."<br/>".$remark;
+        NotificationService::SingleRegister($msg,$clientCode,"订单管理-问题件");
+    }
 }

+ 48 - 40
resources/views/order/index/delivering.blade.php

@@ -1017,46 +1017,50 @@
                     return this.workOrder.orderIssueType === types[0].id
                 },
                 buildWorkOrder(){  // 生成工单
-                    let url = '{{route('workOrder.storeApi')}}';
-                    let data = {};
-                    switch (this.workOrder.orderIssueType){
-                        case "信息更改":
-                            if (checkData.length === 1){
-                                data = [{
-                                    order_no:checkData[0],
-                                    order_issue_type:"信息更改",
-                                    grad:1,
-                                    remark: this.workOrder.remark.info,
-                                }];
-                                break;
-                            }
-                            window.tempTip.show('不能批量创建信息修改工单');
-                            return;
-                        case "拦截":
-                        case "快递异常":
-                        case "错漏发":
-                        case "破损":
-                            data = checkData.map(item=>{
-                                return {
-                                    order_no: item,
-                                    grad:1,
-                                    order_issue_type:this.workOrder.orderIssueType,
-                                    remark:this.workOrder.remark.info,
-                                };
-                            });
-                            break;
-                        default:
-                            data = checkData.map(item=>{
-                                return {
-                                    order_no: item,
-                                    grad:1,
-                                    order_issue_type:null,
-                                    remark:this.workOrder.remark.info,
-                                };
-                            });
-                            break;
+                    if (this.workOrder.orderIssueType === '信息更改' && checkData.length !== 1){
+                        window.tempTip.show('不能批量创建信息修改工单');
+                        return ;
                     }
-
+                    if (this.workOrder.orderIssueType === '拦截' ){
+                        this.createInterceptWorkOrder();
+                    } else if (this.workOrder.orderIssueType === '快递异常'){
+                        this.createExpressAbnormalWorkOrder();
+                    } else if (this.workOrder.orderIssueType === '信息更改'){
+                        this.createInformationChangeWorkOrder();
+                    } else if (this.workOrder.orderIssueType === '错漏发'){
+                        this.createMistakeWorkOrder();
+                    } else if (this.workOrder.orderIssueType === '破损'){
+                        this.createDamagedWorkOrder();
+                    } else {
+                        this.createDefaultWorkOrder();
+                    }
+                },
+                createInformationChangeWorkOrder(){ // 信息修改
+                    let data = this.getCreateWorkOrderData();
+                    this.createWorkOrder(data);
+                },
+                createDefaultWorkOrder(){ // 其他
+                    let data = this.getCreateWorkOrderData();
+                    this.createWorkOrder(data);
+                },
+                createExpressAbnormalWorkOrder(){ // 快递异常
+                    let data = this.getCreateWorkOrderData();
+                    this.createWorkOrder(data);
+                },
+                createDamagedWorkOrder(){ //破损
+                    let data = this.getCreateWorkOrderData();
+                    this.createWorkOrder(data);
+                },
+                createMistakeWorkOrder(){ // 错漏发
+                    let data = this.getCreateWorkOrderData();
+                    this.createWorkOrder(data);
+                },
+                createInterceptWorkOrder(){// 拦截
+                    let data = this.getCreateWorkOrderData();
+                    this.createWorkOrder(data);
+                },
+                createWorkOrder(data){
+                    let url = '{{route('workOrder.storeApi')}}';
                     window.tempTip.setIndex(1999);
                     window.axios.post(url,{params:data}).then(res=>{
                         if (res.data.success){
@@ -1069,6 +1073,11 @@
                         window.tempTip.show(err)
                     });
                 },
+                getCreateWorkOrderData(){
+                    return checkData.map(item=>{
+                        return {order_no: item,order_issue_type:this.workOrder.orderIssueType, remark:this.workOrder.remark.info,};
+                    });
+                },
                 changeReceiveInfo() {
                     let url = '{{url('apiLocal/workOrder/editOrderReceiveInfo')}}';
                     let data = {
@@ -1076,7 +1085,6 @@
                         grad:this.grad,
                         remake:`${this.remark.name} ${this.remark.phone} ${this.remark.province} ${this.remark.city} ${this.remark.city} ${this.remark.district} ${this.remark.adder}`,
                     };
-                    console.log(data);
                     window.tempTip.setIndex('1999');
                     window.axios.post(url,data).then(res=>{
                         if (res.data.success){