未来/udschedule

用户自定义计划允许您创建用户定义的计划任务

1.1.6 2020-12-16 14:40 UTC

This package is auto-updated.

Last update: 2024-09-16 22:43:46 UTC


README

UDSchedule

用户自定义计划是laravel包,允许您创建用户定义的计划任务。 未来用爱 <3

安装

使用composer安装
composer require futur/udschedule

使用表达式表迁移包迁移
php artisan migrate

定义调度模型

...

use Futur\UDSchedule\Interfaces\UDSchedulerInterface;
use Futur\UDSchedule\Traits\UDScheduler;

class User extends Authenticatable implements UDSchedulerInterface
{
    use HasFactory, Notifiable, UDScheduler;

    ...

定义计划类,可以是任何实现UDSchedulable接口的类,例如存储在app\Scheduled文件夹中的模型或类等

...

use Futur\UDSchedule\Interfaces\UDSchedulable;
use Futur\UDSchedule\Interfaces\UDSchedulerInterface;

class Report implements UDSchedulable
{
    public function doUDScheduled(UDSchedulerInterface $UDScheduler)
    {
        //Define anything you want to shedule here
        //Sending email reminders, etc.
    }

    ...
}

用法

调度

安装后,您需要做的就是调用UDSchedule外观并定义一个调度和一个计划,并指定计划类型

UDSchedule::schedule()
            ->forScheduler($scheduler)
            ->withSchedulable(UDScheduledObject::class)
            ->...
            ->set();

可用的计划类型

  • monthly,值可以是月份中的任何一天
UDSchedule::schedule()
            ->forScheduler($scheduler)
            ->withSchedulable(UDScheduledObject::class)
            ->monthly(23)
            ->set();
  • weekly,值可以是周中的任何一天
UDSchedule::schedule()
            ->forScheduler($scheduler)
            ->withSchedulable(UDScheduledObject::class)
            ->weekly('Sunday')
            ->set();
  • daily,值可以是时间(HH:MM)
UDSchedule::schedule()
            ->forScheduler($scheduler)
            ->withSchedulable(UDScheduledObject::class)
            ->daily('12:05')
            ->set();
  • at,值可以是时间(HH:MM),用于指定计划时间
UDSchedule::schedule()
            ->forScheduler($scheduler)
            ->withSchedulable(UDScheduledObject::class)
            ->weekly('Monday')
            ->at('14:23')
            ->set();
  • 工作日
UDSchedule::schedule()
            ->forScheduler($scheduler)
            ->withSchedulable(UDScheduledObject::class)
            ->weekdays()
            ->set();
  • 周末
UDSchedule::schedule()
            ->forScheduler($scheduler)
            ->withSchedulable(UDScheduledObject::class)
            ->weekends()
            ->set();
  • 最后一天
UDSchedule::schedule()
            ->forScheduler($scheduler)
            ->withSchedulable(UDScheduledObject::class)
            ->lastDayOfMonth()
            ->set();
  • custom 表达式,如果您想自己指定cron表达式
UDSchedule::schedule()
            ->forScheduler($scheduler)
            ->withSchedulable(UDScheduledObject::class)
            ->custom('00 23 * * *')
            ->set();
  • timezone 指定定义计划的用户的时区
UDSchedule::schedule()
            ->forScheduler($scheduler)
            ->withSchedulable(UDScheduledObject::class)
            ->custom('00 23 * * *')
            ->timezone('MST')
            ->set();

表达式解释器

有时需要将udscheduled任务中的表达式解释为可理解的形式。您可以使用UDSchedule外观的interpretExpression方法来完成此操作

$scheduled = UDSchedule::interpretExpression(
                $scheduler
                    ->udScheduledBySchedulable(UDScheduledObject::class)
                    ->expression
            );

将返回

[
    'type' => 'monthly',
    'value' => '3',
    'at' => '11:00'
]