Browse Source

工单批量添加问题件的处理日志

loustwo 4 năm trước cách đây
mục cha
commit
4b6a577f64

+ 48 - 14
app/Http/Controllers/OrderIssueProcessLogController.php

@@ -7,6 +7,7 @@ use App\OrderIssue;
 use App\OrderIssueProcessLog;
 use App\Services\OrderIssueProcessLogService;
 use App\User;
+use App\WorkOrder;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Gate;
@@ -14,6 +15,14 @@ use Illuminate\Support\Facades\Gate;
 class OrderIssueProcessLogController extends Controller
 {
 
+    /** @var OrderIssueProcessLogService $service */
+    private $service;
+
+    public function __construct()
+    {
+        $this->service = app(OrderIssueProcessLogService::class);
+    }
+
     /**
      * 处理日志创建
      * @param Request $request
@@ -34,7 +43,7 @@ class OrderIssueProcessLogController extends Controller
                     'type' => '处理',
                 ]);
                 $log->loadMissing('user');
-                return ['success' =>true,'data' =>$log ];
+                return ['success' => true, 'data' => $log];
             } catch (Exception $e) {
                 return ['success' => false, 'fail_info' => $e->getMessage()];
             }
@@ -51,16 +60,17 @@ class OrderIssueProcessLogController extends Controller
      */
     public function destroyApi(Request $request): array
     {
-        if(!$request->filled('id')){
-            return ['success'=>false,'fail_info'=>'没有传入对应参数'];
+        if (!$request->filled('id')) {
+            return ['success' => false, 'fail_info' => '没有传入对应参数'];
         }
         /** @var OrderIssueProcessLog $orderIssueProcessLog */
-        $orderIssueProcessLog = OrderIssueProcessLog::query()->where('id',$request->input('id'))->first();
+        $orderIssueProcessLog = OrderIssueProcessLog::query()->where('id', $request->input('id'))->first();
+        if (!$orderIssueProcessLog) return ['success' => false, 'fail_info' => '日志不存在,请刷新重试'];
         // 删除的如果是完结条目,将处理状态改为空
-        if($orderIssueProcessLog['type'] === '结束') OrderIssue::query()->where('id',$orderIssueProcessLog['order_issue_id'])->update(['final_status'=>null]);
+        if ($orderIssueProcessLog['type'] === '结束') OrderIssue::query()->where('id', $orderIssueProcessLog['order_issue_id'])->update(['final_status' => null]);
         $orderIssueProcessLog->delete();
         app('LogService')->log(__METHOD__, __FUNCTION__, json_encode($request->getContent()));
-        return ['success'=>true];
+        return ['success' => true];
     }
 
     /**
@@ -68,7 +78,8 @@ class OrderIssueProcessLogController extends Controller
      * @param Request $request
      * @return array
      */
-    public function batchStoreApi(Request $request){
+    public function batchStoreApi(Request $request)
+    {
         if (!Gate::allows('订单管理-问题件-编辑')) {
             return ['success' => false, 'fail_info' => '没有对应的权限'];
         }
@@ -79,17 +90,17 @@ class OrderIssueProcessLogController extends Controller
             $data = $service->batchStoreAndReturnLogs($request->all());
             $logs = OrderIssueProcessLog::query()
                 ->with('user')
-                ->whereIn('id',data_get($data,'*.id'))
+                ->whereIn('id', data_get($data, '*.id'))
                 ->get();
             $result_data = [];
             foreach ($logs as $log) {
-                $result_data[$log->order_issue_id] =$log;
+                $result_data[$log->order_issue_id] = $log;
             }
-            app('LogService')->log(__METHOD__,__FUNCTION__,json_encode($request->getContent()));
-            return ['success' => true,'logs' => $result_data];
+            app('LogService')->log(__METHOD__, __FUNCTION__, json_encode($request->getContent()));
+            return ['success' => true, 'logs' => $result_data];
         } catch (\Exception $e) {
-            app('LogService')->log(__METHOD__,__FUNCTION__,json_encode($request->getContent()).'||'.$e->getMessage()."||".$e->getTraceAsString());
-            return ['success' => false,$e->getMessage()];
+            app('LogService')->log(__METHOD__, __FUNCTION__, json_encode($request->getContent()) . '||' . $e->getMessage() . "||" . $e->getTraceAsString());
+            return ['success' => false, $e->getMessage()];
         }
     }
 
@@ -99,9 +110,32 @@ class OrderIssueProcessLogController extends Controller
         if (Gate::denies('订单管理-问题件-编辑'))
             return ['success' => false, 'fail_info' => '没有对应的权限'];
 
-        OrderIssueProcessLog::query()->where('id',$request['id'])->update(['tag'=>1]);
+        OrderIssueProcessLog::query()->where('id', $request['id'])->update(['tag' => 1]);
 
         return ['success' => true];
     }
 
+    /**
+     * 工单为问题批量添加处理日志
+     * @param Request $request
+     * @return array
+     */
+    public function workOrderCreateLogApi(Request $request): array
+    {
+        if (!Gate::allows('订单管理-问题件-编辑')) {
+            return ['success' => false, 'message' => '没有对应的权限'];
+        }
+        $workOrderQuery = WorkOrder::query()->select('order_id')->whereIn('id', $request->input('ids'));
+        $orderIssues = OrderIssue::query()->whereIn('order_id', $workOrderQuery)->get();
+        if (count($orderIssues) !== count($request->input('ids'))) {
+            return ['success' => false, 'message' => '部分工单没有对应的问题件,请检查后重试'];
+        }
+        $params = ['content' => $request->input('content'), 'orderIssueIds' => $orderIssues->map(function ($item) {
+            return $item->id;
+        })];
+        $data = $this->service->batchStoreAndReturnLogs($params);
+        $data = OrderIssueProcessLog::query()->with('user')->whereIn('id', data_get($data, "*.id"))->get();
+        return ['success' => true, 'data' => $data];
+    }
+
 }

