如何在Laravel中经过20分钟后为每个新记录创建一个调度程序任务?

时间:2019-01-14 02:11:46

标签: laravel server cron

我有一个停车系统,后端使用Angular 6 + Laravel,但有一个特定的问题,我不知道正确的方法。

公园有两个图腾,向我的服务器发送一个条目。我仅在客户从出口离开图腾并前往付款区时检查客户是否无效。

这是我的代码,当他放入已读取EAN_13条码的票证时。这是退出图腾准备好的我的代码:

public function getEntrysDataByEan(Request $request)
{
    if (isset($request)) {
        $entryean = $request->input('entryean13');
        $entry = $this->mdMovEntry->getEntrysDataByEan($entryean);

        if (empty($entry)) {
            $response["success"] = 0;
            $response["message"] = "Não existe nenhuma entrada correspondente";
        } else {
            $nowHour = Carbon::now();
            $enterHour = Carbon::parse($entry[0]->updated_at);

            $difmin = $enterHour->diffInMinutes($nowHour);
            $dif = $enterHour->diffInHours($nowHour);

            if ($difmin <= 20) {
                $this->mdMovEntry->validatedEntryByEan($entryean, Carbon::parse($entry[0]->updated_at), $nowHour);
                $entry[0]->validated = 'S';
            } else {
                $this->mdMovEntry->devaluedEntryByEan($entryean, Carbon::parse($entry[0]->updated_at));
                $entry[0]->validated = 'N';
            }

            $response["success"] = 1;
            $response["message"] = "Entrada retornada com sucesso";
            $response["entry"] = $entry;
        }
    } else {
        $response["success"] = 0;
        $response["message"] = "Nenhum dado enviado";
    }

    return $response;
}

问题是,我认为如果客户可以外出,那么要阅读的内容太多了,因此我从Laravel搜索了Task Scheduling方法和Job方法,却找不到任何问题。

我想要的是当“输入图​​腾”区域在我的数据库上插入时,我创建了一些作业或任务,在20分钟后,他将使其无效的每个新记录。

当客户外出时,系统只对数据库执行getEntry并检查其是否经过验证。

我该如何实现?我之所以这样问,是因为Task的每个示例都是全局执行,但我只希望每条新记录都可能有一个任务?

1 个答案:

答案 0 :(得分:0)

请考虑将model eventsdelayed dispatching一起用于排队的作业。

当新条目插入数据库时​​,以下内容将监听softs = [] with open('software.txt', 'r') as s: for line in s: source = requests.get(line).text soup = BeautifulSoup(source, 'lxml') for link in soup.find_all('a'): softs.append(link.get('href')) print(softs) 事件,并分派延迟20分钟的作业以稍后使该条目无效。

InvalidateEntry作业

created

条目模型

class InvalidateEntry implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $entry;

    /**
     * Create a new job instance.
     *
     * @param  Entry  $entry
     * @return void
     */
    public function __construct(Entry $entry)
    {
        $this->entry = $entry;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        // you'll probably need to add some conditional logic 
        // before updating the entry to determine if the 
        // action is still required.
        $isEntryInvalid = ...;

        if ($isEntryInvalid) { 
            $this->entry->update([
                'validated' => 'N'
            ]);
        } else {
            // delete the job from the queue
            $this->delete();
        }
    }
}