diff --git a/app/Models/CronTask.php b/app/Models/CronTask.php index e6c48fb..04108ac 100644 --- a/app/Models/CronTask.php +++ b/app/Models/CronTask.php @@ -3,6 +3,7 @@ namespace App\Models; use App\Scopes\CommonModel; +use Illuminate\Database\Eloquent\Casts\AsArrayObject; class CronTask extends CommonModel { @@ -11,6 +12,6 @@ class CronTask extends CommonModel protected $dates = ['last_run']; protected $casts = [ - 'last_run' => 'datetime', + 'last_run' => AsArrayObject::class, ]; } diff --git a/app/Providers/CronTaskHandleProvider.php b/app/Providers/CronTaskHandleProvider.php index 31283c6..fc966e7 100644 --- a/app/Providers/CronTaskHandleProvider.php +++ b/app/Providers/CronTaskHandleProvider.php @@ -17,7 +17,6 @@ class CronTaskHandleProvider extends CommonController $now = Carbon::now(); $tenants = Tenant::where('has_active_instance', true)->get(); - foreach ($tenants as $tenant) { app()->instance('tenant', $tenant); $this->runTenantTasks($tenant, $now); @@ -31,7 +30,6 @@ class CronTaskHandleProvider extends CommonController private function runTenantTasks(Tenant $tenant, Carbon $now) { $tasks = CronTask::all(); - foreach ($tasks as $task) { // --- Every-Time Tasks --- @@ -41,11 +39,12 @@ class CronTaskHandleProvider extends CommonController // --- Daily Tasks --- if ($task->execution_type === CronTaskType::CRON_TASK_TYPE_DAILY) { + $tenantLastRun = $task->last_run?->get($tenant->slug); + $scheduledTime = \DateTime::createFromFormat('Y-m-d H:i:s', date('Y-m-d ') . $task->schedule_time); $now = Carbon::now(); - - $alreadyRunToday = $task->last_run?->isToday() ?? false; + $alreadyRunToday = $tenantLastRun == null ? true : $tenantLastRun->isToday() ?? false; if (!$alreadyRunToday && $now >= $scheduledTime) { $this->runTask($task); @@ -59,14 +58,18 @@ class CronTaskHandleProvider extends CommonController $logger = $this->taskLogger($task->name, app('tenant')); app()->instance('taskLogger', $logger); - $taskClass = "\\App\\Tasks\\" . $task->name; if (class_exists($taskClass)) { $instance = new $taskClass(); $instance->handle(); + $lastRun = $task->last_run; + if ($lastRun === null) { + $lastRun = []; + } + $lastRun[app('tenant')->slug] = now(); // Update last_run - $task->last_run = now(); + $task->last_run = $lastRun; $task->save(); } } diff --git a/app/Tasks/CloseEvent.php b/app/Tasks/CloseEvent.php index 575578d..13634d1 100644 --- a/app/Tasks/CloseEvent.php +++ b/app/Tasks/CloseEvent.php @@ -12,6 +12,7 @@ class CloseEvent implements CronTask { $eventRepository = new EventRepository(); /** @var Event $event */ foreach ($eventRepository->getAvailable(false) as $event) { + echo $event->id . $event->tenant .'
'; if ($event->registration_final_end <= $now ) { $event->registration_allowed = false; $event->save();