filter($filters)->defaultWith()->orderBy('created_at')->orderByDesc('status')->paginate($request['paginate'] ?? 50); $logistics = Logistic::all(); $orderIssueTypes = $service->getIssueType(); $owners = app('OwnerService')->getAuthorizedOwners(); $service->tags($workOrders); return view('order.workOrder.index', compact('workOrders', 'logistics', 'orderIssueTypes','owners')); } // 审核 api public function reviewApi(Request $request, WorkOrderService $service): array { if (Gate::denies('订单管理-工单处理-审核')) return ['success' => false, 'message' => '没有对应的编辑权限']; $workOrder = WorkOrder::query()->find($request['id']); return $service->review($workOrder); } // 批量审核 api public function batchReviewApi(Request $request,WorkOrderService $service): 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(); $service->tags($work_orders); return $service->batchReview($work_orders); } // 生成问题件 api public function buildOrderIssueApi(Request $request, WorkOrderService $service): 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 = $service->buildOrderIssue($work_orders); if (!$result['success']) return $result; $workOrders = WorkOrder::query()->defaultWith()->whereIn('id',$request['ids'])->get(); $service->tags($workOrders); return ['success' => true ,'data' => $workOrders]; } // 创建工单 api public function storeApi(Request $request, WorkOrderService $service):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 $service->build($params); } // 破损工单 public function damagedApi(Request $request, WorkOrderService $service): array { if (Gate::denies('订单管理-订单-生成工单')) return ['success' => false, 'message' => '没有对应权限']; app('OrderService')->syncOrderByCodes([$request->input('order_no')]); $workOrder = $service->createDamagedWorkOrder($request->all()); if ($workOrder) return ['success' => true]; else return ['success' => false]; } // 遗失工单信息 填充 public function updateLossApi(Request $request, WorkOrderService $service): array { /** @var WorkOrder $workOrder */ $workOrder = WorkOrder::query()->where('id',$request->input('id'))->first(); if (!$workOrder) return ['success' => false,'message' => '参数异常']; $workOrder = $service->fillLossWorkOrder($workOrder,$request->all()); if(!$workOrder) return ['success' => false,'message' => '创建异常']; 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,WorkOrderService $service): 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(); $service->tags($items); return ['success' => true,'data' => $items]; } // 删除 public function destroyApi($id): array { if (Gate::denies('订单管理-工单处理-删除')) return ['success' => false,'message' => '没有对应权限']; WorkOrder::query()->where('id',$id)->Delete(); return ['success' => true]; } }