4.8. 众筹结束逻辑
众筹结束逻辑
在前面的章节我们已经实现了众筹业务的大部分功能,本节我们将要实现众筹的最后一个也是最重要的功能——众筹结束逻辑。
1. 实现方案的考量
在 Laravel 框架下,要触发众筹结束的处理逻辑有两种方案:
- 使用异步延迟任务(Delayed Job),在创建众筹商品时就发起一个执行结束逻辑的异步延迟任务;
- 使用定时任务,每隔一段时间就扫描所有众筹状态为众筹中且众筹结束时间比当前时间要早的众筹商品。
相较于定时任务,异步延迟任务的优点很明显,就是可以较精确地在众筹结束时间执行众筹结束逻辑。但是也有一个致命的问题,假如运营人员修改了众筹商品的众筹结束时间,而我们却无法通过代码取消掉之前发起的异步延迟任务,这是由 Laravel 异步延迟任务的实现方案决定的,目前没有合适的方案来解决这个问题。因此这个方案我们没有采用。
而定时任务是不会有延迟任务这样的问题,虽然无法做到像延迟任务那样精确,但只要设定一个较为合理的任务间隔,比如每分钟一次,就可以把结束时间的误差控制在 1 分钟以内,对于大多数众筹项目来说 1 分钟的误差几乎没有影响。因此我们选择定时任务作为我们...