فهرست منبع

工单 承运商->批量处理.拦截工单

loustwo 4 سال پیش
والد
کامیت
e7d7f62bbf

+ 26 - 1
app/Http/Controllers/WorkOrderInterceptController.php

@@ -50,7 +50,11 @@ class WorkOrderInterceptController extends Controller
     }
 
 
-
+    /**
+     * 承运商处理和重新编辑
+     * @param Request $request
+     * @return array
+     */
     public function logisticHandlerApi(Request $request):array
     {
         if (Gate::denies('订单管理-工单处理-承运商编辑'))
@@ -66,6 +70,27 @@ class WorkOrderInterceptController extends Controller
         return ['success' => true,'data' => $data];
     }
 
+    /**
+     * 承运商批量处理
+     * @param Request $request
+     * @return array
+     */
+    public function logisticBatchHandlerApi(Request $request): array
+    {
+        if (Gate::denies('订单管理-工单处理-承运商编辑'))
+            return ['success' => false, 'message' => '没有对应权限'];
+
+        $detail_ids = $request->input('detail_ids',[]);
+        if (count($detail_ids) == 0) return ['success' => false,'message' => '参数异常'];
+        $details = WorkOrderDetail::query()->find($request->input($detail_ids));
+
+        if (count($detail_ids) == 0) return ['success' => false,'message' => '参数异常'];
+        $this->service->logisticBatchHandler($details);
+
+        $data = $this->service->getDefaultWith($details);
+        return ['success' => true , 'data' => $data];
+    }
+
     public function baoShiReviewApi(Request $request):array
     {
         if (Gate::denies('订单管理-工单处理-宝时编辑'))

+ 12 - 2
app/Services/WorkOrderInterceptService.php

@@ -102,6 +102,17 @@ class WorkOrderInterceptService extends WorkOrderService
         $detail->workOrder->change('宝时终审',$params['process_progress'],'承运商处理');
     }
 
+    /**
+     * 承运商批量处理
+     * @param $details
+     * @param $params
+     */
+    public function logisticBatchHandler($details,$params){
+        foreach ($details as $detail){
+            $this->logisticHandler($detail,$params);
+        }
+    }
+
     public function baoShiReviewIntercept(WorkOrderDetail $detail,$params)
     {
         $this->logService->createLog($detail, '终审', '宝时终审');
@@ -114,7 +125,6 @@ class WorkOrderInterceptService extends WorkOrderService
      * 自动终审
      * @param WorkOrder $workOrder
      */
-
     public function autoReviewIntercept(WorkOrder $workOrder)
     {
         /** @var WorkOrderDetail $detail */
@@ -129,7 +139,7 @@ class WorkOrderInterceptService extends WorkOrderService
     }
 
     /**
-     * 批量修改
+     * 宝时客服批量终审
      */
     public function baoShiBatchReviewIntercept($workOrders,$processProgress){
         $params = ['process_progress'=>$processProgress];

+ 93 - 38
resources/views/order/workOrder/index.blade.php

@@ -46,6 +46,12 @@
                                 @click="batchEndWorkOrder">批量完结
                         </button>
                     @endcan
+                    @can('订单管理-工单处理-承运商编辑')
+                        <button type="button"
+                                class="ml-1 btn btn-outline-dark btn-sm"
+                                @click="logisticBatchHandler">批量处理
+                        </button>
+                    @endcan
                 </div>
                 <div>
                     <table class="table table-sm table-striped table-hover table-bordered td-min-width-80 " id="table">
@@ -775,7 +781,7 @@
                             commodities: detail ? detail.commodities : '',
                             issue_type_name: detail ? detail.issue_type.name : '',
                             status: detail ? detail.status : '',
-                            reissue_logistic_number:detail ? detail.reissue_logistic_number : '',
+                            reissue_logistic_number: detail ? detail.reissue_logistic_number : '',
                             logistic_number: detail ? detail.logistic_number : '',
                             price: detail ? detail.price : '',
                             return_logistic_number: detail ? detail.return_logistic_number : '',
@@ -785,7 +791,7 @@
                             return_phone: detail ? detail.return_phone : '',
                             return_name: detail ? detail.return_name : '',
                             images: detail ? detail.images : '',
-                            logistic_handle_tag: detail ? detail.logistic_handle_tag  : '',
+                            logistic_handle_tag: detail ? detail.logistic_handle_tag : '',
                         };
                     },
                     groupCommodities(workOrder, isCurrent = true) {
@@ -2778,7 +2784,7 @@
                             this.errorTempTip('当前勾选工单部分状态,类型不符合');
                             return;
                         }
