MergeMessageJob.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. <?php
  2. /*
  3. * This file is part of the ZhMead/laravel-logger.
  4. *
  5. * (c) Mead <751066209@qql.com>
  6. *
  7. * This source file is subject to the MIT license that is bundled
  8. * with this source code in the file LICENSE.
  9. */
  10. namespace App\Jobs\Manage;
  11. use App\Repositories\Enums\Manage\AnalysisStatusEnum;
  12. use App\Repositories\Enums\Manage\DealStatusEnum;
  13. use App\Repositories\Enums\ModelStatusEnum;
  14. use App\Repositories\Models\Manage\Message;
  15. use App\Repositories\Models\Manage\PreMessage;
  16. use App\Repositories\Models\Manage\Task;
  17. use Carbon\Carbon;
  18. use Illuminate\Bus\Queueable;
  19. use Illuminate\Contracts\Queue\ShouldQueue;
  20. use Illuminate\Queue\InteractsWithQueue;
  21. use Illuminate\Support\Facades\DB;
  22. use Illuminate\Support\Facades\Log;
  23. class MergeMessageJob implements ShouldQueue
  24. {
  25. use InteractsWithQueue;
  26. use Queueable;
  27. private $ID;
  28. /**
  29. * Create a new job instance.
  30. */
  31. public function __construct($ID)
  32. {
  33. $this->ID = $ID;
  34. }
  35. /**
  36. * 确定任务应该超时的时间
  37. *
  38. * @return \DateTime
  39. */
  40. public function retryUntil()
  41. {
  42. return Carbon::now()->addHours(8);
  43. }
  44. /**
  45. * Execute the job.
  46. */
  47. public function handle()
  48. {
  49. $this->merge();
  50. }
  51. /**
  52. * 导入数据
  53. * @return false|void
  54. */
  55. public function merge()
  56. {
  57. $model = Task::query()->find($this->ID);
  58. $model->status = AnalysisStatusEnum::MERGE_IN;
  59. $model->save();
  60. DB::beginTransaction();
  61. try {
  62. Log::error('*************合并数据中*****************');
  63. $messages = PreMessage::query()
  64. ->where('task_id', $this->ID)
  65. ->where('status', ModelStatusEnum::OK)
  66. ->where('pid', '>', 0)
  67. ->where('is_check', 1)
  68. ->select(['id', 'message_id', 'pid'])->get()->groupBy('pid')->toArray();
  69. foreach ($messages as $message) {
  70. $message_ids = array_column($message, 'message_id');
  71. $message_main_id = PreMessage::query()->where('id', $message[0]['pid'])->value('message_id');
  72. $ids = array_merge($message_ids, [$message_main_id]);
  73. $message_main = Message::query()->whereIn('id', $ids)->where('deal_status', DealStatusEnum::OK)->orderBy('id')->first();
  74. if (!$message_main) {
  75. //不存在处理
  76. $message_main = Message::query()->whereIn('id', $message_main_id)->orderBy('id')->first();
  77. // $message_main->similar_nums = count($message_ids);
  78. // $message_main->save();
  79. //
  80. // Message::query()->whereIn('id', $message_ids)->update([
  81. // 'similar_pid' => $message_main_id,
  82. // 'deal_department_id' => $message_main['deal_department_id'],
  83. // 'deal_admin_id' => $message_main['deal_admin_id'],
  84. // 'deal_status' => $message_main['deal_status'],
  85. // 'deal_idea' => $message_main['deal_idea'],
  86. // 'deal_time' => $message_main['deal_time'],
  87. // ]);
  88. // continue;
  89. }
  90. $message_main->similar_nums = count($message_ids);
  91. $message_main->task_id = $model->id;
  92. $message_main->save();
  93. Message::query()->whereIn('id', $message_ids)->update([
  94. 'similar_pid' => $message_main_id,
  95. 'deal_department_id' => $message_main['deal_department_id'],
  96. 'deal_admin_id' => $message_main['deal_admin_id'],
  97. 'deal_status' => $message_main['deal_status'],
  98. 'deal_idea' => $message_main['deal_idea'],
  99. 'deal_time' => $message_main['deal_time'],
  100. 'task_id' => $model->id,
  101. ]);
  102. }
  103. DB::commit();
  104. $model->status = AnalysisStatusEnum::MERGE_OK;
  105. } catch (\Exception $exception) {
  106. DB::rollBack();
  107. Log::error($exception);
  108. $model->status = AnalysisStatusEnum::MERGE_ERROR;
  109. $model->message = $exception;
  110. }
  111. $model->save();
  112. Log::error("-----------完成---------------");
  113. }
  114. }