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

Merge branch 'master' of ssh://47.103.131.176:10022/var/git/bswas

 Conflicts:
	app/Http/Controllers/TestController.php
zhouzhendong 4 лет назад
Родитель
Сommit
a5963c67be
47 измененных файлов с 3076 добавлено и 2136 удалено
  1. 45 0
      app/Console/Commands/WorkOrderTimingTask.php
  2. 3 0
      app/Console/Kernel.php
  3. 48 1
      app/Filters/WorkOrderFilters.php
  4. 1 1
      app/Http/Controllers/OrderController.php
  5. 1 1
      app/Http/Controllers/OrderIssueController.php
  6. 1 1
      app/Http/Controllers/OrderIssueProcessLogController.php
  7. 0 3
      app/Http/Controllers/OrderPackageCommoditiesController.php
  8. 6 9
      app/Http/Controllers/ReceivingTaskController.php
  9. 93 16
      app/Http/Controllers/WorkOrderCancelInterceptController.php
  10. 25 22
      app/Http/Controllers/WorkOrderCommoditiesController.php
  11. 35 4
      app/Http/Controllers/WorkOrderController.php
  12. 19 14
      app/Http/Controllers/WorkOrderDamageController.php
  13. 45 22
      app/Http/Controllers/WorkOrderExpressAbnormalController.php
  14. 83 11
      app/Http/Controllers/WorkOrderInformationChangeController.php
  15. 94 22
      app/Http/Controllers/WorkOrderInterceptController.php
  16. 7 6
      app/Http/Controllers/WorkOrderLossController.php
  17. 34 28
      app/Http/Controllers/WorkOrderMistakeController.php
  18. 120 1
      app/Http/Controllers/WorkOrderProcessLogController.php
  19. 4 0
      app/OrderIssue.php
  20. 10 4
      app/Services/OrderIssueTypeService.php
  21. 14 15
      app/Services/ReceivingTaskService.php
  22. 94 35
      app/Services/WorkOrderCancelInterceptService.php
  23. 80 26
      app/Services/WorkOrderDamageService.php
  24. 1 1
      app/Services/WorkOrderDetailService.php
  25. 78 40
      app/Services/WorkOrderExpressAbnormalService.php
  26. 88 39
      app/Services/WorkOrderInformationChangeService.php
  27. 127 58
      app/Services/WorkOrderInterceptService.php
  28. 69 27
      app/Services/WorkOrderLossService.php
  29. 118 52
      app/Services/WorkOrderMistakeService.php
  30. 67 77
      app/Services/WorkOrderProcessLogService.php
  31. 137 60
      app/Services/WorkOrderService.php
  32. 102 81
      app/WorkOrder.php
  33. 6 8
      app/WorkOrderDetail.php
  34. 12 96
      app/WorkOrderProcessLog.php
  35. 53 0
      database/migrations/2022_01_07_150835_work_order_process_logs_edit_table.php
  36. 33 0
      database/migrations/2022_01_13_152810_work_orders_add_column_rejecting_status.php
  37. 4 4
      resources/views/order/index/delivering.blade.php
  38. 26 232
      resources/views/order/workOrder/_bao_shi_review_modal.blade.php
  39. 65 9
      resources/views/order/workOrder/_batch_edit_work_order.blade.php
  40. 19 76
      resources/views/order/workOrder/_edit_process_log.blade.php
  41. 7 2
      resources/views/order/workOrder/_logistic_fill_work_order_modal.blade.php
  42. 39 0
      resources/views/order/workOrder/_order_commodity_info.blade.php
  43. 67 0
      resources/views/order/workOrder/_process_logs.blade.php
  44. 6 6
      resources/views/order/workOrder/_work_order_log.blade.php
  45. 2 2
      resources/views/order/workOrder/_work_order_show.blade.php
  46. 1052 997
      resources/views/order/workOrder/index.blade.php
  47. 36 27
      routes/apiLocal.php

+ 45 - 0
app/Console/Commands/WorkOrderTimingTask.php

@@ -0,0 +1,45 @@
+<?php
+
+namespace App\Console\Commands;
+
+use App\Services\WorkOrderService;
+use Illuminate\Console\Command;
+
+class WorkOrderTimingTask extends Command
+{
+    /**
+     * The name and signature of the console command.
+     *
+     * @var string
+     */
+    protected $signature = 'workOrder:timingTask';
+
+    /**
+     * The console command description.
+     *
+     * @var string
+     */
+    protected $description = 'Command description';
+
+    /**
+     * Create a new command instance.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+    /**
+     * Execute the console command.
+     *
+     * @return int
+     */
+    public function handle()
+    {
+        /** @var WorkOrderService $service */
+        $service = App('WorkOrderService');
+        $service->timingTask();
+    }
+}

+ 3 - 0
app/Console/Kernel.php

@@ -22,6 +22,7 @@ use App\Console\Commands\SyncWMSOrderTask;
 use App\Console\Commands\TestTemp;
 use App\Console\Commands\WasSyncWmsAsnInformation;
 use App\Console\Commands\WASSyncWMSOrderInformation;
+use App\Console\Commands\WorkOrderTimingTask;
 use App\Jobs\CalculationArrivedManNumJob;
 use App\Jobs\LaborApplyRecordJob;
 use App\Services\LaborApplyService;
@@ -57,6 +58,7 @@ class  Kernel extends ConsoleKernel
         SyncCarrier::class,
         ReceiveRecord::class,
         EndReceivingTask::class,
+        WorkOrderTimingTask::class,
     ];
 
     /**
@@ -98,6 +100,7 @@ class  Kernel extends ConsoleKernel
 
         $schedule->command("record:scan")->hourlyAt(1);//退件信息标记
         $schedule->command("receivingTask:batchEnd")->dailyAt('0:15')->runInBackground();   //批量完成入库单任务
+        $schedule->command("workOrder:timingTask")->dailyAt('0:15')->runInBackground();     // 工单定时任务
     }
 
     /**

+ 48 - 1
app/Filters/WorkOrderFilters.php

@@ -8,6 +8,7 @@ use App\OrderIssue;
 use App\OrderIssueProcessLog;
 use App\OrderIssueType;
 use App\OrderPackage;
+use App\Shop;
 use App\Traits\ModelSearchWay;
 use App\User;
 use App\WorkOrder;
@@ -44,7 +45,9 @@ class WorkOrderFilters
         'status',
         'process_progress',
         'order_issue_log',
-        'log_content'
+        'log_content',
+        'tags',
+        'shop_name',
     ];
     protected $array_filter;
     protected $params = [];
@@ -55,6 +58,7 @@ class WorkOrderFilters
     protected $issueTypeQuery;
     protected $orderIssueLogQuery;
     protected $orderIssueQuery;
+    protected $shopQuery;
 
 
 
@@ -157,6 +161,11 @@ class WorkOrderFilters
 
     public function beforeApply()
     {
+
+        if ($this->shopQuery){
+            $this->getOrderQuery()->whereIn('orders.shop_id',$this->shopQuery);
+        }
+
         if ($this->orderPackageQuery) {
             $this->queryBuilder->whereIn('order_id', $this->orderPackageQuery);
         }
@@ -229,6 +238,14 @@ class WorkOrderFilters
         return $this->orderIssueLogQuery;
     }
 
+    public function getShopQuery(): Builder
+    {
+        if (!$this->shopQuery) {
+            $this->shopQuery = Shop::query()->select('id');
+        }
+        return $this->shopQuery;
+    }
+
     public function id($id)
     {
         if (is_array($id)) $this->queryBuilder->whereIn('work_orders.id', $id);
@@ -357,4 +374,34 @@ class WorkOrderFilters
         }
         $this->queryBuilder->whereIn('status',$status_list);
     }
+
+    public function tags($tag){
+        $status = $this->array_filter['status'] ?? null;
+        if ($status){
+            switch ($status){
+                case '宝时处理':
+                    $this->queryBuilder->where('bao_shi_tag',$tag);
+                    break;
+                case '货主处理':
+                    $this->queryBuilder->where('owner_tag',$tag);
+                    break;
+                case '承运商处理':
+                    $this->queryBuilder->where('logistic_tag',$tag);
+                    break;
+            }
+            return ;
+        }
+        if (Gate::allows('订单管理-工单处理-宝时编辑')){
+            $this->queryBuilder->where('bao_shi_tag',$tag);
+        } else if (Gate::allows('订单管理-工单处理-货主编辑')){
+            $this->queryBuilder->where('owner_tag',$tag);
+        } else if (Gate::allows('订单管理-工单处理-承运商编辑')){
+            $this->queryBuilder->where('logistic_tag',$tag);
+        }
+    }
+
+    public function shop_name($shop_name)
+    {
+        $this->searchWay($this->getShopQuery(),$shop_name,'shops.name');
+    }
 }

+ 1 - 1
app/Http/Controllers/OrderController.php

@@ -54,7 +54,7 @@ class OrderController extends Controller
         $customers = app(OwnerService::class)->getQuery()->select("code","name")->get();
         $page = $request["page"] ?? 1;
         $codes = DB::connection('oracle')->table('BAS_CODES')->select('code', 'codename_c')->where('codeid', 'SO_STS')->orderBy('code', 'asc')->get();
-        $orderIssueType = $this->orderIssueTypeService->getOrderIssueTypes();
+        $orderIssueType = $this->orderIssueTypeService->getOrderIssueType();
         return view('order/index/delivering', compact('orders', 'customers', 'request', 'codes', 'commodities', 'page', 'picktotraceids', 'orderIssueType', 'logistics'));
     }
 

+ 1 - 1
app/Http/Controllers/OrderIssueController.php

@@ -52,7 +52,7 @@ class OrderIssueController extends Controller
         $owners = app(OwnerService::class)->getAuthorizedOwners();
         $orderIssues = OrderIssue::query()->filter($filter)->defaultWith()->paginate($request['paginate'] ?? 50);
         $service->tagWorkOrder($orderIssues);
-        $orderIssueType = $this->orderIssueTypeService->getOrderIssueTypes();
+        $orderIssueType = $this->orderIssueTypeService->getAllOrderIssueTypes();
         $qualityLabel = QualityLabel::all();
         $logistics = Logistic::all();
         $userWorkgroup = UserWorkgroup::all();

+ 1 - 1
app/Http/Controllers/OrderIssueProcessLogController.php

@@ -39,7 +39,7 @@ class OrderIssueProcessLogController extends Controller
                     'order_issue_id' => $request->input('id'),
                     'content' => $request->input('content'),
                     'tag' => $request->input('tag'),
-                    'user_id' => Auth::user()['id'],
+                    'user_id' => Auth::id(),
                     'type' => '处理',
                 ]);
                 $log->loadMissing('user');

+ 0 - 3
app/Http/Controllers/OrderPackageCommoditiesController.php

@@ -13,11 +13,8 @@ class OrderPackageCommoditiesController extends Controller
     public function getCommoditiesApi(Request $request, OrderService $orderService, OrderPackageCommoditiesService $orderPackageCommoditiesService): array
     {
         $code = $request->input(['orderNo']);
-
         $orderService->syncOrderByCodes([$code]);
-
         $commodities = $orderPackageCommoditiesService->getCommodities($code);
-
         $data = $commodities->map(function ($item) {
             return [
                 'sku' => $item->commodity->sku ?? '',

+ 6 - 9
app/Http/Controllers/ReceivingTaskController.php

@@ -5,6 +5,7 @@ namespace App\Http\Controllers;
 use App\DeliveryAppointmentCar;
 use App\Filters\ReceivingTaskFilters;
 use App\Http\Requests\Api\ReceivingTaskRequest;
+use App\Owner;
 use App\ReceivingTask;
 use App\Services\OwnerService;
 use App\Services\ReceivingTaskService;
@@ -14,17 +15,13 @@ use Illuminate\Support\Facades\Request;
 
 class ReceivingTaskController extends Controller
 {
-    /**
-     * @var ReceivingTaskService $service
-     * @var OwnerService $ownerService
-     */
-    private $service;
-    private $ownerService;
+    public $service;
+    public $ownerService;
 
-    public function __construct()
+    public function __construct(ReceivingTaskService $service,OwnerService  $ownerService)
     {
-        $this->service = app(ReceivingTaskService::class);
-        $this->ownerService = app(OwnerService::class);
+        $this->service = $service;
+        $this->ownerService = $ownerService;
     }
 
     public function index(Request $request,ReceivingTaskFilters $filter)

+ 93 - 16
app/Http/Controllers/WorkOrderCancelInterceptController.php

@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
 
 use App\Services\OrderService;
 use App\Services\WorkOrderCancelInterceptService;
+use App\WorkOrder;
 use App\WorkOrderDetail;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Gate;
@@ -21,7 +22,7 @@ class WorkOrderCancelInterceptController extends Controller
     public function __construct()
     {
         $this->service = app(WorkOrderCancelInterceptService::class);
-        $this->orderService = app(OrderService::class );
+        $this->orderService = app(OrderService::class);
     }
 
     public function storeApi(Request $request): array
@@ -36,7 +37,7 @@ class WorkOrderCancelInterceptController extends Controller
             $this->service->store($request->all());
             return ['success' => true];
         } catch (\Exception $e) {
-            return ['success' => false,'message' => $e->getMessage()];
+            return ['success' => false, 'message' => $e->getMessage()];
         }
     }
 
@@ -46,35 +47,111 @@ class WorkOrderCancelInterceptController extends Controller
         if (Gate::denies('订单管理-订单-生成工单'))
             return ['success' => false, 'message' => '没有对应权限'];
         $this->orderService->syncOrderByCodes($request->input('order_nos'));
-        if ($this->service->checkWorkOrders($request->input('order_nos'))){
+        if ($this->service->checkWorkOrders($request->input('order_nos'))) {
             return ['success' => false, 'message' => '当前订单已有相同类型的工单'];
         }
         $this->service->batchStore($request->all());
         return ['success' => true];
     }
 
+    /**
+     * 承运商处理
+     * @param Request $request
+     * @return array
+     */
     public function logisticHandlerApi(Request $request): array
     {
-        if (Gate::denies('订单管理-工单处理-承运商编辑'))
+        if (Gate::denies('订单管理-工单处理-承运商编辑')){
             return ['success' => false, 'message' => '没有对应权限'];
+        }
+
         $detail = WorkOrderDetail::query()->with('workOrder')->find($request->input('detail_id'));
-        $workOrder = $detail->workOrder;
-        if (!$detail || !$workOrder) return ['success' => false,'message' => '参数异常'];
-        $this->service->logisticHandle($detail,$request->all());
-        $workOrder->loadDefaultWith();
-        return ['success' => true,'data' => $workOrder];
+
+        if (!$detail) {
+            return ['success' => false, 'message' => '参数异常'];
+        }
+
+        $this->service->logisticHandle($detail, $request->all());
+
+        $data = WorkOrder::query()->defaultWith()->find($detail->work_order_id);
+
+        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()->where('status', 3)->find($detail_ids);
+
+        if (count($details) < count($detail_ids)){
+            return ['success' => false, 'message' => '参数异常,刷新后重试'];
+        }
+
+        $this->service->logisticBatchHandler($details, $request->all());
+
+        $data = WorkOrder::query()->defaultWith()->find($details->map(function ($item) {
+            return $item->work_order_id;
+        })->toArray());
+        return ['success' => true, 'data' => $data];
     }
 
     public function baoShiReviewApi(Request $request): array
     {
-        if (Gate::denies('订单管理-工单处理-宝时编辑'))
+        if (Gate::denies('订单管理-工单处理-宝时编辑')) {
             return ['success' => false, 'message' => '没有对应权限'];
-        $detail = WorkOrderDetail::query()->with('workOrder')->find($request->input('detail_id'));
-        $workOrder = $detail->workOrder;
-        if (!$detail || !$workOrder) return ['success' => false,'message' => '参数异常'];
-        $this->service->baoShiReviewDamage($detail,$request->all());
-        $workOrder->loadDefaultWith();
-        return ['success' => true,'data' => $workOrder];
+        }
+        $detail = WorkOrderDetail::query()->find($request->input('detail_id'));
+        if (!$detail) {
+            return ['success' => false, 'message' => '参数异常'];
+        }
+        $this->service->baoShiReview($detail, $request->all());
+
+        $data = WorkOrder::query()->defaultWith()->find($detail->work_order_id);
+
+        return ['success' => true, 'data' => $data];
+    }
+
+    /**
+     * 宝时批量处理
+     * @param Request $request
+     * @return array
+     */
+    public function baoShiBatchReviewApi(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()->where('status', '4')->find($detail_ids);
+        if (count($details) < count($detail_ids)) {
+            return ['success' => false, 'message' => '参数异常,请刷新页面重试'];
+        }
+
+        $this->service->baoShiBatchReview($details, $request->all());
+
+        $data = WorkOrder::query()->defaultWith()->find($details->map(function ($detail) {
+            return $detail->work_order_id;
+        })->toArray());
+
+        return ['success' => true, 'data' => $data];
     }
 
 }

+ 25 - 22
app/Http/Controllers/WorkOrderCommoditiesController.php

@@ -6,7 +6,8 @@ use App\Services\WorkOrderCommoditiesService;
 use App\Services\WorkOrderDetailService;
 use App\Services\WorkOrderLogService;
 use App\Services\WorkOrderService;
- use Illuminate\Http\Request;
+use App\WorkOrder;
+use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Gate;
 
 class WorkOrderCommoditiesController extends Controller
@@ -22,12 +23,13 @@ class WorkOrderCommoditiesController extends Controller
     private $logService;
     private $workOrderService;
 
-    public function __construct()
+    public function __construct(WorkOrderCommoditiesService $service, WorkOrderDetailService $detailService,
+                                WorkOrderLogService $logService, WorkOrderService $workOrderService)
     {
-        $this->service = app(WorkOrderCommoditiesService::class);
-        $this->detailService = app(WorkOrderDetailService::class);
-        $this->logService = app(WorkOrderLogService::class);
-        $this->workOrderService = app(WorkOrderService::class);
+        $this->service = $service;
+        $this->detailService = $detailService;
+        $this->logService = $logService;
+        $this->workOrderService = $workOrderService;
     }
 
     /**
@@ -42,13 +44,15 @@ class WorkOrderCommoditiesController extends Controller
         }
         $workOrder = $this->service->find($request->input('id'));
 
-        if (!$workOrder) return ['success' => false, 'message' => '参数异常'];
+        if (!$workOrder) {
+            return ['success' => false, 'message' => '参数异常'];
+        }
 
-        $this->service->updateWorkOrderCommoditiesByJsonArray($workOrder, $request->input('commodities'),'货主已处理');
+        $this->service->updateWorkOrderCommoditiesByJsonArray($workOrder, $request->input('commodities'));
 
-        if(($workOrder->issueType->name ?? '') == '快递丢件'){
-            $this->logService->createLog($workOrder,'处理','货主填充数据');
-            $workOrder->changeStatus('宝时处理');
+        if (($workOrder->issueType->name ?? '') == '快递丢件') {
+            $this->logService->createLog($workOrder, '处理', '货主填充数据');
+            $workOrder->update(['status' => WorkOrder::$BAO_SHI_HANDLER_STATUS]);
         }
         $workOrder->loadDefaultWith();
         return ['success' => true, 'data' => $workOrder];
@@ -71,15 +75,15 @@ class WorkOrderCommoditiesController extends Controller
 
         $this->service->updateWorkOrderCommoditiesByJsonArray($detail, $request->input('commodities'));
 
-
         $issueType = $workOrder->issueType->name ?? '';
-        if (in_array($issueType,['破损','快递异常'])){
-            $workOrder->changeStatus('宝时终审');
-            $detail->changeStatus('宝时终审');
-            $this->logService->createLog($detail,'处理','承运商处理');
-        } else if (in_array($issueType,['拦截','信息更改'])){
-            $workOrder->changeStatus('完成');
-            $this->logService->createLog($detail,'完结','承运商完成');
+
+        if (in_array($issueType, ['破损', '快递异常'])) {
+            $workOrder->update(['status' => WorkOrder::$BAO_SHI_REVIEW_STATUS]);
+            $detail->update(['status' => WorkOrder::$BAO_SHI_REVIEW_STATUS]);
+            $this->logService->createLog($detail, '处理', '承运商处理');
+        } else if (in_array($issueType, ['拦截', '信息更改'])) {
+            $workOrder->update(['status' => WorkOrder::$END_STATUS]);
+            $this->logService->createLog($detail, '完结', '承运商完成');
             $this->detailService->endDetail($detail);
         }
 
@@ -105,15 +109,14 @@ class WorkOrderCommoditiesController extends Controller
 
         $issue_type = $workOrder->issueType->name ?? '';
 
-        $this->service->updateWorkOrderCommoditiesByJsonArray($detail, $request->input('commodities'),'完结',true);
+        $this->service->updateWorkOrderCommoditiesByJsonArray($detail, $request->input('commodities'), '完结', true);
 
         if ($issue_type == '错漏发') {
-            $workOrder->changeStatus('完成');
+            $workOrder->update(['status' => WorkOrder::$END_STATUS]);
             $this->detailService->endDetail($detail);
         }
 
         $workOrder->loadDefaultWith();
-
         return ['success' => true, 'data' => $workOrder];
     }
 }

+ 35 - 4
app/Http/Controllers/WorkOrderController.php

@@ -77,8 +77,7 @@ class WorkOrderController extends Controller
         $owners = $this->ownerService->getAuthorizedOwners();
 
         $this->service->tags($workOrders);
-
-        return view('order.workOrder.index', compact('workOrders', 'logistics', 'orderIssueTypes', 'owners'));
+         return view('order.workOrder.index', compact('workOrders', 'logistics', 'orderIssueTypes', 'owners'));
     }
 
     /**
@@ -112,6 +111,11 @@ class WorkOrderController extends Controller
         return ['success' => true, 'data' => $workOrders];
     }
 
+    /**
+     * 删除工单
+     * @param $id
+     * @return array|bool[]
+     */
     public function destroyApi($id): array
     {
         if (Gate::denies('订单管理-工单处理-删除'))
@@ -131,7 +135,11 @@ class WorkOrderController extends Controller
         return ['success' => true];
     }
 
-
+    /**
+     * 校验工单是否存在
+     * @param Request $request
+     * @return array
+     */
     public function checkWorkOrderApi(Request $request): array
     {
         $nos = $request->input('no','');
@@ -158,9 +166,32 @@ class WorkOrderController extends Controller
         }
         try {
             $this->service->ownerEndWorkOrderDetail($detail);
-            return ['success'=>true,'message' => '参数异常'];
+            return ['success'=>true];
         } catch (\Exception $e) {
             return ['success' => false,'message' => '工单完结异常'];
         }
     }
+
+    /**
+     * 货主批量完结工单
+     * @param Request $request
+     * @return array
+     */
+    public function ownerBatchEndWorkOrderApi(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($detail_ids);
+        if (count($details) == 0 ) return ['success' => false,'message' => '参数异常'];
+        try {
+            $this->service->ownerBatchEndWorkOrderDetails($details);
+            return ['success' => true];
+        } catch (\Exception $e) {
+            return ['success' => false, 'message' => '工单完结异常,请刷新后重试'];
+        }
+    }
+
 }

+ 19 - 14
app/Http/Controllers/WorkOrderDamageController.php

@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
 
 use App\Services\OrderService;
 use App\Services\WorkOrderDamageService;
+use App\WorkOrder;
 use App\WorkOrderDetail;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Gate;
@@ -51,24 +52,29 @@ class WorkOrderDamageController extends Controller
         if (Gate::denies('订单管理-工单处理-货主编辑'))
             return ['success' => false, 'message' => '没有对应权限'];
         $detail = WorkOrderDetail::query()->with('workOrder')->find($request->input('detail_id'));
-        $workOrder = $detail->workOrder;
-        if (!$detail || !$workOrder) return ['success' => false,'message' => '参数异常'];
+        if (!$detail) return ['success' => false,'message' => '参数异常'];
         else if(in_array($detail->status,['完成','宝时终审'])) return ['success' => false,'message' => '处理失败,刷新当前页面重试'];
         $this->service->ownerEdit($detail,$request->all());
