我的情况与需要取消的大订单有关。
对于订单的几行,该操作可以同步完成,没有问题。当订单很大时,所需的处理能力意味着我最好的选择是将流程分解为队列中的单独操作。
即
运行作业
OrderController.php
CancelOrder::dispatch($order);
Jobs / CancelOrder.php handle()
$this->order->orderItems()->each(function(OrderItem $orderItem){
CancelAndReallocateOrderItem::dispatch($orderItem, $this->user);
});
Jobs / CancelAndReallocateOrderItem.php handle()
$this->orderItem->cancelAllocatedAndReservedStock();
$this->orderItem->product->reAllocateOrderItems();
对于具有200行的订单,将启动200个CancelAndReallocateOrderItem实例,从而允许取消操作在几分钟内完成。
我现在正在尝试解决以下可能的问题: