WorkOrderInterceptService.php 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. <?php
  2. namespace App\Services;
  3. use App\Order;
  4. use App\OrderIssueProcessLog;
  5. use App\OrderPackage;
  6. use App\WorkOrder;
  7. use App\WorkOrderDetail;
  8. use Illuminate\Support\Facades\Auth;
  9. use function Symfony\Component\Translation\t;
  10. /**
  11. * 处理 拦截 工单
  12. * Class WorkOrderInterceptService
  13. * @package App\Services
  14. */
  15. class WorkOrderInterceptService extends WorkOrderService
  16. {
  17. public function __construct(
  18. WorkOrderLogService $logService,
  19. WorkOrderImageService $imageService,
  20. WorkOrderCommoditiesService $commoditiesService,
  21. WorkOrderDetailService $detailService,
  22. OrderIssueTypeService $issueTypeService,
  23. OrderService $orderService,
  24. OrderIssueService $orderIssueService,
  25. OrderIssueProcessLogService $orderIssueProcessLogService
  26. )
  27. {
  28. parent::__construct($logService,
  29. $imageService,
  30. $commoditiesService,
  31. $detailService,
  32. $issueTypeService,
  33. $orderService,
  34. $orderIssueService,
  35. $orderIssueProcessLogService);
  36. }
  37. public function checkWorkOrder($nos)
  38. {
  39. $issueType = $this->issueTypeService->firstOrCreate(['name' => '拦截']);
  40. $orderQuery = Order::query()->select('id')->where('code', $nos);
  41. $workOrder = WorkOrder::query()->select('id')->whereIn('order_id', $orderQuery)->first();
  42. if (!$workOrder) return false;
  43. return WorkOrderDetail::query()
  44. ->where('order_issue_type_id', $issueType['id'])
  45. ->where('work_order_id', $workOrder['id'])->exists();
  46. }
  47. public function checkWorkOrders($nos)
  48. {
  49. $issueType = $this->issueTypeService->firstOrCreate(['name' => '拦截']);
  50. $orderQuery = Order::query()->select('id')->whereIn('code', $nos);
  51. $workOrder = WorkOrder::query()->select('id')->whereIn('order_id', $orderQuery)->first();
  52. if (!$workOrder) return false;
  53. return WorkOrderDetail::query()
  54. ->where('order_issue_type_id', $issueType['id'])
  55. ->where('work_order_id', $workOrder['id'])->exists();
  56. }
  57. /*
  58. * 拦截工单处理流程
  59. * 1:创建
  60. * 2:承运商处理
  61. * 3:宝时终审
  62. */
  63. /**
  64. * 拦截工单创建
  65. * @param $params
  66. */
  67. public function store($params)
  68. {
  69. $issueType = $this->issueTypeService->firstOrCreate(['name' => '拦截']);
  70. $order = $this->syncOrder($params['order_no']);
  71. $work_order = $this->createAndNotification($order, $issueType, $params['remark'] ?? '拦截工单');
  72. $detail = $this->detailService->createWorkOrderDetail($work_order, $params);
  73. $process_progress = '商家创建';
  74. $work_order->update([
  75. 'status' => WorkOrder::$LOGISTIC_HANDLER_STATUS,
  76. 'process_progress' => $process_progress,
  77. 'last_status' => WorkOrder::$DEFAULT_STATUS,
  78. 'logistic_tag' => WorkOrder::$NEW_TAG,
  79. 'owner_tag' => WorkOrder::$DEFAULT_TAG,
  80. 'bao_shi_tag' => WorkOrder::$DEFAULT_TAG,
  81. 'work_order_status' => 0,
  82. ]);
  83. $detail->update([
  84. 'status' => WorkOrder::$LOGISTIC_HANDLER_STATUS,
  85. 'last_status' => WorkOrder::$DEFAULT_STATUS,
  86. 'process_progress' => $process_progress,
  87. 'logistic_handle_tag' => 0,
  88. ]);
  89. $detail->processLogs()->create([
  90. 'work_order_id' => $work_order->id,
  91. 'work_order_detail_id' => $detail->id,
  92. 'user_id' => $work_order->creator_id,
  93. 'content' => $process_progress.'-拦截',
  94. 'status' => '未同步',
  95. 'type' => '创建',
  96. ]);
  97. $this->logService->createLog($detail, '创建', '创建');
  98. }
  99. /**
  100. * 拦截工单-批量创建
  101. * @param $params
  102. */
  103. public function batchStore($params)
  104. {
  105. foreach ($params['order_nos'] as $order_no) {
  106. $this->store(['order_no' => $order_no, 'remark' => $params['remark']]);
  107. }
  108. }
  109. /**
  110. * 承运商处理和编辑
  111. * @param WorkOrderDetail $detail
  112. * @param $params
  113. */
  114. public function logisticHandler(WorkOrderDetail $detail, $params)
  115. {
  116. $detail->cancelLogisticTagHandle(); // 取消承运商处理标记
  117. $process_progress = $params['process_progress'];
  118. $detail->update([
  119. 'status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
  120. 'process_progress' => $process_progress,
  121. 'last_status' => WorkOrder::$LOGISTIC_HANDLER_STATUS,
  122. 'logistic_handle_tag' => 0,
  123. ]);
  124. $detail->workOrder()->update([
  125. 'status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
  126. 'process_progress' => $process_progress,
  127. 'last_status' => WorkOrder::$LOGISTIC_HANDLER_STATUS,
  128. 'logistic_tag' => WorkOrder::$DEFAULT_TAG,
  129. 'owner_tag' => WorkOrder::$DEFAULT_TAG,
  130. 'bao_shi_tag' => WorkOrder::$STRAND_TAG,
  131. 'work_order_status' => 0,
  132. 'last_handler_id' => Auth::id(),
  133. ]);
  134. $detail->processLogs()->create([
  135. 'work_order_id' => $detail->work_order_id,
  136. 'work_order_detail_id' => $detail->id,
  137. 'user_id' => Auth::id(),
  138. 'content' => $process_progress,
  139. 'status' => '未同步',
  140. 'type' => '处理',
  141. ]);
  142. $this->logService->createLog($detail, '处理', '承运商处理-' . $process_progress);
  143. if( $process_progress !== '拦截失败'){
  144. $detail->workOrder()->update(['custom_rejected_status' => '退回中']);
  145. }
  146. }
  147. /**
  148. * 承运商批量处理
  149. * @param $details
  150. * @param $params
  151. */
  152. public function logisticBatchHandler($details, $params)
  153. {
  154. foreach ($details as $detail) {
  155. $this->logisticHandler($detail, $params);
  156. }
  157. }
  158. /**
  159. * 宝时终审
  160. * @param WorkOrderDetail $detail
  161. * @param $params
  162. */
  163. public function baoShiReviewIntercept(WorkOrderDetail $detail, $params)
  164. {
  165. $process_progress = $params['process_progress'];
  166. $this->review($detail, $process_progress);
  167. $this->logService->createLog($detail, '终审', '宝时终审-' . $process_progress);
  168. }
  169. /**
  170. * 宝时批量终审
  171. * @param $details
  172. * @param $params
  173. */
  174. public function baoShiBatchReview($details, $params)
  175. {
  176. foreach ($details as $detail) {
  177. $this->baoShiReviewIntercept($detail, $params);
  178. }
  179. }
  180. /**
  181. * 自动终审
  182. * @param WorkOrder $workOrder
  183. */
  184. public function autoReviewIntercept(WorkOrder $workOrder)
  185. {
  186. /** @var WorkOrderDetail $detail */
  187. $issueType = $this->issueTypeService->firstOrCreate(['name' => '拦截']);
  188. if ($workOrder->order_issue_type_id != $issueType->id) return;
  189. $detail = $workOrder->details()->where('order_issue_type_id', $issueType->id)
  190. ->whereNotIn('status',[5,6])
  191. ->orderByDesc('created_at')->first();
  192. if (!$detail) return;
  193. $process_progress = '成功已退回,不赔偿';
  194. $detail->update([
  195. 'status' => WorkOrder::$TO_BO_OWNER_END_STATUS,
  196. 'process_progress' => $process_progress,
  197. 'last_status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
  198. 'logistic_handle_tag' => 0,
  199. ]);
  200. $detail->workOrder()->update([
  201. 'status' => WorkOrder::$TO_BO_OWNER_END_STATUS,
  202. 'process_progress' => $process_progress,
  203. 'last_status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
  204. 'owner_tag' => WorkOrder::$STRAND_TAG,
  205. 'logistic_tag' => WorkOrder::$DEFAULT_TAG,
  206. 'bao_shi_tag' => WorkOrder::$DEFAULT_TAG,
  207. 'work_order_status' => 0,
  208. 'last_handler_id' => Auth::id(),
  209. ]);
  210. $detail->processLogs()->create([
  211. 'work_order_id' => $detail->work_order_id,
  212. 'work_order_detail_id' => $detail->id,
  213. 'user_id' => $workOrder->creator_id,
  214. 'content' => $process_progress.'-完结',
  215. 'status' => '未同步',
  216. 'type' => '结束',
  217. ]);
  218. $this->endOrderIssueAndSyncProcessLogs($detail);
  219. $this->logService->createLog($detail, '终审', '自动终审-' . $process_progress);
  220. }
  221. /**
  222. * @param WorkOrderDetail $detail
  223. * @param $process_progress
  224. * @param null $endContext
  225. */
  226. public function review(WorkOrderDetail $detail, $process_progress,$endContext = null): void
  227. {
  228. $detail->update([
  229. 'status' => WorkOrder::$TO_BO_OWNER_END_STATUS,
  230. 'process_progress' => $process_progress,
  231. 'last_status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
  232. 'logistic_handle_tag' => 0,
  233. ]);
  234. $detail->workOrder()->update([
  235. 'status' => WorkOrder::$TO_BO_OWNER_END_STATUS,
  236. 'process_progress' => $process_progress,
  237. 'last_status' => WorkOrder::$BAO_SHI_REVIEW_STATUS,
  238. 'owner_tag' => WorkOrder::$STRAND_TAG,
  239. 'logistic_tag' => WorkOrder::$DEFAULT_TAG,
  240. 'bao_shi_tag' => WorkOrder::$DEFAULT_TAG,
  241. 'work_order_status' => 0,
  242. 'last_handler_id' => Auth::id(),
  243. ]);
  244. $detail->processLogs()->create([
  245. 'work_order_id' => $detail->work_order_id,
  246. 'work_order_detail_id' => $detail->id,
  247. 'user_id' => Auth::id(),
  248. 'content' => $endContext ?? $process_progress . '-拦截工单',
  249. 'status' => '未同步',
  250. 'type' => '结束',
  251. ]);
  252. $this->endOrderIssueAndSyncProcessLogs($detail);
  253. }
  254. }