|
- <?php
-
- namespace App\Jobs\ReceiptIssuingOrder;
-
- use App\Codes\QueueName;
- use App\Models\Email;
- use App\Models\ReceiptIssuingOrder;
- use App\Util\DateUtil;
- use Illuminate\Bus\Queueable;
- use Illuminate\Contracts\Queue\ShouldQueue;
- use Illuminate\Foundation\Bus\Dispatchable;
- use Illuminate\Queue\InteractsWithQueue;
- use Illuminate\Queue\SerializesModels;
- use Illuminate\Support\Carbon;
- use Illuminate\Support\Facades\Log;
-
- class PollEmailSendStatus implements ShouldQueue
- {
- use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
-
- private int $currentRetryCount;
-
- /**
- * Create a new job instance.
- *
- * @return void
- */
- public function __construct(
- private ReceiptIssuingOrder $order,
- ) {
- $this->onQueue(QueueName::JOB->value);
- }
-
- /**
- * Execute the job.
- *
- * @return void
- */
- public function handle()
- {
- info("領収証Emailポーリング:" . $this->order->receipt_pdf_email_id);
-
- $email = Email::findOrFail($this->order->receipt_pdf_email_id);
- $sendDatetime = $email->send_datetime;
-
- if ($email->send_datetime !== null) {
- // ポーリング終了
- $this->donePolling($sendDatetime);
- } else if ($email->is_failed) {
- // ポーリング終了
- $this->donePolling($sendDatetime);
- } else {
- $limit = $this->order->status_receipt_email_send_order_datetime->clone()->addDays(3);
- if (DateUtil::now()->gt($limit)) {
- // ポーリング終了(未完了)
- $this->donePolling($sendDatetime);
- Log::warning("領収証Email送信未完了検知 OrderID:%s", $this->order->id);
- } else {
- // ポーリング継続
- $this->continuePolling();
- }
- }
- }
-
- private function donePolling(Carbon $sendDatetime)
- {
- $this->order->status_receipt_email_send_datetime = $sendDatetime;
- $this->order->save();
- info("領収証Emailポーリング完了:" . $this->order->receipt_pdf_email_id);
- }
-
- private function continuePolling()
- {
- static::dispatch($this->order)
- ->delay(DateUtil::now()->addMinutes(5));
- info("領収証Emailポーリング継続:" . $this->order->receipt_pdf_email_id);
- }
- }
|