service = $service; $this->commoditiesService = $commoditiesService; $this->logService = $logService; $this->orderService = $orderService; $this->ownerService = $ownerService; } public function index(Request $request, WorkOrderFilters $filters) { if (Gate::denies('订单管理-工单处理-查询')) return redirect('/'); $workOrders = WorkOrder::query()->filter($filters)->defaultWith()->orderBy('created_at')->orderByDesc('status')->paginate($request['paginate'] ?? 50); $logistics = Logistic::all(); $orderIssueTypes = $this->service->getIssueType(); $owners = $this->ownerService->getAuthorizedOwners(); $this->service->tags($workOrders); return view('order.workOrder.index', compact('workOrders', 'logistics', 'orderIssueTypes', 'owners')); } // 审核 api public function reviewApi(Request $request): array { if (Gate::denies('订单管理-工单处理-审核')) return ['success' => false, 'message' => '没有对应的编辑权限']; $workOrder = WorkOrder::query()->find($request['id']); return $this->service->review($workOrder); } // 批量审核 api public function batchReviewApi(Request $request): array { if (Gate::denies('订单管理-工单处理-审核')) { return ['success' => false, 'message' => '没有对应的编辑权限']; } if (WorkOrder::query()->whereIn('id', $request['ids'])->whereNotNull('review_at')->exists()) return ['success' => false, 'message' => '选中的工单已有审核完成,刷新页面重试']; $work_orders = WorkOrder::query()->whereIn('id', $request['ids'])->get(); $this->service->tags($work_orders); return $this->service->batchReview($work_orders); } public function buildOrderIssueApi(Request $request): array { if (Gate::denies('订单管理-订单问题件生成')) return ['success' => false, 'message' => '没有对应权限']; $work_orders = WorkOrder::query()->whereIn('id', $request['ids'])->get(); if (count($work_orders) == 0) return ['success' => false, 'message' => '刷新当前页面重试']; if (OrderIssue::query()->whereIn('order_id', $work_orders->map(function ($item) { return $item['order_id']; }))->exists()) { return ['success' => false, 'message' => '已有对应的问题件']; } $result = $this->service->buildOrderIssue($work_orders); if (!$result['success']) return $result; $workOrders = WorkOrder::query()->defaultWith()->whereIn('id', $request['ids'])->get(); $this->service->tags($workOrders); return ['success' => true, 'data' => $workOrders]; } public function storeApi(Request $request): array { if (Gate::denies('订单管理-订单-生成工单')) return ['success' => false, 'message' => '没有对应权限']; $params = $request->all(); if (count($params) == 0) return ['success' => false, 'message' => '参数异常']; app('OrderService')->syncOrderByCodes(array_map(function ($param) { return $param['order_no']; }, $params)); return $this->service->build($params); } public function interceptApi(WorkOrderRequest $request):array { if (Gate::denies('订单管理-订单-生成工单')) return ['success' => false, 'message' => '没有对应权限']; $orderNos = $request->input('orderNos',[]); $this->orderService->syncOrderByCodes($orderNos); $remark = $request->input('remark','拦截工单'); foreach ($orderNos as $item) { $this->service->createInterceptWorkOrder(['order_no'=>$item,'remark' => $remark]); } return ['success' => true]; } public function informationChangeApi(WorkOrderRequest $request): array { if (Gate::denies('订单管理-订单-生成工单')) return ['success' => false, 'message' => '没有对应权限']; $orderNo = $request->input('order_no',''); $this->orderService->syncOrderByCodes([$orderNo]); $this->service->createInformationChangeWorkOrder(['order_no'=>$orderNo,'remark' => $request->input('remark')]); return ['success' => true]; } public function lossApi(WorkOrderRequest $request): array { if (Gate::denies('订单管理-订单-生成工单')) return ['success' => false, 'message' => '没有对应权限']; $orderNo = $request->input('order_no',''); $this->orderService->syncOrderByCodes([$orderNo]); $this->service->createLossWorkOrder($request->all()); return ['success' => true]; } public function damagedApi(WorkOrderRequest $request): array { if (Gate::denies('订单管理-订单-生成工单')) return ['success' => false, 'message' => '没有对应权限']; $this->orderService->syncOrderByCodes([$request->input('order_no')]); $workOrder = $this->service->createDamagedWorkOrder($request->all()); if ($workOrder) return ['success' => true]; else return ['success' => false]; } public function expressAbnormalApi(Request $request): array { if (Gate::denies('订单管理-订单-生成工单')) return ['success' => false, 'message' => '没有对应权限']; $this->orderService->syncOrderByCodes([$request->input('order_no')]); $this->service->createExpressAbnormalWorkOrder($request->all()); return ['success' => true]; } public function mistakeApi(Request $request): array { if (Gate::denies('订单管理-订单-生成工单')) return ['success' => false, 'message' => '没有对应权限']; $this->orderService->syncOrderByCodes([$request->input('order_no')]); $this->service->createMistakeWorkOrder($request->all()); return ['success' => true]; } public function fillLossApi(Request $request): array { if (Gate::denies('订单管理-订单-宝时编辑') || Gate::denies('订单管理-订单-货主编辑')){ return ['success' => false, 'message' => '没有对应权限']; } $workOrder = $this->service->find($request->input('id')); $this->service->fillLossWorkOrder($workOrder,$request->all()); $workOrder->loadDefaultWith(); return ['success' => true,'data' => $workOrder]; } public function updateLossApi(Request $request): array { if (Gate::denies('订单管理-工单处理-货主编辑')) return ['success' => false, 'message' => '没有对应权限']; $workOrder = $this->service->find($request->input('id')); if (!$workOrder) return ['success' => false, 'message' => '参数异常']; $workOrder = $this->service->fillLossWorkOrder($workOrder, $request->all()); if (!$workOrder) return ['success' => false, 'message' => '创建异常']; $workOrder->loadDefaultWith(); return ['success' => true, 'data' => $workOrder]; } public function updateIssueTypeApi(Request $request): array { if (Gate::denies('订单管理-工单处理-审核')) return ['success' => false, 'message' => '没有对应权限']; WorkOrder::query()->where('id', $request['id'])->update(['order_issue_type_id' => $request['type_id']]); return ['success' => true]; } public function batchUpdateIssueTypeApi(Request $request): array { if (Gate::denies('订单管理-工单处理-审核')) return ['success' => false, 'message' => '没有对应权限']; WorkOrder::query()->whereIn('id', $request['ids'])->update(['order_issue_type_id' => $request['type']]); $items = WorkOrder::query()->defaultWith()->whereIn('id', $request['ids'])->get(); $this->service->tags($items); return ['success' => true, 'data' => $items]; } public function destroyApi($id): array { if (Gate::denies('订单管理-工单处理-删除')) return ['success' => false, 'message' => '没有对应权限']; $workOrder = $this->service->find($id); if (!$workOrder) return ['success' => false, 'message' => '对应工单信息未找到']; if ($workOrder->status == '已处理') { return ['success' => false, 'message' => '对应工单已处理,拒绝删除']; } WorkOrder::query()->where('id', $id)->Delete(); return ['success' => true]; } public function updateWorkOrderStatusApi(Request $request): array { if (Gate::denies('订单管理-工单处理-宝时编辑')) return ['success' => false, 'message' => '没有对应权限']; try { $workOrder = $this->service->find($request->input('id')); $workOrder->work_order_status = $request['work_order_status']; $workOrder->update(); } catch (\Exception $e) { return ['success' => false, 'message' => '编辑工单状态失败']; } return ['success' => true]; } public function logisticUpdateWorkOrderStatusApi(Request $request): array { if (Gate::denies('订单管理-工单处理-承运商编辑')) return ['success' => false, 'message' => '没有对应权限']; try { $workOrder = $this->service->find($request->input('id')); $workOrder->work_order_status = $request['work_order_status']; $workOrder->update(); } catch (\Exception $e) { return ['success' => false, 'message' => '编辑工单状态失败']; } return ['success' => true]; } public function ownerUpdateCommoditiesApi(Request $request): array { if (Gate::denies('订单管理-工单处理-货主编辑')) { return ['success' => false, 'message' => '没有对应权限']; } $workOrder = $this->service->find($request->input('id')); if (!$workOrder) return ['success' => false, 'message' => '参数异常']; $this->commoditiesService->updateWorkOrderCommoditiesByJsonArray($workOrder, $request->input('commodities')); $workOrder->loadDefaultWith(); $issueType = $workOrder->issueType->name ?? ''; if($issueType == '丢件'){ $this->logService->createLog($workOrder,'处理','货主填充数据'); $workOrder->changeStatus('宝时处理'); } return ['success' => true, 'data' => $workOrder]; } public function logisticUpdateCommoditiesApi(Request $request): array { if (Gate::denies('订单管理-工单处理-承运商编辑')) { return ['success' => false, 'message' => '没有对应权限']; } $workOrder = $this->service->find($request->input('id')); if (!$workOrder) return ['success' => false, 'message' => '参数异常']; $this->commoditiesService->updateWorkOrderCommoditiesByJsonArray($workOrder, $request->input('commodities')); $workOrder->loadDefaultWith(); $issueType = $workOrder->issueType->name ?? ''; if (in_array($issueType,['快递异常','快递丢件','破损'])){ $workOrder->changeStatus('完成'); $this->logService->createLog($workOrder,'处理','承运商处理'); $this->logService->createLog($workOrder,'完结','承运商完成'); } return ['success' => true, 'data' => $workOrder]; } public function baoShiUpdateCommoditiesApi(Request $request): array { if (Gate::denies('订单管理-工单处理-宝时编辑')) { return ['success' => false, 'message' => '没有对应权限']; } $workOrder = $this->service->find($request->input('id')); if (!$workOrder) return ['success' => false, 'message' => '参数异常']; $this->commoditiesService->updateWorkOrderCommoditiesByJsonArray($workOrder, $request->input('commodities')); $workOrder->loadDefaultWith(); if (($workOrder->issueType->name ?? '') === '错漏发') { $workOrder->changeStatus('完成'); $this->logService->createLog($workOrder, '完结', '错漏发完结'); } return ['success' => true, 'data' => $workOrder]; } public function logisticEndApi(Request $request): array { if (Gate::denies('订单管理-工单处理-承运商编辑')) { return ['success' => false, 'message' => '没有对应权限']; } $workOrder = $this->service->find($request->input('id')); if (!$workOrder) return ['success' => false, 'message' => '参数错误,刷新重试']; $this->service->logisticEnd($workOrder); $workOrder->loadDefaultWith(); return ['success' => true, 'data' => $workOrder]; } }