main
Jing Li 2024-04-28 13:56:58 +08:00
parent 5772c4f002
commit 9b848dbc2c
2 changed files with 111 additions and 0 deletions

View File

@ -0,0 +1,110 @@
<?php
namespace App\Console\Commands;
use App\Enums\TaskHygieneStatus;
use App\Enums\TaskLedgerStatus;
use App\Enums\TaskPerformanceStatus;
use App\Enums\TaskStatus;
use App\Models\Task;
use App\Models\TaskHygiene;
use App\Models\TaskLedger;
use App\Models\TaskPerformance;
use Illuminate\Console\Command;
use Illuminate\Database\Eloquent\Relations\MorphTo;
use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Support\Facades\DB;
use Throwable;
class TaskUpdateCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'app:task-update';
/**
* The console command description.
*
* @var string
*/
protected $description = '生成门店每天的总账录入任务';
/**
* Execute the console command.
*/
public function handle()
{
$datetime = now();
Task::with(['taskable' => function (MorphTo $morphTo) {
$morphTo->morphWith([
TaskLedger::class,
TaskPerformance::class,
TaskHygiene::class => ['workflow'],
]);
}])
->where('task_status', TaskStatus::Pending)
->where('end_at', '<', $datetime)
->lazyById()
->each(function ($task) use ($datetime) {
try {
DB::beginTransaction();
switch (Relation::getMorphedModel($task->taskable_type)) {
case TaskLedger::class:
if ($task->taskable->task_status === TaskLedgerStatus::Success) {
$task->update([
'task_status' => TaskStatus::Success,
'completed_at' => $datetime,
]);
} else {
$task->update([
'task_status' => TaskStatus::Failed,
]);
}
break;
case TaskPerformance::class:
if ($task->taskable->task_status === TaskPerformanceStatus::Success) {
$task->update([
'task_status' => TaskStatus::Success,
'completed_at' => $datetime,
]);
} else {
$task->update([
'task_status' => TaskStatus::Failed,
]);
}
break;
case TaskHygiene::class:
switch ($task->taskable->task_status) {
case TaskHygieneStatus::Success:
$task->update([
'task_status' => TaskStatus::Success,
'completed_at' => $datetime,
]);
break;
case TaskHygieneStatus::Unpassed:
case TaskHygieneStatus::Failed:
$task->update([
'task_status' => TaskStatus::Failed,
]);
break;
}
break;
}
DB::commit();
} catch (Throwable $e) {
DB::rollBack();
report($e);
}
});
}
}

View File

@ -12,6 +12,7 @@ class Kernel extends ConsoleKernel
*/
protected function schedule(Schedule $schedule): void
{
$schedule->command(Commands\TaskUpdateCommand::class)->hourly();
$schedule->command(Commands\TaskLedgerGenerateCommand::class)->dailyAt('01:00');
// $schedule->call(fn() => logger('schedule running'))->everyMinute();
}