FollowUserJobs.php 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <?php
  2. namespace App\Jobs\OpenWork\External;
  3. use Illuminate\Bus\Queueable;
  4. use Illuminate\Contracts\Queue\ShouldBeUnique;
  5. use Illuminate\Contracts\Queue\ShouldQueue;
  6. use Illuminate\Foundation\Bus\Dispatchable;
  7. use Illuminate\Queue\InteractsWithQueue;
  8. use Illuminate\Queue\SerializesModels;
  9. use App\Servers\OpenWork\External\ContactService;
  10. use App\Models\OpenWork\job\Records;
  11. use App\Facades\Servers\Logs\Log;
  12. use App\Servers\DB\DbService;
  13. /**
  14. * 处理企业成员客户跟进信息
  15. * @author 唐远望
  16. * @version 1.0
  17. * @date 2025-06-05
  18. */
  19. class FollowUserJobs implements ShouldQueue
  20. {
  21. use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
  22. private $follow_user_data;
  23. private $Records;
  24. /**
  25. * Create a new job instance.
  26. *
  27. * @return void
  28. */
  29. public function __construct(array $follow_user_data)
  30. {
  31. $this->follow_user_data = $follow_user_data;
  32. }
  33. public function getCorpId()
  34. {
  35. return $this->follow_user_data['corpid'] ?? null;
  36. }
  37. /**
  38. * Execute the job.
  39. *
  40. * @return void
  41. */
  42. public function handle()
  43. {
  44. try {
  45. $corpId = $this->follow_user_data['corpid'];
  46. (new DbService())->getConnectionNameByCorpId($corpId);
  47. $contactService = new ContactService();
  48. // 创建任务记录
  49. $this->Records = Records::create([
  50. 'job_id' => $this->follow_user_data['corpid'] . '_FollowUserJobs',
  51. 'name' => static::class,
  52. 'payload' => json_encode($this->follow_user_data),
  53. 'status' => 'processing',
  54. 'started_at' => now()
  55. ]);
  56. $corpid = $this->follow_user_data['corpid'];
  57. $external_contact_info = $this->follow_user_data['external_contact_info'];
  58. $follow_info = $this->follow_user_data['follow_info'];
  59. $result = $contactService->handle_follow_user_info($corpid, $follow_info, $external_contact_info);
  60. //删除任务记录
  61. $this->Records->delete();
  62. // 成功处理...
  63. } catch (\Exception $e) {
  64. // 失败处理...
  65. if ($this->Records) {
  66. $this->Records->delete();
  67. }
  68. // 如果错误信息里面包含字符UNIQUE_(数据唯一)则不写日志
  69. if (stripos($e->getMessage(), 'UNIQUE_') === false) {
  70. // 记录错误日志
  71. Log::info('job_error', 'FollowUserJobs任务队列失败', ['data' => $this->follow_user_data, 'error' => $e->getMessage()]);
  72. }
  73. }
  74. }
  75. public function failed(\Throwable $exception)
  76. {
  77. Log::info('job_error', 'FollowUserJobs任务队列彻底失败', ['data' => $this->follow_user_data, 'error' => $exception->getMessage()]);
  78. // 只有在Records存在时才删除
  79. if ($this->Records) {
  80. $this->Records->delete();
  81. }
  82. }
  83. }