WorkOrderProcessLogService.php 2.7 KB

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