Ver código fonte

修改 工单处理

ajun 4 anos atrás
pai
commit
c5e1b68cfb

+ 44 - 122
app/Http/Controllers/WorkOrderController.php

@@ -4,112 +4,34 @@ namespace App\Http\Controllers;
 
 use App\Filters\WorkOrderFilters;
 use App\Logistic;
+use App\OrderIssue;
+use App\OrderIssueType;
 use App\Services\WorkOrderService;
-use App\Services\WorkOrderTypeService;
 use App\WorkOrder;
-use App\WorkOrderType;
-use Illuminate\Contracts\Foundation\Application;
-use Illuminate\Contracts\View\Factory;
 use Illuminate\Database\Eloquent\Builder;
-use Illuminate\Http\RedirectResponse;
 use Illuminate\Http\Request;
-use Illuminate\Routing\Redirector;
 use Illuminate\Support\Facades\Gate;
-use Illuminate\View\View;
 
 class WorkOrderController extends Controller
 {
-    /**
-     * 工单主页
-     *
-     * @param Request $request
-     * @param WorkOrderFilters $filters
-     * @return Application|Factory|RedirectResponse|Redirector|View
-     */
-    public function index(Request $request, WorkOrderFilters $filters)
+
+    const ORDER_ISSUE_TYPES = 'orderIssueTypes';
+
+    public function index(Request $request, WorkOrderFilters $filters, WorkOrderService $service)
     {
         if (Gate::denies('订单管理-工单处理-查询')) return redirect('/');
 
         $workOrders = WorkOrder::query()->filter($filters)->with(['type', 'creator', 'order' => function ($query) {
             /** @var $query Builder */
             $query->with('packages', 'issue', 'logistic');
-        }, 'reviewer'])->orderByDesc('created_at', 'grad', 'status')->paginate($request['paginate'] ?? 50);
+        }, 'reviewer','issueType'])->orderByDesc(  'status')->paginate($request['paginate'] ?? 50);
         $logistics = Logistic::all();
-        return view('order.workOrder.index', compact('workOrders', 'logistics'));
-    }
-
-    public function create()
-    {
-        if (Gate::denies('订单管理-工单处理-创建')) return redirect('/');
-        $workOrderTypes = WorkOrderType::query()->with('childTypes')->get();
-        $grads = WorkOrder::$enums['grad'];
-        array_shift($grads);
-        return view('order.workOrder.create', compact('workOrderTypes', 'grads'));
-    }
-
-
-    public function store(Request $request, WorkOrderService $service)
-    {
-        if (Gate::denies('订单管理-工单处理-创建')) return redirect('/');
-        $result = $service->create($request->all());
-        $workOrderTypes = WorkOrderType::query()->with('childTypes')->get();
-        $grads = WorkOrder::$enums['grad'];
-        array_shift($grads);
-        return view('order.workOrder.create', compact('workOrderTypes', 'result', 'grads'));
-    }
-
-    /**
-     * 生成订单拦截工单
-     * @param Request $request
-     * @param WorkOrderService $service
-     * @return array
-     */
-    public function interceptOrderApi(Request $request, WorkOrderService $service): array
-    {
-        if (Gate::denies('订单管理-订单-生成工单')) return ['success' => false, 'message' => '没有对应的创建权限'];
-
-        $uniquely_tags = $request['order_nos'];
-
-        $work_order_type = app(WorkOrderTypeService::class)->findOrCreate('订单拦截', 'orders', '订单', '订单拦截');
-
-        $result = $service->exists($work_order_type['id'], $uniquely_tags);     // 检查订单号和工单类型是否有对应的工单
-
-        if ($result['success'])
-            return ['success' => false, 'message' => join(",", array($result['data'])) . "已有对应的订单拦截工单"];
-
-        return $service->interceptOrder($work_order_type, $uniquely_tags, $request['grad']);
-    }
-
-    /**
-     * 生成订单修改工单
-     * @param Request $request
-     * @param WorkOrderService $service
-     * @return array
-     */
-    public function editOrderReceiveInfoApi(Request $request,WorkOrderService $service): array
-    {
-        if (Gate::denies('订单管理-订单-生成工单')) return ['success' => false, 'message' => '没有对应的创建权限'];
-
-        if (is_array($request['order_nos'])) return ['success' => false,'message' => '参数错误'];
-
-        $uniquely_tag = $request['order_nos'];
-
-        $work_order_type = app(WorkOrderTypeService::class)->findOrCreate('订单收件信息修改', 'orders', '订单', '订单收件信息修改');
-
-        $result = $service->exists($work_order_type['id'], $uniquely_tag);     // 检查订单号和工单类型是否有对应的工单
-
-        if($result['success'])
-            return ['success' => false,'message' => join(",", array($result['data'])) . "已有对应的订单信息修改工单"];
-
-        return $service->editOrder($work_order_type,$uniquely_tag,$request['remake']);
+        $orderIssueTypes = OrderIssueType::all();
+        $service->tags($workOrders);
+        return view('order.workOrder.index', compact('workOrders', 'logistics', '' . self::ORDER_ISSUE_TYPES . ''));
     }
 
