"class CloseOrderJob < ApplicationJob\n queue_as :default\n\n def perform(order, delay)\n # 判断对应的订单是否已经被支付\n # 如果已经支付则不需要关闭订单,直接退出\n return if order.paid_at.present?\n\n # 通过事务执行 sql\n ActiveRecord::Base.transaction do\n # 将订单的 closed 字段标记为 true,即关闭订单\n order.update(closed: true)\n # 循环遍历订单中的商品 SKU,将订单中的数量加回到 SKU 的库存中去\n order.items.each do |item|\n item.product_sku.add_stock(item.amount)\n end\n end\n end\nend\n"class CloseOrder implements ShouldQueue\n{\n use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;\n\n protected $order;\n\n public function __construct(Order $order, $delay)\n {\n $this->order = $order;\n // 设置延迟的时间,delay() 方法的参数代表多少秒之后执行\n $this->delay($delay);\n }\n\n // 定义这个任务类具体的执行逻辑\n // 当队列处理器从队列中取出任务时,会调用 handle() 方法\n public function handle()\n {\n // 判断对应的订单是否已经被支付\n // 如果已经支付则不需要关闭订单,直接退出\n if ($this->order->paid_at) {\n return;\n }\n // 通过事务执行 sql\n \DB::transaction(function() {\n // 将订单的 closed 字段标记为 true,即关闭订单\n $this->order->update(['closed' => true]);\n // 循环遍历订单中的商品 SKU,将订单中的数量加回到 SKU 的库存中去\n foreach ($this->order->items as $item) {\n $item->productSku->addStock($item->amount);\n }\n });\n }\n}

Laravel 和 Rails 中的订单关闭作业:最佳实践比较

原文地址: https://www.cveoy.top/t/topic/p1uR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录