logService = app('WorkOrderLogService'); $this->detailService = app('WorkOrderDetailService'); $this->issueTypeService = app('OrderIssueTypeService'); } 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; 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']); $workOrder = $this->createAndNotification($order, $issueType, $params['remark'] ?? '拦截工单'); $workOrder->change('承运商处理','商家创建',''); $detail = $this->detailService->createWorkOrderDetail($workOrder, $params); $detail->change('承运商处理','商家创建',''); $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); } } /** * 承运商处理 和 编辑承运商已处理 * @param WorkOrderDetail $detail * @param $params */ public function logisticHandler(WorkOrderDetail $detail,$params) { $this->logService->createLog($detail, '处理', '承运商处理'); $detail->workOrder->clearWorkOrderStatus(); // 清除创建标记 $detail->cancelLogisticTagHandle(); $detail->change('宝时终审',$params['process_progress'],'承运商处理'); $detail->workOrder->change('宝时终审',$params['process_progress'],'承运商处理'); } /** * 承运商批量处理 * @param $details * @param $params */ public function logisticBatchHandler($details,$params){ foreach ($details as $detail){ $this->logisticHandler($detail,$params); } } public function baoShiReviewIntercept(WorkOrderDetail $detail,$params) { $this->logService->createLog($detail, '终审', '宝时终审'); $detail->change('待货主完结',$params['process_progress'],'宝时终审'); $detail->workOrder->change('待货主完结',$params['process_progress'],'宝时终审'); $detail->workOrder->clearWorkOrderStatus(); // 清除创建标记 } /** * 自动终审 * @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(); if (!$detail) return; $this->logService->createLog($detail, '终审', '自动终审'); $detail->change('待货主完结','成功已退回,不赔偿','宝时终审'); $detail->workOrder->change('待货主完结','成功已退回,不赔偿','宝时终审'); $detail->workOrder->clearWorkOrderStatus(); } /** * 宝时客服批量终审 */ 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); } } }