-    /**
-     * 工单审核
-     * @param Request $request
-     * @param WorkOrderService $service
-     * @return array
-     */
+    // 审核 api
     public function reviewApi(Request $request, WorkOrderService $service): array
     {
         if (Gate::denies('订单管理-工单处理-审核')) return ['success' => false, 'message' => '没有对应的编辑权限'];
@@ -117,57 +39,57 @@ class WorkOrderController extends Controller
         return $service->review($workOrder);
     }
 
-    /**
-     * 批量审核工单
-     * @param Request $request
-     * @param WorkOrderService $service
-     * @return array
-     */
+    // 批量审核 api
     public function batchReviewApi(Request $request,WorkOrderService  $service): array
     {
         if(Gate::denies('订单管理-工单处理-审核'))return ['success' => false, 'message' => '没有对应的编辑权限'];
-        if (WorkOrder::query()->where('id',$request['id'])->whereNotNull('review_at')->exists())
+        if (WorkOrder::query()->whereIn('id',$request['ids'])->whereNotNull('review_at')->exists())
             return ['success' => false, 'message' => '选中的工单已有审核完成,刷新页面重试'];
-        $work_orders = WorkOrder::query()->find($request['id']);
+        $work_orders = WorkOrder::query()->whereIn('id',$request['ids'])->get();
+        $service->tags($work_orders);
         return $service->batchReview($work_orders);
     }
 
-    /**
-     * 生成问题件
-     * @param Request $request
-     * @param WorkOrderService $service
-     * @return array
-     */
-    public function createOrderIssueApi(Request $request, WorkOrderService $service): array
+    // 生成问题件 api
+    public function buildOrderIssueApi(Request $request, WorkOrderService $service): array
     {
         if (Gate::denies('订单管理-订单问题件生成'))
             return ['success' => false, 'message' => '没有对应权限'];
         $work_orders = WorkOrder::query()->whereIn('id', $request['ids'])->get();
         if (count($work_orders) == 0) return ['success' => false, 'message' => '刷新当前页面重试'];
-        return $service->createOrderIssue($work_orders);
-    }
-
-
-    public function show(WorkOrder $workOrder)
-    {
-        //
+        if (OrderIssue::query()->whereIn('order_id',$work_orders->map(function($item){return $item['order_id'];}))->exists()){
+            return ['success' => false, 'message' => '已有对应的问题件'];
+        }
+        $result = $service->buildOrderIssue($work_orders);
+        if (!$result['success']) return $result;
+        $workOrders = WorkOrder::query()->with(['type', 'creator', 'order' => function ($query) {
+            /** @var $query Builder */
+            $query->with('packages', 'issue', 'logistic');
+        }, 'reviewer','issueType'])->whereIn(  'id',$request['ids'])->get();
+        $service->tags($workOrders);
+        return ['success' => true ,'data' => $workOrders];
     }
 
-
-    public function edit(WorkOrder $workOrder)
+    // 创建工单 api
+    public function storeApi(Request $request, WorkOrderService $service):array
     {
-        //
+        if (Gate::denies('订单管理-订单-生成工单'))
+            return ['success' => false, 'message' => '没有对应权限'];
+        $params = $request['params'];
+        if (count($params) == 0) return ['success' => false,'message' => '参数异常'];
+        app('OrderService')->syncOrderByCodes(array_map(function($param){
+            return $param['order_no'];
+        },$params));
+        return  $service->build($request['params']);
     }
 
-
-    public function update(Request $request, WorkOrder $workOrder)
+    // 修改问题类型
+    public function updateIssueTypeApi(Request $request): array
     {
-        //
-    }
+        if (Gate::denies('订单管理-工单处理-审核'))
+            return ['success' => false,'message' => '没有对应权限'];
 
