Просмотр исходного кода

订单管理-工单处理-添加退回件关联

loustwo 4 лет назад
Родитель
Сommit
f85e48dced

+ 10 - 1
app/Http/Controllers/TestController.php

@@ -18,6 +18,7 @@ use App\Services\OrderRejectingStatusService;
 use App\Services\RejectedService;
 use App\User;
 use App\Waybill;
+use App\WorkOrder;
 use Illuminate\Database\Capsule\Manager;
 use Illuminate\Database\DatabaseManager;
 use Illuminate\Foundation\Auth\AuthenticatesUsers;
@@ -64,7 +65,7 @@ class TestController extends Controller
         /** @var OrderRejectedBillRelationService $service */
         $service = app(OrderRejectedBillRelationService::class);
         /** @var RejectedBill $item */
-        $item = RejectedBill::query()->orderByDesc('id')->first();
+        $item = RejectedBill::query()->find(2);
         $service->rejectedBillSyncOrder($item);
     }
 
@@ -102,5 +103,13 @@ class TestController extends Controller
         $service = app(BatchUpdateService::class);
         $service->batchUpdate('order_issue_rejected_bill',$array);
     }
+
+    public function testQuery()
+    {
+        /** @var WorkOrder $item */
+        $item = WorkOrder::query()->with('orderIssueRejectedBills')->find(9);
+        $item->orderIssueRejectedBills()->where('logistic_number_return','75810638245215')->delete();
+        dd($item);
+    }
 }
 

+ 1 - 0
app/Http/Controllers/WorkOrderController.php

@@ -74,6 +74,7 @@ class WorkOrderController extends Controller
 
         $owners = $this->ownerService->getAuthorizedOwners();
 
+
         $this->service->tags($workOrders);
         return view('order.workOrder.index', compact('workOrders', 'logistics', 'orderIssueTypes', 'owners'));
     }

+ 84 - 0
app/Http/Controllers/WorkOrderRelationRejectedBillController.php

