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; return WorkOrderDetail::query() ->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(); if (!$workOrder) return false; return WorkOrderDetail::query() ->where('order_issue_type_id', $issueType['id']) ->where('work_order_id', $workOrder['id'])->exists(); } /* * 拦截工单处理流程 * 1:创建 * 2:承运商处理 * 3:宝时终审 */ /** * 拦截工单创建 * @param $params */ public function store($params) { $issueType = $this->issueTypeService->firstOrCreate(['name' => '拦截']); $order = $this->syncOrder($params['order_no']); $work_order = $this->createAndNotification($order, $issueType, $params['remark'] ?? '拦截工单'); $detail = $this->detailService->createWorkOrderDetail($work_order, $params); $process_progress = '商家创建'; $work_order->update([ 'status' => WorkOrder::$LOGISTIC_HANDLER_STATUS, 'process_progress' => $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' => $process_progress, 'logistic_handle_tag' => 0, ]); $detail->processLogs()->create([ 'work_order_id' => $work_order->id, 'work_order_detail_id' => $detail->id, 'user_id' => $work_order->creator_id, 'content' => $process_progress.'-拦截', 'status' => '未同步', 'type' => '创建', ]); $this->logService->createLog($detail, '创建', '创建'); $this->sendSWNSMessage($work_order); } /** * 拦截工单-批量创建 * @param $params */ public function batchStore($params) { 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) { $detail->cancelLogisticTagHandle(); // 取消承运商处理标记 $process_progress = $params['process_progress']; $detail->update([ 'status' => WorkOrder::$BAO_SHI_REVIEW_STATUS, 'process_progress' => $process_progress, 'last_status' => WorkOrder::$LOGISTIC_HANDLER_STATUS, 'logistic_handle_tag' => 0, ]); $detail->workOrder()->update([ 'status' => WorkOrder::$BAO_SHI_REVIEW_STATUS, 'process_progress' => $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, 'last_handler_id' => Auth::id(), ]); $detail->processLogs()->create([ 'work_order_id' => $detail->work_order_id, 'work_order_detail_id' => $detail->id, 'user_id' => Auth::id(), 'content' => $process_progress, 'status' => '未同步', 'type' => '处理', ]); $this->logService->createLog($detail, '处理', '承运商处理-' . $process_progress); if( $process_progress !== '拦截失败'){ $detail->workOrder()->update(['custom_rejected_status' => '退回中']); } } /** * 承运商批量处理 * @param $details * @param $params */ public function logisticBatchHandler($details, $params) { foreach ($details as $detail) { $this->logisticHandler($detail, $params); } } /** * 宝时终审 * @param WorkOrderDetail $detail * @param $params */ public function baoShiReviewIntercept(WorkOrderDetail $detail, $params) { $process_progress = $params['process_progress']; $this->review($detail, $process_progress); $this->logService->createLog($detail, '终审', '宝时终审-' . $process_progress); } /** * 宝时批量终审 * @param $details * @param $params */ public function baoShiBatchReview($details, $params) { 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) ->whereNotIn('status',[5,6]) ->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, '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, 'last_handler_id' => Auth::id(), ]); $detail->processLogs()->create([ 'work_order_id' => $detail->work_order_id, 'work_order_detail_id' => $detail->id, 'user_id' => $workOrder->creator_id, 'content' => $process_progress.'-完结', 'status' => '未同步', 'type' => '结束', ]); $this->endOrderIssueAndSyncProcessLogs($detail); $this->logService->createLog($detail, '终审', '自动终审-' . $process_progress); $this->sendSWNSMessage($workOrder); } /** * @param WorkOrderDetail $detail * @param $process_progress * @param null $endContext */ public function review(WorkOrderDetail $detail, $process_progress,$endContext = null): void { $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, 'last_handler_id' => Auth::id(), ]); $detail->processLogs()->create([ 'work_order_id' => $detail->work_order_id, 'work_order_detail_id' => $detail->id, 'user_id' => Auth::id(), 'content' => $endContext ?? $process_progress . '-拦截工单', 'status' => '未同步', 'type' => '结束', ]); $this->endOrderIssueAndSyncProcessLogs($detail); } }