-
-    public function destroy(WorkOrder $workOrder)
-    {
-        //
+        WorkOrder::query()->where('id',$request['id'])->update(['order_issue_type_id' => $request['type_id']]);
+        return ['success' => true];
     }
 }

+ 36 - 0
app/Services/OrderIssueService.php

@@ -44,6 +44,42 @@ class OrderIssueService
         }
     }
 
+    /**
+     * 生成问题件
+     * @param  array $params
+     * @return array|false[]
+     */
+    public function buildOrderIssue(array $params): array
+    {
+        $data = Carbon::now();
+        foreach ($params as $param){
+            $inner_params[] = [
+                'order_id' => $param['order_id'],
+                'result_explain'=> $param['result_explain'] ?? '',
+                'imported_status'=> $param['imported_status'] ?? '正常',
+                'custom_code'=> $param['custom_code'] ?? null ,
+                'hidden_tag'=> $param['hidden_tag'] ?? null,
+                'order_issue_type_id' => $param['order_issue_type_id'] ?? '',
+                'created_at' => $data,
+                'updated_at' => $data,
+            ];
+        }
+        if (!isset($inner_params)) return ['success' => false];
+        $bool = OrderIssue::query()->insert($inner_params);
+        if (!$bool) return ['success' => false,'message' => '创建问题件异常'];
+        $ordersIssues = OrderIssue::query()->whereIn('order_id', data_get($inner_params, '*.order_id'))->get();
+        event(new AddOrUpdateOrderIssues(data_get($ordersIssues,'*.order_id')));
+        $this->同步退单状态($ordersIssues);
+        $param = [
+            'ids' => data_get($ordersIssues, '*.id'),
+            'content' => '',
+            'user_id' => Auth::user()['id'],
+            'type' => '创建'
+        ];
+        app(OrderIssueProcessLogService::class)->create($param);
+        return ['success' => true];
+    }
+
     public function createOrderIssueByWmsOrder($orderHeaders, $order_issue_type_id, $result_explain, $imported_status = '正常', $custom_code = null,$hiddenTag = null)
     {
         /** @var OrderService $orderService */

+ 108 - 97
app/Services/WorkOrderService.php

@@ -7,6 +7,7 @@ use App\OrderIssue;
 use App\OrderIssueType;
 use App\Traits\ServiceAppAop;
 use App\WorkOrder;
+use App\WorkOrderType;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Support\Carbon;
 use Illuminate\Support\Facades\Auth;
@@ -17,70 +18,81 @@ class WorkOrderService
 
     protected $modelClass = WorkOrder::class;
 
+    protected $work_type_relation = [
+        '拦截' => '订单拦截',
+        '信息更改' => '订单收件信息修改',
+        '其他' => '订单其他异常',
+        '快递异常' => '订单快递异常',
+        '错漏发' => '快递错漏发',
+        '破损' => '快递破损',
+    ];
+
     /**
-     * 订单拦截 工单
-     * @param $workOrderType
-     * @param $uniquelyTags
-     * @param int $status
-     * @param int $grad
-     * @return array
+     * 生成工单
+     * @param $params
+     * @return array|bool[]
      */
-    public function interceptOrder($workOrderType, $uniquelyTags, int $grad = 1, int $status = 1): array
+    public function build($params): array
     {
-        app("OrderService")->syncOrderByCodes($uniquelyTags);  // 同步订单
-        $creator_id = Auth::user()['id'];  // 创建人
-        if (is_string($uniquelyTags)) $uniquelyTags = [$uniquelyTags];
-        if (!$uniquelyTags) return ['success' => false, 'message' => '订单号为空'];
-        $orders = Order::query()->whereIn('code', $uniquelyTags)->get();
-        $created_at = Carbon::now();
-        foreach ($uniquelyTags as $uniquelyTag) {
-            $order = $orders->where('code', $uniquelyTag)->first();
-            $params[] = [
+        $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;
+            } 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 = "拦截订单:".$order->client_code ?? '';
+                    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' => $workOrderType->id,
-                'grad' => $grad,
-                'remark' => "{$workOrderType->name}:{$uniquelyTag}",
-                'outer_table_name' => $workOrderType->table_name ?? 'orders',
-                'order_id' => $order->id ?? '',
-                'uniquely_tag' => $uniquelyTag,
-                'status' => $status,
-                'created_at' => $created_at,
+                'work_order_type_id' => $work_order_type_id ?? 0,
+                '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($params)) WorkOrder::query()->insert($params);
-        return ['success' => true];
-    }
-
-    /**
-     * 创建 信息更改 工单
-     * @param $workOrderType
-     * @param $uniquelyTag
-     * @param $remake
-     * @param int $grad
-     * @param int $status
-     * @return bool[]
-     */
-    public function editOrder($workOrderType, $uniquelyTag,$remake,int $grad = 1,int $status = 1) :array
-    {
-        app("OrderService")->syncOrderByCodes([$uniquelyTag]);  // 同步订单
-        $creator_id = Auth::user()['id'];  // 创建人
-        $order = Order::query()->where('code',$uniquelyTag)->first();
-
-        if (!$order) return ['success' => false,'message' => '对应订单未找到'];
-        WorkOrder::query()->create(
-            [
-                'creator_id' => $creator_id,
-                'work_order_type_id' => $workOrderType->id,
-                'grad' => $grad,
-                'remark' => $remake,
-                'outer_table_name' => $workOrderType->table_name ?? 'orders',
-                'order_id' => $order->id ?? '',
-                'uniquely_tag' => $uniquelyTag,
-                'status' => $status,
-                'created_at' => Carbon::now(),
-            ]
-        );
-        return ['success' => true];
+        if (isset($inner_params)){
+            WorkOrder::query()->insert($inner_params);
+            return ['success' => true];
+        }
+        return ['success' => false,'message' => '参数异常'];
     }
 
     /**
@@ -93,7 +105,7 @@ class WorkOrderService
         $wordOrder->update(['reviewer_id' => Auth::user()['id'], 'review_at' => Carbon::now(), 'status' => 2,]);
         $wordOrder = WorkOrder::query()->with(['type', 'creator', 'order' => function ($query) {
             /** @var $query Builder */
-            $query->with('packages', 'issue','logistic');
+            $query->with('packages', 'issue', 'logistic');
         }, 'reviewer'])->find($wordOrder['id']);
         return ['success' => true, 'data' => $wordOrder];
     }
