BackfillPaidOrderStatuses.php 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Console\Commands;
  4. use App\Jobs\BackfillPaidOrderStatusesJob;
  5. use App\Services\OrderPaymentStatusService;
  6. use Illuminate\Console\Command;
  7. class BackfillPaidOrderStatuses extends Command
  8. {
  9. protected $signature = 'orders:backfill-paid-statuses
  10. {--year= : Год площадок для обработки}
  11. {--chunk=500 : Размер чанка}
  12. {--sync : Выполнить сразу без постановки в очередь}';
  13. protected $description = 'Запускает backfill статуса "Оплачено" для площадок с заполненными ведомостью и УПД по всем МАФ';
  14. public function handle(OrderPaymentStatusService $paymentStatusService): int
  15. {
  16. $year = $this->yearOption();
  17. $chunkSize = $this->chunkSizeOption();
  18. if ($chunkSize < 1) {
  19. $this->error('Размер чанка должен быть больше 0.');
  20. return self::FAILURE;
  21. }
  22. if ((bool) $this->option('sync')) {
  23. (new BackfillPaidOrderStatusesJob($year, $chunkSize))->handle($paymentStatusService);
  24. $this->info('Backfill статуса "Оплачено" выполнен.');
  25. return self::SUCCESS;
  26. }
  27. BackfillPaidOrderStatusesJob::dispatch($year, $chunkSize);
  28. $this->info('Backfill статуса "Оплачено" поставлен в очередь.');
  29. return self::SUCCESS;
  30. }
  31. private function yearOption(): ?int
  32. {
  33. $year = $this->option('year');
  34. if ($year === null || $year === '') {
  35. return null;
  36. }
  37. return (int) $year;
  38. }
  39. private function chunkSizeOption(): int
  40. {
  41. $chunk = $this->option('chunk');
  42. if (!is_numeric($chunk)) {
  43. return 0;
  44. }
  45. return (int) $chunk;
  46. }
  47. }