Guest User

Untitled

a guest
Jan 15th, 2025
16
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.51 KB | None | 0 0
  1. ```
  2. <?php
  3.  
  4. namespace App\Console\Commands;
  5.  
  6. use Illuminate\Console\Command;
  7. use App\Models\Draw;
  8. use Carbon\Carbon;
  9. use Illuminate\Support\Facades\Log;
  10.  
  11. class GenerateDraws extends Command
  12. {
  13. /**
  14. * The name and signature of the console command.
  15. *
  16. * @var string
  17. */
  18. protected $signature = 'draws:generate';
  19.  
  20. /**
  21. * The console command description.
  22. *
  23. * @var string
  24. */
  25. protected $description = 'Ensure there are always 6 upcoming draws and update past draws without results';
  26.  
  27. /**
  28. * Execute the console command.
  29. */
  30. public function handle()
  31. {
  32. Log::info('--- Start generowania losowań ---');
  33.  
  34. $lastDrawDate = Draw::max('draw_date') ? Carbon::parse(Draw::max('draw_date')) : Carbon::now()->subDays(10);
  35. $currentDate = Carbon::now();
  36.  
  37. $this->info("Ostatnia znana data losowania: {$lastDrawDate->toDateTimeString()}");
  38. $this->info("Aktualna data: {$currentDate->toDateTimeString()}");
  39.  
  40. $this->updateNullDraws();
  41.  
  42. $this->generateFutureDraws($lastDrawDate, $currentDate);
  43.  
  44. Log::info('--- Koniec generowania losowań ---');
  45. $this->info('Wszystkie losowania zostały zaktualizowane.');
  46. }
  47.  
  48. /**
  49. * Aktualizacja losowań bez wyników (winning_numbers == null).
  50. */
  51. protected function updateNullDraws()
  52. {
  53. $drawsToUpdate = Draw::whereNull('winning_numbers')
  54. ->where('draw_date', '<=', Carbon::now())
  55. ->get();
  56.  
  57. foreach ($drawsToUpdate as $draw) {
  58. $winningNumbers = collect(range(1, 49))->random(6)->all();
  59. $draw->update(['winning_numbers' => $winningNumbers]);
  60. $this->info('Zaktualizowano losowanie z datą: ' . $draw->draw_date->toDateTimeString());
  61. }
  62. }
  63.  
  64. /**
  65. * Generowanie brakujących przyszłych losowań.
  66. */
  67. protected function generateFutureDraws($lastDrawDate, $currentDate)
  68. {
  69. $futureDrawsNeeded = 6 - Draw::where('draw_date', '>', $currentDate)->count();
  70.  
  71. while ($futureDrawsNeeded > 0) {
  72. $lastDrawDate->addDay();
  73.  
  74. if (in_array($lastDrawDate->dayOfWeek, [2, 4, 6])) {
  75. Draw::firstOrCreate([
  76. 'draw_date' => $lastDrawDate->setTime(21, 40, 0),
  77. ]);
  78. $this->info('Utworzono przyszłe losowanie na: ' . $lastDrawDate->toDateTimeString());
  79. $futureDrawsNeeded--;
  80. }
  81. }
  82. }
  83. }
  84. ```
  85.  
Advertisement
Add Comment
Please, Sign In to add comment