@@ -105,57 +117,36 @@ class WorkOrderService
      */
     public function batchReview($workOrders): array
     {
-        $ids = $workOrders->map(function($item){return $item->id;})->toArray();
-        WorkOrder::query()->whereIn('id',$ids)->update(['review_at' => Carbon::now(),'reviewer' => Auth::user()['id']]);
+        $ids = $workOrders->map(function ($item) {
+            return $item->id;
+        })->toArray();
+        WorkOrder::query()->whereIn('id', $ids)->update(['review_at' => Carbon::now(), 'reviewer_id' => Auth::user()['id']]);
         $wordOrder = WorkOrder::query()->with(['type', 'creator', 'order' => function ($query) {
             /** @var $query Builder */
-            $query->with('packages', 'issue','logistic');
+            $query->with('packages', 'issue', 'logistic');
         }, 'reviewer'])->find($ids);
         return ['success' => true, 'data' => $wordOrder];
     }
 
+
     /**
-     * 拦截工单
      * 生成问题件
      * @param $work_orders
-     * @return array|bool[]
+     * @return array
      */
-    public function createOrderIssue($work_orders): array
+    public function buildOrderIssue($work_orders): array
     {
-        $order_ids = $work_orders->map(function ($item) {
-            return $item->order_id;
-        });
-
-        $order_issues = OrderIssue::query()->with('order')->whereIn('order_id', $order_ids)->get();
-
-        $codes = $order_issues->map(function ($item) {
-            return $item->order->code;
-        })->toArray();
-        if (count($codes) > 0)
-            return ['success' => false, 'message' => '对应【' . join(',', $codes) . '】订单已有问题件'];
-
-        $orders = Order::query()->select('code')->whereIn('id', $order_ids)->get();
-
-        $order_headers = app(OracleDOCOrderHeaderService::class)->getQuery()->whereIn('orderNo', $orders)->get();       // 获取
-
-        $order_issue_type = OrderIssueType::query()->where('name', '拦截')->first();       // 问题件类型
-
-        $result = app('OrderIssueService')->createOrderIssueByWmsOrder($order_headers, $order_issue_type->id, '拦截工单');
-
-        if (!$result) return ['success' => false, 'message' => '生成对应问题件失败'];
-
-        $work_orders = WorkOrder::query()->with(['type', 'creator', 'order' => function ($query) {
-                /** @var $query Builder */
-            $query->with('packages', 'issue','logistic');
-            }, 'reviewer'])
-            ->where('outer_table_name', 'orders')
-            ->whereIn('order_id', $order_ids)
-            ->get();
-
-        return ['success' => true, 'data' => $work_orders];
+        foreach ($work_orders as $work_order) {
+            $inner_params[] = [
+                'order_id' => $work_order->order_id,
+                'order_issue_type_id' => $work_order->order_issue_type_id,
+                'result_explain' => $work_order->remark,
+            ];
+        }
+        if (!isset($inner_params)) return ['success' => false,'message' => '创建问题件失败'];
+        return  app('OrderIssueService')->buildOrderIssue($inner_params);
     }
 
