关于schedule的写法
Laravel的schedule以往我们的写法是直接写到Console/Kernel中,这样不利于项目维护,尤其是某些计划任务要重跑时,我们需要通过接口调用等方式来触发
接下来,我们的Schedule的写法统一封装为artisan命令,调用方法为:
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
// 每五分钟执行自动取消订单任务
$schedule->command('order:auto-cancel')->everyFiveMinutes();
// 每天凌晨02:00,执行计划任务,将全部的发货成功未确认并超时的订单,设置为确认状态
$schedule->command('order:auto-confirm')->dailyAt('02:00');
// 每天两点,执行计划任务,将全部确认的收货并超时的订单设置为关闭,,
$schedule->command('order:auto-close')->dailyAt('02:00');
}
这样做的好处是,如果计划任务执行有问题,我们修复后,可以通过artisan命令来执行
!!!另外,在设计计划任务时,要注意不要生成脏数据/错误数据,例如:计划任务在执行前要有前置条件,例如清分任务,需要判断一些是否已经清分过了(是否已经生成记录),不要出现数据重复的情况