service = $service; $this->detailService = $detailService; $this->commoditiesService = $commoditiesService; $this->logService = $logService; $this->orderService = $orderService; $this->ownerService = $ownerService; $this->orderIssueTypeService = $orderIssueTypeService; } /** * 承运商标记处理中 * @param Request $request * @return array */ public function logisticHandlerTagApi(Request $request): array { if (Gate::denies('订单管理-工单处理-承运商编辑')) return ['success' => false, 'message' => '没有对应权限']; $detail = WorkOrderDetail::query()->with('workOrder')->find($request->input('detail_id')); if ($detail->status === '完成') return ['success' => false, 'message' => '工单已完成,请刷新重试']; $this->service->logisticHandlerTag($detail); $data = $this->service->getDefaultWith($detail->work_order_id); return ['success' => true, 'data' => $data]; } public function index(Request $request, WorkOrderFilters $filters) { if (Gate::denies('订单管理-工单处理-查询')) return redirect('/'); $workOrders = WorkOrder::query()->filter($filters)->defaultWith()->paginate($request['paginate'] ?? 50); $logistics = Logistic::all(); $orderIssueTypes = $this->orderIssueTypeService->getWorkOrderIssueType(); $owners = $this->ownerService->getAuthorizedOwners(); $userWorkgroup = UserWorkgroup::query()->select('id', 'name')->get(); $userOwnerGroup = UserOwnerGroup::query()->select('id', 'name')->get(); $this->service->tags($workOrders); return view('order.workOrder.index', compact('workOrders', 'logistics', 'orderIssueTypes', 'owners', 'userWorkgroup', 'userOwnerGroup')); } /** * 工单生成问题件 * @param Request $request * @return array */ 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]; } /** * 删除工单 * @param $id * @return array|bool[] */ public function destroyApi($id): array { if (Gate::denies('订单管理-工单处理-删除')) return ['success' => false, 'message' => '没有对应权限']; $workOrder = $this->service->find($id); if (!$workOrder) { return ['success' => false, 'message' => '对应工单信息未找到']; } else { if ($workOrder->status == '已处理') { return ['success' => false, 'message' => '对应工单已处理,拒绝删除']; } } WorkOrder::query()->where('id', $id)->Delete(); return ['success' => true]; } /** * 校验工单是否存在 * @param Request $request * @return array */ public function checkWorkOrderApi(Request $request): array { $nos = $request->input('no', ''); if (is_string($nos)) { $nos = [$nos]; } $data = $this->service->checkWorkOrder($nos); return ['success' => true, 'data' => $data]; } /** * 货主完结工单 * @param Request $request * @return array */ public function ownerEndWorkOrderApi(Request $request): array { if (Gate::denies('订单管理-工单处理-货主编辑')) return ['success' => false, 'message' => '没有对应权限']; $detail_id = $request->input('detail_id'); $detail = WorkOrderDetail::query()->with('workOrder')->where('id', $detail_id)->first(); if (!$detail || !$detail->workOrder) { return ['success' => false, 'message' => '参数异常']; } try { $this->service->ownerEndWorkOrderDetail($detail); 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' => '工单完结异常,请刷新后重试']; } } public function updateRemissionApi(Request $request): array { if (Gate::denies('订单管理-工单处理-宝时编辑')) { return ['success' => false, 'message' => '没有对应权限']; } if (!$request->has(['id', 'column'])) { return ['success' => false, 'message' => '参数异常']; } /** @var WorkOrder $workOrder */ $workOrder = WorkOrder::query()->find($request->input('id')); if (!$workOrder) { return ['success' => false, 'message' => '未找到对应的工单']; } $column = $request->input('column'); $workOrder->update(["{$column}" => $request->input('value') ?? null]); return ['success' => true]; } public function updateUserOwnerGroupApi(Request $request): array { if (Gate::denies('订单管理-工单处理-宝时编辑')) { return ['success' => false, 'message' => '没有对应权限']; } if (!$request->has(['id', 'user_owner_group_id'])) { return ['success' => false, 'message' => '参数异常']; } /** @var WorkOrder $workOrder */ $workOrder = WorkOrder::query()->find($request->input('id')); if (!$workOrder) { return ['success' => false, 'message' => '未找到对应的工单']; } $workOrder->update(['user_owner_group_id' => $request->input('user_owner_group_id')]); return ['success' => true]; } public function storeUserWorkGroupApi(Request $request): array { if (Gate::denies('订单管理-工单处理-宝时编辑')) { return ['success' => false, 'message' => '没有对应权限']; } if (!$request->has(['id', 'user_workgroup_id'])) { return ['success' => false, 'message' => '参数异常']; } /** @var WorkOrder $workOrder */ $workOrder = WorkOrder::query()->find($request->input('id')); if (!$workOrder) { return ['success' => false, 'message' => '未找到对应的工单']; } $hasExists = $workOrder->userWorkGroups()->where('user_workgroup_id', $request->input('user_workgroup_id'))->exists(); if ($hasExists) return ['success' => false, 'message' => '已有对应的关系']; $workOrder->userWorkGroups()->attach($request->input('user_workgroup_id')); return ['success' => true, 'data' => $workOrder->userWorkGroups]; } public function destroyUserWorkGroupApi(Request $request): array { if (Gate::denies('订单管理-工单处理-宝时编辑')) { return ['success' => false, 'message' => '没有对应权限']; } if (!$request->has(['id', 'user_workgroup_id'])) { return ['success' => false, 'message' => '参数异常']; } /** @var WorkOrder $workOrder */ $workOrder = WorkOrder::query()->find($request->input('id')); if (!$workOrder) { return ['success' => false, 'message' => '未找到对应的工单']; } $workOrder->userWorkGroups()->detach($request->input('user_workgroup_id')); return ['success' => true]; } public function exportJsonExcel(Request $request, WorkOrderFilters $filters) { $work_orders = WorkOrder::query()->filter($filters)->defaultWith()->get(); return $this->exportJson($work_orders); } public function exportJson($workOrders) { $json = []; $row = [ '工单类型', '当前进度', '客户', '店铺名称', '客户订单号','承运人', '快递单号', '创建时间', '当前处理人', '创建人', '情况说明', '退回单号', '退回商品', '退回商品名称', '退回商品数量', '是否正品', '操作类型', '操作人', '内容' ]; $workOrders->each(function ($item) use (&$json) { $logistic_numbers = $item->order->packages->implode('logistic_number', ",\r\n"); $logistic_numbers_return = $item->orderIssueRejectedBills->implode('logistic_number_return',",\r\n"); $rejected_item_name = ''; $rejected_item_sku = ''; $rejected_item_label = ''; $rejected_item_amount = ''; $item->orderIssueRejectedBills->each(function ($item) use (&$rejected_item_name, &$rejected_item_sku, &$rejected_item_label, &$rejected_item_amount) { if($item->rejectedBill) $item->rejectedBill->items->each(function ($item) use (&$rejected_item_name, &$rejected_item_sku, &$rejected_item_label, &$rejected_item_amount) { $rejected_item_name = $rejected_item_name . $item->name_goods . ",\r\n"; $rejected_item_sku = $rejected_item_sku . $item->barcode_goods . ",\r\n"; $rejected_item_label = $rejected_item_label . $item->quality_label . ",\r\n"; $rejected_item_amount = $rejected_item_amount . $item->amount . ",\r\n"; }); }); $work_order_process_logs_type = ''; $work_order_process_logs_user = ''; $work_order_process_logs = ''; $work_order_details = $item->details->filter(function ($detail) use ($item) { return $detail->order_issue_type_id == $item->order_issue_type_id; }); if(count($work_order_details) > 0){ $work_order_details->first()->processLogs->each(function ($log) use (&$work_order_process_logs_type,&$work_order_process_logs_user,&$work_order_process_logs) { $work_order_process_logs_type .= $log->type. ",\r\n"; $work_order_process_logs_user .= ($log->user->name ?? ''). ",\r\n"; $work_order_process_logs .= $log->content. ",\r\n"; }); } $json[] = [ $item->issueType->name ?? '', $item->process_progress, $item->owner->name ?? '', $item->order->shop->name ?? '', $item->order->client_code ?? '', $item->logistic->name ?? '', rtrim($logistic_numbers, ",\r\n"), isset($item->created_at) ? str_split($item->created_at, 10)[0] : '', $item->status, $item->creator->name ?? '', $item->remark, rtrim($logistic_numbers_return, ",\r\n"), rtrim($rejected_item_sku, ",\r\n"), rtrim($rejected_item_name, ",\r\n"), rtrim($rejected_item_amount, ",\r\n"), rtrim($rejected_item_label, ",\r\n"), rtrim($work_order_process_logs_type, ",\r\n"), rtrim($work_order_process_logs_user, ",\r\n"), rtrim($work_order_process_logs, ",\r\n"), ]; }); return Export::make($row, $json, "工单"); } }