-
     /**
      * 按 指定工单类型 和 唯一标识 确认工单是否存在
      * @param $work_order_type_id
@@ -176,4 +167,24 @@ class WorkOrderService
         }
         return ['success' => false];
     }
+
+    /**
+     * 标记已有 问题件的工单
+     * @param $workOrders
+     */
+    public function tags(&$workOrders)
+    {
+        $order_ids = $workOrders->map(function($item){
+            return $item->order_id;
+        });
+        $order_issues = OrderIssue::query()->whereIn('order_id',$order_ids)->get();
+        foreach ($order_issues as $order_issue) {
+            $codes[$order_issue->order_id] = true;
+        }
+        if (!isset($codes))return;
+        foreach ($workOrders as &$workOrder) {
+            if (array_key_exists($workOrder->order_id,$codes))$workOrder->is_issue_order= true;
+            else  $workOrder->is_issue_order= false;
+        }
+    }
 }

+ 7 - 0
app/WorkOrder.php

@@ -20,6 +20,7 @@ class WorkOrder extends Model
         'status',           // 状态
         'creator_id',       // 创建人
         'reviewer_id',      // 审核人
+        'order_issue_type_id', // 问题件类型
         'work_order_type_id',  // 工单类型
         'grad',         // 紧急等级
         'remark',       // 工单信息描述
@@ -108,6 +109,12 @@ class WorkOrder extends Model
         return $this->BelongsTo(WorkOrderType::class,'work_order_type_id');
     }
 
+    // 生成问题件类型
+    public function issueType():BelongsTo
+    {
+        return $this->belongsTo(OrderIssueType::class,'order_issue_type_id');
+    }
+
     public function scopeFilter($query, $filters)
     {
         return $filters->apply($query);

+ 32 - 0
database/migrations/2021_08_19_175812_change_work_orders_table.php

@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class ChangeWorkOrdersTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('work_orders', function (Blueprint $table) {
+            $table->tinyInteger('order_issue_type_id')->index()->comment('问题件类型');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('work_orders', function (Blueprint $table) {
+            $table->dropColumn('order_issue_type_id');
+        });
+    }
+}

+ 3 - 45
resources/views/order/index/_work_order_modal.blade.php

@@ -18,16 +18,6 @@
                         </select>
                     </div>
                 </div>
-                {{--任务紧急程度--}}
-                <div class="form-group">
-                    <label for="grad" class="">任务紧急程度</label>
-                    <div class="pl-1">
-                        <div v-for="(item,i) in grads">
-                            <input type="radio" :id="'grad'+i" name="grad" :value="item.value" v-model="workOrder.grad">
-                            <label :for="'grad'+i">@{{ item.name }}</label>
-                        </div>
-                    </div>
-                </div>
                 {{--其他--}}
                 <template v-if="['其他',null,'快递异常','错漏发','破损'].includes(workOrder.orderIssueType)">
                     <hr>
@@ -39,41 +29,9 @@
                 {{--信息更改--}}
                 <template v-else-if="workOrder.orderIssueType === '信息更改'">
                     <hr>
-                    <div class="form-group">
-                        <label for="contact">收货人</label>
-                        <div class="pl-1">
-                            <input class="form-control" v-model="workOrder.remark.name" id="contact">
-                        </div>
-                    </div>
-                    <div class="form-group">
-                        <label for="phone">联系号码</label>
-                        <div class="pl-1">
-                            <input class="form-control" v-model="workOrder.remark.phone" id="phone"></input>
-                        </div>
-                    </div>
-                    <div class="form-group">
-                        <label for="province">省</label>
-                        <div class="pl-1">
-                            <input class="form-control" v-model="workOrder.remark.province" id="province"></input>
-                        </div>
-                    </div>
-                    <div class="form-group">
-                        <label for="city">市</label>
-                        <div class="pl-1">
-                            <input class="form-control" v-model="workOrder.remark.city" id="city"></input>
-                        </div>
-                    </div>
-                    <div class="form-group">
-                        <label for="istrict">区</label>
-                        <div class="pl-1">
-                            <input class="form-control" v-model="workOrder.remark.district" id="district"></input>
-                        </div>
-                    </div>
-                    <div class="form-group">
-                        <label for="adder">详细地址</label>
-                        <div class="pl-1">
-                            <input class="form-control" v-model="workOrder.remark.adder" id="adder"></input>
-                        </div>
+                    <label for="remake_info">新的收方信息</label>
+                    <div class="pl-1">
+                        <textarea class="form-control" name="" id="remake_info" cols="30" rows="5" v-model="workOrder.remark.info"></textarea>
                     </div>
                 </template>
             </div>

+ 11 - 20
resources/views/order/index/delivering.blade.php

@@ -913,16 +913,7 @@
                         window.tempTip.show('未选中任何订单');
                         return;
                     }
