WorkOrderProcessLogService.php 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <?php
  2. namespace App\Services;
  3. use App\Jobs\SyncOrderIssueOrWorkOrderBySWMS;
  4. use App\OrderIssue;
  5. use App\Traits\ServiceAppAop;
  6. use App\User;
  7. use App\WorkOrder;
  8. use App\WorkOrderDetail;
  9. use Illuminate\Database\Eloquent\Model;
  10. use Illuminate\Support\Facades\Auth;
  11. class WorkOrderProcessLogService
  12. {
  13. use ServiceAppAop;
  14. /**
  15. * 创建 处理日志
  16. * @param WorkOrderDetail $detail
  17. * @param $params
  18. * @param User|null $user
  19. * @return Model
  20. */
  21. public function createProcessLog(WorkOrderDetail $detail, $params, User $user = null): Model
  22. {
  23. $user = $user ?? Auth::user();
  24. $process_log = $detail->processLogs()->create([
  25. 'work_order_detail_id' => $detail->id,
  26. 'work_order_id' => $detail->work_order_id,
  27. 'content' => $params['content'],
  28. 'user_id' => Auth::id(),
  29. 'tag' => $params['tag'] ?? 0,
  30. ]);
  31. /** @var WorkOrder $work_order */
  32. $work_order = $detail->workOrder;
  33. if (in_array($work_order->status, ['宝时处理', '宝时终审'])
  34. && $work_order->bao_shi_tag != WorkOrder::$NO_STATE_TAG) {
  35. $detail->workOrder()->whereIn('status', [1, 4])->update(['bao_shi_tag' => WorkOrder::$NO_STATE_TAG]);
  36. } else if (in_array($work_order->status, ['承运商处理'])
  37. && $work_order->logistic_tag != WorkOrder::$NO_STATE_TAG) {
  38. $detail->workOrder()->where('status', 3)->update(['logistic_tag' => WorkOrder::$NO_STATE_TAG]);
  39. } else if (in_array($work_order->status, ['货主处理', '待货主完结'])
  40. && $work_order->owner_tag != WorkOrder::$NO_STATE_TAG) {
  41. $detail->workOrder()->whereIn('status', [2, 6])->update(['owner_tag' => 1]);
  42. }
  43. $process_log->setAttribute('user', $user);
  44. SyncOrderIssueOrWorkOrderBySWMS::dispatch($work_order,SyncOrderIssueOrWorkOrderBySWMS::$WORK_ORDER_TYPE);
  45. return $process_log;
  46. }
  47. /**
  48. * 批量创建处理日志
  49. * @param $workOrders
  50. * @param $params
  51. * @return array
  52. */
  53. public function batchCreateProcessLog($workOrders, $params): array
  54. {
  55. $user = Auth::user();
  56. $process_logs = [];
  57. /** @var WorkOrder $workOrder */
  58. foreach ($workOrders as $workOrder) {
  59. /** @var WorkOrderDetail $detail */
  60. $detail = $workOrder->details()->where('order_issue_type_id',$workOrder->order_issue_type_id)->orderByDesc('created_at')->first();
  61. if (!$detail) continue;
  62. $process_logs[] = $this->createProcessLog($detail, $params, $user);
  63. SyncOrderIssueOrWorkOrderBySWMS::dispatch($workOrder,SyncOrderIssueOrWorkOrderBySWMS::$WORK_ORDER_TYPE);
  64. }
  65. return $process_logs;
  66. }
  67. /**
  68. * 将工单的处理结果同步到问题件的处理结果
  69. * @param OrderIssue $orderIssue
  70. * @param WorkOrderDetail $detail
  71. */
  72. public function syncOrderIssue(OrderIssue $orderIssue, WorkOrderDetail $detail)
  73. {
  74. $logs = $detail->processLogs()->where('status', '未同步')->get();
  75. $orderIssue->logs()->insert($logs->map(function ($log) use ($orderIssue) {
  76. return [
  77. 'order_issue_id' => $orderIssue->id,
  78. 'context' => $log->context,
  79. 'user_id' => $log->user_id,
  80. 'create_at' => $log->created_at,
  81. ];
  82. })->toArray());
  83. }
  84. }