6.5. 关闭未支付订单
关闭未支付订单
上一节我们实现了创建订单的功能,在创建订单的同时我们减去了对应商品 SKU 的库存,恶意用户可以通过下大量的订单又不支付来占用商品库存,让正常的用户因为库存不足而无法下单。因此我们需要有一个关闭未支付订单的机制,当创建订单之后一定时间内没有支付,将关闭订单并退回减去的库存。
对于这个需求我们可以用 Laravel 提供的延迟任务(Delayed Job)功能来解决。当我们的系统触发了一个延迟任务时,Laravel 会用当前时间加上任务的延迟时间计算出任务应该被执行的时间戳,然后将这个时间戳和任务信息序列化之后存入队列,Laravel 的队列处理器会不断查询并执行队列中满足预计执行时间等于或早于当前时间的任务。
1. 创建任务
我们通过 make:job
命令来创建一个任务:
$ php artisan make:job CloseOrder
创建的任务类保存在 app/Jobs
目录下,现在编辑刚刚创建的任务类:
app/Jobs/CloseOrder.php
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illumina...