-                    let order = this.orders.filter(item=>{
-                        return checkData.includes(item.orderno);
-                    })[0];
                     this.workOrder.orderIssueType = null;
-                    this.workOrder.remark.name = order.c_contact
-                    this.workOrder.remark.phone = order.c_tel2?order.c_tel2:order.c_tel1;
-                    this.workOrder.remark.province = order.c_province;
-                    this.workOrder.remark.city = order.c_city;
-                    this.workOrder.remark.district = order.c_district
-                    this.workOrder.remark.adder = order.c_address1;
                     this.workOrder.info = null;
                     $('#intercept-modal').modal('show');
                 },
@@ -936,49 +927,49 @@
                 buildWorkOrder(){  // 生成工单
                     let url = '{{route('workOrder.storeApi')}}';
                     let data = {};
-                    console.log(123);
                     switch (this.workOrder.orderIssueType){
                         case "信息更改":
                             if (checkData.length === 1){
-                                data = {
+                                data = [{
                                     order_no:checkData[0],
                                     order_issue_type:"信息更改",
-                                    grad:this.remark.grad,
-                                    remark:`${this.workOrder.remark.name} ${this.workOrder.remark.phone} ${this.workOrder.remark.province} ${this.workOrder.remark.city} ${this.workOrder.remark.city} ${this.workOrder.remark.district} ${this.workOrder.remark.adder}`,
-                                };
+                                    grad:1,
+                                    remark: this.workOrder.remark.info,
+                                }];
                                 break;
                             }
                             window.tempTip.show('不能批量创建信息修改工单');
                             return;
                         case "拦截":
-                        case "其他":
+                        case "快递异常":
                         case "错漏发":
-                        case "仓库问题":
-                        case "延迟发货":
+                        case "破损":
                             data = checkData.map(item=>{
                                 return {
                                     order_no: item,
-                                    grad:this.workOrder.remark.grad,
+                                    grad:1,
                                     order_issue_type:this.workOrder.orderIssueType,
                                     remark:this.workOrder.remark.info,
                                 };
                             });
                             break;
-                        default :
+                        default:
                             data = checkData.map(item=>{
                                 return {
                                     order_no: item,
-                                    grad:this.workOrder.remark.grad,
+                                    grad:1,
                                     order_issue_type:null,
                                     remark:this.workOrder.remark.info,
                                 };
                             });
                             break;
                     }
+
                     window.tempTip.setIndex(1999);
                     window.axios.post(url,{params:data}).then(res=>{
                         if (res.data.success){
                             window.tempTip.showSuccess('工单生成成功');
+                            $('#intercept-modal').modal('hide');
                         } else {
                             window.tempTip.show(res.data.message ? res.data.message : '工单创建异常');
                         }

+ 65 - 37
resources/views/order/workOrder/index.blade.php

@@ -31,7 +31,7 @@
                                 @click="batchReview">
                             批量审核
                         </button>
-                            </span>
+                        </span>
                     @endcan
                 </div>
 
@@ -46,7 +46,7 @@
                                 </td>
                                 <td class="text-center">
                                     <span>@{{ i+1 }}</span>
-                                    <span v-if="item.order  && item.order.issue" class="badge badge-primary">问题件</span>
+                                    <span v-show="item.is_issue_order" class="badge badge-primary">问题件</span>
                                 </td>
                                 <td class="text-center">
                                     <template v-if="item.status === '已处理'">
@@ -64,6 +64,18 @@
                                                   v-if="item.grad === '重要且紧急'">@{{ item.grad }}</span></h5>
                                     </template>
                                 </td>
+                                <td class="text-center">
+                                    @can('订单管理-订单问题件生成')
+                                        <button class="btn btn-sm btn-outline-primary" @click="createOrderIssue(item,true)" v-show="!item.is_issue_order ">
+                                            生成问题件
+                                        </button>
+                                    @endcan
+                                    @can('订单管理-工单处理-审核')
+                                        <button class="btn btn-sm btn-outline-success" v-show="item.status !== '已处理'" @click="review(item,i)">
+                                            审核
+                                        </button>
+                                    @endcan
+                                </td>
                                 <td>@{{item.type ? item.type.name : '' }}</td>
                                 <td>@{{item.order ? (item.order.logistic ? item.order.logistic.name : '') : '' }}</td>
                                 <td class="text-center">
@@ -93,6 +105,19 @@
 
                                     </template>
                                 </td>
+                                <td class="text-center">
+                                    @can('订单管理-工单处理-审核')
+                                        <select class="form-control form-control-sm"
+                                                :disabled="item.review_at || item.is_issue_order"
+                                                :value="item.order_issue_type_id"
+                                                @change="changeIssueType(item,$event)" >
+                                            <option value="0"></option>
+                                            <option  v-for="type in orderIssueTypes" :value="type.name">@{{ type.value }}</option>
+                                        </select>
+                                    @else
+                                        @{{ item.issue_type ?  item.issue_type.name : '' }}
+                                    @endcan
+                                </td>
                                 <td class="text-center">@{{ item.remark }}</td>
                                 <td class="text-center">@{{ item.status }}</td>
                                 <td class="text-center">
@@ -129,26 +154,7 @@
                                 <td class="text-center">@{{ item.created_at }}</td>
                                 <td>@{{ item.reviewer ? item.reviewer.name : ''}}</td>
                                 <td>@{{ item.review_at }}</td>
-                                <td class="text-center">
-
-                                    @can('订单管理-订单问题件生成')
-                                        <template
-                                            v-if="item.type && item.type.name === '订单拦截' && item.status !== '已处理' ">
-                                            <button class="btn btn-sm btn-outline-primary"
-                                                    @click="createOrderIssue(item,true)"
-                                                    v-if="item.order && item.order.issue === null">
-                                                生成问题件
-                                            </button>
-                                        </template>
-                                    @endcan
 
-                                    @can('订单管理-工单处理-审核')
-                                        <button class="btn btn-sm btn-outline-success" v-if="item.status !== '已处理'"
-                                                @click="review(item,i)">
-                                            审核
-                                        </button>
-                                    @endcan
-                                </td>
                             </tr>
                         </template>
                         </tbody>
@@ -177,6 +183,11 @@
                     },
                     @endforeach
                 ],
+                orderIssueTypes:[
+                    @foreach($orderIssueTypes as $type)
+                    {name:'{{$type->id}}',value:"{{$type->name}}"},
+                    @endforeach
+                ],
                 selectOrderPackage: null,
                 selectOrder: null,
             },