-                        if(!['拦截','信息更改'].includes(editWorkOrder.issue_type_name)){
+                        if (!['拦截', '信息更改'].includes(editWorkOrder.issue_type_name)) {
                             this.errorTempTip('批量处理仅适合拦截、信息更改的工单');
                             return;
                         }
@@ -2823,7 +2829,7 @@
                         let url = null;
                         if ("拦截" === TypeName) {
                             url = '{{route('workOrder.intercept.baoShi.batchReviewApi')}}';
-                        } else if ('信息更改' === TypeName){
+                        } else if ('信息更改' === TypeName) {
                             url = '{{route('workOrder.informationChange.baoShi.batchReviewApi')}}'
                         }
                         let data = {ids: checkData, process_progress: process_progress};
@@ -2833,8 +2839,8 @@
                             if (res.data.success) {
                                 this.successTempTip('处理完成,刷新页面展示');
                                 this.dialogBatchEditBaoShiVisible = false;
-                                this.workOrders.forEach(e=>{
-                                    if (checkData.includes(`${e.id}`))e.process_progress = process_progress;
+                                this.workOrders.forEach(e => {
+                                    if (checkData.includes(`${e.id}`)) e.process_progress = process_progress;
                                 });
                                 return;
                             }
@@ -2845,32 +2851,32 @@
                         });
                     },
                     // 问题件批处理日志
