|
|
@@ -2,13 +2,11 @@
|
|
|
|
|
|
namespace App\Services;
|
|
|
|
|
|
-use App\OracleDOCOrderHeader;
|
|
|
-use App\Order;
|
|
|
use App\OrderIssue;
|
|
|
+use App\OrderIssueProcessLog;
|
|
|
use App\OrderIssueRejectedBill;
|
|
|
use App\OrderIssueType;
|
|
|
use App\OrderPackage;
|
|
|
-use App\RejectedBill;
|
|
|
use App\Traits\ServiceAppAop;
|
|
|
use App\WorkOrder;
|
|
|
use App\WorkOrderDetail;
|
|
|
@@ -20,46 +18,43 @@ class WorkOrderService
|
|
|
|
|
|
protected $modelClass = WorkOrder::class;
|
|
|
|
|
|
- /**
|
|
|
- * @var WorkOrderLogService $logService
|
|
|
- * @var WorkOrderImageService $imageService
|
|
|
- * @var WorkOrderCommoditiesService $commoditiesService
|
|
|
- * @var WorkOrderDetailService $detailService
|
|
|
- * @var OrderIssueTypeService $issueTypeService
|
|
|
- * @var OrderService $orderService
|
|
|
- */
|
|
|
- private $logService;
|
|
|
- private $imageService;
|
|
|
- private $commoditiesService;
|
|
|
- private $detailService;
|
|
|
- private $issueTypeService;
|
|
|
- private $orderService;
|
|
|
+ public $logService;
|
|
|
+ public $imageService;
|
|
|
+ public $commoditiesService;
|
|
|
+ public $detailService;
|
|
|
+ public $issueTypeService;
|
|
|
+ public $orderService;
|
|
|
|
|
|
- public function __construct()
|
|
|
+ public function __construct(
|
|
|
+ WorkOrderLogService $logService,
|
|
|
+ WorkOrderImageService $imageService,
|
|
|
+ WorkOrderCommoditiesService $commoditiesService,
|
|
|
+ WorkOrderDetailService $detailService,
|
|
|
+ OrderIssueTypeService $issueTypeService,
|
|
|
+ OrderService $orderService
|
|
|
+ )
|
|
|
{
|
|
|
- $this->logService = app(WorkOrderLogService::class);
|
|
|
- $this->imageService = app(WorkOrderImageService::class);
|
|
|
- $this->commoditiesService = app(WorkOrderCommoditiesService::class);
|
|
|
- $this->detailService = app(WorkOrderDetailService::class);
|
|
|
- $this->issueTypeService = app(OrderIssueTypeService::class);
|
|
|
- $this->orderService = app(OrderService::class);
|
|
|
+ $this->logService = $logService;
|
|
|
+ $this->imageService = $imageService;
|
|
|
+ $this->commoditiesService = $commoditiesService;
|
|
|
+ $this->detailService = $detailService;
|
|
|
+ $this->issueTypeService = $issueTypeService;
|
|
|
+ $this->orderService = $orderService;
|
|
|
}
|
|
|
|
|
|
public function createOrResetWorkOrder($order, $issueType, $remark, $process_progress = '商家创建')
|
|
|
{
|
|
|
- $user = Auth::user();
|
|
|
$workOrder = WorkOrder::query()->where('order_id', $order->id)->orderByDesc('created_at')->first();
|
|
|
if ($workOrder) {
|
|
|
$this->detailService->undoneTagsByWorkOrder($workOrder);
|
|
|
$workOrder->update([
|
|
|
'remark' => $remark,
|
|
|
'order_issue_type_id' => $issueType->id,
|
|
|
- 'creator_id' => $user['id'] ?? '',
|
|
|
- 'status' => 0,
|
|
|
- 'work_order_status' => 1,
|
|
|
+ 'creator_id' => Auth::id() ?? '',
|
|
|
+ 'status' => WorkOrder::$DEFAULT_STATUS,
|
|
|
'process_progress' => $process_progress,
|
|
|
'type' => $process_progress,
|
|
|
- 'last_handler_id' => $user['id'] ?? '',
|
|
|
+ 'last_handler_id' => Auth::id() ?? '',
|
|
|
'created_at' => now(),
|
|
|
]);
|
|
|
return $workOrder;
|
|
|
@@ -68,16 +63,15 @@ class WorkOrderService
|
|
|
'order_id' => $order->id,
|
|
|
'logistic_id' => $order->logistic_id ?? '',
|
|
|
'owner_id' => $order->owner_id ?? '',
|
|
|
- 'creator_id' => $user['id'] ?? '',
|
|
|
+ 'creator_id' => Auth::id() ?? '',
|
|
|
'remark' => $remark,
|
|
|
'outer_table_name' => 'orders',
|
|
|
'order_issue_type_id' => $issueType->id,
|
|
|
'uniquely_tag' => $order->code,
|
|
|
- 'status' => 0,
|
|
|
- 'work_order_status' => 1,
|
|
|
+ 'status' => WorkOrder::$DEFAULT_STATUS,
|
|
|
'process_progress' => $process_progress,
|
|
|
'type' => $process_progress,
|
|
|
- 'last_handler_id' => $user['id'] ?? '',
|
|
|
+ 'last_handler_id' => Auth::id() ?? '',
|
|
|
]);
|
|
|
}
|
|
|
|
|
|
@@ -85,9 +79,7 @@ class WorkOrderService
|
|
|
{
|
|
|
/** @var WorkOrder $workOrder */
|
|
|
$workOrder = $this->createOrResetWorkOrder($order, $orderIssueType, $remark, $process_progress);
|
|
|
-
|
|
|
$workOrder->notification();
|
|
|
-
|
|
|
return $workOrder;
|
|
|
}
|
|
|
|
|
|
@@ -99,9 +91,14 @@ class WorkOrderService
|
|
|
public function end(WorkOrder $workOrder, WorkOrderDetail $detail)
|
|
|
{
|
|
|
$this->detailService->endDetail($detail);
|
|
|
- $workOrder->clearWorkOrderStatus();
|
|
|
+ $workOrder->update([
|
|
|
+ 'status' => WorkOrder::$END_STATUS,
|
|
|
+ 'owner_tag' => WorkOrder::$DEFAULT_TAG,
|
|
|
+ 'logistic_tag' => WorkOrder::$DEFAULT_TAG,
|
|
|
+ 'bao_shi_tag' => WorkOrder::$DEFAULT_TAG,
|
|
|
+ 'work_order_status' => 0,
|
|
|
+ ]);
|
|
|
$this->logService->createLog($detail, '完结', '完结工单');
|
|
|
- $workOrder->changeStatus('完成');
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -110,23 +107,33 @@ class WorkOrderService
|
|
|
*/
|
|
|
public function ownerEndWorkOrderDetail(WorkOrderDetail $detail)
|
|
|
{
|
|
|
- $this->logService->createLog($detail, '完结', '货主完结');
|
|
|
- $detail->change('完成', '完成', '待货主完结');
|
|
|
- $detail->workOrder->change('完成', '完成', '待货主完结');
|
|
|
- $detail->workOrder->clearWorkOrderStatus(); // 清除创建标记
|
|
|
+ $detail->update([
|
|
|
+ 'status' => WorkOrder::$END_STATUS,
|
|
|
+ 'process_progress' => '完成',
|
|
|
+ 'last_status' => WorkOrder::$TO_BO_OWNER_END_STATUS,
|
|
|
+ ]);
|
|
|
+ $detail->workOrder()->update([
|
|
|
+ 'status' => WorkOrder::$END_STATUS,
|
|
|
+ 'process_progress' => '完成',
|
|
|
+ 'last_status' => WorkOrder::$TO_BO_OWNER_END_STATUS,
|
|
|
+ 'owner_tag' => WorkOrder::$DEFAULT_TAG,
|
|
|
+ 'logistic_tag' => WorkOrder::$DEFAULT_TAG,
|
|
|
+ 'bao_shi_tag' => WorkOrder::$DEFAULT_TAG,
|
|
|
+ 'work_order_status' => 0,
|
|
|
+ ]);
|
|
|
$this->detailService->endDetail($detail); // 标记为处理过
|
|
|
+ $this->logService->createLog($detail, '完结', '货主完结');
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @param WorkOrder $workOrder
|
|
|
- * @param WorkOrderDetail $detail
|
|
|
+ * 商家批量完结工单
|
|
|
+ * @param $details
|
|
|
*/
|
|
|
- public function logisticEnd(WorkOrder $workOrder, WorkOrderDetail $detail)
|
|
|
+ public function ownerBatchEndWorkOrderDetails($details)
|
|
|
{
|
|
|
- $this->logService->createLog($detail, '完结', '承运商完结工单');
|
|
|
- $this->detailService->endDetail($detail);
|
|
|
- $workOrder->clearWorkOrderStatus();
|
|
|
- $workOrder->changeStatus('完成');
|
|
|
+ foreach ($details as $detail) {
|
|
|
+ $this->ownerEndWorkOrderDetail($detail);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
public function find($id): WorkOrder
|
|
|
@@ -141,7 +148,6 @@ class WorkOrderService
|
|
|
return WorkOrder::query()->defaultWith()->find($id);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* 生成问题件
|
|
|
* @param $work_orders
|
|
|
@@ -273,26 +279,97 @@ class WorkOrderService
|
|
|
public function logisticHandlerTag(WorkOrderDetail $detail)
|
|
|
{
|
|
|
$detail->logisticTagHandle();
|
|
|
- app(WorkOrderLogService::class)->createLog($detail,'处理','处理中');
|
|
|
- $last_status = $detail->last_status;
|
|
|
- $detail->change('承运商处理','承运商处理中',$last_status);
|
|
|
- $detail->workOrder->change('承运商处理','承运商处理中',$last_status);
|
|
|
- if ($detail->workOrder->work_order_status === '1')
|
|
|
- $detail->workOrder->update(['work_order_status' => 0]);
|
|
|
-
|
|
|
+ $last_status = WorkOrder::$enums['status'][$detail->status];
|
|
|
+ $detail->update([
|
|
|
+ 'status' => WorkOrder::$LOGISTIC_HANDLER_STATUS,
|
|
|
+ 'process_progress' => '承运商处理中',
|
|
|
+ 'last_status' => $last_status,
|
|
|
+ 'logistic_handle_tag' =>1,
|
|
|
+ ]);
|
|
|
+ $detail->workOrder()->update([
|
|
|
+ 'status' => WorkOrder::$LOGISTIC_HANDLER_STATUS,
|
|
|
+ 'process_progress' => '承运商处理中',
|
|
|
+ 'last_status' => $last_status,
|
|
|
+ 'logistic_tag' => WorkOrder::$NO_STATE_TAG,
|
|
|
+ 'owner_tag' => WorkOrder::$DEFAULT_TAG,
|
|
|
+ 'bao_shi_tag' => WorkOrder::$DEFAULT_TAG,
|
|
|
+ 'work_order_status' => WorkOrder::$DEFAULT_TAG,
|
|
|
+ ]);
|
|
|
+ app(WorkOrderLogService::class)->createLog($detail, '处理', '标记处理中');
|
|
|
}
|
|
|
|
|
|
public function syncWorkOrder($rejectedBill)
|
|
|
{
|
|
|
/** @var OrderIssue $order_issue */
|
|
|
- $orderIssueRejectedBill = OrderIssueRejectedBill::query()->where('logistic_number_return',$rejectedBill['logistic_number_return'])->first();
|
|
|
+ $orderIssueRejectedBill = OrderIssueRejectedBill::query()->where('logistic_number_return', $rejectedBill['logistic_number_return'])->first();
|
|
|
$order_issue = OrderIssue::query()->find($orderIssueRejectedBill->order_issue_id);
|
|
|
- if (!$order_issue || $order_issue->rejecting_status !== '全部退回') return ;
|
|
|
+ if (!$order_issue || $order_issue->rejecting_status !== '全部退回') return;
|
|
|
/** @var WorkOrderInterceptService $workOrderInterceptService */
|
|
|
$workOrderInterceptService = app(WorkOrderInterceptService::class);
|
|
|
/** @var WorkOrder $workOrder */
|
|
|
- $workOrder = WorkOrder::query()->where('order_id',$order_issue->order_id)->orderByDesc('created_at')->first();
|
|
|
- if (!$workOrder)return ;
|
|
|
+ $workOrder = WorkOrder::query()->where('order_id', $order_issue->order_id)->orderByDesc('created_at')->first();
|
|
|
+ if (!$workOrder) return;
|
|
|
$workOrderInterceptService->autoReviewIntercept($workOrder);
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 每日工单定时任务timingTask
|
|
|
+ */
|
|
|
+ public function timingTask()
|
|
|
+ {
|
|
|
+ $this->updateBaoShiHandlerTask();
|
|
|
+ $this->updateLogisticHandlerTask();
|
|
|
+ }
|
|
|
+
|
|
|
+ private function updateLogisticHandlerTask()
|
|
|
+ {
|
|
|
+ // 将当日承运商处理过 且 状态为`无`的 标记为滞留状态 `滞`
|
|
|
+ WorkOrder::query()->where('status', 3)
|
|
|
+ ->where('logistic_tag', WorkOrder::$NO_STATE_TAG)
|
|
|
+ ->update(['logistic_tag' => WorkOrder::$STRAND_TAG]);
|
|
|
+ }
|
|
|
+
|
|
|
+ private function updateBaoShiHandlerTask()
|
|
|
+ {
|
|
|
+ // 将当日宝时处理过 且 状态为`无`的 标记为滞留状态 `滞`
|
|
|
+ WorkOrder::query()->whereIn('status', [1, 4])
|
|
|
+ ->where('bao_shi_tag', WorkOrder::$NO_STATE_TAG)
|
|
|
+ ->update(['bao_shi_tag' => WorkOrder::$STRAND_TAG]);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 同步处理日志到问题件
|
|
|
+ * @param WorkOrderDetail $detail
|
|
|
+ */
|
|
|
+ public function syncOrderIssueProcessLogs(WorkOrderDetail $detail)
|
|
|
+ {
|
|
|
+ /**
|
|
|
+ * @var OrderIssue $order_issue
|
|
|
+ * @var WorkOrder $work_order
|
|
|
+ */
|
|
|
+ $work_order = $detail->workOrder;
|
|
|
+ $order_issue = OrderIssue::query()->where('order_id', $work_order->order_id)->first();
|
|
|
+ if (!$order_issue) {
|
|
|
+ $order_issue = OrderIssue::query()->create([
|
|
|
+ 'order_id' => $work_order->order_id,
|
|
|
+ 'result_explain' => $work_order->remark,
|
|
|
+ 'imported_status' => '正常',
|
|
|
+ 'order_issue_type_id' => $detail->order_issue_type_id,
|
|
|
+ ]);
|
|
|
+ OrderIssueProcessLog::query()
|
|
|
+ ->create(['order_issue_id' => $order_issue->id, 'content' => '创建', 'user_id' => Auth::id(), 'type' => '创建','created_at' => $detail->workOrder->created_at]);
|
|
|
+ }
|
|
|
+ $process_logs = $detail->processLogs()->where('status', '未同步')->get();
|
|
|
+ $order_issue->logs()->insert($process_logs->map((function ($process_log) use ($order_issue) {
|
|
|
+ return [
|
|
|
+ 'order_issue_id' => $order_issue->id,
|
|
|
+ 'user_id' => $process_log->user_id,
|
|
|
+ 'content' => $process_log->content,
|
|
|
+ 'created_at' => $process_log->created_at,
|
|
|
+ 'updated_at' => $process_log->updated_at,
|
|
|
+ ];
|
|
|
+ }))->toArray());
|
|
|
+ $detail->processLogs()->where('status', '未同步')->update(['status' => '同步']);
|
|
|
+ }
|
|
|
+
|
|
|
}
|