@@ -220,9 +231,11 @@
                 let column = [
                     {name: 'no', value: '序号', neglect: true},
                     {name: 'grad', value: '工单等级'},
+                    {name: 'operation', value: '操作', neglect: true},
                     {name: 'type', value: '相关类型'},
                     {name: 'logisticName', value: '承运商'},
                     {name: 'logisticNumber', value: '快递单号'},
+                    {name: 'orderIssueType', value: '问题件类型'},
                     {name: 'workOrderInfo', value: '问题描述'},
                     {name: 'status', value: '状态', neglect: true},
                     {name: 'Info', value: '物流跟踪信息', neglect: true},
@@ -230,7 +243,6 @@
                     {name: 'submit_at', value: '提交时间'},
                     {name: 'reviewer', value: '审核人'},
                     {name: 'review_at', value: '审核时间'},
-                    {name: 'operation', value: '操作', neglect: true},
                 ];
 
                 new Header({
@@ -271,10 +283,11 @@
                     });
                 },
                 review(item, i) {
-                    let url = '{{url('apiLocal/workOrder/review')}}';
+                    let url = '{{route('workOrder.reviewApi')}}';
                     let data = {id: item.id};
                     window.axios.post(url, data).then(res => {
                         if (res.data.success) {
+                            res.data.data.is_issue_order = item.is_issue_order;
                             this.$set(this.workOrders, i, res.data.data);
                             this.sortOrder(res.data.data);
                             window.tempTip.showSuccess("审核完成");
@@ -286,25 +299,22 @@
                     })
                 },
                 createOrderIssue(item, tag) { // 生成问题件
-                    let url = '{{url('apiLocal/workOrder/createOrderIssue')}}';
+                    let url = '{{route('workOrder.buildOrderIssueApi')}}';
                     let data = {};
-                    let _this = this;
                     if (tag) data.ids = [item.id];
                     else data.ids = checkData;
-
                     if (!confirm('是否生成对应的问题件')) return;
-
+                    let _this =this;
                     window.axios.post(url, data).then(res => {
                         if (res.data.success) {
-                            if (res.data.data) {
-                                $.each(res.data.data, (i, data) => {
-                                    $.each(_this.workOrders, (index, item) => {
-                                        if (item.id === data.id) {
-                                            _this.$set(this.workOrders, index, data);
-                                        }
-                                    });
+                            res.data.data.forEach(item=>{
+                                this.workOrders.forEach((workOrder,i)=>{
+                                    if (item.id === workOrder.id){
+                                        _this.sortOrder(item);
+                                        _this.$set(_this.workOrders,i,item);
+                                    }
                                 });
-                            }
+                            });
                             this.$forceUpdate();
                             window.tempTip.showSuccess('已生成对应的问题件');
                         } else {
@@ -339,7 +349,8 @@
                             let item_order_logistic_name = item.order.logistic.name;
                             let item_order_adder = item.order.consignee_name + ' '
                                 + item.order.consignee_phone + ' '
-                                + item.order.province + ' ' + item.order.city + ' ' + item.order.district + ' ' + item.order.address;
+                                // + item.order.province + ' ' + item.order.city + ' ' + item.order.district
+                                + ' ' + item.order.address;
                             item.order.packages.forEach(node => {
                                 rest_logistic += item_order_logistic_name + ' ' + node.logistic_number + ' ' + item_order_adder + ' ——拦截\n';
                             });
@@ -389,7 +400,7 @@
                     }
                 },
                 batchReview() {
-                    let url = '{{route('workOrder.BatchReview')}}';
+                    let url = '{{route('workOrder.batchReviewApi')}}';
                     let data = {ids: checkData};
                     let _this = this;
                     window.tempTip.setIndex('1999');
@@ -412,6 +423,23 @@
                         window.tempTip.show(err);
                     })
                 },
+                changeIssueType(item,e){
+                    let url = '{{route('workOrder.updateIssueTypeApi')}}';
+                    let data = {
+                        id:item.id,
+                        type_id: $(e.target).val()
+                    };
+                    window.axios.post(url,data).then(res=>{
+                        if (res.data.success){
+                            window.tempTip.showSuccess('修改成功');
+                            item.order_issue_type_id = data.type_id;
+                        }else{
+                            window.tempTip.show(res.data.message ? res.data.message : '修改异常');
+                        }
+                    }).catch(err=>{
+                        window.tempTip.show(err);
+                    });
+                }
             },
         });
     </script>