-                    showBatchEditOrderIssueLog(){
+                    showBatchEditOrderIssueLog() {
                         if (checkData.length === 0) {
                             this.errorTempTip('请勾选工单');
                             return;
                         }
                         this.dialogBatchEditOrderIssueLogVisible = true;
                     },
-                    batchEditOrderIssueLog(){
+                    batchEditOrderIssueLog() {
                         let url = '{{route('order.issue.log.workOrder.storeApi')}}';
-                        let data  = {
-                            ids:checkData,
-                            content:this.$refs.order_issue_log.value,
+                        let data = {
+                            ids: checkData,
+                            content: this.$refs.order_issue_log.value,
                         };
-                        if (data.content === '' || data.content.trim().length === 0){
+                        if (data.content === '' || data.content.trim().length === 0) {
                             this.errorTempTip('请输入处理内容');
-                            return ;
+                            return;
                         }
                         this.waitingTempTip('处理中');
-                        window.axios.post(url,data).then(res=>{
+                        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){
+                            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}` ){
+                                            if (`${e.order_issue_id}` === `${order_issue_id}`) {
                                                 workOrder.issue_logs.unshift(e);
                                             }
                                         }
@@ -2882,48 +2888,97 @@
                                 return;
                             }
                             this.errorTempTip(res.data.message ? res.data.message : '');
-                        }).catch(err=>{
+                        }).catch(err => {
                             window.tempTip.cancelWaitingTip();
                             this.errorTempTip(err)
                         });
                     },
-                    batchEndWorkOrder(){
-                        if (checkData.length === 0){
+                    checkDataHasSize() {
+                        if (checkData.length === 0) {
                             this.errorTempTip("请勾选需要完结的工单");
-                            return ;
+                            return false;
                         }
-                        let count = this.workOrders.filter(e=>checkData.includes(`${e.id}`))
-                            .filter(e=>e.status !== '待货主完结').length;
-                        if (count>0){
+                        return true;
+                    },
+                    checkDataIsToBeEnd() {
+                        let count = this.workOrders.filter(e => checkData.includes(`${e.id}`))
+                            .filter(e => e.status !== '待货主完结').length;
+                        if (count > 0) {
                             this.errorTempTip("勾选工单中有不符合完结条件的工单");
-                            return ;
+                            return false;
                         }
-                        let detail_ids = this.workOrders.filter(e=>{
+                        return true;
+                    },
+                    getCheckDetailsIds(){
+                        return this.workOrders.filter(e => {
                             return checkData.includes(`${e.id}`);
-                        }).map(e=>{
+                        }).map(e => {
                             return e.pending_detail ? e.pending_detail.id : null;
-                        }).filter(e=>e);
+                        }).filter(e => e);
+                    },
+                    batchEndWorkOrder() {
+                        if (!this.checkDataHasSize()) return;
+                        if (!this.checkDataIsToBeEnd()) return;
+                        let detail_ids = this.getCheckDetailsIds();
                         let url = "{{route('workOrder.owner.batchEndApi')}}";
-                        let data = {detail_ids:detail_ids};
+                        let data = {detail_ids: detail_ids};
                         this.waitingTempTip('处理中');
-                        window.axios.post(url,data).then(res=>{
+                        window.axios.post(url, data).then(res => {
                             window.tempTip.cancelWaitingTip();
-                            if(res.data.success){
-                                checkData.forEach(e=>{
-                                    let index = this.workOrders.findIndex(workOrder=>`${workOrder.id}` === `${e}`);
-                                    if (index >= 0){
-                                        this.$delete(this.workOrders,index);
+                            if (res.data.success) {
+                                checkData.forEach(e => {
+                                    let index = this.workOrders.findIndex(workOrder => `${workOrder.id}` === `${e}`);
+                                    if (index >= 0) {
+                                        this.$delete(this.workOrders, index);
                                     }
                                 });
                             } else {
                                 this.errorTempTip(res.data.message);
                             }
-                        }).catch(err=>{
+                        }).catch(err => {
                             window.tempTip.cancelWaitingTip();
                             this.errorTempTip(err);
                         });
+                    },
+                    getSelectedWorkOrders(){
+                        return this.workOrders(e=>checkData.includes(e.id));
+                    },
+                    getItemsStatus(items){
+                        let item = items.find();
+                        return item.status;
+                    },
+                    checkDataIsSingleStatus(items){ //校验items内的status是否相同
+                        let status = this.getItemsStatus(items)
+                        if (items.filter(e=>e.status !== status).length > 0) {
+                            this.errorTempTip('工单的状态不一致');
+                            return false;
+                        }
+                        return true;
+                    },
+                    getItemsIssueTypeName(items){
+                        let item = items.find();
+                        return item.issue_type_name;
+                    },
+                    checkDataIsSingleIssueType(items){
+                        let issue_type_name = this.getItemsIssueTypeName(items);
+                        if (items.filter(e=>e.issue_type_name !== issue_type_name).length > 0) {
+                            this.errorTempTip('工单的类别不一致');
+                            return false;
+                        }
+                        return true;
+                    },
+                    logisticBatchHandler() {
+                        if (!this.checkDataHasSize()) return ;
+                        let selected_items = this.getSelectedWorkOrders();
+                        if (! this.checkDataIsSingleIssueType(selected_items)) return ;
+                        if (! this.checkDataIsSingleStatus(selected_items)) return ;
+
+
                     }
                 },
+                /**
+                 * 'workOrder.intercept.logistic.batchHandlerApi' 拦截批量完成
+                 */
             })
         ;
     </script>

+ 1 - 0
routes/apiLocal.php

@@ -296,6 +296,7 @@ Route::prefix('workOrder')->group(function(){
         Route::post('store','WorkOrderInterceptController@storeApi')->name('workOrder.intercept.storeApi');                                     // 拦截订单创建
         Route::post('store/batch','WorkOrderInterceptController@batchStoreApi')->name('workOrder.intercept.BatchStoreApi');                                     // 拦截订单创建
         Route::post('logistic/header','WorkOrderInterceptController@logisticHandlerApi')->name('workOrder.intercept.logistic.handlerApi');        // 承运商处理
+        Route::post('logistic/batchHeader','WorkOrderInterceptController@logisticBatchHandlerApi')->name('workOrder.intercept.logistic.batchHandlerApi');        // 承运商处理
         Route::post('baoShi/review','WorkOrderInterceptController@baoShiReviewApi')->name('workOrder.intercept.baoShi.reviewApi');              // 宝时终审
         Route::post('baoShi/batchReview','WorkOrderInterceptController@baoShiBatchReviewApi')->name('workOrder.intercept.baoShi.batchReviewApi');              // 宝时终审