-        $workOrder->loadDefaultWith();
-        return ['success' => true,'data' => $workOrder];
+        $data = WorkOrder::query()->defaultWith()->find($detail->work_order_id);
+        return ['success' => true,'data' => $data];
     }
 
     public function logisticHandleApi(Request $request): array
     {
-        if (Gate::denies('订单管理-工单处理-承运商编辑'))
+        if (Gate::denies('订单管理-工单处理-承运商编辑')){
             return ['success' => false, 'message' => '没有对应权限'];
+        }
+
         $detail = WorkOrderDetail::query()->with('workOrder')->find($request->input('detail_id'));
-        $workOrder = $detail->workOrder;
-        if (!$detail || !$workOrder) return ['success' => false,'message' => '参数异常'];
+
+        if (!$detail ) {
+            return ['success' => false,'message' => '参数异常'];
+        }
         $this->service->logisticHandle($detail,$request->all());
-        $workOrder->loadDefaultWith();
-        return ['success' => true,'data' => $workOrder];
+
+        $data = WorkOrder::query()->defaultWith()->find($detail->work_order_id);
+
+        return ['success' => true,'data' => $data];
     }
 
     public function baoShiReviewApi(Request $request): array
@@ -76,11 +82,10 @@ class WorkOrderDamageController extends Controller
         if (Gate::denies('订单管理-工单处理-宝时编辑'))
             return ['success' => false, 'message' => '没有对应权限'];
         $detail = WorkOrderDetail::query()->with('workOrder')->find($request->input('detail_id'));
-        $workOrder = $detail->workOrder;
-        if (!$detail || !$workOrder) return ['success' => false,'message' => '参数异常'];
-        $this->service->baoShiReviewDamage($detail,$request->all());
-        $workOrder->loadDefaultWith();
-        return ['success' => true,'data' => $workOrder];
+        if (!$detail) return ['success' => false,'message' => '参数异常'];
+        $this->service->baoShiReview($detail,$request->all());
+        $data = WorkOrder::query()->defaultWith()->find($detail->work_order_id);
+        return ['success' => true,'data' => $data];
     }
 
 

+ 45 - 22
app/Http/Controllers/WorkOrderExpressAbnormalController.php

@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
 
 use App\Services\OrderService;
 use App\Services\WorkOrderExpressAbnormalService;
+use App\WorkOrder;
 use App\WorkOrderDetail;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Gate;
@@ -16,6 +17,7 @@ class WorkOrderExpressAbnormalController extends Controller
      */
     private $service;
     private $orderService;
+
     public function __construct()
     {
         $this->service = app('WorkOrderExpressAbnormalService');
@@ -24,14 +26,17 @@ class WorkOrderExpressAbnormalController extends Controller
 
     public function storeApi(Request $request): array
     {
-        if (Gate::denies('订单管理-订单-生成工单'))
+        if (Gate::denies('订单管理-订单-生成工单')){
             return ['success' => false, 'message' => '没有对应权限'];
+        }
+
         $this->orderService->syncOrderByCodes([$request->input('order_no')]);
 
-        if ($this->service->checkWorkOrder($request->input('order_no')))
+        if ($this->service->checkWorkOrder($request->input('order_no'))){
             return ['success' => false, 'message' => '当前订单已有相同类型的工单'];
-
+        }
         $this->service->store($request->all());
+
         return ['success' => true];
     }
 
@@ -40,37 +45,55 @@ class WorkOrderExpressAbnormalController extends Controller
         if (Gate::denies('订单管理-工单处理-货主编辑'))
             return ['success' => false, 'message' => '没有对应权限'];
         $detail = WorkOrderDetail::query()->with('workOrder')->find($request->input('detail_id'));
-        $workOrder = $detail->workOrder;
-        if (!$detail || !$workOrder) return ['success' => false, 'message' => '参数异常'];
-        else if (in_array($detail->status,['完成','宝时终审'])) return ['success' => false, 'message' => '工单已完成,请刷新重试'];
-        $this->service->ownerEdit($detail,$request->all());
-        $workOrder->loadDefaultWith();
-        return ['success' => true, 'data' => $workOrder];
+        if (!$detail ) {
+            return ['success' => false, 'message' => '参数异常'];
+        } else if (in_array($detail->status, ['完成', '宝时终审'])) {
+            return ['success' => false, 'message' => '工单已完成,请刷新重试'];
+        }
+
+        $this->service->ownerEdit($detail, $request->all());
+
+        $data = WorkOrder::query()->defaultWith()->find($detail->work_order_id);
+
+        return ['success' => true, 'data' => $data];
     }
 
     public function logisticHandleApi(Request $request): array
     {
         if (Gate::denies('订单管理-工单处理-承运商编辑'))
             return ['success' => false, 'message' => '没有对应权限'];
-        $detail = WorkOrderDetail::query()->with('workOrder')->find($request->input('detail_id'));
-        $workOrder = $detail->workOrder;
-        if (!$detail || !$workOrder) return ['success' => false, 'message' => '参数异常'];
-        else if ($detail->status == '完成') return ['success' => false, 'message' => '工单已完成,请刷新重试'];
+        $detail = WorkOrderDetail::query()->find($request->input('detail_id'));
+
+        if (!$detail) {
+            return ['success' => false, 'message' => '参数异常'];
+        } else if ($detail->status == '完成') {
+            return ['success' => false, 'message' => '工单已完成,请刷新重试'];
+        }
+
         $this->service->logisticHandle($detail, $request->all());
-        $workOrder->loadDefaultWith();
-        return ['success' => true, 'data' => $workOrder];
+
+        $data = WorkOrder::query()->defaultWith()->find($detail->work_order_id);
+
+        return ['success' => true, 'data' => $data];
     }
 
 
     public function baoShiReviewApi(Request $request): array
     {
-        if (Gate::denies('订单管理-工单处理-宝时编辑'))
+        if (Gate::denies('订单管理-工单处理-宝时编辑')){
             return ['success' => false, 'message' => '没有对应权限'];
-        $detail = WorkOrderDetail::query()->with('workOrder')->find($request->input('detail_id'));
-        $workOrder = $detail->workOrder;
-        if (!$detail || !$workOrder) return ['success' => false,'message' => '参数异常'];
-        $this->service->baoShiReviewExpressAbnormal($detail,$request->all());
-        $workOrder->loadDefaultWith();
-        return ['success' => true,'data' => $workOrder];
+        }
+
+        $detail = WorkOrderDetail::query()->with('workOrder')->find($request->input('detail_id'));;
+
+        if (!$detail) {
+            return ['success' => false, 'message' => '参数异常'];
+        }
+
+        $this->service->baoShiReview($detail, $request->all());
+
+        $data = WorkOrder::query()->defaultWith()->find($detail->work_order_id);
+
+        return ['success' => true, 'data' => $data];
     }
 }

+ 83 - 11
app/Http/Controllers/WorkOrderInformationChangeController.php

@@ -40,17 +40,30 @@ class WorkOrderInformationChangeController extends Controller
 
     public function ownerEditApi(Request $request): array
     {
-        if (Gate::denies('订单管理-工单处理-货主编辑'))
+        if (Gate::denies('订单管理-工单处理-货主编辑')){
             return ['success' => false, 'message' => '没有对应权限'];
+        }
+
         $detail = WorkOrderDetail::query()->find($request->input('detail_id'));
+
         if (!$detail) {
             return ['success' => false, 'message' => '参数异常'];
-        } else if($detail->status == '完成') return ['success' => false, 'message' => '工单已完成,请刷新重试'];
+        } else if($detail->status == '完成') {
+            return ['success' => false, 'message' => '工单已完成,请刷新重试'];
+        }
+
         $this->service->ownerEdit($detail, $request->all());
-        $data = $this->service->getDefaultWith($detail->work_order_id);
+
+        $data = WorkOrder::query()->defaultWith()->find($detail->work_order_id);
+
         return ['success' => true, 'data' => $data];
     }
 
+    /**
+     * 承运商处理
+     * @param Request $request
+     * @return array
+     */
     public function logisticHandlerApi(Request $request): array
     {
         if (Gate::denies('订单管理-工单处理-承运商编辑'))
@@ -59,12 +72,49 @@ class WorkOrderInformationChangeController extends Controller
 
         if (!$detail) {
             return ['success' => false, 'message' => '参数异常'];
-        } else if($detail->status == '完成') return ['success' => false, 'message' => '工单已完成,请刷新重试'];
+        } else if($detail->status == '完成'){
+            return ['success' => false, 'message' => '工单已完成,请刷新重试'];
+        }
+
         $this->service->logisticHandler($detail, $request->all());
-        $data = $this->service->getDefaultWith($detail->work_order_id);
+
+        $data = WorkOrder::query()->defaultWith()->find($detail->work_order_id);
+
         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()->where('status',3)->find($detail_ids);
+
+        if (count($details) < count($detail_ids)) {
+            return ['success' => false, 'message' => '参数异常,刷新后重试'];
+        }
+        $this->service->logisticBatchHandler($details,$request->all());
+
+        $data = WorkOrder::query()->defaultWith()->find($details->map(function($item){
+            return $item->work_order_id;
+        })->toArray());
+
+        return ['success' => true,'data' => $data];
+    }
+
+    /**
+     * 宝时审核
+     * @param Request $request
+     * @return array
+     */
     public function baoShiReviewApi(Request $request): array
     {
         if (Gate::denies('订单管理-工单处理-宝时编辑'))
@@ -73,17 +123,39 @@ class WorkOrderInformationChangeController extends Controller
         if (!$detail) {
             return ['success' => false, 'message' => '参数异常'];
         }
-        $this->service->baoShiReviewInformationChange($detail, $request->all());
-        $data = $this->service->getDefaultWith($detail->work_order_id);
+        $this->service->baoShiReview($detail, $request->all());
+        $data = WorkOrder::query()->defaultWith()->find($detail->work_order_id);
         return ['success' => true, 'data' => $data];
     }
 
+    /**
+     * 宝时批量审核
+     * @param Request $request
+     * @return array|bool[]
+     */
     public function baoShiBatchReviewApi(Request $request): array
     {
-        if (Gate::denies('订单管理-工单处理-宝时编辑'))
+        if (Gate::denies('订单管理-工单处理-宝时编辑')){
             return ['success' => false, 'message' => '没有对应权限'];
-        $workOrder = WorkOrder::query()->find($request->input('ids'));
-        $this->service->baoShiBatchReviewInformationChange($workOrder,$request->input('process_progress'));
-        return ['success' => true];
+        }
+        $detail_ids = $request->input('detail_ids', []);
+
+        if (count($detail_ids) == 0) {
+            return ['success' => false, 'message' => '参数异常'];
+        }
+
+        $details = WorkOrderDetail::query()->where('status', '4')->find($detail_ids);
+
+        if (count($details) < count($detail_ids)) {
+            return ['success' => false, 'message' => '参数异常,请刷新页面重试'];
+        }
+
+        $this->service->baoShiBatchReview($details, $request->all());
+
+        $data = WorkOrder::query()->defaultWith()->find($details->map(function ($item) {
+            return $item->work_order_id;
+        })->toArray());
+
+        return ['success' => true,'data' => $data];
     }
 }

+ 94 - 22
app/Http/Controllers/WorkOrderInterceptController.php

@@ -17,13 +17,14 @@ class WorkOrderInterceptController extends Controller
      */
     private $service;
     private $orderService;
+
     public function __construct()
     {
         $this->service = app("WorkOrderInterceptService");
         $this->orderService = app("OrderService");
     }
 
-    public function storeApi(Request $request):array
+    public function storeApi(Request $request): array
     {
         if (Gate::denies('订单管理-订单-生成工单'))
             return ['success' => false, 'message' => '没有对应权限'];
@@ -42,7 +43,7 @@ class WorkOrderInterceptController extends Controller
         if (Gate::denies('订单管理-订单-生成工单'))
             return ['success' => false, 'message' => '没有对应权限'];
         $this->orderService->syncOrderByCodes($request->input('order_nos'));
-        if ($this->service->checkWorkOrders($request->input('order_nos'))){
+        if ($this->service->checkWorkOrders($request->input('order_nos'))) {
             return ['success' => false, 'message' => '当前订单已有相同类型的工单'];
         }
         $this->service->batchStore($request->all());
@@ -50,42 +51,113 @@ class WorkOrderInterceptController extends Controller
     }
 
 
-
-    public function logisticHandlerApi(Request $request):array
+    /**
+     * 承运商处理和重新编辑
+     * @param Request $request
+     * @return array
+     */
+    public function logisticHandlerApi(Request $request): array
     {
-        if (Gate::denies('订单管理-工单处理-承运商编辑'))
+        if (Gate::denies('订单管理-工单处理-承运商编辑')){
             return ['success' => false, 'message' => '没有对应权限'];
+        }
+
         $detail = WorkOrderDetail::query()->find($request->input('detail_id'));
-        $workOrder = $detail->workOrder;
+        if (!$detail) {
+            return ['success' => false, 'message' => '参数异常'];
+        }
+        if ($detail->status === '完成') {
+            return ['success' => false, 'message' => '工单已完成,请刷新重试'];
+        }
+        $this->service->logisticHandler($detail, $request->all());
 
-        if (!$detail || !$workOrder) return ['success' => false,'message' => '参数异常'];
-        if($detail->status === '完成') return ['success' => false, 'message' => '工单已完成,请刷新重试'];
+        $data = WorkOrder::query()->defaultWith()->find($detail->work_order_id);
 
-        $this->service->logisticHandler($detail,$request->all());
-        $data = $this->service->getDefaultWith($detail->work_order_id);
-        return ['success' => true,'data' => $data];
+        return ['success' => true, 'data' => $data];
     }
 
-    public function baoShiReviewApi(Request $request):array
+    /**
+     * 承运商批量处理
+     * @param Request $request
+     * @return array
+     */
+    public function logisticBatchHandlerApi(Request $request): array
     {
-        if (Gate::denies('订单管理-工单处理-宝时编辑'))
+        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()->where('status', '3')->find($detail_ids);
+        if (count($details) == 0 || count($details) < count($detail_ids)) {
+            return ['success' => false, 'message' => '检查工单当前状态,刷新后重试'];
+        }
+
+        $this->service->logisticBatchHandler($details, $request->all());
+
+        $data = WorkOrder::query()->defaultWith()->find($details->map(function ($item) {
+            return $item->work_order_id;
+        })->toArray());
+
+        return ['success' => true, 'data' => $data];
+    }
+
+    /**
+     * 宝时终审
+     * @param Request $request
+     * @return array
+     */
+    public function baoShiReviewApi(Request $request): array
+    {
+        if (Gate::denies('订单管理-工单处理-宝时编辑')){
+            return ['success' => false, 'message' => '没有对应权限'];
+        }
+
         $detail = WorkOrderDetail::query()->find($request->input('detail_id'));
-        if (!$detail){
+
+        if (!$detail) {
             return ['success' => false, 'message' => '参数异常'];
         }
-        $this->service->baoShiReviewIntercept($detail,$request->all());
-        $data = $this->service->getDefaultWith($detail->work_order_id);
-        return ['success' => true,'data' => $data];
+
+        $this->service->baoShiReviewIntercept($detail, $request->all());
+
+        $data = WorkOrder::query()->defaultWith()->find($detail->work_order_id);
+
+        return ['success' => true, 'data' => $data];
     }
 
+    /**
+     * 宝时批量审核
+     * @param Request $request
+     * @return array
+     */
     public function baoShiBatchReviewApi(Request $request): array
     {
-        if (Gate::denies('订单管理-工单处理-宝时编辑'))
+        if (Gate::denies('订单管理-工单处理-宝时编辑')){
             return ['success' => false, 'message' => '没有对应权限'];
-        if (!$request->exists(['ids','process_progress'])) return ['success' => false, 'message' => '参数异常'];
-        $workOrder = WorkOrder::query()->find($request->input('ids'));
-        $this->service->baoShiBatchReviewIntercept($workOrder,$request->input('process_progress'));
-        return ['success' => true];
+        }
+
+        $detail_ids = $request->input('detail_ids', []);
+
+        if (count($detail_ids) == 0) {
+            return ['success' => false, 'message' => '参数异常'];
+        }
+        $details = WorkOrderDetail::query()->where('status', '4')->find($detail_ids);
+        if (count($details) < count($detail_ids)) {
+            return ['success' => false, 'message' => '参数异常,请刷新页面重试'];
+        }
+
+        $this->service->baoShiBatchReview($details, $request->all());
+
+        $data = WorkOrder::query()->defaultWith()->find($details->map(function ($item) {
+            return $item->work_order_id;
+        })->toArray());
+
+        return ['success' => true, 'data' => $data];
     }
 }

+ 7 - 6
app/Http/Controllers/WorkOrderLossController.php

@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
 
 use App\Services\OrderService;
 use App\Services\WorkOrderLossService;
+use App\WorkOrder;
 use App\WorkOrderDetail;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Gate;
@@ -17,10 +18,10 @@ class WorkOrderLossController extends Controller
      */
     private $service;
     private $orderService;
-    public function __construct()
+    public function __construct(WorkOrderLossService  $service,OrderService $orderService)
     {
-        $this->service = app('WorkOrderLossService');
-        $this->orderService = app('OrderService');
+        $this->service = $service;
+        $this->orderService = $orderService;
     }
 
 
@@ -61,8 +62,8 @@ class WorkOrderLossController extends Controller
         $detail = WorkOrderDetail::query()->with('workOrder')->find($request->input('detail_id'));
         $workOrder = $detail->workOrder;
         if (!$detail||!$workOrder) return ['success' => false, 'message' => '参数异常'];
-        $this->service->baoShiReviewLoss($detail,$request->all());
-        $workOrder->loadDefaultWith();
-        return ['success' => true,'data' => $workOrder];
+        $this->service->baoShiReview($detail,$request->all());
+        $data = WorkOrder::query()->defaultWith()->find($request->input('detail_id'));
+        return ['success' => true,'data' => $data];
     }
 }

+ 34 - 28
app/Http/Controllers/WorkOrderMistakeController.php

@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
 
 use App\Services\OrderService;
 use App\Services\WorkOrderMistakeService;
+use App\WorkOrder;
 use App\WorkOrderDetail;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Gate;
@@ -29,7 +30,7 @@ class WorkOrderMistakeController extends Controller
             return ['success' => false, 'message' => '没有对应权限'];
         $this->orderService->syncOrderByCodes([$request->input('order_no')]);
 