@@ -0,0 +1,84 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Order;
+use App\OrderIssueRejectedBill;
+use App\Services\OrderRejectedBillRelationService;
+use App\WorkOrder;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Gate;
+
+class WorkOrderRelationRejectedBillController extends Controller
+{
+
+    private $orderRejectedBillRelationService;
+
+    public function __construct(OrderRejectedBillRelationService $orderRejectedBillRelationService)
+    {
+        $this->orderRejectedBillRelationService = $orderRejectedBillRelationService;
+    }
+
+    public function storeApi(Request $request): array
+    {
+        if (Gate::denies('订单管理-工单处理-宝时编辑')) {
+            return ['success' => false, 'message' => '没有对应权限'];
+        } else if (!$request->has('order_id', 'logistic_number_return')) {
+            return ['success' => false, 'message' => '参数异常'];
+        }
+        $order = Order::query()->with('issue')->where('id', $request->input('order_id'))->first();
+        if (!$order) ['success' => false, 'message' => '参数异常'];
+        $query = OrderIssueRejectedBill::query()->where('order_id', $request->input('order_id'))->where('logistic_number_return', $request->input('logistic_number_return'));
+        $relation = $query->first();
+        if (!$relation) {
+            OrderIssueRejectedBill::query()->create(
+                ['order_id' => $order->id, 'order_issue_id' => $order->issue->id ?? null, 'logistic_number_return' => $request->input('logistic_number_return')]
+            );
+        } else if ($order->issue ?? false) {
+            $query->update(['order_issue_id' => $order->issue->id]);
+        }
+        $this->orderRejectedBillRelationService->orderSyncRejectedBill($order);
+        $data = WorkOrder::query()->defaultWith()->where('order_id', $request->input('order_id'))->first();
+        return ['success' => true, 'data' => $data];
+    }
+
+    public function destroyApi(Request $request): array
+    {
+        if (Gate::denies('订单管理-工单处理-宝时编辑')) {
+            return ['success' => false, 'message' => '没有对应权限'];
+        } else if (!$request->has('order_id', 'logistic_number_return')) {
+            return ['success' => false, 'message' => '参数异常'];
+        }
+        $order = Order::query()->with('issue')->where('id', $request->input('order_id'))->first();
+        if (!$order) ['success' => false, 'message' => '参数异常'];
+        $query = OrderIssueRejectedBill::query()->where('order_id', $request->input('order_id'))->where('logistic_number_return', $request->input('logistic_number_return'));
+        $relation = $query->first();
+        if (!$relation) {
+            return ['success' => false, 'message' => '参数异常'];
+        }
+        $query->delete();
+        $this->orderRejectedBillRelationService->orderSyncRejectedBill($order);
+        $data = WorkOrder::query()->defaultWith()->where('order_id', $request->input('order_id'))->first();
+        return ['success' => true, 'data' => $data];
+    }
+
+    public function resetRelationApi(Request $request): array
+    {
+        if (Gate::denies('订单管理-工单处理-宝时编辑')) {
+            return ['success' => false, 'message' => '没有对应权限'];
+        } else if ($request->has('order_id', 'logistic_number_return', 'update_logistic_number_return')) {
+            return ['success' => false, 'message' => '参数异常'];
+        }
+        $order = Order::query()->with('issue')->where('id', $request->input('order_id'))->first();
+        if (!$order) ['success' => false, 'message' => '参数异常'];
+        $query = OrderIssueRejectedBill::query()->where('order_id', $order->id)->where('logistic_number_return', $request->input('logistic_number_return'));
+        $relation = $query->first();
+        if (!$relation) {
+            return ['success' => false, 'message' => '参数异常,刷新页面重试'];
+        }
+        $query->update(['logistic_number_return' => $request->input('update_logistic_number_return')]);
+        $this->orderRejectedBillRelationService->orderSyncRejectedBill($order);
+        $data = WorkOrder::query()->defaultWith()->where('order_id', $request->input('order_id'))->first();
+        return ['success' => true, 'data' => $data];
+    }
+}

+ 4 - 4
app/Services/OrderRejectingStatusService.php

@@ -27,8 +27,8 @@ class OrderRejectingStatusService
     {
         if (!$order) return;
         $rejecting_status = $this->getOrderRejectingStatus($order);
-
-        $order_detail = OrderDetail::query()->where('order_id', $order->id)->first();
+        $query = OrderDetail::query()->where('order_id', $order->id);
+        $order_detail = $query->first();
         if (!$order_detail) {
             OrderDetail::query()->create(
                 ['order_id' => $order->id, 'is_new_rejecting' =>$rejecting_status === '无' ? '无' : '有', 'rejecting_status' => $rejecting_status ]
@@ -36,9 +36,9 @@ class OrderRejectingStatusService
             return;
         }
         if (in_array($order_detail->is_new_rejecting, ['有', '已处理']) && $rejecting_status != '无') {
-            $order_detail->update(['rejecting_status' => $rejecting_status]);
+            $query->update(['rejecting_status' => $rejecting_status]);
         } else {
-            $order_detail->update(['rejecting_status' => $rejecting_status, 'is_new_rejecting' =>$rejecting_status === '无' ? '无' : '有']);
+            $query->update(['rejecting_status' => $rejecting_status, 'is_new_rejecting' =>$rejecting_status === '无' ? '无' : '有']);
         }
     }
 

+ 6 - 1
app/WorkOrder.php

@@ -239,6 +239,11 @@ class WorkOrder extends Model
         return $filters->apply($query);
     }
 