+ 1 - 1
app/Services/OrderIssueProcessLogService.php

@@ -13,7 +13,7 @@ class OrderIssueProcessLogService
     use ServiceAppAop;
     protected $modelClass=OrderIssueProcessLog::class;
 
-    public function batchStoreAndReturnLogs($params)
+    public function batchStoreAndReturnLogs($params): array
     {
         $ids = $params['orderIssueIds'];
         $content = $params['content'];

+ 19 - 0
resources/views/order/workOrder/_edit_order_issue_log.blade.php

@@ -0,0 +1,19 @@
+<el-dialog :visible.sync="dialogBatchEditOrderIssueLogVisible" width="75%">
+
+    <div slot="title">
+        处理日志
+    </div>
+    <div class="form-group row" v-if="">
+        <label class="col-sm-2 col-form-label text-right text-primary">
+            输入处理内容
+        </label>
+        <textarea class="col-10 form-control" name="" id="" cols="30" rows="4" ref="order_issue_log"></textarea>
+    </div>
+    <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogBatchEditOrderIssueLogVisible = false">关 闭</el-button>
+        <el-button type="primary" @click="batchEditOrderIssueLog">
+            提交
+        </el-button>
+    </div>
+</el-dialog>
+

+ 67 - 8
resources/views/order/workOrder/index.blade.php

@@ -33,6 +33,13 @@
                         </button>
                     @endcan
 
+                    @can('订单管理-问题件-编辑')
+                        <button type="button"
+                                class="ml-1 btn btn-outline-dark btn-sm"
+                                @click="showBatchEditOrderIssueLog">批量处理说明
+                        </button>
+                    @endcan
+
                 </div>
                 <div>
                     <table class="table table-sm table-striped table-hover table-bordered td-min-width-80 " id="table">
@@ -220,6 +227,7 @@
         @include('order.workOrder._logistic_fill_work_order_modal')
         @include('order.workOrder._owner_fill_work_order_modal')
         @include('order.workOrder._batch_edit_work_order');
+        @include('order.workOrder._edit_order_issue_log');
     </div>
 @endsection()
 
@@ -420,14 +428,15 @@
                     selectLog: null,                // 工单日志
                     selectIndex: null,              // 选中工单
                     filePrefix: "{{asset("/storage")}}",
-                    dialogShowBaoShiVisible: false,
-                    dialogEditBaoShiVisible: false,
-                    dialogShowOwnerVisible: false,
-                    dialogEditOwnerVisible: false,
-                    dialogShowLogisticVisible: false,
-                    dialogEditLogisticVisible: false,
-                    dialogShowOrderWorkVisible: false,
-                    dialogBatchEditBaoShiVisible: false,
+                    dialogShowBaoShiVisible: false,              // 宝时编辑
+                    dialogEditBaoShiVisible: false,              // 宝时编辑
+                    dialogShowOwnerVisible: false,               // 货主编辑
+                    dialogEditOwnerVisible: false,               // 货主编辑
+                    dialogShowLogisticVisible: false,            // 承运商编辑
+                    dialogEditLogisticVisible: false,            // 承运商编辑
+                    dialogShowOrderWorkVisible: false,           // 工单详情
+                    dialogBatchEditBaoShiVisible: false,         // 宝时批量处理
+                    dialogBatchEditOrderIssueLogVisible: false,  // 问题件日志
                     batchEditWorkOrder: {
                         TypeName: '',
                         process_progress: '',
@@ -2732,6 +2741,8 @@
                         if (baoShi && bao_shi_tag === '1') return true;
                         return false;
                     },
+
+                    // 批量处理工单
                     batchEdit() {
                         let editWorkOrders = this.workOrders.filter(e => {
                             return checkData.includes(`${e.id}`);
@@ -2742,6 +2753,10 @@
                             this.errorTempTip('当前勾选工单部分状态,类型不符合');
                             return;
                         }
+                        if(!['拦截','信息更改'].includes(editWorkOrder.issue_type_name)){
+                            this.errorTempTip('批量处理仅适合拦截、信息更改的工单');
+                            return;
+                        }
                         this.batchEditWorkOrder = {
                             TypeName: editWorkOrder.issue_type_name,
                             p_process_progress: editWorkOrder.process_progress,
@@ -2803,6 +2818,50 @@
                             window.tempTip.cancelWaitingTip();
                             this.errorTempTip(err);
                         });
+                    },
+                    // 问题件批处理日志
+                    showBatchEditOrderIssueLog(){
+                        if (checkData.length === 0) {
+                            this.errorTempTip('请勾选工单');
+                            return;
+                        }
+                        this.dialogBatchEditOrderIssueLogVisible = true;
+                    },
+                    batchEditOrderIssueLog(){
+                        let url = '{{route('order.issue.log.workOrder.storeApi')}}';
+                        let data  = {
+                            ids:checkData,
+                            content:this.$refs.order_issue_log.value,
+                        };
+                        if (data.content === '' || data.content.trim().length === 0){
+                            this.errorTempTip('请输入处理内容');
+                            return ;
+                        }
+                        this.waitingTempTip('处理中');
+                        window.axios.post(url,data).then(res=>{
+                            window.tempTip.cancelWaitingTip();
+                            if (res.data.success){
+                                res.data.data.forEach(e=>{
+                                    this.workOrders.forEach(workOrder=>{
+                                        if (workOrder.order_issue){
+                                            let order_issue_id = workOrder.order_issue.id;
+                                            if (`${e.order_issue_id}` ===`${order_issue_id}` ){
+                                                workOrder.issue_logs.unshift(e);
+                                            }
+                                        }
+                                    })
+
+                                });
+                                this.successTempTip('处理完成');
+                                this.dialogBatchEditOrderIssueLogVisible = false;
+                                return;
+                            }
+                            this.errorTempTip(res.data.message ? res.data.message : '');
+                        }).catch(err=>{
+                            window.tempTip.cancelWaitingTip();
+                            this.errorTempTip(err)
+                        });
+
                     }
                 },
             })

+ 1 - 0
routes/apiLocal.php

@@ -105,6 +105,7 @@ Route::group(['prefix' => 'order'], function () {
             Route::post('destroy', 'OrderIssueProcessLogController@destroyApi')->name('order.issue.log.destroyApi');
             Route::post('batchStore','OrderIssueProcessLogController@batchStoreApi')->name('order.issue.log.batchStoreApi');
             Route::post('tag','OrderIssueProcessLogController@tagApi')->name('order.issue.log.tagApi');
+            Route::post('workOrder/store','OrderIssueProcessLogController@workOrderCreateLogApi')->name('order.issue.log.workOrder.storeApi');
         });
         Route::group(['prefix'=>'recycle'],function(){
             Route::post('recover','OrderIssueController@recoverOrderIssueApi');