-        if ($this->service->checkWorkOrder($request->input('order_no'))){
+        if ($this->service->checkWorkOrder($request->input('order_no'))) {
             return ['success' => false, 'message' => '当前订单已有相同类型的工单'];
         }
 
@@ -39,35 +40,41 @@ class WorkOrderMistakeController extends Controller
 
     public function ownerEditApi(Request $request): array
     {
-        if (Gate::denies('订单管理-工单处理-货主编辑'))
+        if (Gate::denies('订单管理-工单处理-货主编辑')) {
             return ['success' => false, 'message' => '没有对应权限'];
+        }
+
         $detail = WorkOrderDetail::query()->with('workOrder')->find($request->input('detail_id'));
-        $workOrder = $detail->workOrder;
-        if (!$detail || !$workOrder){
+
+        if (!$detail) {
             return ['success' => false, 'message' => '参数异常'];
-        } else if ($detail->status === '完成'){
+        } else if ($detail->status === '完成') {
             return ['success' => false, 'message' => '处理失败,刷新当前页面重试'];
         }
+
         $this->service->ownerEdit($detail, $request->all());
-        $workOrder->loadDefaultWith();
-        return ['success' => true, 'data' => $workOrder];
+
+        $data = WorkOrder::query()->defaultWith()->find($detail->work_order_id);
+
+        return ['success' => true, 'data' => $data];
     }
 
     public function baoShiHandleApi(Request $request): array
     {
-        if (Gate::denies('订单管理-工单处理-宝时编辑'))
+        if (Gate::denies('订单管理-工单处理-宝时编辑')) {
             return ['success' => false, 'message' => '没有对应权限'];
+        }
         $detail = WorkOrderDetail::query()->with('workOrder')->find($request->input('detail_id'));
-        $workOrder = $detail->workOrder;
-        if (!$detail || !$workOrder){
+        if (!$detail) {
             return ['success' => false, 'message' => '参数异常'];
-        } else if ($detail->status === '完成' || $detail->status === '宝时终审'){
+        } else if ($detail->status === '完成' || $detail->status === '宝时终审') {
             return ['success' => false, 'message' => '处理失败,刷新当前页面重试'];
         }
         $this->service->baoShiCheckMistake($detail, $request->all());
-        $workOrder->loadDefaultWith();
-        return ['success' => true, 'data' => $workOrder];
 
+        $data = WorkOrder::query()->defaultWith()->find($detail->work_order_id);
+
+        return ['success' => true, 'data' => $data];
     }
 
     public function ownerHandleApi(Request $request): array
@@ -75,16 +82,16 @@ class WorkOrderMistakeController extends Controller
         if (Gate::denies('订单管理-工单处理-货主编辑'))
             return ['success' => false, 'message' => '没有对应权限'];
         $detail = WorkOrderDetail::query()->with('workOrder')->find($request->input('detail_id'));
-        $workOrder = $detail->workOrder;
-        if (!$detail || !$workOrder) {
+        if (!$detail) {
             return ['success' => false, 'message' => '参数异常'];
-        }
-        else if ($detail->status === '完成') {
+        } else if ($detail->status === '完成') {
             return ['success' => false, 'message' => '处理失败,刷新当前页面重试'];
         }
         $this->service->ownerReview($detail, $request->all());
-        $workOrder->loadDefaultWith();
-        return ['success' => true, 'data' => $workOrder];
+
+        $data = WorkOrder::query()->defaultWith()->find($detail->work_order_id);
+
+        return ['success' => true, 'data' => $data];
     }
 
     public function ownerEndEditApi(Request $request): array
@@ -92,29 +99,28 @@ class WorkOrderMistakeController extends Controller
         if (Gate::denies('订单管理-工单处理-货主编辑'))
             return ['success' => false, 'message' => '没有对应权限'];
         $detail = WorkOrderDetail::query()->with('workOrder')->find($request->input('detail_id'));
-        $workOrder = $detail->workOrder;
-        if (!$detail || !$workOrder) {
+        if (!$detail) {
             return ['success' => false, 'message' => '参数异常'];
         } else if ($detail->status === '宝时审核') {
             return ['success' => false, 'message' => '处理失败,刷新当前页面重试'];
         }
         $this->service->ownerEditReview($detail, $request->all());
-        $workOrder->loadDefaultWith();
-        return ['success' => true, 'data' => $workOrder];
+        $data = WorkOrder::query()->defaultWith()->find($detail->work_order_id);
+        return ['success' => true, 'data' => $data];
     }
 
     public function baoShiReviewApi(Request $request): array
     {
-        if (Gate::denies('订单管理-工单处理-宝时编辑'))
+        if (Gate::denies('订单管理-工单处理-宝时编辑')) {
             return ['success' => false, 'message' => '没有对应权限'];
+        }
         $detail = WorkOrderDetail::query()->with('workOrder')->find($request->input('detail_id'));
-        $workOrder = $detail->workOrder;
-        if (!$detail || !$workOrder) {
+        if (!$detail) {
             return ['success' => false, 'message' => '参数异常'];
         }
         $this->service->baoShiReview($detail, $request->all());
-        $workOrder->loadDefaultWith();
-        return ['success' => true, 'data' => $workOrder];
+        $data = WorkOrder::query()->defaultWith()->find($detail->work_order_id);
+        return ['success' => true, 'data' => $data];
     }
 
 

+ 120 - 1
app/Http/Controllers/WorkOrderProcessLogController.php

@@ -3,12 +3,131 @@
 namespace App\Http\Controllers;
 
 use App\Services\WorkOrderProcessLogService;
+use App\Services\WorkOrderService;
+use App\WorkOrder;
+use App\WorkOrderDetail;
 use App\WorkOrderProcessLog;
 use Illuminate\Http\Request;
-use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Gate;
 
 class WorkOrderProcessLogController extends Controller
 {
 
+    private $service;
+    private $workOrderService;
+
+    public function __construct(WorkOrderProcessLogService $service,
+                                WorkOrderService $workOrderService)
+    {
+        $this->service = $service;
+        $this->workOrderService = $workOrderService;
+    }
+
+    public function storeApi(Request $request): array
+    {
+        if (Gate::denies('订单管理-工单处理-宝时编辑') ||
+            Gate::denies('订单管理-工单处理-承运商编辑')) {
+            return ['success' => false, 'message' => '没有对应的权限'];
+        }
+        if (!$request->has(['id', 'content'])) {
+            return ['success' => false, 'message' => '参数缺失'];
+        }
+
+        /** @var WorkOrder $workOrder */
+        $workOrder = WorkOrder::query()->where('status', '!=', 5)->find($request->id);
+        if (!$workOrder) {
+            return ['success' => false, 'message' => '找不到对应的工单,或对应的工单已完结'];
+        }
+        /** @var WorkOrderDetail $detail */
+        $detail = $workOrder->details()->where('order_issue_type_id', $workOrder->order_issue_type_id)
+            ->whereIn('status', [1, 2, 3, 4, 5])
+            ->orderByDesc('created_at')->first();
+
+        if (!$detail) {
+            return ['success' => false, 'message' => '工单当前没有待处理的项'];
+        }
+
+        $data = $this->service->createProcessLog($detail, $request->all());
+
+        return ['success' => true, 'data' => $data];
+    }
+
+    public function logisticApi(Request $request): array
+    {
+        if (Gate::denies('订单管理-工单处理-承运商编辑')) {
+            return ['success' => false, 'message' => '没有对应的权限'];
+        }
+        if (!$request->has(['id', 'content'])) {
+            return ['success' => false, 'message' => '参数缺失'];
+        }
+
+        /** @var WorkOrder $workOrder */
+        $workOrder = WorkOrder::query()->where('status', '!=', 5)->find($request->id);
+        if (!$workOrder) {
+            return ['success' => false, 'message' => '找不到对应的工单,或对应的工单已完结'];
+        }
+        /** @var WorkOrderDetail $detail */
+        $detail = $workOrder->details()->where('order_issue_type_id', $workOrder->order_issue_type_id)
+            ->whereIn('status', [1, 2, 3, 4, 5])
+            ->orderByDesc('created_at')->first();
+        if (!$detail) {
+            return ['success' => false, 'message' => '工单当前没有待处理的项'];
+        }
+        $data = $this->service->createProcessLog($detail, $request->all());
+        return ['success' => true, 'data' => $data];
+    }
+
+    public function baoShiStoreApi(Request $request): array
+    {
+
+        if (Gate::denies('订单管理-工单处理-承运商编辑')) {
+            return ['success' => false, 'message' => '没有对应的权限'];
+        }
+        if (!$request->has(['id', 'content'])) {
+            return ['success' => false, 'message' => '参数缺失'];
+        }
+
+        /** @var WorkOrder $workOrder */
+        $workOrder = WorkOrder::query()->where('status', '!=', 5)->find($request->id);
+        if (!$workOrder) {
+            return ['success' => false, 'message' => '找不到对应的工单,或对应的工单已完结'];
+        }
+        /** @var WorkOrderDetail $detail */
+        $detail = $workOrder->details()->where('order_issue_type_id', $workOrder->order_issue_type_id)
+            ->whereIn('status', [1, 2, 3, 4, 5])
+            ->orderByDesc('created_at')->first();
+        if (!$detail) {
+            return ['success' => false, 'message' => '工单当前没有待处理的项'];
+        }
+        $data = $this->service->createProcessLog($detail, $request->all());
+        return ['success' => true, 'data' => $data];
+    }
+
+
+    public function batchStoreApi(Request $request): array
+    {
+        if (Gate::denies('订单管理-工单处理-宝时编辑') ||
+            Gate::denies('订单管理-工单处理-承运商编辑')) {
+            return ['success' => false, 'message' => '没有对应的权限'];
+        }
+        if (!$request->has(['ids', 'content'])) {
+            return ['success' => false, 'message' => '参数缺失'];
+        }
+        $workOrders = WorkOrder::query()->where('status', '!=', 5)->find($request->ids);
+        if (count($workOrders) < count($request->ids)) {
+            return ['success' => false, 'message' => '参数异常'];
+        }
+        $data = $this->service->batchCreateProcessLog($workOrders, $request->all());
+        return ['success' => true, 'data' => $data];
+    }
+
+    public function destroyApi(Request $request): array
+    {
+        if (Gate::denies('订单管理-工单处理-处理日志删除')) {
+            return ['success' => false, 'message' => '没有对应的权限'];
+        }
+        WorkOrderProcessLog::query()->where('id',$request->input('id'))->delete();
+        return ['success' => true];
+    }
+
 }

+ 4 - 0
app/OrderIssue.php

@@ -321,6 +321,10 @@ class OrderIssue extends Model
         return $this->update(['is_intercept' => 1]);
     }
     public function syncWorkOrder(){
+        $workOrder = WorkOrder::query()->whereHas('issueType',function($query){
+            $query->where('name','拦截');
+        })->where('order_id',$this->order_id)->orderByDesc('created_at')->first();
+        $workOrder->update(['rejecting_status' => $this->rejecting_status]);
         if ($this->rejecting_status !== '全部退回') return;
         /** @var WorkOrder $workOrder */
         $workOrder = WorkOrder::query()->whereHas('issueType',function($query){

+ 10 - 4
app/Services/OrderIssueTypeService.php

@@ -5,6 +5,8 @@ namespace App\Services;
 use App\Traits\ServiceAppAop;
 use App\OrderIssueType;
 use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Database\Eloquent\Collection;
+use Illuminate\Database\Eloquent\Collections;
 use Illuminate\Support\Facades\Gate;
 
 class OrderIssueTypeService
@@ -15,7 +17,7 @@ class OrderIssueTypeService
 
     /**
      * 订单管理 问题件类型
-     * @return Builder[]|\Illuminate\Database\Eloquent\Collection
+     * @return Builder[]|Collection
      */
     public function getOrderIssueType()
     {
@@ -25,7 +27,7 @@ class OrderIssueTypeService
     }
 
     /**
-     * @return Builder[]|\Illuminate\Database\Eloquent\Collection
+     * @return Builder[]|Collection
      */
     public function getOwnerOrderIssueType(){
         return OrderIssueType::query()->whereIn('name', ['拦截','取消拦截', '信息更改', '快递异常', '错漏发', '破损'])->get();
@@ -34,7 +36,7 @@ class OrderIssueTypeService
 
     /**
      * 生成工单问题
-     * @return Builder[]|\Illuminate\Database\Eloquent\Collections
+     * @return Builder[]|Collections
      */
     public function getWorkOrderIssueType(){
         if (Gate::allows('订单管理-工单处理-客服编辑')) {
@@ -48,7 +50,11 @@ class OrderIssueTypeService
 
     }
 
-    public function getOrderIssueTypes(){
+    /**
+     * 所有问题件类型
+     * @return Builder[]|Collection
+     */
+    public function getAllOrderIssueTypes(){
         return OrderIssueType::query()->whereIn('name',[
             '拦截', '信息更改', '快递异常', '错漏发', '破损', '快递丢件',
             '联系不上','其他','仓库问题','撤销丢件','二次加工','全检问题','系统问题','延迟发货','仓库丢件','快递方式更改','无记录','双面单','取消拦截'

+ 14 - 15
app/Services/ReceivingTaskService.php

@@ -19,15 +19,15 @@ class ReceivingTaskService
 
     private $itemService;
 
-    public function __construct()
+    public function __construct(ReceivingTaskItemService $itemService)
     {
-        $this->itemService =app(ReceivingTaskItemService::class);
+        $this->itemService = $itemService;
     }
 
     // 完结工单
     public function endTask($receivingTaskNumber)
     {
-        ReceivingTask::query()->where('number', $receivingTaskNumber)->update(['status' => '完成','end_at' => now()]);
+        ReceivingTask::query()->where('number', $receivingTaskNumber)->update(['status' => '完成', 'end_at' => now()]);
     }
 
     // 延时完成
@@ -54,18 +54,16 @@ class ReceivingTaskService
         $task_number = $this->buildTaskNumber();
         $params['number'] = $task_number;
         $params['delivery_appointment_car_id'] = $deliveryAppointmentCar->id;         // 预约号
-        $params['user_id'] = Auth::user()->id;
+        $params['user_id'] = Auth::id();
         $receivingTask = new ReceivingTask($params);
         DB::transaction(function () use ($deliveryAppointmentCar, $params, &$receivingTask) {
             $receivingTask->save();
             if ($receivingTask->id) {
-                try {
-                    $this->itemService->createItems($receivingTask,$params['asn_nos'] ?? []);
-                    $this->saveImage($receivingTask, $params['driving_license_image']);
-                    DB::commit();
-                } catch (\Exception $e) {
-                    DB::rollBack();
-                }
+                $ans_number_string = $deliveryAppointmentCar->deliveryAppointment->asn_number ?? [];
+                $ans_numbers = array_filter(preg_split('/[,, ]+/is', $ans_number_string));
+                $ans_numbers = array_merge($ans_numbers, $params['asn_nos'] ?? []);
+                $this->itemService->createItems($receivingTask, $ans_numbers);
+                $this->saveImage($receivingTask, $params['driving_license_image']);
             }
         });
         return $receivingTask;
@@ -117,19 +115,20 @@ class ReceivingTaskService
      */
     public function buildTaskNumber(): string
     {
-        return 'SH'.IdCreate::createOnlyId();
+        return 'SH' . IdCreate::createOnlyId();
     }
 
     /**
      * 延时完成昨天未完成的工单
      */
-    public function overtimeToCompleteTask(){
+    public function overtimeToCompleteTask()
+    {
         $yesterday = Carbon::now()->subDays(1)->format("Y-m-d");
         ReceivingTask::query()
             ->where('created_at', '>=', $yesterday . ' 00:00:00')
             ->where('created_at', '<=', $yesterday . ' 23.59.59')
-            ->whereIn('status',['创建','进行中'])
-            ->update(['status'=>'延时完成']);
+            ->whereIn('status', ['创建', '进行中'])
+            ->update(['status' => '超时完成']);
 
     }
 }

+ 94 - 35
app/Services/WorkOrderCancelInterceptService.php

@@ -8,62 +8,69 @@ use App\WorkOrderDetail;
 
 class WorkOrderCancelInterceptService extends WorkOrderService
 {
-    /**
-     * @var WorkOrderLogService $logService
-     * @var WorkOrderDetailService $detailService
-     * @var OrderIssueTypeService $issueTypeService
-     */
-    private $logService;
-    private $detailService;
-    private $issueTypeService;
 
-    public function __construct()
+    public function __construct(
+        WorkOrderLogService $logService,
+        WorkOrderImageService $imageService,
+        WorkOrderCommoditiesService $commoditiesService,
+        WorkOrderDetailService $detailService,
+        OrderIssueTypeService $issueTypeService,
+        OrderService $orderService
+    )
     {
-        parent::__construct();
-        $this->logService = app('WorkOrderLogService');
-        $this->detailService = app('WorkOrderDetailService');
-        $this->issueTypeService = app('OrderIssueTypeService');
+        parent::__construct($logService,$imageService,$commoditiesService,$detailService,$issueTypeService,$orderService);
     }
 
     public function checkWorkOrder($nos)
     {
         $issueType = $this->issueTypeService->firstOrCreate(['name' => '取消拦截']);
-        $orderQuery = Order::query()->select('id')->where('code',$nos);
-        $workOrder = WorkOrder::query()->select('id')->whereIn('order_id',$orderQuery)->first();
+        $orderQuery = Order::query()->select('id')->where('code', $nos);
+        $workOrder = WorkOrder::query()->select('id')->whereIn('order_id', $orderQuery)->first();
         if (!$workOrder) return false;
         return WorkOrderDetail::query()
-            ->where('order_issue_type_id',$issueType['id'])
-            ->where('work_order_id',$workOrder['id'])->exists();
+            ->where('order_issue_type_id', $issueType['id'])
+            ->where('work_order_id', $workOrder['id'])->exists();
     }
 
     public function checkWorkOrders($nos)
     {
         $issueType = $this->issueTypeService->firstOrCreate(['name' => '取消拦截']);
-        $orderQuery = Order::query()->select('id')->whereIn('code',$nos);
-        $workOrder = WorkOrder::query()->select('id')->whereIn('order_id',$orderQuery)->first();
+        $orderQuery = Order::query()->select('id')->whereIn('code', $nos);
+        $workOrder = WorkOrder::query()->select('id')->whereIn('order_id', $orderQuery)->first();
         if (!$workOrder) return false;
         return WorkOrderDetail::query()
-            ->where('order_issue_type_id',$issueType['id'])
-            ->where('work_order_id',$workOrder['id'])->exists();
+            ->where('order_issue_type_id', $issueType['id'])
+            ->where('work_order_id', $workOrder['id'])->exists();
     }
 
-
     public function store($params)
     {
         $issueType = $this->issueTypeService->firstOrCreate(['name' => '取消拦截']);
         $order = $this->syncOrder($params['order_no']);
         $workOrder = $this->createAndNotification($order, $issueType, $params['remark'] ?? '');
-        $workOrder->change('承运商处理','商家创建','');
+        $workOrder->update([
+            'status'=> WorkOrder::$LOGISTIC_HANDLER_STATUS,
+            'process_progress' => '商家创建',
+            'last_status' => WorkOrder::$DEFAULT_STATUS,
+            'logistic_tag' => WorkOrder::$NEW_TAG,
+            'owner_tag' => WorkOrder::$DEFAULT_TAG,
+            'bao_shi_tag' => WorkOrder::$DEFAULT_TAG,
+            'work_order_status' => 0,
+        ]);
         $detail = $this->detailService->createWorkOrderDetail($workOrder, $params);
-        $detail->change('承运商处理','商家创建','');
+        $detail->update([
+            'status' => WorkOrder::$LOGISTIC_HANDLER_STATUS,
+            'process_progress' => '商家创建',
+            'last_status' => WorkOrder::$DEFAULT_STATUS,
+            'logistic_handle_tag' =>0,
+        ]);
         $this->logService->createLog($detail, '创建', '创建工单');
     }
 
     public function batchStore($params)
     {
-        foreach ($params['order_nos'] as $order_no){
-            $param = ['order_no' =>  $order_no, 'remark' => $params['remark']];
-            $this->store($param);
+        foreach ($params['order_nos'] as $order_no) {
+            $this->store(['order_no' => $order_no, 'remark' => $params['remark']]);
         }
     }
 
@@ -75,10 +82,36 @@ class WorkOrderCancelInterceptService extends WorkOrderService
     public function logisticHandle(WorkOrderDetail $detail, $params)
     {
         $this->detailService->updateDetail($detail, $params);
-        $detail->change('宝时终审', $params['process_progress'],'承运商处理');
-        $detail->workOrder->change('宝时终审', $params['process_progress'],'承运商处理');
-        $detail->workOrder->clearWorkOrderStatus();
-        $this->logService->createLog($detail, '处理', '承运商处理');
+        $detail->update([
+            'status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
+            'process_progress' => $params['process_progress'],
+            'last_status' => WorkOrder::$LOGISTIC_HANDLER_STATUS,
+            'logistic_handle_tag' =>0,
+        ]);
+
+        $detail->workOrder()->update([
+            'status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
+            'process_progress' => $params['process_progress'],
+            'last_status' => WorkOrder::$LOGISTIC_HANDLER_STATUS,
+            'bao_shi_tag' => WorkOrder::$STRAND_TAG,
+            'owner_tag' => WorkOrder::$DEFAULT_TAG,
+            'logistic_tag' => WorkOrder::$DEFAULT_TAG,
+            'work_order_status' => 0,
+        ]);
+        $this->syncOrderIssueProcessLogs($detail);
+        $this->logService->createLog($detail, '处理', $params['process_progress'].'-承运商处理');
+    }
+
+    /**
+     * 承运商批量处理
+     * @param $details
+     * @param $params
+     */
+    public function logisticBatchHandler($details, $params)
+    {
+        foreach ($details as $detail) {
+            $this->logisticHandle($detail, $params);
+        }
     }
 
     /**
@@ -86,12 +119,38 @@ class WorkOrderCancelInterceptService extends WorkOrderService
      * @param WorkOrderDetail $detail
      * @param $params
      */
-    public function baoShiReviewDamage(WorkOrderDetail $detail, $params)
+    public function baoShiReview(WorkOrderDetail $detail, $params)
     {
         $this->detailService->updateDetail($detail, $params);
-        $this->logService->createLog($detail, '终审', '宝时终审');
-        $detail->change('待货主完结', $params['process_progress'],'宝时终审');
-        $detail->workOrder->change('待货主完结', $params['process_progress'],'宝时终审');
+        $detail->update([
+            'status' => WorkOrder::$TO_BO_OWNER_END_STATUS,
+            'process_progress' => $params['process_progress'],
+            'last_status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
+            'logistic_handle_tag' =>0,
+        ]);
+        $detail->workOrder()->update([
+            'status' => WorkOrder::$TO_BO_OWNER_END_STATUS,
+            'process_progress' => $params['process_progress'],
+            'last_status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
+            'owner_tag' => WorkOrder::$STRAND_TAG,
+            'logistic_tag' => WorkOrder::$DEFAULT_TAG,
+            'bao_shi_tag' => WorkOrder::$DEFAULT_TAG,
+            'work_order_status' => 0,
+        ]);
+        $this->logService->createLog($detail, '终审', $params['process_progress'].'-宝时终审');
     }
 
+    /**
+     * 宝时批量终审
+     * @param $details
+     * @param $params
+     */
+    public function baoShiBatchReview($details, $params)
+    {
+        foreach ($details as $detail) {
+            $this->baoShiReview($detail, $params);
+        }
+    }
+
+
 }

+ 80 - 26
app/Services/WorkOrderDamageService.php

@@ -13,21 +13,22 @@ use App\WorkOrderDetail;
  */
 class WorkOrderDamageService extends WorkOrderService
 {
-    /**
-     * @var WorkOrderLogService $logService
-     * @var WorkOrderDetailService $detailService
-     * @var OrderIssueTypeService $issueTypeService
-     */
-    private $logService;
-    private $detailService;
-    private $issueTypeService;
-
-    public function __construct()
+    public function __construct(
+        WorkOrderLogService $logService,
+        WorkOrderImageService $imageService,
+        WorkOrderCommoditiesService $commoditiesService,
+        WorkOrderDetailService $detailService,
+        OrderIssueTypeService $issueTypeService,
+        OrderService $orderService
+    )
     {
-        parent::__construct();
-        $this->logService = app('WorkOrderLogService');
-        $this->detailService = app('WorkOrderDetailService');
-        $this->issueTypeService = app('OrderIssueTypeService');
+        parent::__construct($logService,
+            $imageService,
+            $commoditiesService,
+            $detailService,
+            $issueTypeService,
+            $orderService
+        );
     }
 
     public function checkWorkOrder($nos)
@@ -53,9 +54,22 @@ class WorkOrderDamageService extends WorkOrderService
         $issueType = $this->issueTypeService->firstOrCreate(['name' => '破损']);
         $order = $this->syncOrder($params['order_no']);
         $workOrder = $this->createAndNotification($order, $issueType, $params['remark'] ?? '');
-        $workOrder->change('承运商处理','商家创建','');
+        $workOrder->update([
+            'status'=> WorkOrder::$LOGISTIC_HANDLER_STATUS,
+            'process_progress' => '商家创建',
+            'last_status' => WorkOrder::$DEFAULT_STATUS,
+            'logistic_tag' => WorkOrder::$NEW_TAG,
+            'owner_tag' => WorkOrder::$DEFAULT_TAG,
+            'bao_shi_tag' => WorkOrder::$DEFAULT_TAG,
+        ]);
         $detail = $this->detailService->createWorkOrderDetail($workOrder, $params);
-        $detail->change('承运商处理','商家创建','');
+        $detail->update([
+            'status'=> WorkOrder::$LOGISTIC_HANDLER_STATUS,
+            'process_progress' => '商家创建',
+            'last_status' => WorkOrder::$DEFAULT_STATUS,
+            'work_order_status' => 0,
+            'logistic_handle_tag' =>0,
+        ]);
         $this->logService->createLog($detail, '创建', '创建工单');
     }
 
@@ -67,8 +81,18 @@ class WorkOrderDamageService extends WorkOrderService
     public function ownerEdit(WorkOrderDetail $detail,$params)
     {
         $this->detailService->updateDetail($detail, $params);
-        $detail->change('承运商处理','商家创建','');
-        $detail->workOrder->change('承运商处理','商家创建','');
+        $detail->update([
+            'status'=> WorkOrder::$LOGISTIC_HANDLER_STATUS,
+            'process_progress' => '商家创建',
+            'last_status' => WorkOrder::$DEFAULT_STATUS,
+            'logistic_handle_tag' =>0,
+        ]);
+        $detail->workOrder()->update([
+            'status'=> WorkOrder::$LOGISTIC_HANDLER_STATUS,
+            'process_progress' => '商家创建',
+            'last_status' => WorkOrder::$DEFAULT_STATUS,
+            'work_order_status' => 0,
+        ]);
         $this->logService->createLog($detail, '处理', '货主编辑');
 
     }
@@ -81,10 +105,25 @@ class WorkOrderDamageService extends WorkOrderService
     public function logisticHandle(WorkOrderDetail $detail, $params)
     {
         $this->detailService->updateDetail($detail, $params);
-        $detail->change('宝时终审', $params['process_progress'],'承运商处理');
-        $detail->workOrder->change('宝时终审', $params['process_progress'],'承运商处理');
-        $detail->workOrder->clearWorkOrderStatus();
-        $this->logService->createLog($detail, '处理', '承运商处理');
+
+        $detail->update([
+            'status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
+            'process_progress' => $params['process_progress'],
+            'last_status' => WorkOrder::$LOGISTIC_HANDLER_STATUS,
+            'logistic_handle_tag' =>0,
+        ]);
+
+        $detail->workOrder()->update([
+            'status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
+            'process_progress' => $params['process_progress'],
+            'last_status' => WorkOrder::$LOGISTIC_HANDLER_STATUS,
+            'bao_shi_tag' => WorkOrder::$STRAND_TAG,
+            'logistic_tag' => WorkOrder::$DEFAULT_TAG,
+            'owner_tag' => WorkOrder::$DEFAULT_TAG,
+            'work_order_status' => 0,
+        ]);
+
+        $this->logService->createLog($detail, '处理', $params['process_progress'].'-承运商处理');
     }
 
     /**
@@ -92,12 +131,27 @@ class WorkOrderDamageService extends WorkOrderService
      * @param WorkOrderDetail $detail
      * @param $params
      */
-    public function baoShiReviewDamage(WorkOrderDetail $detail, $params)
+    public function baoShiReview(WorkOrderDetail $detail, $params)
     {
         $this->detailService->updateDetail($detail, $params);
-        $this->logService->createLog($detail, '终审', '宝时终审');
-        $detail->change('待货主完结', $params['process_progress'],'宝时终审');
-        $detail->workOrder->change('待货主完结', $params['process_progress'],'宝时终审');
+        $detail->update([
+            'status' => WorkOrder::$TO_BO_OWNER_END_STATUS,
+            'process_progress' => $params['process_progress'],
+            'last_status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
+            'logistic_handle_tag' =>0,
+        ]);
+
+        $detail->workOrder()->update([
+            'status' => WorkOrder::$TO_BO_OWNER_END_STATUS,
+            'process_progress' => $params['process_progress'],
+            'last_status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
+            'owner_tag' => WorkOrder::$STRAND_TAG,
+            'logistic_tag' => WorkOrder::$DEFAULT_TAG,
+            'bao_shi_tag' => WorkOrder::$DEFAULT_TAG,
+            'work_order_status' => 0,
+        ]);
+        $this->syncOrderIssueProcessLogs($detail);
+        $this->logService->createLog($detail, '终审', $params['process_progress'].'-宝时终审');
     }
 
 }

+ 1 - 1
app/Services/WorkOrderDetailService.php

@@ -117,7 +117,7 @@ class WorkOrderDetailService
     public function endDetail(WorkOrderDetail $detail)
     {
         // 标记为完成
-        $detail->end();
+        $detail->update(['status' => 5, 'work_order_status' => 0]);
         $this->commodityService->endDetail($detail);
         $this->imageService->endDetail($detail);
         $this->logService->endDetail($detail);

+ 78 - 40
app/Services/WorkOrderExpressAbnormalService.php

@@ -12,32 +12,28 @@ use App\WorkOrderDetail;
 
 class WorkOrderExpressAbnormalService extends WorkOrderService
 {
-    /**
-     * @var WorkOrderLogService $logService
-     * @var WorkOrderDetailService $detailService
-     * @var OrderIssueTypeService $issueTypeService
-     * @var OrderService $orderService
-     */
-    private $logService;
-    private $detailService;
-    private $issueTypeService;
-    public function __construct()
+
+    public function __construct(
+        WorkOrderLogService $logService,
+        WorkOrderImageService $imageService,
+        WorkOrderCommoditiesService $commoditiesService,
+        WorkOrderDetailService $detailService,
+        OrderIssueTypeService $issueTypeService,
+        OrderService $orderService
+    )
     {
-        parent::__construct();
-        $this->logService = app('WorkOrderLogService');
-        $this->detailService = app('WorkOrderDetailService');
-        $this->issueTypeService = app('OrderIssueTypeService');
+        parent::__construct($logService,$imageService,$commoditiesService,$detailService,$issueTypeService,$orderService);
     }
 
     public function checkWorkOrder($nos)
     {
         $issueType = $this->issueTypeService->firstOrCreate(['name' => '快递异常']);
-        $orderQuery = Order::query()->select('id')->where('code',$nos);
-        $workOrder = WorkOrder::query()->select('id')->whereIn('order_id',$orderQuery)->first();
+        $orderQuery = Order::query()->select('id')->where('code', $nos);
+        $workOrder = WorkOrder::query()->select('id')->whereIn('order_id', $orderQuery)->first();
         if (!$workOrder) return false;
         return WorkOrderDetail::query()
-            ->where('order_issue_type_id',$issueType['id'])
-            ->where('work_order_id',$workOrder['id'])->exists();
+            ->where('order_issue_type_id', $issueType['id'])
+            ->where('work_order_id', $workOrder['id'])->exists();
     }
 
     /*
@@ -55,13 +51,22 @@ class WorkOrderExpressAbnormalService extends WorkOrderService
     {
         $order = $this->syncOrder($params['order_no']);
         $issueType = $this->issueTypeService->firstOrCreate(['name' => '快递异常']);
-
-        $workOrder = $this->createOrResetWorkOrder($order, $issueType, $params['remark'] ?? '',$params['type']);
-        $workOrder->change('承运商处理','商家创建','');
-
+        $workOrder = $this->createOrResetWorkOrder($order, $issueType, $params['remark'] ?? '', $params['type']);
+        $workOrder->update([
+            'status' => WorkOrder::$LOGISTIC_HANDLER_STATUS,
+            'process_progress' => '商家创建',
+            'last_status' => WorkOrder::$DEFAULT_STATUS,
+            'logistic_tag' => WorkOrder::$NEW_TAG,
+            'owner_tag' => WorkOrder::$DEFAULT_TAG,
+            'bao_shi_tag' => WorkOrder::$DEFAULT_TAG,
+        ]);
         $detail = $this->detailService->createWorkOrderDetail($workOrder, $params);
-        $detail->change('承运商处理','商家创建','');
-
+        $detail->update([
+            'status' => WorkOrder::$LOGISTIC_HANDLER_STATUS,
+            'process_progress' => '商家创建',
+            'last_status' => WorkOrder::$DEFAULT_STATUS,
+            'logistic_handle_tag' =>0,
+        ]);
         $this->logService->createLog($detail, '创建', '创建工单');
     }
 
@@ -70,12 +75,21 @@ class WorkOrderExpressAbnormalService extends WorkOrderService
      * @param WorkOrderDetail $detail
      * @param $params
      */
-    public function ownerEdit(WorkOrderDetail $detail,$params)
+    public function ownerEdit(WorkOrderDetail $detail, $params)
     {
-        $this->detailService->updateDetail($detail,$params);
-        $detail->workOrder->clearWorkOrderStatus();
-        $detail->change('承运商处理','商家创建','');
-        $detail->workOrder->change('承运商处理','商家创建','');
+        $this->detailService->updateDetail($detail, $params);
+
+        $detail->update([
+            'status' => WorkOrder::$LOGISTIC_HANDLER_STATUS,
+            'process_progress' => '商家创建',
+            'last_status' => WorkOrder::$DEFAULT_STATUS,
+        ]);
+
+        $detail->workOrder()->update([
+            'status' => WorkOrder::$LOGISTIC_HANDLER_STATUS,
+            'process_progress' => '商家创建',
+            'last_status' => WorkOrder::$DEFAULT_STATUS,
+        ]);
         $this->logService->createLog($detail, '处理', '商家编辑');
     }
 
@@ -84,13 +98,25 @@ class WorkOrderExpressAbnormalService extends WorkOrderService
      * @param WorkOrderDetail $detail
      * @param $params
      */
-    public function logisticHandle(WorkOrderDetail $detail,$params)
+    public function logisticHandle(WorkOrderDetail $detail, $params)
     {
-        $this->detailService->updateDetail($detail,$params);
-        $detail->workOrder->clearWorkOrderStatus();
-        $detail->change('宝时终审',$params['process_progress'],'承运商处理');
-        $detail->workOrder->change('宝时终审',$params['process_progress'],'承运商处理');
-        $this->logService->createLog($detail, '处理', '承运商处理');
+        $this->detailService->updateDetail($detail, $params);
+        $detail->update([
+            'status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
+            'process_progress' => $params['process_progress'],
+            'last_status' => WorkOrder::$LOGISTIC_HANDLER_STATUS,
+        ]);
+
+        $detail->workOrder()->update([
+            'status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
+            'process_progress' => $params['process_progress'],
+            'last_status' => WorkOrder::$LOGISTIC_HANDLER_STATUS,
+            'bao_shi_tag' => WorkOrder::$STRAND_TAG,
+            'owner_tag' => WorkOrder::$DEFAULT_TAG,
+            'logistic_tag' => WorkOrder::$DEFAULT_TAG,
+        ]);
+
+        $this->logService->createLog($detail, '处理', $params['process_progress'] . '-承运商处理');
     }
 
     /**
@@ -98,12 +124,24 @@ class WorkOrderExpressAbnormalService extends WorkOrderService
      * @param WorkOrderDetail $detail
      * @param $params
      */
-    public function baoShiReviewExpressAbnormal(WorkOrderDetail $detail,$params)
+    public function baoShiReview(WorkOrderDetail $detail, $params)
     {
-        $this->detailService->updateDetail($detail,$params);
-        $this->logService->createLog($detail, '终审', '宝时终审');
-        $detail->change('待货主完结',$params['process_progress'],'宝时终审');
-        $detail->workOrder->change('待货主完结',$params['process_progress'],'宝时终审');
+        $this->detailService->updateDetail($detail, $params);
+        $detail->update([
+            'status' => WorkOrder::$TO_BO_OWNER_END_STATUS,
+            'process_progress' => $params['process_progress'],
+            'last_status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
+        ]);
+        $detail->workOrder()->update([
+            'status' => WorkOrder::$TO_BO_OWNER_END_STATUS,
+            'process_progress' => $params['process_progress'],
+            'last_status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
+            'owner_tag' => WorkOrder::$STRAND_TAG,
+            'logistic_tag' => WorkOrder::$DEFAULT_TAG,
+            'bao_shi_tag' => WorkOrder::$DEFAULT_TAG,
+        ]);
+        $this->syncOrderIssueProcessLogs($detail);
+        $this->logService->createLog($detail, '终审', $params['process_progress'] . '-宝时终审');
     }
 
 }

+ 88 - 39
app/Services/WorkOrderInformationChangeService.php

@@ -13,31 +13,28 @@ use App\WorkOrderDetail;
  */
 class WorkOrderInformationChangeService extends WorkOrderService
 {
-    /**
-     * @var WorkOrderLogService $logService
-     * @var WorkOrderDetailService $detailService
-     * @var OrderIssueTypeService $issueTypeService
-     */
-    private $logService;
-    private $detailService;
-    private $issueTypeService;
-    public function __construct()
+    public function __construct(
+        WorkOrderLogService $logService,
+        WorkOrderImageService $imageService,
+        WorkOrderCommoditiesService $commoditiesService,
+        WorkOrderDetailService $detailService,
+        OrderIssueTypeService $issueTypeService,
+        OrderService $orderService
+    )
     {
-        parent::__construct();
-        $this->logService = app('WorkOrderLogService');
-        $this->detailService = app('WorkOrderDetailService');
-        $this->issueTypeService = app('OrderIssueTypeService');
+        parent::__construct($logService, $imageService, $commoditiesService, $detailService, $issueTypeService, $orderService);
+
     }
 
     public function checkWorkOrder($nos)
     {
         $issueType = $this->issueTypeService->firstOrCreate(['name' => '信息更改']);
-        $orderQuery = Order::query()->select('id')->where('code',$nos);
-        $workOrder = WorkOrder::query()->select('id')->whereIn('order_id',$orderQuery)->first();
-        if (!$workOrder)return false;
+        $orderQuery = Order::query()->select('id')->where('code', $nos);
+        $workOrder = WorkOrder::query()->select('id')->whereIn('order_id', $orderQuery)->first();
+        if (!$workOrder) return false;
         return WorkOrderDetail::query()
-            ->where('order_issue_type_id',$issueType['id'])
-            ->where('work_order_id',$workOrder->id)->exists();
+            ->where('order_issue_type_id', $issueType['id'])
+            ->where('work_order_id', $workOrder->id)->exists();
     }
 
     /*
@@ -55,11 +52,25 @@ class WorkOrderInformationChangeService extends WorkOrderService
     {
         $issueType = $this->issueTypeService->firstOrCreate(['name' => '信息更改']);
         $order = $this->syncOrder($params['order_no']);
+
         $workOrder = $this->createAndNotification($order, $issueType, $params['remark'] ?? '');
-        $workOrder->change('承运商处理','商家创建','');
+
+        $workOrder->update([
+            'status' => WorkOrder::$LOGISTIC_HANDLER_STATUS,
+            'process_progress' => '商家创建',
+            'last_status' => WorkOrder::$DEFAULT_STATUS,
+            'logistic_tag' => WorkOrder::$NEW_TAG,
+            'owner_tag' => WorkOrder::$DEFAULT_TAG,
+            'bao_shi_tag' => WorkOrder::$DEFAULT_TAG,
+        ]);
 
         $detail = $this->detailService->createWorkOrderDetail($workOrder, $params);
-        $detail->change('承运商处理','商家创建','');
+
+        $detail->update([
+            'status' => WorkOrder::$LOGISTIC_HANDLER_STATUS,
+            'process_progress' => '商家创建',
+            'last_status' => WorkOrder::$DEFAULT_STATUS,
+        ]);
         $this->logService->createLog($detail, '创建', '创建工单');
     }
 
@@ -68,11 +79,11 @@ class WorkOrderInformationChangeService extends WorkOrderService
      * @param WorkOrderDetail $detail
      * @param $params
      */
-    public function ownerEdit(WorkOrderDetail $detail,$params)
+    public function ownerEdit(WorkOrderDetail $detail, $params)
     {
         $this->logService->createLog($detail, '处理', '商家编辑');
         $detail->update(['remark' => $params['remark']]);
-        $detail->workOrder->update(['remark' => $params['remark']]);
+        $detail->workOrder()->update(['remark' => $params['remark']]);
     }
 
     /**
@@ -80,12 +91,37 @@ class WorkOrderInformationChangeService extends WorkOrderService
      * @param WorkOrderDetail $detail
      * @param $params
      */
-    public function logisticHandler(WorkOrderDetail $detail,$params){
-        $this->logService->createLog($detail, '处理', '承运商处理');
-        $detail->change('宝时终审',$params['process_progress'],'承运商处理');
-        $detail->workOrder->change('宝时终审',$params['process_progress'],'承运商处理');
-        $detail->cancelLogisticTagHandle();
-        $detail->workOrder->clearWorkOrderStatus();
+    public function logisticHandler(WorkOrderDetail $detail, $params)
+    {
+
+        $detail->update([
+            'status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
+            'process_progress' => $params['process_progress'],
+            'last_status' => WorkOrder::$LOGISTIC_HANDLER_STATUS,
+        ]);
+
+        $detail->workOrder()->update([
+            'status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
+            'process_progress' => $params['process_progress'],
+            'last_status' => WorkOrder::$LOGISTIC_HANDLER_STATUS,
+            'bao_shi_tag' => WorkOrder::$STRAND_TAG,
+            'owner_tag' => WorkOrder::$DEFAULT_TAG,
+            'logistic_tag' => WorkOrder::$DEFAULT_TAG,
+            'work_order_status' => 0,
+        ]);
+        $this->logService->createLog($detail, '处理', '承运商处理-' . $params['process_progress']);
+    }
+
+    /**
+     * 承运商批量处理
+     * @param $details
+     * @param $params
+     */
+    public function logisticBatchHandler($details, $params)
+    {
+        foreach ($details as $detail) {
+            $this->logisticHandler($detail, $params);
+        }
     }
 
     /**
@@ -93,23 +129,36 @@ class WorkOrderInformationChangeService extends WorkOrderService
      * @param WorkOrderDetail $detail
      * @param $params
      */
-    public function baoShiReviewInformationChange(WorkOrderDetail $detail,$params)
+    public function baoShiReview(WorkOrderDetail $detail, $params)
     {
-        $this->logService->createLog($detail, '终审', '宝时终审');
-        $detail->change('待货主完结',$params['process_progress'],'宝时终审');
-        $detail->workOrder->change('待货主完结',$params['process_progress'],'宝时终审');
+        $detail->update([
+            'status' => WorkOrder::$TO_BO_OWNER_END_STATUS,
+            'process_progress' => $params['process_progress'],
+            'last_status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
+        ]);
+        $detail->workOrder()->update([
+            'status' => WorkOrder::$TO_BO_OWNER_END_STATUS,
+            'process_progress' => $params['process_progress'],
+            'last_status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
+            'owner_tag' => WorkOrder::$STRAND_TAG,
+            'logistic_tag' => WorkOrder::$DEFAULT_TAG,
+            'bao_shi_tag' => WorkOrder::$DEFAULT_TAG,
+            'work_order_status' => 0,
+        ]);
+
+        $this->syncOrderIssueProcessLogs($detail);
+        $this->logService->createLog($detail, '终审', '宝时终审-' . $params['process_progress']);
     }
 
     /**
      * 宝时批量终审
-     * @param $workOrders
-     * @param $processProgress
+     * @param $details
+     * @param $params
      */
-    public function baoShiBatchReviewInformationChange($workOrders,$processProgress){
-        $params = ['process_progress'=>$processProgress];
-        foreach ($workOrders as $workOrder){
-            $detail = $workOrder->details()->where('order_issue_type_id',$workOrder->order_issue_type_id)->where('status','!=',5)->orderByDesc('created_at')->first();
-            if ($detail) $this->baoShiReviewInformationChange($detail,$params);
+    public function baoShiBatchReview($details, $params)
+    {
+        foreach ($details as $detail) {
+            $this->baoShiReview($detail, $params);
         }
     }
 }

+ 127 - 58
app/Services/WorkOrderInterceptService.php

@@ -13,54 +13,56 @@ use App\WorkOrderDetail;
  */
 class WorkOrderInterceptService extends WorkOrderService
 {
-    /**
-     * @var WorkOrderLogService $logService
-     * @var WorkOrderDetailService $detailService
-     * @var OrderIssueTypeService $issueTypeService
-     */
-    private $logService;
-    private $detailService;
-    private $issueTypeService;
 
-    public function __construct()
+    public function __construct(
+        WorkOrderLogService $logService,
+        WorkOrderImageService $imageService,
+        WorkOrderCommoditiesService $commoditiesService,
+        WorkOrderDetailService $detailService,
+        OrderIssueTypeService $issueTypeService,
+        OrderService $orderService
+    )
     {
-        parent::__construct();
-        $this->logService = app('WorkOrderLogService');
-        $this->detailService = app('WorkOrderDetailService');
-        $this->issueTypeService = app('OrderIssueTypeService');
+        parent::__construct( $logService,
+             $imageService,
+             $commoditiesService,
+             $detailService,
+             $issueTypeService,
+             $orderService);
+
     }
 
     public function checkWorkOrder($nos)
     {
         $issueType = $this->issueTypeService->firstOrCreate(['name' => '拦截']);
-        $orderQuery = Order::query()->select('id')->where('code',$nos);
-        $workOrder = WorkOrder::query()->select('id')->whereIn('order_id',$orderQuery)->first();
+        $orderQuery = Order::query()->select('id')->where('code', $nos);
+        $workOrder = WorkOrder::query()->select('id')->whereIn('order_id', $orderQuery)->first();
         if (!$workOrder) return false;
         return WorkOrderDetail::query()
-            ->where('order_issue_type_id',$issueType['id'])
-            ->where('work_order_id',$workOrder['id'])->exists();
+            ->where('order_issue_type_id', $issueType['id'])
+            ->where('work_order_id', $workOrder['id'])->exists();
     }
 
     public function checkWorkOrders($nos)
     {
         $issueType = $this->issueTypeService->firstOrCreate(['name' => '拦截']);
-        $orderQuery = Order::query()->select('id')->whereIn('code',$nos);
-        $workOrder = WorkOrder::query()->select('id')->whereIn('order_id',$orderQuery)->first();
+        $orderQuery = Order::query()->select('id')->whereIn('code', $nos);
+        $workOrder = WorkOrder::query()->select('id')->whereIn('order_id', $orderQuery)->first();
         if (!$workOrder) return false;
         return WorkOrderDetail::query()
-            ->where('order_issue_type_id',$issueType['id'])
-            ->where('work_order_id',$workOrder['id'])->exists();
+            ->where('order_issue_type_id', $issueType['id'])
+            ->where('work_order_id', $workOrder['id'])->exists();
     }
 
     /*
     * 拦截工单处理流程
     * 1:创建
-    * 2:承运商处理   [`拦截失败`,`拦截成功`];
-    * 3:宝时终审     [`无法拦截`,`成功已退回,不赔偿`,`拦截在途丢件,赔偿`]
+    * 2:承运商处理
+    * 3:宝时终审
     */
 
     /**
-     * 拦截 工单创建
+     * 拦截工单创建
      * @param $params
      */
     public function store($params)
@@ -68,74 +70,141 @@ class WorkOrderInterceptService extends WorkOrderService
         $issueType = $this->issueTypeService->firstOrCreate(['name' => '拦截']);
         $order = $this->syncOrder($params['order_no']);
         $workOrder = $this->createAndNotification($order, $issueType, $params['remark'] ?? '拦截工单');
-        $workOrder->change('承运商处理','商家创建','');
         $detail = $this->detailService->createWorkOrderDetail($workOrder, $params);
-        $detail->change('承运商处理','商家创建','');
+        $workOrder->update([
+            'status' => WorkOrder::$LOGISTIC_HANDLER_STATUS,
+            'process_progress' => '商家创建',
+            'last_status' => WorkOrder::$DEFAULT_STATUS,
+            'logistic_tag' => WorkOrder::$NEW_TAG,
+            'owner_tag' => WorkOrder::$DEFAULT_TAG,
+            'bao_shi_tag' => WorkOrder::$DEFAULT_TAG,
+            'work_order_status' => 0,
+        ]);
+
+        $detail->update([
+            'status' => WorkOrder::$LOGISTIC_HANDLER_STATUS,
+            'last_status' => WorkOrder::$DEFAULT_STATUS,
+            'process_progress' => '商家创建',
+            'logistic_handle_tag' =>0,
+        ]);
         $this->logService->createLog($detail, '创建', '创建');
     }
 
     /**
-     * 批量拦截 工单创建
+     * 拦截工单-批量创建
      * @param $params
      */
     public function batchStore($params)
     {
-        foreach ($params['order_nos'] as $order_no){
-            $param = ['order_no' => $order_no,'remark' => $params['remark']];
-            $this->store($param);
+        foreach ($params['order_nos'] as $order_no) {
+            $this->store(['order_no' => $order_no, 'remark' => $params['remark']]);
         }
     }
 
     /**
-     * 承运商处理   编辑承运商已处理
+     * 承运商处理和编辑
      * @param WorkOrderDetail $detail
      * @param $params
      */
-    public function logisticHandler(WorkOrderDetail $detail,$params)
+    public function logisticHandler(WorkOrderDetail $detail, $params)
     {
-        $this->logService->createLog($detail, '处理', '承运商处理');
-        $detail->workOrder->clearWorkOrderStatus();                     // 清除创建标记
+        $detail->cancelLogisticTagHandle();         // 取消承运商处理标记
+        $detail->update([
+            'status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
+            'process_progress' => $params['process_progress'],
+            'last_status' => WorkOrder::$LOGISTIC_HANDLER_STATUS,
+            'logistic_handle_tag' =>0,
+        ]);
+        $detail->workOrder()->update([
+            'status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
+            'process_progress' => $params['process_progress'],
+            'last_status' => WorkOrder::$LOGISTIC_HANDLER_STATUS,
+            'logistic_tag' => WorkOrder::$DEFAULT_TAG,
+            'owner_tag' => WorkOrder::$DEFAULT_TAG,
+            'bao_shi_tag' => WorkOrder::$STRAND_TAG,
+            'work_order_status' => 0,
+        ]);
+        $this->logService->createLog($detail, '处理', '承运商处理-' . $params['process_progress']);
+    }
 
-        $detail->cancelLogisticTagHandle();
+    /**
+     * 承运商批量处理
+     * @param $details
+     * @param $params
+     */
+    public function logisticBatchHandler($details, $params)
+    {
+        foreach ($details as $detail) {
+            $this->logisticHandler($detail, $params);
+        }
+    }
 
-        $detail->change('宝时终审',$params['process_progress'],'承运商处理');
-        $detail->workOrder->change('宝时终审',$params['process_progress'],'承运商处理');
+    /**
+     * 宝时终审
+     * @param WorkOrderDetail $detail
+     * @param $params
+     */
+    public function baoShiReviewIntercept(WorkOrderDetail $detail, $params)
+    {
+        $detail->update([
+            'status' => WorkOrder::$TO_BO_OWNER_END_STATUS,
+            'process_progress' => $params['process_progress'],
+            'last_status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
+            'logistic_handle_tag' =>0,
+        ]);
+        $detail->workOrder()->update([
+            'status' => WorkOrder::$TO_BO_OWNER_END_STATUS,
+            'process_progress' => $params['process_progress'],
+            'last_status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
+            'owner_tag' => WorkOrder::$STRAND_TAG,
+            'logistic_tag' => WorkOrder::$DEFAULT_TAG,
+            'bao_shi_tag' => WorkOrder::$DEFAULT_TAG,
+            'work_order_status' => 0,
+        ]);
+        $this->syncOrderIssueProcessLogs($detail);
+        $this->logService->createLog($detail, '终审', '宝时终审-' . $params['process_progress']);
     }
 
-    public function baoShiReviewIntercept(WorkOrderDetail $detail,$params)
+    /**
+     * 宝时批量终审
+     * @param $details
+     * @param $params
+     */
+    public function baoShiBatchReview($details, $params)
     {
-        $this->logService->createLog($detail, '终审', '宝时终审');
-        $detail->change('待货主完结',$params['process_progress'],'宝时终审');
-        $detail->workOrder->change('待货主完结',$params['process_progress'],'宝时终审');
-        $detail->workOrder->clearWorkOrderStatus();                     // 清除创建标记
+        foreach ($details as $detail) {
+            $this->baoShiReviewIntercept($detail, $params);
+        }
     }
 
     /**
      * 自动终审
      * @param WorkOrder $workOrder
      */
-
     public function autoReviewIntercept(WorkOrder $workOrder)
     {
         /** @var WorkOrderDetail $detail */
         $issueType = $this->issueTypeService->firstOrCreate(['name' => '拦截']);
         if ($workOrder->order_issue_type_id != $issueType->id) return;
-        $detail = $workOrder->details()->where('order_issue_type_id',$issueType->id)->where('status','宝时终审')->orderByDesc('created_at')->first();
+        $detail = $workOrder->details()->where('order_issue_type_id', $issueType->id)->where('status', '宝时终审')->orderByDesc('created_at')->first();
         if (!$detail) return;
-        $this->logService->createLog($detail, '终审', '自动终审');
-        $detail->change('待货主完结','成功已退回,不赔偿','宝时终审');
-        $detail->workOrder->change('待货主完结','成功已退回,不赔偿','宝时终审');
-        $detail->workOrder->clearWorkOrderStatus();
+        $process_progress = '成功已退回,不赔偿';
+        $detail->update([
+            'status' => WorkOrder::$TO_BO_OWNER_END_STATUS,
+            'process_progress' => $process_progress,
+            'last_status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
+            'logistic_handle_tag' =>0,
+        ]);
+        $detail->workOrder()->update([
+            'status' => WorkOrder::$TO_BO_OWNER_END_STATUS,
+            'process_progress' => $process_progress,
+            'last_status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
+            'owner_tag' => WorkOrder::$STRAND_TAG,
+            'logistic_tag' => WorkOrder::$DEFAULT_TAG,
+            'bao_shi_tag' => WorkOrder::$DEFAULT_TAG,
+            'work_order_status' => 0,
+        ]);
+        $this->logService->createLog($detail, '终审', '自动终审' . $process_progress);
     }
 
-    /**
-     * 批量修改
-     */
-    public function baoShiBatchReviewIntercept($workOrders,$processProgress){
-        $params = ['process_progress'=>$processProgress];
-        foreach ($workOrders as $workOrder){
-            $detail = $workOrder->details()->where('order_issue_type_id',$workOrder->order_issue_type_id)->where('status','!=',5)->orderByDesc('created_at')->first();
-            if ($detail) $this->baoShiReviewIntercept($detail,$params);
-        }
-    }
 }

+ 69 - 27
app/Services/WorkOrderLossService.php

@@ -14,22 +14,16 @@ use App\WorkOrderDetail;
  */
 class WorkOrderLossService extends WorkOrderService
 {
-
-    /**
-     * @var WorkOrderLogService $logService
-     * @var WorkOrderDetailService $detailService
-     * @var OrderIssueTypeService $issueTypeService
-     */
-    private $logService;
-    private $detailService;
-    private $issueTypeService;
-
-    public function __construct()
+    public function __construct(
+        WorkOrderLogService $logService,
+        WorkOrderImageService $imageService,
+        WorkOrderCommoditiesService $commoditiesService,
+        WorkOrderDetailService $detailService,
+        OrderIssueTypeService $issueTypeService,
+        OrderService $orderService
+    )
     {
-        parent::__construct();
-        $this->logService = app('WorkOrderLogService');
-        $this->detailService = app('WorkOrderDetailService');
-        $this->issueTypeService = app('OrderIssueTypeService');
+        parent::__construct($logService,$imageService,$commoditiesService,$detailService,$issueTypeService,$orderService);
     }
 
     public function checkWorkOrder($nos)
@@ -56,28 +50,76 @@ class WorkOrderLossService extends WorkOrderService
         $orderIssueType = $this->issueTypeService->firstOrCreate(['name' => '快递丢件']);
         $order = $this->syncOrder($params['order_no']);
         $workOrder = $this->createAndNotification($order, $orderIssueType, $params['remark'] ?? '','宝时创建');
+        $workOrder->update([
+            'status'=> WorkOrder::$OWNER_HANDLER_STATUS,
+            'process_progress' => '宝时创建',
+            'last_status' => WorkOrder::$DEFAULT_STATUS,
+            'owner_tag' => WorkOrder::$NEW_TAG,
+            'logistic_tag' => WorkOrder::$DEFAULT_TAG,
+            'bao_shi_tag' => WorkOrder::$DEFAULT_TAG,
+        ]);
         $detail = $this->detailService->createWorkOrderDetail($workOrder, $params);
-        $workOrder->change('货主处理','宝时创建','');
-        $detail->change('货主处理','宝时创建','');
+        $detail->update([
+            'status'=> WorkOrder::$OWNER_HANDLER_STATUS,
+            'process_progress' => '宝时创建',
+            'last_status' => WorkOrder::$DEFAULT_STATUS,
+            'work_order_status' => 0,
+            'logistic_handle_tag' =>0,
+        ]);
         $this->logService->createLog($detail, '创建', '创建工单');
     }
 
-    // 商家填充商品信息
+    /**
+     * 货主填充信息填充
+     * @param WorkOrderDetail $detail
+     * @param $params
+     */
     public function ownerFillDetail(WorkOrderDetail $detail,$params)
     {
         $this->detailService->fillLossDetail($detail, $params);
-        $detail->workOrder->clearWorkOrderStatus();
-        $detail->change('宝时终审','待终审','货主处理');
-        $detail->workOrder->change('宝时终审','待终审','货主处理');
-        $this->logService->createLog($detail, '处理', '填充丢件信息');
+        $detail->update([
+            'status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
+            'process_progress' => '待终审',
+            'last_status' => WorkOrder::$OWNER_HANDLER_STATUS,
+            'logistic_handle_tag' =>0,
+        ]);
+        $detail->workOrder()->update([
+            'status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
+            'process_progress' => '待终审',
+            'last_status' => WorkOrder::$OWNER_HANDLER_STATUS,
+            'bao_shi_tag' => WorkOrder::$STRAND_TAG,
+            'owner_tag' => WorkOrder::$DEFAULT_TAG,
+            'logistic_tag' => WorkOrder::$DEFAULT_TAG,
+            'work_order_status' => 0,
+        ]);
+        $this->logService->createLog($detail, '处理', '待终审'.'-填充丢件信息');
     }
 
-    // 宝时审核
-    public function baoShiReviewLoss(WorkOrderDetail $detail,$params)
+    /**
+     * 宝时审核
+     * @param WorkOrderDetail $detail
+     * @param $params
+     */
+    public function baoShiReview(WorkOrderDetail $detail,$params)
     {
-        $this->logService->createLog($detail, '终审', '宝时终审');
+        $process_progress = '终审完成';
         $this->detailService->updateLossDetail($detail,$params);
-        $detail->change('待货主完结','终审完成',"宝时终审");
-        $detail->workOrder->change('待货主完结','终审完成',"宝时终审");
+        $detail->update([
+            'status' => WorkOrder::$TO_BO_OWNER_END_STATUS,
+            'process_progress' => $process_progress,
+            'last_status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
+            'logistic_handle_tag' =>0,
+        ]);
+        $detail->workOrder()->update([
+            'status' => WorkOrder::$TO_BO_OWNER_END_STATUS,
+            'process_progress' => $process_progress,
+            'last_status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
+            'owner_tag' => WorkOrder::$STRAND_TAG,
+            'logistic_tag' => WorkOrder::$DEFAULT_TAG,
+            'bao_shi_tag' => WorkOrder::$DEFAULT_TAG,
+            'work_order_status' => 0,
+        ]);
+        $this->syncOrderIssueProcessLogs($detail);
+        $this->logService->createLog($detail, '终审', '终审完成'.'-宝时终审');
     }
 }

+ 118 - 52
app/Services/WorkOrderMistakeService.php

@@ -13,32 +13,27 @@ use App\WorkOrderDetail;
  */
 class WorkOrderMistakeService extends WorkOrderService
 {
-    /**
-     * @var WorkOrderLogService $logService
-     * @var WorkOrderDetailService $detailService
-     * @var OrderIssueTypeService $issueTypeService
-     * @var WorkOrderService $workOrderService
-     */
-    private $logService;
-    private $detailService;
-    private $issueTypeService;
-    public function __construct()
+    public function __construct(
+        WorkOrderLogService $logService,
+        WorkOrderImageService $imageService,
+        WorkOrderCommoditiesService $commoditiesService,
+        WorkOrderDetailService $detailService,
+        OrderIssueTypeService $issueTypeService,
+        OrderService $orderService
+    )
     {
-        parent::__construct();
-        $this->logService = app('WorkOrderLogService');
-        $this->detailService = app('WorkOrderDetailService');
-        $this->issueTypeService = app('OrderIssueTypeService');
+        parent::__construct($logService,$imageService,$commoditiesService,$detailService,$issueTypeService,$orderService);
     }
 
     public function checkWorkOrder($nos)
     {
         $issueType = $this->issueTypeService->firstOrCreate(['name' => '信息更改']);
-        $orderQuery = Order::query()->select('id')->where('code',$nos);
-        $workOrder= WorkOrder::query()->select('id')->whereIn('order_id',$orderQuery)->first();
+        $orderQuery = Order::query()->select('id')->where('code', $nos);
+        $workOrder = WorkOrder::query()->select('id')->whereIn('order_id', $orderQuery)->first();
         if (!$workOrder) return false;
         return WorkOrderDetail::query()
-            ->where('order_issue_type_id',$issueType['id'])
-            ->where('work_order_id',$workOrder->id)->exists();
+            ->where('order_issue_type_id', $issueType['id'])
+            ->where('work_order_id', $workOrder->id)->exists();
     }
 
     /*
@@ -52,11 +47,23 @@ class WorkOrderMistakeService extends WorkOrderService
     {
         $issueType = $this->issueTypeService->firstOrCreate(['name' => '错漏发']);
         $order = $this->syncOrder($params['order_no']);
-        $workOrder = $this->createAndNotification($order, $issueType, $params['remark'] ?? '','商家已创建');
+        $workOrder = $this->createAndNotification($order, $issueType, $params['remark'] ?? '', '商家已创建');
         $detail = $this->detailService->createWorkOrderDetail($workOrder, $params);
-        $this->logService->createLog($detail, '创建','商家创建');
-        $workOrder->change('宝时处理','商家创建','');
-        $detail->change('宝时处理','商家创建','');
+        $workOrder->update([
+            'status'=> WorkOrder::$BAO_SHI_HANDLER_STATUS,
+            'process_progress' => '商家创建',
+            'last_status' => WorkOrder::$DEFAULT_STATUS,
+            'bao_shi_tag' => WorkOrder::$NEW_TAG,
+            'logistic_tag' => WorkOrder::$DEFAULT_TAG,
+            'owner_tag' => WorkOrder::$DEFAULT_TAG,
+            'logistic_handle_tag' =>0,
+        ]);
+        $detail->update([
+            'status'=> WorkOrder::$BAO_SHI_HANDLER_STATUS,
+            'process_progress' => '商家创建',
+            'last_status' => WorkOrder::$DEFAULT_STATUS,
+        ]);
+        $this->logService->createLog($detail, '创建', '商家创建');
     }
 
     /**
@@ -64,12 +71,22 @@ class WorkOrderMistakeService extends WorkOrderService
      * @param WorkOrderDetail $detail
      * @param $params
      */
-    public function ownerEdit(WorkOrderDetail $detail,$params)
+    public function ownerEdit(WorkOrderDetail $detail, $params)
     {
-        $this->detailService->updateDetail($detail,$params);
-        $detail->change('宝时处理','商家创建','');
-        $detail->workOrder->change('宝时处理','商家创建','');
-        $this->logService->createLog($detail, '处理','商家修改');
+        $this->detailService->updateDetail($detail, $params);
+        $detail->update([
+            'status' => WorkOrder::$BAO_SHI_HANDLER_STATUS,
+            'process_progress' => $params['process_progress'],
+            'last_status' => WorkOrder::$DEFAULT_STATUS,
+            'logistic_handle_tag' =>0,
+        ]);
+        $detail->workOrder()->update([
+            'status' => WorkOrder::$BAO_SHI_HANDLER_STATUS,
+            'process_progress' => $params['process_progress'],
+            'last_status' => WorkOrder::$DEFAULT_STATUS,
+            'work_order_status' => 0,
+        ]);
+        $this->logService->createLog($detail, '处理', '商家修改');
     }
 
     /**
@@ -77,13 +94,25 @@ class WorkOrderMistakeService extends WorkOrderService
      * @param WorkOrderDetail $detail
      * @param $params
      */
-    public function baoShiCheckMistake(WorkOrderDetail $detail,$params)
+    public function baoShiCheckMistake(WorkOrderDetail $detail, $params)
     {
-        $this->detailService->updateDetail($detail,$params);
-        $detail->change('货主处理','已核实','宝时处理');
-        $detail->workOrder->change('货主处理','已核实','宝时处理');
-        $detail->workOrder->clearWorkOrderStatus();     // 清除创建标记
-        $this->logService->createLog($detail, '处理', '承运商处理');
+        $this->detailService->updateDetail($detail, $params);
+        $detail->update([
+            'status' => WorkOrder::$OWNER_HANDLER_STATUS,
+            'process_progress' => '已核实',
+            'last_status' => WorkOrder::$BAO_SHI_HANDLER_STATUS,
+            'logistic_handle_tag' =>0,
+        ]);
+        $detail->workOrder()->update([
+            'status' => WorkOrder::$OWNER_HANDLER_STATUS,
+            'process_progress' => '已核实',
+            'last_status' => WorkOrder::$BAO_SHI_HANDLER_STATUS,
+            'owner_tag' => WorkOrder::$STRAND_TAG,
+            'bao_shi_tag' => WorkOrder::$DEFAULT_TAG,
+            'logistic_tag' => WorkOrder::$DEFAULT_TAG,
+            'work_order_status' => 0,
+        ]);
+        $this->logService->createLog($detail, '处理', '已核实'.'-宝时处理');
     }
 
     /**
@@ -91,14 +120,28 @@ class WorkOrderMistakeService extends WorkOrderService
      * @param WorkOrderDetail $detail
      * @param $params
      */
-    public function ownerReview(WorkOrderDetail $detail,$params)
+    public function ownerReview(WorkOrderDetail $detail, $params)
     {
-        $this->detailService->updateDetail($detail,$params);
-
-        $detail->change('宝时终审',$params['process_progress'],'货主处理');
-        $detail->workOrder->change('宝时终审',$params['process_progress'],'货主处理');
-
-        $this->logService->createLog($detail, '处理', '货主处理');
+        $this->detailService->updateDetail($detail, $params);
+
+        $detail->update([
+            'status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
+            'process_progress' => $params['process_progress'],
+            'last_status' => WorkOrder::$OWNER_HANDLER_STATUS,
+            'logistic_handle_tag' =>0,
+        ]);
+
+        $detail->workOrder()->update([
+            'status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
+            'process_progress' => $params['process_progress'],
+            'last_status' => WorkOrder::$OWNER_HANDLER_STATUS,
+            'bao_shi_tag' => WorkOrder::$STRAND_TAG,
+            'owner_tag' => WorkOrder::$DEFAULT_TAG,
+            'logistic_tag' => WorkOrder::$DEFAULT_TAG,
+            'work_order_status' => 0,
+        ]);
+
+        $this->logService->createLog($detail, '处理', $params['process_progress'].'-货主处理');
     }
 
     /**
@@ -106,14 +149,23 @@ class WorkOrderMistakeService extends WorkOrderService
      * @param WorkOrderDetail $detail
      * @param $params
      */
-    public function ownerEditReview(WorkOrderDetail $detail,$params)
+    public function ownerEditReview(WorkOrderDetail $detail, $params)
     {
-        $this->detailService->updateDetail($detail,$params);
-
-        $detail->change('宝时终审',$params['process_progress'],'货主处理');
-        $detail->workOrder->change('宝时终审',$params['process_progress'],'货主处理');
-
-        $this->logService->createLog($detail, '处理', '货主编辑');
+        $this->detailService->updateDetail($detail, $params);
+
+        $detail->update([
+            'status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
+            'process_progress' => $params['process_progress'],
+            'last_status' => WorkOrder::$OWNER_HANDLER_STATUS,
+            'logistic_handle_tag' =>0,
+        ]);
+        $detail->workOrder()->update([
+            'status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
+            'process_progress' => $params['process_progress'],
+            'last_status' => WorkOrder::$OWNER_HANDLER_STATUS,
+            'work_order_status' => 0,
+        ]);
+        $this->logService->createLog($detail, '处理', $params['process_progress'].'-货主编辑');
     }
 
     /**
@@ -121,12 +173,26 @@ class WorkOrderMistakeService extends WorkOrderService
      * @param $detail
      * @param $params
      */
-    public function baoShiReview($detail,$params)
+    public function baoShiReview($detail, $params)
     {
-        $this->detailService->updateDetail($detail,$params);
-        $this->logService->createLog($detail,'终审','宝时终审');
-        $detail->change('待货主完结',$params['process_progress'],'宝时终审');
-        $detail->workOrder->change('待货主完结',$params['process_progress'],'宝时终审');
+        $this->detailService->updateDetail($detail, $params);
+        $detail->update([
+            'status' => WorkOrder::$TO_BO_OWNER_END_STATUS,
+            'process_progress' => $params['process_progress'],
+            'last_status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
+            'logistic_handle_tag' =>0,
+        ]);
+        $detail->workOrder()->update([
+            'status' => WorkOrder::$TO_BO_OWNER_END_STATUS,
+            'process_progress' => $params['process_progress'],
+            'last_status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
+            'owner_tag' => WorkOrder::$STRAND_TAG,
+            'logistic_tag' => WorkOrder::$DEFAULT_TAG,
+            'bao_shi_tag' => WorkOrder::$DEFAULT_TAG,
+            'work_order_status' => 0,
+        ]);
+        $this->syncOrderIssueProcessLogs($detail);
+        $this->logService->createLog($detail, '终审', $params['process_progress'].'-宝时终审');
     }
 
 }

+ 67 - 77
app/Services/WorkOrderProcessLogService.php

@@ -2,101 +2,91 @@
 
 namespace App\Services;
 
+use App\OrderIssue;
 use App\Traits\ServiceAppAop;
-use App\WorkOrderProcessLog;
+use App\User;
+use App\WorkOrder;
+use App\WorkOrderDetail;
+use Illuminate\Database\Eloquent\Model;
 use Illuminate\Support\Facades\Auth;
 
 class WorkOrderProcessLogService
 {
     use ServiceAppAop;
 
-    protected $modelClass = WorkOrderProcessLog::class;
-
-    public function hasLogisticProcessLog($workOrderId): bool
+    /**
+     * 创建 处理日志
+     * @param WorkOrderDetail $detail
+     * @param $params
+     * @param User|null $user
+     * @return Model
+     */
+    public function createProcessLog(WorkOrderDetail $detail, $params, User $user = null): Model
     {
-        return WorkOrderProcessLog::query()
-            ->where('work_order_id', $workOrderId)
-            ->where('type', '2')->exists();
-    }
+        $user = $user ?? Auth::user();
+        $process_log = $detail->processLogs()->create([
+            'work_order_detail_id' => $detail->id,
+            'work_order_id' => $detail->work_order_id,
+            'content' => $params['content'],
+            'user_id' => Auth::id(),
+        ]);
 
-    public function hasBaoShiProcessLog($workOrderId): bool
-    {
-        return WorkOrderProcessLog::query()
-            ->where('work_order_id', $workOrderId)
-            ->where('type', '1')->exists();
-    }
+        /** @var WorkOrder $work_order */
+        $work_order = $detail->workOrder;
 
-    public function createLogisticProcessLog($params)
-    {
-        // 赔偿方  是否赔偿
-        if ($params['is_indemnity'] == 1) {  // 赔偿
-            $params = [
-                'work_order_id' => $params['work_order_id'],
-                'is_indemnity' => $params['is_indemnity'],
-                'indemnity' => $params['indemnity'],
-                'indemnitor' => 1,
-                'remark' => $params['remark'],
-                'type' => 2,
-            ];
-        } else if ($params['is_indemnity'] == 2){ // 不赔偿
-            $params = [
-                'work_order_id' => $params['work_order_id'],
-                'is_indemnity' => $params['is_indemnity'],
-                'remark' => $params['remark'],
-                'indemnitor' => 0,
-            ];
+        if (in_array($work_order->status, ['宝时处理', '宝时终审'])
+            && $work_order->bao_shi_tag != WorkOrder::$NO_STATE_TAG) {
+
+            $detail->workOrder()->whereIn('status', [1, 4])->update(['bao_shi_tag' => WorkOrder::$NO_STATE_TAG]);
+        } else if (in_array($work_order->status, ['承运商处理'])
+            && $work_order->logistic_tag != WorkOrder::$NO_STATE_TAG) {
+
+            $detail->workOrder()->where('status', 3)->update(['logistic_tag' => WorkOrder::$NO_STATE_TAG]);
+        } else if (in_array($work_order->status, ['货主处理', '待货主完结'])
+            && $work_order->owner_tag != WorkOrder::$NO_STATE_TAG) {
+
+            $detail->workOrder()->whereIn('status', [2, 6])->update(['owner_tag' => 1]);
         }
+        $process_log->setAttribute('user', $user);
 
-        $params['creator_id'] = Auth::user()['id'];
-        $params['type'] = '2';
-        $log = WorkOrderProcessLog::query()->create($params);
-        $log->workOrder()->update(['work_order_status' => '3']);
-        $this->syncOrderIssueIndemnity($log);
-        $log->loadMissing('creator');
-        return $log;
+        return $process_log;
     }
 
-    public function createBaoShiProcessLog($params)
+    /**
+     * 批量创建处理日志
+     * @param $workOrders
+     * @param $params
+     * @return array
+     */
+    public function batchCreateProcessLog($workOrders, $params): array
     {
-        if ($params['is_indemnity'] == 1){  // 赔偿
-            $params = [
-                'work_order_id' => $params['work_order_id'],
-                'is_indemnity' => $params['is_indemnity'],
-                'indemnitor' => $params['indemnitor'],
-                'indemnity' => $params['indemnity'],
-            ];
-        } else if ($params['is_indemnity'] == 2){ // 不赔偿
-            $params = [
-                'work_order_id' => $params['work_order_id'],
-                'is_indemnity' => $params['is_indemnity'],
-                'remark' => $params['remark'],
-                'indemnity' => $params['indemnity'],
-            ];
+        $user = Auth::user();
+        $process_logs = [];
+        /** @var WorkOrder $workOrder */
+        foreach ($workOrders as $workOrder) {
+            /** @var WorkOrderDetail $detail */
+            $detail = $workOrder->details()->where('order_issue_type_id',$workOrder->order_issue_type_id)->orderByDesc('created_at')->first();
+            if (!$detail) continue;
+            $process_logs[] = $this->createProcessLog($detail, $params, $user);
         }
-        $params['creator_id'] = Auth::user()['id'];
-        $params['type'] = 1;
-        if ($params['is_indemnity'] == 2) $params['indemnity'] = 0;
-        $log = WorkOrderProcessLog::query()->create($params);
-        $this->syncOrderIssueIndemnity($log);
-        $log->loadMissing('creator');
-        return $log;
+        return $process_logs;
     }
 
-    public function syncOrderIssueIndemnity($log)
+    /**
+     * 将工单的处理结果同步到问题件的处理结果
+     * @param OrderIssue $orderIssue
+     * @param WorkOrderDetail $detail
+     */
+    public function syncOrderIssue(OrderIssue $orderIssue, WorkOrderDetail $detail)
     {
-        if ($log->is_indemnity == '否') return;
-        $orderIssue = $log->workOrder->orderIssue;
-        if ($log->isBaoShiLog()) {
-            if ($log->indemnitor == '宝时'){
-                if ($orderIssue->baoshi_indemnity_money) return ;
-                $orderIssue->update(['baoshi_indemnity_money'=>$log->indemnity]);
-            } else if ($log->indemnitor == '承运商'){
-                if ($orderIssue->logistic_indemnity_money) return ;
-                $orderIssue->update(['logistic_indemnity_money'=>$log->indemnity]);
-            }
-        } else if ($log->isLogisticLog()){
-            if ($orderIssue->logistic_indemnity_money) return ;
-            $orderIssue->update(['logistic_indemnity_money'=>$log->indemnity]);
-        }
+        $logs = $detail->processLogs()->where('status', '未同步')->get();
+        $orderIssue->logs()->insert($logs->map(function ($log) use ($orderIssue) {
+            return [
+                'order_issue_id' => $orderIssue->id,
+                'context' => $log->context,
+                'user_id' => $log->user_id,
+                'create_at' => $log->created_at,
+            ];
+        })->toArray());
     }
 }

+ 137 - 60
app/Services/WorkOrderService.php

@@ -2,13 +2,11 @@
 
 namespace App\Services;
 
-use App\OracleDOCOrderHeader;
-use App\Order;
 use App\OrderIssue;
+use App\OrderIssueProcessLog;
 use App\OrderIssueRejectedBill;
 use App\OrderIssueType;
 use App\OrderPackage;
-use App\RejectedBill;
 use App\Traits\ServiceAppAop;
 use App\WorkOrder;
 use App\WorkOrderDetail;
@@ -20,46 +18,43 @@ class WorkOrderService
 
     protected $modelClass = WorkOrder::class;
 
-    /**
-     * @var WorkOrderLogService $logService
-     * @var WorkOrderImageService $imageService
-     * @var WorkOrderCommoditiesService $commoditiesService
-     * @var WorkOrderDetailService $detailService
-     * @var OrderIssueTypeService $issueTypeService
-     * @var OrderService $orderService
-     */
-    private $logService;
-    private $imageService;
-    private $commoditiesService;
-    private $detailService;
-    private $issueTypeService;
-    private $orderService;
+    public $logService;
+    public $imageService;
+    public $commoditiesService;
+    public $detailService;
+    public $issueTypeService;
+    public $orderService;
 
-    public function __construct()
+    public function __construct(
+        WorkOrderLogService $logService,
+        WorkOrderImageService $imageService,
+        WorkOrderCommoditiesService $commoditiesService,
+        WorkOrderDetailService $detailService,
+        OrderIssueTypeService $issueTypeService,
+        OrderService $orderService
+    )
     {
-        $this->logService = app(WorkOrderLogService::class);
-        $this->imageService = app(WorkOrderImageService::class);
-        $this->commoditiesService = app(WorkOrderCommoditiesService::class);
-        $this->detailService = app(WorkOrderDetailService::class);
-        $this->issueTypeService = app(OrderIssueTypeService::class);
-        $this->orderService = app(OrderService::class);
+        $this->logService = $logService;
+        $this->imageService = $imageService;
+        $this->commoditiesService = $commoditiesService;
+        $this->detailService = $detailService;
+        $this->issueTypeService = $issueTypeService;
+        $this->orderService = $orderService;
     }
 
     public function createOrResetWorkOrder($order, $issueType, $remark, $process_progress = '商家创建')
     {
-        $user = Auth::user();
         $workOrder = WorkOrder::query()->where('order_id', $order->id)->orderByDesc('created_at')->first();
         if ($workOrder) {
             $this->detailService->undoneTagsByWorkOrder($workOrder);
             $workOrder->update([
                 'remark' => $remark,
                 'order_issue_type_id' => $issueType->id,
-                'creator_id' => $user['id'] ?? '',
-                'status' => 0,
-                'work_order_status' => 1,
+                'creator_id' => Auth::id() ?? '',
+                'status' => WorkOrder::$DEFAULT_STATUS,
                 'process_progress' => $process_progress,
                 'type' => $process_progress,
-                'last_handler_id' => $user['id'] ?? '',
+                'last_handler_id' => Auth::id() ?? '',
                 'created_at' => now(),
             ]);
             return $workOrder;
@@ -68,16 +63,15 @@ class WorkOrderService
             'order_id' => $order->id,
             'logistic_id' => $order->logistic_id ?? '',
             'owner_id' => $order->owner_id ?? '',
-            'creator_id' => $user['id'] ?? '',
+            'creator_id' => Auth::id() ?? '',
             'remark' => $remark,
             'outer_table_name' => 'orders',
             'order_issue_type_id' => $issueType->id,
             'uniquely_tag' => $order->code,
-            'status' => 0,
-            'work_order_status' => 1,
+            'status' => WorkOrder::$DEFAULT_STATUS,
             'process_progress' => $process_progress,
             'type' => $process_progress,
-            'last_handler_id' => $user['id'] ?? '',
+            'last_handler_id' => Auth::id() ?? '',
         ]);
     }
 
@@ -85,9 +79,7 @@ class WorkOrderService
     {
         /** @var WorkOrder $workOrder */
         $workOrder = $this->createOrResetWorkOrder($order, $orderIssueType, $remark, $process_progress);
-
         $workOrder->notification();
-
         return $workOrder;
     }
 
@@ -99,9 +91,14 @@ class WorkOrderService
     public function end(WorkOrder $workOrder, WorkOrderDetail $detail)
     {
         $this->detailService->endDetail($detail);
-        $workOrder->clearWorkOrderStatus();
+        $workOrder->update([
+            'status' => WorkOrder::$END_STATUS,
+            'owner_tag' => WorkOrder::$DEFAULT_TAG,
+            'logistic_tag' => WorkOrder::$DEFAULT_TAG,
+            'bao_shi_tag' => WorkOrder::$DEFAULT_TAG,
+            'work_order_status' => 0,
+        ]);
         $this->logService->createLog($detail, '完结', '完结工单');
-        $workOrder->changeStatus('完成');
     }
 
     /**
@@ -110,23 +107,33 @@ class WorkOrderService
      */
     public function ownerEndWorkOrderDetail(WorkOrderDetail $detail)
     {
-        $this->logService->createLog($detail, '完结', '货主完结');
-        $detail->change('完成', '完成', '待货主完结');
-        $detail->workOrder->change('完成', '完成', '待货主完结');
-        $detail->workOrder->clearWorkOrderStatus();                     // 清除创建标记
+        $detail->update([
+            'status' => WorkOrder::$END_STATUS,
+            'process_progress' => '完成',
+            'last_status' => WorkOrder::$TO_BO_OWNER_END_STATUS,
+        ]);
+        $detail->workOrder()->update([
+            'status' => WorkOrder::$END_STATUS,
+            'process_progress' => '完成',
+            'last_status' => WorkOrder::$TO_BO_OWNER_END_STATUS,
+            'owner_tag' => WorkOrder::$DEFAULT_TAG,
+            'logistic_tag' => WorkOrder::$DEFAULT_TAG,
+            'bao_shi_tag' => WorkOrder::$DEFAULT_TAG,
+            'work_order_status' => 0,
+        ]);
         $this->detailService->endDetail($detail);                       // 标记为处理过
+        $this->logService->createLog($detail, '完结', '货主完结');
     }
 
     /**
-     * @param WorkOrder $workOrder
-     * @param WorkOrderDetail $detail
+     * 商家批量完结工单
+     * @param $details
      */
-    public function logisticEnd(WorkOrder $workOrder, WorkOrderDetail $detail)
+    public function ownerBatchEndWorkOrderDetails($details)
     {
-        $this->logService->createLog($detail, '完结', '承运商完结工单');
-        $this->detailService->endDetail($detail);
-        $workOrder->clearWorkOrderStatus();
-        $workOrder->changeStatus('完成');
+        foreach ($details as $detail) {
+            $this->ownerEndWorkOrderDetail($detail);
+        }
     }
 
     public function find($id): WorkOrder
@@ -141,7 +148,6 @@ class WorkOrderService
         return WorkOrder::query()->defaultWith()->find($id);
     }
 
-
     /**
      * 生成问题件
      * @param $work_orders
@@ -273,26 +279,97 @@ class WorkOrderService
     public function logisticHandlerTag(WorkOrderDetail $detail)
     {
         $detail->logisticTagHandle();
-        app(WorkOrderLogService::class)->createLog($detail,'处理','处理中');
-        $last_status = $detail->last_status;
-        $detail->change('承运商处理','承运商处理中',$last_status);
-        $detail->workOrder->change('承运商处理','承运商处理中',$last_status);
-        if ($detail->workOrder->work_order_status === '1')
-            $detail->workOrder->update(['work_order_status' => 0]);
-
+        $last_status = WorkOrder::$enums['status'][$detail->status];
+        $detail->update([
+            'status' => WorkOrder::$LOGISTIC_HANDLER_STATUS,
+            'process_progress' => '承运商处理中',
+            'last_status' => $last_status,
+            'logistic_handle_tag' =>1,
+        ]);
+        $detail->workOrder()->update([
+            'status' => WorkOrder::$LOGISTIC_HANDLER_STATUS,
+            'process_progress' => '承运商处理中',
+            'last_status' => $last_status,
+            'logistic_tag' => WorkOrder::$NO_STATE_TAG,
+            'owner_tag' => WorkOrder::$DEFAULT_TAG,
+            'bao_shi_tag' => WorkOrder::$DEFAULT_TAG,
+            'work_order_status' => WorkOrder::$DEFAULT_TAG,
+        ]);
+        app(WorkOrderLogService::class)->createLog($detail, '处理', '标记处理中');
     }
 
     public function syncWorkOrder($rejectedBill)
     {
         /** @var OrderIssue $order_issue */
-        $orderIssueRejectedBill = OrderIssueRejectedBill::query()->where('logistic_number_return',$rejectedBill['logistic_number_return'])->first();
+        $orderIssueRejectedBill = OrderIssueRejectedBill::query()->where('logistic_number_return', $rejectedBill['logistic_number_return'])->first();
         $order_issue = OrderIssue::query()->find($orderIssueRejectedBill->order_issue_id);
-        if (!$order_issue || $order_issue->rejecting_status !== '全部退回') return ;
+        if (!$order_issue || $order_issue->rejecting_status !== '全部退回') return;
         /** @var WorkOrderInterceptService $workOrderInterceptService */
         $workOrderInterceptService = app(WorkOrderInterceptService::class);
         /** @var WorkOrder $workOrder */
-        $workOrder = WorkOrder::query()->where('order_id',$order_issue->order_id)->orderByDesc('created_at')->first();
-        if (!$workOrder)return ;
+        $workOrder = WorkOrder::query()->where('order_id', $order_issue->order_id)->orderByDesc('created_at')->first();
+        if (!$workOrder) return;
         $workOrderInterceptService->autoReviewIntercept($workOrder);
     }
+
+    /**
+     * 每日工单定时任务timingTask
+     */
+    public function timingTask()
+    {
+        $this->updateBaoShiHandlerTask();
+        $this->updateLogisticHandlerTask();
+    }
+
+    private function updateLogisticHandlerTask()
+    {
+        // 将当日承运商处理过 且 状态为`无`的 标记为滞留状态 `滞`
+        WorkOrder::query()->where('status', 3)
+            ->where('logistic_tag', WorkOrder::$NO_STATE_TAG)
+            ->update(['logistic_tag' => WorkOrder::$STRAND_TAG]);
+    }
+
+    private function updateBaoShiHandlerTask()
+    {
+        // 将当日宝时处理过 且 状态为`无`的 标记为滞留状态 `滞`
+        WorkOrder::query()->whereIn('status', [1, 4])
+            ->where('bao_shi_tag', WorkOrder::$NO_STATE_TAG)
+            ->update(['bao_shi_tag' => WorkOrder::$STRAND_TAG]);
+    }
+
+    /**
+     * 同步处理日志到问题件
+     * @param WorkOrderDetail $detail
+     */
+    public function syncOrderIssueProcessLogs(WorkOrderDetail $detail)
+    {
+        /**
+         * @var OrderIssue $order_issue
+         * @var WorkOrder $work_order
+         */
+        $work_order = $detail->workOrder;
+        $order_issue = OrderIssue::query()->where('order_id', $work_order->order_id)->first();
+        if (!$order_issue) {
+            $order_issue = OrderIssue::query()->create([
+                'order_id' => $work_order->order_id,
+                'result_explain' => $work_order->remark,
+                'imported_status' => '正常',
+                'order_issue_type_id' => $detail->order_issue_type_id,
+            ]);
+            OrderIssueProcessLog::query()
+                ->create(['order_issue_id' => $order_issue->id, 'content' => '创建', 'user_id' => Auth::id(), 'type' => '创建','created_at' => $detail->workOrder->created_at]);
+        }
+        $process_logs = $detail->processLogs()->where('status', '未同步')->get();
+        $order_issue->logs()->insert($process_logs->map((function ($process_log) use ($order_issue) {
+            return [
+                'order_issue_id' => $order_issue->id,
+                'user_id' => $process_log->user_id,
+                'content' => $process_log->content,
+                'created_at' => $process_log->created_at,
+                'updated_at' => $process_log->updated_at,
+            ];
+        }))->toArray());
+        $detail->processLogs()->where('status', '未同步')->update(['status' => '同步']);
+    }
+
 }

+ 102 - 81
app/WorkOrder.php

@@ -13,7 +13,6 @@ use Illuminate\Database\Eloquent\Relations\HasMany;
 use Illuminate\Database\Eloquent\SoftDeletes;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Gate;
-use Illuminate\Support\Str;
 
 class WorkOrder extends Model
 {
@@ -30,37 +29,71 @@ class WorkOrder extends Model
         'last_handler_id',          // 上一个处理人
         'order_issue_type_id',      // 问题件类型
         'process_progress',         // 处理进度 -----------------------------------
-                                    // 拦截:       承运商->[已处理,已签收]         宝时审核->[`无法拦截`,`成功已退回,不赔偿`,`拦截在途丢件,赔偿`]
-                                    // 信息更改:    承运商->[已处理,无法更改]       宝时审核->[更改成功,更改失败]
-                                    // 快递异常:    承运商->[已处理,已拦截]         宝时审核->[丢件赔偿,签收成功]
-                                    // 错漏发:      宝时处理->[已核实]            商家处理->[补发,不补发]
-                                    // 破损:       承运商->[核实全部破损,核实部分破损,核实未破损]   宝时终审->[核实全部破损,核实部分破损,核实未破损]
-                                    // 快递丢件:    待商家处理   待终审 完结
-                                    // -----------------------------------
+        // 拦截:       承运商->[已处理,已签收]         宝时审核->[`无法拦截`,`成功已退回,不赔偿`,`拦截在途丢件,赔偿`]
+        // 信息更改:    承运商->[已处理,无法更改]       宝时审核->[更改成功,更改失败]
+        // 快递异常:    承运商->[已处理,已拦截]         宝时审核->[丢件赔偿,签收成功]
+        // 错漏发:      宝时处理->[已核实]            商家处理->[补发,不补发]
+        // 破损:       承运商->[核实全部破损,核实部分破损,核实未破损]   宝时终审->[核实全部破损,核实部分破损,核实未破损]
+        // 快递丢件:    待商家处理   待终审 完结
+        // -----------------------------------
         'type',                     // 快递异常填写:在途异常,签收未收到
         'status',                   // 审核状态
         'review_at',                // 审核时间
         'uniquely_tag',             // 唯一标识
         'remark',                   // 工单信息描述
         'work_order_status',        // 1 为创建状态 0 为处理状态
-        'logistic_tag',             // 待承运商处理标记
-        'bao_shi_tag',              // 待宝时处理标记
-        'owner_tag',                // 待货主处理标记
-        "is_new_rejecting "         // 回库标记
-
+        'logistic_tag',             // 待承运商处理标记  0 为默认状态 1无 2 滞 3新
+        'bao_shi_tag',              // 待宝时处理标记    0 为默认状态 1无 2 滞 3新
+        'owner_tag',                // 待货主处理标记    0 为默认状态 1无 2 滞 3新
+        "is_new_rejecting",         // 回库标记
+        'created_at',
+        'rejecting_status',         // 退回状态
     ];
+    /**
+     * @var int 默认
+     */
+    public static $DEFAULT_STATUS = 0;              //
+    /**
+     * @var int  宝时处理
+     */
+    public static $BAO_SHI_HANDLER_STATUS = 1;      //  宝时处理
+    /**
+     * @var int 货主处理
+     */
+    public static $OWNER_HANDLER_STATUS = 2;        //  货主处理
+    /**
+     * @var int 承运商处理
+     */
+    public static $LOGISTIC_HANDLER_STATUS = 3;     //  承运商处理
+    /**
+     * @var int 宝时终审
+     */
+    public static $BAO_SHI_REVIEW_STATUS = 4;       //  宝时终审
+    /**
+     * @var int 完成
+     */
+    public static $END_STATUS = 5;                  //  完成
+    /**
+     * @var int 待货主完结
+     */
+    public static $TO_BO_OWNER_END_STATUS = 6;      //  待货主完结
 
-    static public $process_progress = [
-        '已处理','已签收',         // 拦截      承运商
-        '拦截成功','拦截失败',      //          宝时处理
-        '已处理','无法更改',       // 信息更改   承运商
-        '更改成功','更改失败',      //          宝时处理
-        '已处理','已拦截',        // 快递异常   承运商
-        '丢件赔偿','签收成功',      //          宝时处理
-        '已核实',                  // 错漏发   宝时处理
-        '补发','不补发',           //          商家处理
-        ''
-    ];
+    /**
+     * @var int `新`标记
+     */
+    public static $NEW_TAG = 3;
+    /**
+     * @var int `滞`标记
+     */
+    public static $STRAND_TAG = 2;
+    /**
+     * @var int `无`标记
+     */
+    public static $NO_STATE_TAG = 1;
+    /**
+     * @var int 默认标记
+     */
+    public static $DEFAULT_TAG = 0;
 
     static public $enums = [
         'status' => [
@@ -81,12 +114,13 @@ class WorkOrder extends Model
             '完成' => 5,
             '待货主完结' => 6,
         ],
-        'is_new_rejecting'=> [
+        'is_new_rejecting' => [
             '' => 0,
             '回库' => 1,
         ],
     ];
 
+
     function __construct(array $attributes = [])
     {
         foreach (self::$enums as &$enum) {
@@ -169,7 +203,7 @@ class WorkOrder extends Model
 
     public function lastHandler(): BelongsTo
     {
-        return $this->belongsTo(User::class,'last_handler_id');
+        return $this->belongsTo(User::class, 'last_handler_id');
     }
 
     // 审核人
@@ -208,21 +242,27 @@ class WorkOrder extends Model
 
     public function defaultWith(): array
     {
-        return  ['owner', 'logistic', 'issueType', 'creator', 'lastHandler','details' => function ($query) {
-            return $query->with('commodities.commodity', 'logs.creator', 'images.uploadFile','issueType');
+        return ['owner', 'logistic', 'issueType', 'creator', 'lastHandler', 'details' => function ($query) {
+            return $query->with(['commodities.commodity', 'logs' => function ($query) {
+                return $query->with('creator')->orderByDesc('created_at');
+            }, 'images.uploadFile', 'issueType', 'processLogs' => function ($query) {
+                return $query->with('user')->orderByDesc('created_at');
+            }]);
         },
             'reviewer',
-            'order.packages',
+            'order'=> function($query){
+                return $query->with('packages.commodities.commodity','shop');
+            },
             'orderIssue' => function ($query) {
-            /** @var Builder $query */
-            $query->with(['issueType', 'logs' => function ($query) {
-                if (Gate::denies('订单管理-问题件-客户不可见')) {
-                    $query->with('user')->orderByDesc('created_at');
-                } else {
-                    $query->with('user')->where('tag', '=', 0)->orderByDesc('created_at');
-                }
-            }]);
-        }];
+                /** @var Builder $query */
+                $query->with(['issueType', 'logs' => function ($query) {
+                    if (Gate::denies('订单管理-问题件-客户不可见')) {
+                        $query->with('user')->orderByDesc('created_at');
+                    } else {
+                        $query->with('user')->where('tag', '=', 0)->orderByDesc('created_at');
+                    }
+                }]);
+            }];
     }
 
     public function loadDefaultWith()
@@ -251,7 +291,7 @@ class WorkOrder extends Model
     // 工单完结
     public function end()
     {
-        $this->update(['status' => 5,'work_order_status' => 0]);
+        $this->update(['status' => 5, 'work_order_status' => 0]);
     }
 
     /**
@@ -266,7 +306,8 @@ class WorkOrder extends Model
     /**
      * 处理进度
      */
-    public function changeProcessProgress($process_progress){
+    public function changeProcessProgress($process_progress)
+    {
         $this->update(['process_progress' => $process_progress]);
     }
 
@@ -276,57 +317,37 @@ class WorkOrder extends Model
      * @param $process_progress
      * @param $last_status
      */
-    public function change($status,$process_progress,$last_status){
-        $user = Auth::user();
+    public function change($status, $process_progress, $last_status)
+    {
         $this->last_status = $last_status;
         $this->status = $status;
         $this->process_progress = $process_progress;
-        $this->last_handler_id = $user['id'] ?? '';
-        $this->computedTag();
+        $this->last_handler_id = Auth::id();
         $this->update();
     }
 
-    /**
-     * 清除创建标记
-     */
-    public function clearWorkOrderStatus(){
-        $this->update(['work_order_status' => 0]);
-    }
-
-    public function computedTag()
+    public function syncIntercept()
     {
-        $status = $this->status;
-        if (Str::contains($status,'宝时')){
-            $this->bao_shi_tag = 1;
-            $this->logistic_tag = 0;
-            $this->owner_tag = 0;
-        } else if (Str::contains($status,'承运商')){
-            $this->logistic_tag = 1;
-            $this->owner_tag = 0;
-            $this->bao_shi_tag = 0;
-        } else if (Str::contains($status,'货主')){
-            $this->owner_tag = 1;
-            $this->bao_shi_tag = 0;
-            $this->logistic_tag = 0;
-        } else if ('完成' === $status){
-            $this->owner_tag = 0;
-            $this->logistic_tag = 0;
-            $this->bao_shi_tag = 0;
-        }
-    }
-
-    public function syncIntercept(){
-        if ($this->status === '完成') return ;
+        if ($this->status === '完成') return;
         /** @var WorkOrderDetail $detail */
-        $detail = $this->details()
-            ->where('order_issue_type_id',$this->order_issue_type_id)
-            ->where('status','!=','5')->where('status','!=',4)
+        $detail = $this->details()->where('order_issue_type_id', $this->order_issue_type_id)
+            ->whereIn('status', [1, 2, 3, 4, 5])
             ->orderByDesc('created_at')->first();
         if (!$detail) return;
+        $process_progress = '成功已退回,不赔偿';
+        $detail->update([
+            'status' => WorkOrder::$TO_BO_OWNER_END_STATUS,
+            'process_progress' => $process_progress,
+            'last_status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
+        ]);
+        $this->update([
+            'status' => WorkOrder::$TO_BO_OWNER_END_STATUS,
+            'process_progress' => $process_progress,
+            'last_status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
+            'owner_tag' => WorkOrder::$STRAND_TAG,
+            'logistic_tag' => WorkOrder::$DEFAULT_TAG,
+            'bao_shi_tag' => WorkOrder::$DEFAULT_TAG,
+        ]);
         app(WorkOrderLogService::class)->createLog($detail, '终审', '自动终审');
-        $detail->change('待货主完结','成功已退回,不赔偿','宝时终审');
-        $this->change('待货主完结','成功已退回,不赔偿','宝时终审');
-        $this->clearWorkOrderStatus();
     }
-
 }

+ 6 - 8
app/WorkOrderDetail.php

@@ -24,14 +24,7 @@ class WorkOrderDetail extends Model
         'last_handler_id',             // 上一个处理人
         'reissue_logistic_number',  // 补发单号
         'return_logistic_number',   // 退回单号 (错漏发:商家填写) (破损:创建时填写)
-        'process_progress',         // 处理进度 -----------------------------------
-        // 拦截:       承运商->[已处理,已签收]         宝时审核->[拦截成功,拦截失败]
-        // 信息更改:    承运商->[已处理,无法更改]       宝时审核->[更改成功,更改失败]
-        // 快递异常:    承运商->[已处理,已拦截]         宝时审核->[丢件赔偿,签收成功]
-        // 错漏发:      宝时处理->[已核实]            商家处理->[补发,不补发]
-        // 破损:       承运商->[核实全部破损,核实部分破损,核实未破损]   宝时终审->[核实全部破损,核实部分破损,核实未破损]
-        // 快递丢件:    待商家处理   待终审 完结
-        // -----------------------------------
+        'process_progress',         // 处理进度
         'logistic_number',          // 快递单号
         'status',                   // 当前状态
         'remark',                   // 创建工单时的问题标记
@@ -200,6 +193,11 @@ class WorkOrderDetail extends Model
         return $this->hasMany(WorkOrderCommodities::class);
     }
 
+    public function processLogs(): HasMany
+    {
+        return $this->hasMany(WorkOrderProcessLog::class,'work_order_detail_id','id');
+    }
+
     // 未完成历史标记
     public function undoneTag()
     {

+ 12 - 96
app/WorkOrderProcessLog.php

@@ -2,123 +2,39 @@
 
 namespace App;
 
+use App\Traits\ModelTimeFormat;
 use Illuminate\Database\Eloquent\Model;
 
-use App\Traits\ModelLogChanging;
 use Illuminate\Database\Eloquent\Relations\BelongsTo;
 
 
-/**
- * 无用模型
- * Class WorkOrderProcessLog
- * @package App
- */
+
 class WorkOrderProcessLog extends Model
 {
-    use ModelLogChanging;
 
-    //
+    use ModelTimeFormat;
     protected $fillable = [
-        'work_order_id',  // 工单
-        'type',           // 处理类型 0 无 1宝时 2 承运商
-        'is_indemnity',   // 是否赔偿 0 无 1是 2否
-        'indemnitor',   // 赔偿人 0 无 1宝时 2承运商
-        'indemnity',      // 赔偿金
-        'creator_id',     // 创建人
-        'remark',         // 描述
-    ];
-
-    static public $enums = [
-        'type' => [
-            '' => 0,
-            '宝时' => 1,
-            '承运商' => 2,
-        ],
-        'is_indemnity' => [
-            '' => 0,
-            '是' => 1,
-            '否' => 2,
-        ],
-        'indemnitor'=> [
-            '' => 0,
-            '宝时' => 1,
-            '承运商' => 2,
-        ],
+        'work_order_id',
+        'work_order_detail_id',
+        'user_id',
+        'content',
+        'status',
     ];
 
-    function __construct(array $attributes = [])
-    {
-        foreach (self::$enums as &$enum) {
-            $enum = $enum + array_flip($enum);
-        }
-        parent::__construct($attributes);
-    }
-
-    public function getTypeAttribute($value)
-    {
-        if (!$value) return '';
-        return self::$enums['type'][$value];
-    }
-
-    public function setTypeAttribute($value)
-    {
-        if (!$value) return ;
-        if (is_numeric($value)) {
-            $this->attributes['type'] = $value;
-        } else {
-            $this->attributes['type'] = self::$enums['type'][$value];
-        }
-    }
-
-    public function getIsIndemnityAttribute($value)
-    {
-        if (!$value) return '';
-        return self::$enums['is_indemnity'][$value];
-    }
-
-    public function setIsIndemnityAttribute($value)
-    {
-        if (!$value) return ;
-        if (is_numeric($value)) {
-            $this->attributes['is_indemnity'] = $value;
-        } else {
-            $this->attributes['is_indemnity'] = self::$enums['is_indemnity'][$value];
-        }
-    }
-
-    public function getIndemnitorAttribute($value)
-    {
-        if (!$value) return '';
-        return self::$enums['indemnitor'][$value];
-    }
-
-    public function setIndemnitorAttribute($value)
-    {
-        if (!$value) return ;
-        if (is_numeric($value)) {
-            $this->attributes['indemnitor'] = $value;
-        } else {
-            $this->attributes['indemnitor'] = self::$enums['indemnitor'][$value];
-        }
-    }
 
     public function workOrder(): BelongsTo
     {
         return $this->belongsTo(WorkOrder::class);
     }
 
-    public function creator(): BelongsTo
+    public function workOrderDetail():BelongsTo
     {
-        return $this->belongsTo(User::class);
+        return $this->belongsTo(WorkOrderDetail::class);
     }
 
-    public function isLogisticLog(): bool
+    public function user(): BelongsTo
     {
-        return $this->type == "承运商";
+        return $this->belongsTo(User::class);
     }
 
-    public function isBaoShiLog(): bool
-    {
-        return $this->type == "宝时";
-    }
 }

+ 53 - 0
database/migrations/2022_01_07_150835_work_order_process_logs_edit_table.php

@@ -0,0 +1,53 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class WorkOrderProcessLogsEditTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('work_order_process_logs', function (Blueprint $table) {
+            $table->bigInteger('work_order_detail_id')->index()->comment('处理详情');
+            $table->string('content')->comment('处理内容');
+            $table->string('user_id')->index()->comment('用户id');
+            $table->enum('status' ,['未同步','同步'])->default('未同步')->comment('同步问题件处理详情标记');
+
+            $table->dropColumn('type');
+            $table->dropColumn('is_indemnity');
+            $table->dropColumn('indemnitor');
+            $table->dropColumn('indemnity');
+            $table->dropColumn('creator_id');
+            $table->dropColumn('remark');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('work_order_process_logs', function (Blueprint $table) {
+            $table->dropColumn('work_order_detail_id');
+            $table->dropColumn('context');
+            $table->dropColumn('user_id');
+            $table->dropColumn('status');
+
+//            $table->integer('work_order_id')->index()->comment('工单');
+            $table->tinyInteger('type')->index()->comment('类型 0无 1宝时 2承运商');
+            $table->tinyInteger('indemnitor')->index()->comment('赔偿方 0无 1宝时 2承运商');
+            $table->tinyInteger('is_indemnity')->comment('是否赔偿 0无 1是 2否');
+            $table->decimal('indemnity',11,3)->comment('赔偿金额');
+            $table->integer('creator_id')->comment('创建人');
+            $table->string('remark')->nullable()->comment('理由');
+        });
+    }
+}

+ 33 - 0
database/migrations/2022_01_13_152810_work_orders_add_column_rejecting_status.php

@@ -0,0 +1,33 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class WorkOrdersAddColumnRejectingStatus extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('work_orders', function (Blueprint $table) {
+            $table->enum('rejecting_status',['无', '未退回', '全部退回', '部分退回', '差异退回', '超量退回'])
+                ->default('无')->comment('退回件状态');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('work_orders', function (Blueprint $table) {
+            $table->dropColumn('rejecting_status');
+        });
+    }
+}

+ 4 - 4
resources/views/order/index/delivering.blade.php

@@ -435,6 +435,7 @@
                     remark:'',
                     issue_name:'',
                 },
+                isBaoShi:@can('订单管理-工单处理-宝时编辑') true @else false @endcan,
             },
             mounted: function () {
                 this.initData();
@@ -1392,7 +1393,6 @@
                     let dealImages = this.getImages(this.workOrder.dealImages);
                     this.setFormDataImagePrefix(formData, 'dealImages', dealImages);
                     let res = this.setFormDataCommodities(formData);
-                    console.log(res);
                     if (!res){
                         window.tempTip.setIndex(2000);
                         window.tempTip.setDuration(1500);
@@ -1444,7 +1444,7 @@
                         message = '请选择外包图片';
                     } else if (0 === commodityImages.length) {
                         message = '请选择内物装破损图片';
-                    } else if (0 === dealImages.length) {
+                    } else if (0 === dealImages.length && this.isBaoShi === false) {
                         message = '请选择交易截图'
                     }
                     return message;
@@ -1516,7 +1516,7 @@
                     let filter = this.workOrder.commodities.filter(e=>{
                         return Number(e.price) <=0 || Number(e.abnormal_amount) <= 0;
                     })
-                    if (filter.length > 0){
+                    if (filter.length > 0 && !this.isBaoShi){
                         message = '破损商品的数量和价格不能为0';
                     }
                     if (message){
@@ -1914,7 +1914,7 @@
                     window.tempTip.setDuration(1500);
                     let message = null;
                     if (this.workOrder.commodities.length === 0)message = '快递单号为空';
-                    if (this.workOrder.dealImages.length === 0) message = '交易截图为必须项!';
+                    if (this.workOrder.dealImages.length === 0  && this.isBaoShi === false) message = '交易截图为必须项!';
                     if (!this.workOrder.type) message = '快递异常类型不能为空';
                     if (message){
                         window.tempTip.show(message);

+ 26 - 232
resources/views/order/workOrder/_bao_shi_review_modal.blade.php

@@ -519,242 +519,36 @@
 
 </el-dialog>
 
-{{--快递处理丢件工单--}}
-{{--<div class="modal fade " id="bao-shi-review-modal" tabindex="-1" role="dialog" aria-labelledby="checkModalLabel"--}}
-{{--     aria-hidden="true">--}}
-{{--    <div class="modal-dialog modal-xl modal-dialog-centered">--}}
-{{--        <div class="modal-content">--}}
-{{--            <div class="modal-header">--}}
-{{--                <h5 class="modal-title" id="bao-shi-work-order-modal">--}}
-{{--                    <span v-if="'宝时终审' === baoShiEditWorkOrder.status">终审(宝时)</span>--}}
-{{--                    <span v-else-if="'宝时处理' === baoShiEditWorkOrder.status">处理(宝时)--}}
-{{--                    </span>--}}
-{{--                    <span--}}
-{{--                        v-text="baoShiEditWorkOrder ? baoShiEditWorkOrder.issue_type_name :'' "></span>--}}
-{{--                </h5>--}}
-{{--                <button type="button" class="close" data-dismiss="modal" aria-label="Close">--}}
-{{--                    <span aria-hidden="true">&times;</span>--}}
-{{--                </button>--}}
-{{--            </div>--}}
-{{--            <div class="modal-footer">--}}
-{{--                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>--}}
-{{--                <button type="button" class="btn btn-outline-primary" @click="baoShiEdit">--}}
-{{--                    <span v-if="'错漏发' === baoShiEditWorkOrder.issue_type_name">提交</span>--}}
-{{--                    <span v-else>终审</span>--}}
-{{--                </button>--}}
-{{--            </div>--}}
-{{--        </div>--}}
+{{--<el-dialog :visible.sync="dialogBaoShiBatchHandlerVisible" width="75%">--}}
+{{--    <div slot="title">--}}
+{{--        批量处理(宝时)--}}
+{{--        <span v-text="batchHandlerWorkOrder ? batchHandlerWorkOrder.issue_type_name :'' "></span>--}}
 {{--    </div>--}}
-{{--</div>--}}
 
+{{--    <template v-if="batchHandlerWorkOrder">--}}
 
-{{--<div class="modal fade " id="bao-shi-edit-modal" tabindex="-1" role="dialog" aria-labelledby="checkModalLabel"--}}
-{{--     aria-hidden="true">--}}
-{{--    <div class="modal-dialog modal-xl modal-dialog-centered">--}}
-{{--        <div class="modal-content">--}}
-{{--            <div class="modal-header">--}}
-{{--                <h5 class="modal-title" id="bao-shi-edit">重新编辑(宝时)<span--}}
-{{--                        v-text="baoShiEditWorkOrder ? baoShiEditWorkOrder.issue_type_name :'' "></span></h5>--}}
-{{--                <button type="button" class="close" data-dismiss="modal" aria-label="Close">--}}
-{{--                    <span aria-hidden="true">&times;</span>--}}
-{{--                </button>--}}
-{{--            </div>--}}
-{{--            <template v-if="baoShiEditWorkOrder">--}}
-
-{{--                <div class=" "--}}
-{{--                     v-if="['拦截','信息更改'].includes(baoShiEditWorkOrder.issue_type_name)">--}}
-{{--                    <div class="form-group row">--}}
-{{--                        <label for="process_progress" class="col-sm-2 col-form-label text-right text-primary">--}}
-{{--                            <span class="text-danger">*</span>--}}
-{{--                            处理--}}
-{{--                        </label>--}}
-{{--                        <div class="col-sm-10">--}}
-{{--                            <select class="form-control" v-model="baoShiEditWorkOrder.process_progress">--}}
-{{--                                <option v-for="item in getBaoShiProcessProgress()"--}}
-{{--                                        :value="item" v-text="item"></option>--}}
-{{--                            </select>--}}
-{{--                        </div>--}}
-{{--                    </div>--}}
-{{--                </div>--}}
-
-{{--                <div class=" "--}}
-{{--                     v-else-if="'快递丢件' === baoShiEditWorkOrder.issue_type_name">--}}
-{{--                    <div>--}}
-{{--                        <table class="table border">--}}
-{{--                            <thead>--}}
-{{--                            <tr>--}}
-{{--                                <th>快递单号</th>--}}
-{{--                                <th>商品</th>--}}
-{{--                                <th>商品条码</th>--}}
-{{--                                <th>订单数量</th>--}}
-{{--                                <th>异常数量</th>--}}
-{{--                                <th>宝时审核数量</th>--}}
-{{--                                <th>处理结果</th>--}}
-{{--                            </tr>--}}
-{{--                            </thead>--}}
-{{--                            <tbody>--}}
-{{--                            <tr v-for="(item) in (baoShiEditWorkOrder ? baoShiEditWorkOrder.commodities :  []) "--}}
-{{--                                class="border border-bottom">--}}
-{{--                                <td v-if="item.count" v-text="item.logistic_number"--}}
-{{--                                    class="align-middle border border-left border-bottom" :rowspan="item.count">--}}
-{{--                                </td>--}}
-{{--                                <td v-text="item.commodity? item.commodity.name : ''">--}}
-{{--                                </td>--}}
-{{--                                <td v-text="item.commodity? item.commodity.sku : ''">--}}
-{{--                                </td>--}}
-{{--                                <td v-text="item.amount">--}}
-{{--                                </td>--}}
-{{--                                <td v-text="item.abnormal_amount">--}}
-{{--                                </td>--}}
-{{--                                <td>--}}
-{{--                                    <input type="number" class="form-control form-control-sm"--}}
-{{--                                           v-model="item.bao_shi_check_amount">--}}
-{{--                                </td>--}}
-{{--                                <td>--}}
-{{--                                    <select class="form-control form-control-sm"--}}
-{{--                                            v-if="'快递丢件' === baoShiEditWorkOrder.issue_type_name"--}}
-{{--                                            v-model="item.process_result">--}}
-{{--                                        <option--}}
-{{--                                            v-for="type in getBaoShiProcessResults()"--}}
-{{--                                            :value="type" v-text="type"></option>--}}
-{{--                                    </select>--}}
-{{--                                </td>--}}
-{{--                            </tr>--}}
-{{--                            </tbody>--}}
-{{--                        </table>--}}
-{{--                    </div>--}}
-{{--                </div>--}}
-
-{{--                <div class=" "--}}
-{{--                     v-else-if="'破损' === baoShiEditWorkOrder.issue_type_name">--}}
-{{--                    <div>--}}
-{{--                        <table class="table border">--}}
-{{--                            <thead>--}}
-{{--                            <tr>--}}
-{{--                                <th>快递单号</th>--}}
-{{--                                <th>商品</th>--}}
-{{--                                <th>商品条码</th>--}}
-{{--                                <th>订单数量</th>--}}
-{{--                                <th>异常数量</th>--}}
-{{--                                <th>破损商品价值</th>--}}
-{{--                                <th>承运商核实数量</th>--}}
-{{--                                <th>宝时审核数量</th>--}}
-{{--                                <th>处理结果</th>--}}
-{{--                            </tr>--}}
-{{--                            </thead>--}}
-{{--                            <tbody>--}}
-{{--                            <tr v-for="(item) in (baoShiEditWorkOrder ? baoShiEditWorkOrder.commodities :  [])"--}}
-{{--                                class="border border-bottom">--}}
-{{--                                <td v-if="item.count" v-text="item.logistic_number"--}}
-{{--                                    class="align-middle border border-left border-bottom" :rowspan="item.count">--}}
-{{--                                </td>--}}
-{{--                                <td class="text-wrap" v-text="item.commodity? item.commodity.name : ''"></td>--}}
-{{--                                <td class="text-wrap" v-text="item.commodity? item.commodity.sku : ''"></td>--}}
-{{--                                <td v-text="item.amount"></td>--}}
-{{--                                <td class="text-wrap" v-text="item.abnormal_amount"></td>--}}
-{{--                                <td v-text="item.price"></td>--}}
-{{--                                <td class="text-wrap" v-text="item.check_amount"></td>--}}
-{{--                                <td>--}}
-{{--                                    <input type="number" class="form-control form-control-sm"--}}
-{{--                                           v-model="item.bao_shi_check_amount"--}}
-{{--                                           @input="baoShiDamageWorkOrderAuto(item)">--}}
-{{--                                </td>--}}
-{{--                                <td>--}}
-{{--                                    <select class="form-control form-control-sm" v-model="item.process_result">--}}
-{{--                                        <option--}}
-{{--                                            v-for="type in getBaoShiProcessResults()"--}}
-{{--                                            :value="type" v-text="type"></option>--}}
-{{--                                    </select>--}}
-{{--                                </td>--}}
-{{--                            </tr>--}}
-{{--                            </tbody>--}}
-{{--                        </table>--}}
-{{--                    </div>--}}
-{{--                </div>--}}
-{{--                <div class=" "--}}
-{{--                     v-else-if="'快递异常' === baoShiEditWorkOrder.issue_type_name">--}}
-{{--                    <div>--}}
-{{--                        <table class="table border text-center">--}}
-{{--                            <thead>--}}
-{{--                            <tr>--}}
-{{--                                <th>快递单号</th>--}}
-{{--                                <th>宝时处理结果</th>--}}
-{{--                            </tr>--}}
-{{--                            </thead>--}}
-{{--                            <tbody>--}}
-{{--                            <tr v-for="(item) in baoShiEditWorkOrder.commodities" class="border border-bottom">--}}
-{{--                                <td v-text="item.logistic_number"></td>--}}
-{{--                                <td>--}}
-{{--                                    <select class="form-control" v-model="item.process_result"--}}
-{{--                                            @change="baoShiChangeExpressAbnormal(item)">--}}
-{{--                                        <option--}}
-{{--                                            v-for="type in getBaoShiProcessResults()"--}}
-{{--                                            :value="type" v-text="type"></option>--}}
-{{--                                    </select>--}}
-{{--                                </td>--}}
-{{--                            </tr>--}}
-{{--                            </tbody>--}}
-{{--                        </table>--}}
-{{--                    </div>--}}
-
+{{--        <template>--}}
+{{--            <div class="form-group row">--}}
+{{--                <label for="process_progress" class="col-sm-2 col-form-label text-right text-primary">--}}
+{{--                    <span class="text-danger">*</span>--}}
+{{--                    处理--}}
+{{--                </label>--}}
+{{--                <div class="col-sm-10">--}}
+{{--                    <select class="form-control" v-model="batchHandlerWorkOrder.process_progress">--}}
+{{--                        <option v-for="item in getBaoShiBatchHandlerProcessProgress()"--}}
+{{--                                :value="item" v-text="item"></option>--}}
+{{--                    </select>--}}
 {{--                </div>--}}
+{{--            </div>--}}
+{{--        </template>--}}
 
-{{--                <template v-else-if="'错漏发' === baoShiEditWorkOrder.issue_type_name">--}}
-{{--                    <div class=" ">--}}
-{{--                        <div>--}}
-{{--                            <table class="table table-sm table-hover table-bordered">--}}
-{{--                                <thead>--}}
-{{--                                <tr>--}}
-{{--                                    <th>快递单号</th>--}}
-{{--                                    <th>商品</th>--}}
-{{--                                    <th>商品条码</th>--}}
-{{--                                    <th>订单数量</th>--}}
-{{--                                    <th>异常数量</th>--}}
-{{--                                    <th>宝时审核数量</th>--}}
-{{--                                    <th>审核结果</th>--}}
-{{--                                </tr>--}}
-{{--                                </thead>--}}
-{{--                                <tbody>--}}
-{{--                                <tr v-for="(item) in (baoShiEditWorkOrder.commodities ? baoShiEditWorkOrder.commodities :  [])"--}}
-{{--                                    class="border ">--}}
-{{--                                    <td v-if="item.count" v-text="item.logistic_number"--}}
-{{--                                        class="align-middle border border-right" :rowspan="item.count">--}}
-{{--                                    </td>--}}
-{{--                                    <td v-text="item.commodity? item.commodity.name : ''">--}}
-{{--                                    </td>--}}
-{{--                                    <td v-text="item.commodity? item.commodity.sku : ''">--}}
-{{--                                    </td>--}}
-{{--                                    <td v-text="item.amount">--}}
-{{--                                    </td>--}}
-{{--                                    <td v-text="item.abnormal_amount">--}}
-{{--                                    </td>--}}
-{{--                                    <td>--}}
-{{--                                        <input type="number" class="form-control form-control-sm"--}}
-{{--                                               v-model="item.bao_shi_check_amount"--}}
-{{--                                               @input="computeBaoShiMistakeCheckResult(item)">--}}
-{{--                                    </td>--}}
-{{--                                    <td>--}}
-{{--                                        <select class="form-control form-control-sm" v-model="item.check_result"--}}
-{{--                                                disabled>--}}
-{{--                                            <option--}}
-{{--                                                v-for="type in getBaoShiProcessResults()"--}}
-{{--                                                :value="type" v-text="type"></option>--}}
-{{--                                        </select>--}}
-{{--                                    </td>--}}
-{{--                                </tr>--}}
-{{--                                </tbody>--}}
-{{--                            </table>--}}
-{{--                        </div>--}}
-{{--                    </div>--}}
+{{--    </template>--}}
 
-{{--                </template>--}}
-{{--            </template>--}}
-{{--            <div class="modal-footer">--}}
-{{--                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>--}}
-{{--                <button type="button" class="btn btn-outline-primary" @click="baoShiEdit">--}}
-{{--                    提交--}}
-{{--                </button>--}}
-{{--            </div>--}}
-{{--        </div>--}}
+{{--    <div slot="footer" class="dialog-footer">--}}
+{{--        <el-button @click="dialogEditBaoShiVisible = false">关 闭</el-button>--}}
+{{--        <el-button type="primary" @click="baoShiBatchHandlerProcess">--}}
+{{--            终审--}}
+{{--        </el-button>--}}
 {{--    </div>--}}
-{{--</div>--}}
+
+{{--</el-dialog>--}}

+ 65 - 9
resources/views/order/workOrder/_batch_edit_work_order.blade.php

@@ -1,21 +1,77 @@
-<el-dialog :visible.sync="dialogBatchEditBaoShiVisible" width="75%">
-
+<el-dialog :visible.sync="dialogBaoShiBatchHandlerVisible" width="75%">
     <div slot="title">
-        批量修改
+        批量处理工单(宝时)
     </div>
-    <div class="form-group row" v-if="batchEditWorkOrder.p_process_progress">
+    <div class="form-group row" v-if="batchHandlerWorkOrder.issue_type_name">
         <label class="col-sm-2 col-form-label text-right text-primary">
-            当前进度
+            批量处理
         </label>
-        <select class="form-control col-sm-10" v-model="batchEditWorkOrder.process_progress">
-             <option v-for="item in getEditWorkOrderProcessProgress(batchEditWorkOrder)" :value="item" v-text="item"></option>
+        <select class="form-control col-sm-10" v-model="batchHandlerWorkOrder.process_progress">
+             <option v-for="item in getEditWorkOrderProcessProgress(batchHandlerWorkOrder)" :value="item" v-text="item"></option>
         </select>
     </div>
     <div slot="footer" class="dialog-footer">
-        <el-button @click="dialogBatchEditBaoShiVisible = false">关 闭</el-button>
-        <el-button type="primary" @click="batchEditWorkOrderFunc">
+        <el-button @click="dialogBaoShiBatchHandlerVisible = false">关 闭</el-button>
+        <el-button type="primary" @click="baoShiBatchHandlerProcess">
             提交
         </el-button>
     </div>
 </el-dialog>
 
+<el-dialog :visible.sync="dialogLogisticBatchHandlerVisible" width="70%">
+     <span slot="title" v-text="batchHandlerWorkOrder.issue_type_name + '工单'+'(承运商)'">
+    </span>
+    <template v-if="'拦截' === batchHandlerWorkOrder.issue_type_name">
+        <div class="form-group row">
+            <label class="col-sm-2 col-form-label text-primary text-right">
+                <span class="text-danger">*</span>
+                批量处理
+            </label>
+            <div class="col-sm-10">
+                <select class="form-control form-control-sm" v-model="batchHandlerWorkOrder.process_progress">
+                    <option
+                        v-for="item in getLogisticBatchHandlerProcessProgress()"
+                        :value="item" v-text="item"></option>
+                </select>
+            </div>
+        </div>
+    </template>
+
+    <template v-else-if="'取消拦截' === batchHandlerWorkOrder.issue_type_name">
+        <div class="form-group row">
+            <label class="col-sm-2 col-form-label text-primary text-right">
+                <span class="text-danger">*</span>
+                批量处理
+            </label>
+            <div class="col-sm-10">
+                <select class="form-control form-control-sm" v-model="batchHandlerWorkOrder.process_progress">
+                    <option
+                        v-for="item in getLogisticBatchHandlerProcessProgress()"
+                        :value="item" v-text="item"></option>
+                </select>
+            </div>
+        </div>
+    </template>
+
+    <template v-else-if="'信息更改' === batchHandlerWorkOrder.issue_type_name">
+        <div class="form-group row">
+            <label class="col-sm-2 col-form-label text-primary text-right">
+                <span class="text-danger">*</span>
+                批量处理
+            </label>
+            <div class="col-sm-10">
+                <select class="form-control form-control-sm" v-model="batchHandlerWorkOrder.process_progress">
+                    <option
+                        v-for="item in getLogisticBatchHandlerProcessProgress()"
+                        :value="item" v-text="item"></option>
+                </select>
+            </div>
+        </div>
+    </template>
+
+    <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogLogisticBatchHandlerVisible = false">关 闭</el-button>
+        <el-button type="primary" @click="logisticBatchHandlerProcess">提交</el-button>
+    </div>
+</el-dialog>
+

+ 19 - 76
resources/views/order/workOrder/_edit_process_log.blade.php

@@ -1,77 +1,20 @@
-<div class="modal fade " id="work-order-process-log-modal" tabindex="-1" role="dialog" aria-labelledby="checkModalLabel"
-     aria-hidden="true">
-    <div class="modal-dialog modal-lg modal-dialog-centered">
-        <div class="modal-content">
-            <div class="modal-header">
-                <h5 class="modal-title" id="checkModalLabel">@{{ processLog.type === '1' ? '宝时处理' : '承运商处理' }}</h5>
-                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
-                    <span aria-hidden="true">&times;</span>
-                </button>
-            </div>
-            <div class="modal-body">
-                {{--是否赔偿--}}
-                <div class="form-group row">
-                    <label for="work-order-logistic-number" class="text-primary col-sm-2 col-form-label text-right">是否赔偿</label>
-                    <div class="col-sm-10">
-                        <div class="custom-control custom-radio">
-                            <input type="radio" id="is-indemnity-yes" name="isIndemnity" class="custom-control-input"
-                                   value="1"
-                                   v-model="processLog['is_indemnity']">
-                            <label class="custom-control-label" for="is-indemnity-yes">赔偿</label>
-                        </div>
-                        <div class="custom-control custom-radio">
-                            <input type="radio" id="is-indemnity-no" name="isIndemnity" class="custom-control-input"
-                                   value="2"
-                                   v-model="processLog['is_indemnity']">
-                            <label class="custom-control-label" for="is-indemnity-no">不赔偿</label>
-                        </div>
-                    </div>
-                </div>
-                {{-- 宝时处理 确认赔偿方 --}}
-                <div class="form-group row" v-show="processLog['is_indemnity'] === '1' &&  processLog.type === 1">
-                    <label for="process-log-indemnity" class="text-primary col-sm-2 col-form-label text-right">赔偿方</label>
-                    <div class="col-sm-10">
-                        <div class="custom-control custom-radio">
-                            <input type="radio" id="indemnitor-baoshi" name="indemnitor" class="custom-control-input"
-                                   value="1"
-                                   v-model="processLog['indemnitor']">
-                            <label class="custom-control-label" for="indemnitor-baoshi">宝时</label>
-                        </div>
-                        <div class="custom-control custom-radio">
-                            <input type="radio" id="indemnitor-logistic" name="indemnitor" class="custom-control-input"
-                                   value="2"
-                                   v-model="processLog['indemnitor']">
-                            <label class="custom-control-label" for="indemnitor-logistic">承运商</label>
-                        </div>
-                    </div>
-                </div>
-                {{--描述--}}
-                <div class="form-group row" v-show="processLog['is_indemnity'] === '2'">
-                    <label for="process-log-remark" class="text-primary col-sm-2 col-form-label text-right ">理由</label>
-                    <div class="col-sm-10">
-                        <textarea name="process-log-remark" id="process-log-remark" cols="30" rows="5" class="form-control"
-                                  v-model="processLog.remark" ref="process-log-remark"></textarea>
-                    </div>
-                </div>
-                {{--赔偿金额--}}
-                <div class="form-group row" v-show="processLog['is_indemnity'] === '1'">
-                    <label for="process-log-indemnity" class="text-primary col-sm-2 col-form-label text-right">赔偿金额</label>
-                    <div class="col-sm-10">
-                        <input type="number" id="process-log-indemnity" class="form-control"
-                               v-model="processLog.indemnity" placeholder="赔偿金额" ref="process-log-indemnity">
-                    </div>
-                </div>
-            </div>
-            <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭
-                </button>
-
-                {{--填充工单--}}
-                {{--宝时--}}
-                <button type="button" class="btn btn-outline-primary"   v-show="processLog['type'] === 1" @click="storeProcessLog">提交</button>
-                {{--承运商--}}
-                <button type="button" class="btn btn-outline-primary"   v-show="processLog['type'] === 2" @click="storeLogisticProcessLog">提交</button>
-            </div>
-        </div>
+<el-dialog :visible.sync="dialogProcessLogVisible" width="75%">
+    <div slot="title">
+        处理日志
     </div>
-</div>
+    <div class="form-group row">
+        <label class="col-sm-2 col-form-label text-right text-primary">
+            处理日志
+        </label>
+        <textarea class="form-control col-sm-10" rows="3" v-model="processLogs.content"></textarea>
+    </div>
+    <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogProcessLogVisible = false">关 闭</el-button>
+        <el-button type="primary" @click="storeProcessLog" v-show="processLogs.select_id">
+            提交
+        </el-button>
+        <el-button type="primary" @click="batchStoreProcessLogs" v-show="!processLogs.select_id">
+            提交
+        </el-button>
+    </div>
+</el-dialog>

+ 7 - 2
resources/views/order/workOrder/_logistic_fill_work_order_modal.blade.php

@@ -76,7 +76,7 @@
                         <td class="text-wrap" v-text="item.commodity ? item.commodity.sku : ''"></td>
                         <td v-text="item.amount"></td>
                         <td v-text="item.abnormal_amount"></td>
-                        <td v-text="item.price"></td>
+                        <td v-text="Number(item.price) === 0?'待提供' : item.price"></td>
                         <td>
                             <input type="number" class="form-control form-control-sm"
                                    v-model="item.check_amount" @input="logisticDamageWorkOrderAuto(item)">
@@ -125,7 +125,8 @@
 
     <div slot="footer" class="dialog-footer">
         <el-button @click="dialogShowLogisticVisible = false">关 闭</el-button>
-        <el-button type="primary" @click="logisticEdit">提交</el-button>
+        <el-button type="primary" @click="logisticEdit" v-show="'破损' === logisticEditWorkOrder.issue_type_name && logisticCheckDamage" disabled>提交</el-button>
+        <el-button type="primary" @click="logisticEdit" v-show="'破损' !== logisticEditWorkOrder.issue_type_name">提交</el-button>
     </div>
 </el-dialog>
 
@@ -258,3 +259,7 @@
         <el-button type="primary" @click="logisticEdit">提交</el-button>
     </div>
 </el-dialog>
+
+
+
+

+ 39 - 0
resources/views/order/workOrder/_order_commodity_info.blade.php

@@ -0,0 +1,39 @@
+<el-dialog :visible.sync="dialogOrderCommoditiesVisible" width="75%">
+    <div slot="title">
+        商品详情
+    </div>
+    <el-table
+        :key="order_info_commodityes_key"
+        :data="orderInfo.commodities"
+        row-key="order_commodities_id"
+        border
+        size="small"
+        style="width: 100%; margin-top: 20px">
+
+        <el-table-column
+            prop="logistic_number"
+            label="快递单号"
+            width="180">
+        </el-table-column>
+
+        <el-table-column
+            prop="name"
+            label="商品">
+        </el-table-column>
+
+        <el-table-column
+            prop="sku"
+            label="商品编码">
+        </el-table-column>
+
+        <el-table-column
+            prop="amount"
+            label="数量">
+        </el-table-column>
+    </el-table>
+
+    <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogOrderCommoditiesVisible = false">关 闭</el-button>
+    </div>
+</el-dialog>
+

+ 67 - 0
resources/views/order/workOrder/_process_logs.blade.php

@@ -0,0 +1,67 @@
+<div>
+    @can('订单管理-工单处理-承运商编辑')
+    <div class="add-btn"
+         style="position: absolute;display: none;margin-top: -35px;z-index: 51"
+         :id="'AddProcessLogBtn'+item.pending_detail.id">
+        <button type="button" class="btn btn-primary"
+                @click="showAddDiv('addWorkOrderProcessLogForm'+item.pending_detail.id)">新
+        </button>
+    </div>
+
+    <div class="addLogDiv row m-0 p-0 form-group" style="display: none;"
+         :id="'addWorkOrderProcessLogForm'+item.pending_detail.id">
+        <input type="hidden" name="id" :value="item.pending_detail.id">
+        <div style="width: 45px"></div>
+        <div class="form-inline m-2">
+            <input type="text" name="content" :id="'addWorkOrderProcessLogFormInput_'+item.pending_detail.id"
+                   class="form-control m-0 p-0"
+                   style="width: 275px"
+                   required>
+            <button type="button"
+                    class="btn btn-primary ml-2 m-0 p-0"
+                    style="width: 50px"
+                    @click="formStoreProcessLog(item.pending_detail.id,item.id)">添加
+            </button>
+        </div>
+    </div>
+    @endcan
+    <template class="p-0 m-0" v-if="item.process_logs.length > 0">
+        <table class="table table-sm p-0 m-0 " :id="'logs'+item.pending_detail.id">
+            <tr class="align-center position-static"
+                v-for="(log,logIndex) in item.process_logs"
+                @click="removeFocusing($event)" v-on:mouseover="showDelBtn($event)"
+                v-on:mouseleave="hideDelBtn($event)">
+                <template v-if="logIndex < 2|| item.log_is_show === true">
+                    <td style="max-width: 175px;min-width: 175px;">
+                        <span v-text="log.content"></span>
+                    </td>
+                    <td class="text-muted" style="max-width: 55px;min-width: 55px;">
+                        <span v-if="log.user" v-text="log.user.name"></span>
+                    </td>
+                    <td class="text-muted" style="max-width: 95px;min-width: 95px;">
+                        <span v-text="log.created_at"></span>
+                    </td>
+                    @can('订单管理-工单处理-承运商编辑')
+                    <td style="max-width: 35px;min-width: 35px;" class="m-0 p-0 border-0">
+                        <button type="button"
+                                class="btn btn-sm btn-outline-danger m-0 del-btn invisible"
+                                @click="destroyProcessLog(item,log,logIndex)">
+                            删
+                        </button>
+                    </td>
+                    @endcan
+                </template>
+            </tr>
+        </table>
+        <div class="d-flex justify-content-center">
+            <button type="button" class="btn btn-sm btn-outline-primary align-middle mt-1 center-block"
+                    v-if="item.process_logs.length > 2"
+                    @click="toggleWorkOrderLogs(item,$event)"
+                    v-text="'记录共'+item.process_logs.length +'条,点击展开'"></button>
+        </div>
+
+    </template>
+    <div v-else class="" style="height:50px">
+    </div>
+</div>
+

+ 6 - 6
resources/views/order/workOrder/_work_order_log.blade.php

@@ -1,8 +1,8 @@
 <div class="alert alert-light mb-0">
     <button type="button" class="btn btn-sm btn-outline-primary float-left"
             v-show="selectLog !== item.id && item.logs && item.logs.length > 0"
-            @click="selectLog=item.id">
-        显示
+            @click="selectLog=item.id"
+    v-text="'显示共'+item.logs.length +'条'">
     </button>
     <button type="button" class="btn btn-sm btn-outline-primary float-left"
             v-show="selectLog === item.id && item.logs && item.logs.length > 0"
@@ -13,15 +13,15 @@
 </div>
 <transition-group name="fade">
     <div class="alert alert-light mb-0  border-top"
-         v-show="selectLog === item.id"
-         v-for="(log,index) in item.logs" v-bind:key="item.id+':'+index">
-        <div class="card-body col-12 p-0">
+         v-for="(log,index) in item.logs" v-bind:key="item.id+':'+index"
+         v-show="index<2 || selectLog === item.id">
+        <div class="card-body col-12 p-0" >
             <span class="badge badge-pill float-right"
                   :class="getBadgeColor(log.tag)"
                   v-text="log.issue_type"></span>
             <div>
                 <span class="text-monospace">创建人:</span>
-                <span v-text="log.creator? log.creator.name : ''"></span>
+                <span v-text="log.creator ? log.creator.name : ''"></span>
 
             </div>
             <div>

+ 2 - 2
resources/views/order/workOrder/_work_order_show.blade.php

@@ -118,7 +118,7 @@
                         <td v-text="item.abnormal_type"></td>
                         <td class="text-wrap" v-text="item.commodity ? item.commodity.name : ''"></td>
                         <td v-text="item.amount"></td>
-                        <td v-text="item.price"></td>
+                        <td v-text="Number(item.price) === 0 ? '待提供' : item.price"></td>
                         <td v-text="item.abnormal_amount"></td>
                     </tr>
                     </tbody>
@@ -347,7 +347,7 @@
                 </template>
             </template>
 
-            <template v-else-if="'完成' === showWorkOrder.status">
+            <template v-else-if="['待货主完结','完成'].includes(showWorkOrder.status)">
                 <div class="form-group row">
                     <table class="table table-sm table-bordered">
                         <thead>

Разница между файлами не показана из-за своего большого размера
+ 1052 - 997
resources/views/order/workOrder/index.blade.php


+ 36 - 27
routes/apiLocal.php

@@ -289,28 +289,32 @@ Route::group(['prefix' => 'print'],function (){
 });
 
 Route::prefix('workOrder')->group(function(){
-    Route::post('end','WorkOrderController@ownerEndWorkOrderApi')->name('workOrder.owner.endApi');                      // 承运商完结工单
-    Route::post('logisticTag','WorkOrderController@logisticHandlerTagApi')->name('workOrder.logistic.handlerTagApi');      // 承运商处理标记
+    Route::post('end','WorkOrderController@ownerEndWorkOrderApi')->name('workOrder.owner.endApi');                              // 承运商完结工单
+    Route::post('batchEnd','WorkOrderController@ownerBatchEndWorkOrderApi')->name('workOrder.owner.batchEndApi');               // 承运商处理标记
+    Route::post('logisticTag','WorkOrderController@logisticHandlerTagApi')->name('workOrder.logistic.handlerTagApi');           // 承运商处理标记
     Route::prefix('intercept')->group(function(){           // 拦截
-        Route::post('store','WorkOrderInterceptController@storeApi')->name('workOrder.intercept.storeApi');                                     // 拦截订单创建
-        Route::post('store/batch','WorkOrderInterceptController@batchStoreApi')->name('workOrder.intercept.BatchStoreApi');                                     // 拦截订单创建
+        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('baoShi/review','WorkOrderInterceptController@baoShiReviewApi')->name('workOrder.intercept.baoShi.reviewApi');              // 宝时终审
-        Route::post('baoShi/batchReview','WorkOrderInterceptController@baoShiBatchReviewApi')->name('workOrder.intercept.baoShi.batchReviewApi');              // 宝时终审
-
+        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'); // 宝时批量终审
     });
-    Route::prefix('cancelIntercept')->group(function(){           // 取消拦截
+    Route::prefix('cancelIntercept')->group(function(){     // 取消拦截
         Route::post('store','WorkOrderCancelInterceptController@storeApi')->name('workOrder.cancelIntercept.storeApi');                                     // 拦截订单创建
-        Route::post('store/batch','WorkOrderCancelInterceptController@batchStoreApi')->name('workOrder.cancelIntercept.BatchStoreApi');                                     // 拦截订单创建
-        Route::post('logistic/header','WorkOrderCancelInterceptController@logisticHandlerApi')->name('workOrder.cancelIntercept.logistic.handlerApi');        // 承运商处理
+        Route::post('store/batch','WorkOrderCancelInterceptController@batchStoreApi')->name('workOrder.cancelIntercept.BatchStoreApi');                     // 拦截订单创建
+        Route::post('logistic/header','WorkOrderCancelInterceptController@logisticHandlerApi')->name('workOrder.cancelIntercept.logistic.handlerApi');      // 承运商处理
+        Route::post('logistic/batchHeader','WorkOrderCancelInterceptController@logisticBatchHandlerApi')->name('workOrder.cancelIntercept.logistic.batchHandlerApi');        // 承运商批量处理
         Route::post('baoShi/review','WorkOrderCancelInterceptController@baoShiReviewApi')->name('workOrder.cancelIntercept.baoShi.reviewApi');              // 宝时终审
+        Route::post('baoShi/batchReview','WorkOrderCancelInterceptController@baoShiBatchReviewApi')->name('workOrder.cancelIntercept.baoShi.BatchReviewApi');              // 宝时终审
     });
     Route::prefix('informationChange')->group(function(){   // 信息修改
-        Route::post('store','WorkOrderInformationChangeController@storeApi')->name('workOrder.informationChange.storeApi');                         // 创建
-        Route::post('owner/edit','WorkOrderInformationChangeController@ownerEditApi')->name('workOrder.informationChange.owner.editApi');     // 信息修改
+        Route::post('store','WorkOrderInformationChangeController@storeApi')->name('workOrder.informationChange.storeApi');                   // 创建
+        Route::post('owner/edit','WorkOrderInformationChangeController@ownerEditApi')->name('workOrder.informationChange.owner.editApi');     // 商家修改信息
         Route::post('logistic/header','WorkOrderInformationChangeController@logisticHandlerApi')->name('workOrder.informationChange.logistic.handlerApi');     // 信息修改
-        Route::post('baoShi/review','WorkOrderInformationChangeController@baoShiReviewApi')->name('workOrder.informationChange.baoShi.reviewApi');              // 宝时终审
-        Route::post('baoShi/batchReview','WorkOrderInformationChangeController@baoShiBatchReviewApi')->name('workOrder.informationChange.baoShi.batchReviewApi');              // 宝时终审
+        Route::post('logistic/batchHeader','WorkOrderInformationChangeController@logisticBatchHandlerApi')->name('workOrder.informationChange.logistic.batchHandlerApi');     // 信息修改
+        Route::post('baoShi/review','WorkOrderInformationChangeController@baoShiReviewApi')->name('workOrder.informationChange.baoShi.reviewApi');                 // 宝时终审
+        Route::post('baoShi/batchReview','WorkOrderInformationChangeController@baoShiBatchReviewApi')->name('workOrder.informationChange.baoShi.batchReviewApi');  // 宝时批量终审
     });
     Route::prefix('loss')->group(function(){                // 快递丢件
         Route::post('store','WorkOrderLossController@storeApi')->name('workOrder.loss.storeApi');                                       // 创建(宝时)
@@ -319,35 +323,40 @@ Route::prefix('workOrder')->group(function(){
     });
     Route::prefix('damage')->group(function(){             // 破损
         Route::post('store','WorkOrderDamageController@storeApi')->name('workOrder.damage.storeApi');                                   // 创建
-        Route::post('edit/owner','WorkOrderDamageController@ownerEditApi')->name('workOrder.damage.owner.editApi');                      // 货主编辑
-        Route::post('handler/logistic','WorkOrderDamageController@logisticHandleApi')->name('workOrder.damage.logistic.handlerApi');      // 承运商处理
-        Route::post('review/baoShi','WorkOrderDamageController@baoShiReviewApi')->name('workOrder.damage.baoShi.reviewApi');             // 宝时终审
+        Route::post('edit/owner','WorkOrderDamageController@ownerEditApi')->name('workOrder.damage.owner.editApi');                     // 货主编辑
+        Route::post('handler/logistic','WorkOrderDamageController@logisticHandleApi')->name('workOrder.damage.logistic.handlerApi');    // 承运商处理
+        Route::post('review/baoShi','WorkOrderDamageController@baoShiReviewApi')->name('workOrder.damage.baoShi.reviewApi');            // 宝时终审
     });
     Route::prefix('expressAbnormal')->group(function(){     // 快递异常
-        Route::post('store','WorkOrderExpressAbnormalController@storeApi')->name('workOrder.expressAbnormal.storeApi');                         // 创建
-        Route::post('edit/owner','WorkOrderExpressAbnormalController@ownerEditApi')->name('workOrder.expressAbnormal.owner.editApi');   // 承运商处理
-        Route::post('handler/logistic','WorkOrderExpressAbnormalController@logisticHandleApi')->name('workOrder.expressAbnormal.logistic.handlerApi');   // 承运商处理
-        Route::post('review/baoShi','WorkOrderExpressAbnormalController@baoShiReviewApi')->name('workOrder.expressAbnormal.baoShi.reviewApi');                    // 宝时终审
+        Route::post('store','WorkOrderExpressAbnormalController@storeApi')->name('workOrder.expressAbnormal.storeApi');                                 // 创建
+        Route::post('edit/owner','WorkOrderExpressAbnormalController@ownerEditApi')->name('workOrder.expressAbnormal.owner.editApi');                   // 承运商处理
+        Route::post('handler/logistic','WorkOrderExpressAbnormalController@logisticHandleApi')->name('workOrder.expressAbnormal.logistic.handlerApi');  // 承运商处理
+        Route::post('review/baoShi','WorkOrderExpressAbnormalController@baoShiReviewApi')->name('workOrder.expressAbnormal.baoShi.reviewApi');          // 宝时终审
     });
     Route::prefix('mistake')->group(function(){             // 错漏发
         Route::post('store','WorkOrderMistakeController@storeApi')->name('workOrder.mistake.storeApi');
         Route::post('owner/edit','WorkOrderMistakeController@ownerEditApi')->name('workOrder.mistake.owner.editApi');
         Route::post('handle/baoShi','WorkOrderMistakeController@baoShiHandleApi')->name('workOrder.mistake.baoShi.handleApi');                  // 宝时处理
         Route::post('owner/handler','WorkOrderMistakeController@ownerHandleApi')->name('workOrder.mistake.owner.handlerApi');                   // 商家处理并完结订单
-            Route::post('edit/owner/end','WorkOrderMistakeController@ownerEndEditApi')->name('workOrder.mistake.logistic.end.handlerApi');            // 承运商处理
+        Route::post('edit/owner/end','WorkOrderMistakeController@ownerEndEditApi')->name('workOrder.mistake.logistic.end.handlerApi');          // 承运商处理
         Route::post('review/baoShi','WorkOrderMistakeController@baoShiReviewApi')->name('workOrder.mistake.baoShi.reviewApi');                  // 宝时处理
-
+    });
+    Route::prefix('processLog')->group(function(){ // 处理日志
+        Route::post('/store','WorkOrderProcessLogController@storeApi')->name('workOrder.processLog.storeApi');
+        Route::post('/store/logistic','WorkOrderProcessLogController@logisticStoreApi')->name('workOrder.processLog.logisticStoreApi');
+        Route::post('/store/baoShi','WorkOrderProcessLogController@baoShiStoreApi')->name('workOrder.processLog.baoShiStoreApi');
+        Route::post('/batchStore','WorkOrderProcessLogController@batchStoreApi')->name('workOrder.processLog.batchStore');
+        Route::post('/destroy','WorkOrderProcessLogController@destroyApi')->name('workOrder.processLog.destroyApi');
     });
 
-
-    Route::post('updateIssueType','WorkOrderController@updateIssueTypeApi')->name('workOrder.updateIssueTypeApi');          // 修改问题类型
+    Route::post('updateIssueType','WorkOrderController@updateIssueTypeApi')->name('workOrder.updateIssueTypeApi');                // 修改问题类型
     Route::post('batchUpdateIssueType','WorkOrderController@batchUpdateIssueTypeApi')->name('workOrder.batchUpdateIssueTypeApi'); // 修改问题类型
     Route::post('buildOrderIssue','WorkOrderController@buildOrderIssueApi')->name('workOrder.buildOrderIssueApi');          // 生成问题件
     Route::delete('/{id}','WorkOrderController@destroyApi')->name('workOrder.destroyApi');                                  // 工单删除
     Route::post('check','WorkOrderController@checkWorkOrderApi')->name('workOrder.checkApi');                               // 检查订单是否存在工单
     Route::prefix('commodity')->group(function(){
-        Route::post("/owner","WorkOrderCommoditiesController@ownerUpdateCommoditiesApi")->name("workOrder.commodity.ownerUpdateApi");                  // 货主填充商品信息
-        Route::post("/logistic","WorkOrderCommoditiesController@logisticUpdateCommoditiesApi")->name("workOrder.commodity.logisticUpdateApi");         // 承运商 更新商品 处理信息
+        Route::post("/owner","WorkOrderCommoditiesController@ownerUpdateCommoditiesApi")->name("workOrder.commodity.ownerUpdateApi");          // 货主填充商品信息
+        Route::post("/logistic","WorkOrderCommoditiesController@logisticUpdateCommoditiesApi")->name("workOrder.commodity.logisticUpdateApi"); // 承运商 更新商品 处理信息
         Route::post("/baoShi","WorkOrderCommoditiesController@baoShiUpdateCommoditiesApi")->name("workOrder.commodity.baoShiUpdateApi");       // 宝时客服 更新丢件信息
     });
 });

Некоторые файлы не были показаны из-за большого количества измененных файлов