領収証発行サービス
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

74 rindas
2.1KB

  1. <?php
  2. namespace App\Jobs\ReceiptIssuingOrder;
  3. use App\Codes\QueueName;
  4. use App\Jobs\BaseJob;
  5. use App\Models\Email;
  6. use App\Models\ReceiptIssuingOrder;
  7. use App\Util\DateUtil;
  8. use Illuminate\Support\Carbon;
  9. use Illuminate\Support\Facades\Log;
  10. class PollEmailSendStatus extends BaseJob
  11. {
  12. private int $currentRetryCount;
  13. /**
  14. * Create a new job instance.
  15. *
  16. * @return void
  17. */
  18. public function __construct(
  19. private ReceiptIssuingOrder $order,
  20. ) {
  21. $this->onQueue(QueueName::JOB->value);
  22. }
  23. /**
  24. * Execute the job.
  25. *
  26. * @return void
  27. */
  28. public function handle()
  29. {
  30. info("領収証Emailポーリング:" . $this->order->receipt_pdf_email_id);
  31. $email = Email::findOrFail($this->order->receipt_pdf_email_id);
  32. $sendDatetime = $email->send_datetime;
  33. if ($email->send_datetime !== null) {
  34. // ポーリング終了
  35. $this->donePolling($sendDatetime);
  36. } else if ($email->is_failed) {
  37. // ポーリング終了
  38. $this->donePolling($sendDatetime);
  39. } else {
  40. $limit = $this->order->status_receipt_email_send_order_datetime->clone()->addDays(3);
  41. if (DateUtil::now()->gt($limit)) {
  42. // ポーリング終了(未完了)
  43. $this->donePolling($sendDatetime);
  44. Log::warning("領収証Email送信未完了検知 OrderID:%s", $this->order->id);
  45. } else {
  46. // ポーリング継続
  47. $this->continuePolling();
  48. }
  49. }
  50. }
  51. private function donePolling(?Carbon $sendDatetime)
  52. {
  53. $this->order->status_receipt_email_send_datetime = $sendDatetime;
  54. $this->order->save();
  55. info("領収証Emailポーリング完了:" . $this->order->receipt_pdf_email_id);
  56. }
  57. private function continuePolling()
  58. {
  59. static::dispatch($this->order)
  60. ->delay(DateUtil::now()->addMinutes(5));
  61. info("領収証Emailポーリング継続:" . $this->order->receipt_pdf_email_id);
  62. }
  63. }