+    public function orderIssueRejectedBills(): HasMany
+    {
+        return $this->hasMany(OrderIssueRejectedBill::class,'order_id','order_id');
+    }
+
     /** 默认 with 参数 */
     public function scopeDefaultWith($query)
     {
@@ -247,7 +252,7 @@ class WorkOrder extends Model
 
     public function defaultWith(): array
     {
-        return ['owner', 'logistic', 'issueType', 'creator', 'lastHandler','orderDetail', 'details' => function ($query) {
+        return ['owner', 'logistic', 'issueType', 'creator', 'lastHandler','orderDetail','orderIssueRejectedBills', 'details' => function ($query) {
             return $query->with(['commodities.commodity', 'logs' => function ($query) {
                 return $query->with('creator')->orderByDesc('created_at');
             }, 'images.uploadFile', 'issueType', 'processLogs' => function ($query) {

+ 94 - 2
resources/views/order/workOrder/index.blade.php

@@ -208,6 +208,36 @@
                                 <td v-text="item.status"></td>
                                 <td v-text="item.creator ? item.creator.name : ''"></td>
                                 <td v-text="item.result_explain ? item.result_explain: item.remark"></td>
+                                @can('订单管理-工单处理-宝时编辑')
+                                    <td class="text-muted child-layer-3-hide" >
+                                        <div class="form-inline">
+                                            <div class="form-group">
+                                                <input type="text" class="form-control form-text form-control-sm mr-1">
+                                                <button class="btn btn-sm btn-primary"
+                                                        @click="joinLogisticNumberReturn(item,$event,i)"
+                                                >添加
+                                                </button>
+                                            </div>
+                                        </div>
+                                        <div v-if="item.order_issue_rejected_bills">
+                                            <div class="form-inline"
+                                                 v-for="relation in item.order_issue_rejected_bills">
+                                                <input type="text" class="form-control form-control-sm mt-1 mr-1"
+                                                       :value="relation.logistic_number_return"
+{{--                                                       @change="reviseJoinRejectedBill(item,orderIssueRejectedBill.logistic_number_return,$event)"--}}
+                                                       @focus="displayDelBtn(true,$event)"
+                                                       @blur="displayDelBtn(false,$event)">
+                                                <button type="button" class="btn btn-sm btn-outline-danger mt-1 d-none"
+                                                        @click="unJoinLogisticNumberReturn(item,relation.logistic_number_return,i)"
+                                                >
+                                                    删
+                                                </button>
+                                            </div>
+                                        </div>
+
+                                    </td>
+                                @endcan
+
                                 <td class="log-td"
                                     v-on:mouseover="showAddBtn($event)"
                                     v-on:mouseleave="hideAddBtn($event)">
@@ -633,6 +663,7 @@
                     {name: 'status', value: '当前处理人', neglect: true},
                     {name: 'creator', value: '创建人'},
                     {name: 'remark', value: '情况说明'},
+                    {name: 'return_logistic_number', value: '退回单号'},
                     {name: 'process_logs', value: '处理日志'},
                         @can('订单管理-工单处理-宝时编辑')
                     {
@@ -780,6 +811,7 @@
                     workOrder.logisitc_name = workOrder.logistic ? workOrder.logistic.name : '';
                     workOrder.order_client_code = workOrder.order ? workOrder.order.client_code : '';
                     workOrder.order_commodities = this.groupOrderPackageCommodities(workOrder);
+                    workOrder.is_issue_order = 'order_issue' in workOrder;
                 },
                 groupOrderPackageCommodities(workOrder) {
                     let order_packages = workOrder.order ? workOrder.order.packages : [];
@@ -970,7 +1002,7 @@
                         if (data[e.id]) {
                             let item = data[e.id];
                             this.sortOrder(item);
-                            item.is_order_issue = item.order_issue ? true : false;
+                            item.is_issue_order = item.order_issue ? true : false;
                             this.$set(this.workOrders, i, item);
                         }
                     });
@@ -1520,7 +1552,7 @@
                         window.tempTip.cancelWaitingTip();
                         if (res.data.success) {
                             this.sortOrder(res.data.data);
-                            res.data.data.is_order_issue = 'order_issue' in res.data.data;
+                            res.data.data.is_issue_order = 'order_issue' in res.data.data;
                             this.$set(this.workOrders, this.selectIndex, res.data.data);
                             this.successTempTip('处理完成');
                             if (this.baoShiEditWorkOrder.is_edit) this.dialogEditBaoShiVisible = false
@@ -3283,6 +3315,66 @@
                     this.orderInfo.commodities = item.order_commodities;
                 },
 
+                displayDelBtn(bool, e) {
+                    if (bool) $(e.target).next().removeClass('d-none');
+                    else {
+                        setTimeout(function () {
+                            $(e.target).next().addClass('d-none');
+                        }, 100);
+                    }
+                },
+
+                joinLogisticNumberReturn(item,e,index){
+                    let logistic_number_return = $(e.target).prev().val();
+                    console.log(logistic_number_return);
+                    if (logistic_number_return.trim().length === 0){
+                        this.errorTempTip('请输入退回单号进行添加');
+                        return;
+                    }
+                    let url = "{{route('workOrder.rejectedBill.storeApi')}}";
+                    let data = {order_id:item.order_id,logistic_number_return:logistic_number_return};
+                    this.waitingTempTip('处理中');
+                    window.axios.post(url,data).then(res=>{
+                        window.tempTip.cancelWaitingTip();
+                        if (res.data.success){
+                            this.sortOrder(res.data.data);
+                            res.data.data.is_issue_order = 'order_issue' in res.data.data;
+                            this.$set(this.workOrders,index,res.data.data);
+                            this.successTempTip('处理完成');
+                            this.$forceUpdate();
+                            $(e.target).prev().val('');
+                            return ;
+                        }
+                        this.errorTempTip(res.data.message ? res.data.message : '处理出现异常' )
+                    }).catch(err=>{
+                        window.tempTip.cancelWaitingTip();
+                        this.errorTempTip(err);
+                    });
+                },
+                unJoinLogisticNumberReturn(item,logistic_number_return,index){
+                    if (logistic_number_return.trim().length === 0){
+                        this.errorTempTip('请输入退回单号进行添加');
+                        return;
+                    }
+                    let url = "{{route('workOrder.rejectedBill.destroyApi')}}";
+                    let data = {order_id:item.order_id,logistic_number_return:logistic_number_return};
+                    this.waitingTempTip('处理中');
+                    window.axios.post(url,data).then(res=>{
+                        window.tempTip.cancelWaitingTip();
+                        if (res.data.success){
+                            this.sortOrder(res.data.data);
+                            res.data.data.is_issue_order = 'order_issue' in res.data.data;
+                            this.$set(this.workOrders,index,res.data.data);
+                            this.successTempTip('处理完成');
+                            this.$forceUpdate();
+                            return ;
+                        }
+                        this.errorTempTip(res.data.message ? res.data.message : '处理出现异常' )
+                    }).catch(err=>{
+                        window.tempTip.cancelWaitingTip();
+                        this.errorTempTip(err);
+                    });
+                }
             },
         });
     </script>

+ 6 - 0
routes/apiLocal.php

@@ -366,6 +366,12 @@ Route::prefix('workOrder')->group(function(){
         Route::post("/logistic","WorkOrderCommoditiesController@logisticUpdateCommoditiesApi")->name("workOrder.commodity.logisticUpdateApi"); // 承运商 更新商品 处理信息
         Route::post("/baoShi","WorkOrderCommoditiesController@baoShiUpdateCommoditiesApi")->name("workOrder.commodity.baoShiUpdateApi");       // 宝时客服 更新丢件信息
     });
+
+    Route::prefix('rejectedBill/relation')->group(function(){
+        Route::post('/store',"WorkOrderRelationRejectedBillController@storeApi")->name('workOrder.rejectedBill.storeApi');
+        Route::post('/destroy',"WorkOrderRelationRejectedBillController@destroyApi")->name('workOrder.rejectedBill.destroyApi');
+        Route::post('/resetRelation',"WorkOrderRelationRejectedBillController@resetRelationApi")->name('workOrder.rejectedBill.resetRelationApi');
+    });
 });
 /*出库*/
 Route::group(['prefix'=>'storeOut'],function(){