+ 6 - 7
routes/apiLocal.php

@@ -229,10 +229,9 @@ Route::group(['prefix' => 'print'],function (){
 });
 
 Route::prefix('workOrder')->group(function(){
-    Route::post('interceptOrder','WorkOrderController@interceptOrderApi');
-    Route::post('editOrderReceiveInfo','WorkOrderController@editOrderReceiveInfoApi');
-    Route::post('store','WorkOrderController@storeApi')->name('workOrder.storeApi');
-    Route::post('review','WorkOrderController@reviewApi');
-    Route::post('batchReview','WorkOrderController@batchReviewApi')->name('workOrder.BatchReview');
-    Route::post('createOrderIssue','WorkOrderController@createOrderIssueApi');
-});
+    Route::post('store','WorkOrderController@storeApi')->name('workOrder.storeApi'); // 创建
+    Route::post('review','WorkOrderController@reviewApi')->name('workOrder.reviewApi'); // 审核
+    Route::post('batchReview','WorkOrderController@batchReviewApi')->name('workOrder.batchReviewApi');  // 批量审核
+    Route::post('buildOrderIssue','WorkOrderController@buildOrderIssueApi')->name('workOrder.buildOrderIssueApi');  // 生成问题件
+    Route::post('updateIssueType','WorkOrderController@updateIssueTypeApi')->name('workOrder.updateIssueTypeApi'); // 修改问题类型
+ });