增加锁

This commit is contained in:
杨建炊 2024-10-31 14:37:42 +08:00
parent a8290bd5d0
commit c017753fe6
2 changed files with 14 additions and 11 deletions

View File

@ -67,7 +67,6 @@ class GoodsCombinationController extends Controller
->sum('already_cancel_number'); ->sum('already_cancel_number');
$item['total_orders_num'] = $number - $cancelNumber; $item['total_orders_num'] = $number - $cancelNumber;
foreach ($item['combinationGoods'] as $combinationItem) { foreach ($item['combinationGoods'] as $combinationItem) {
Log::info("TEST", [$combinationItem]);
$title = !empty($combinationItem['goodsSkuItem']['name']) ? $combinationItem['goodsSkuItem']['name'] : $title = !empty($combinationItem['goodsSkuItem']['name']) ? $combinationItem['goodsSkuItem']['name'] :
(!empty($combinationItem['goodsSkuItem']['goods']) ? $combinationItem['goodsSkuItem']['goods']['title'] (!empty($combinationItem['goodsSkuItem']['goods']) ? $combinationItem['goodsSkuItem']['goods']['title']
. " " . $combinationItem['goodsSkuItem']['title'] : $combinationItem['goodsSkuItem']['title']); . " " . $combinationItem['goodsSkuItem']['title'] : $combinationItem['goodsSkuItem']['title']);

View File

@ -9,6 +9,7 @@ use App\Utils\DateTimeUtils;
use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\InteractsWithQueue;
use App\Events\BatchStockUpdateEvent; use App\Events\BatchStockUpdateEvent;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
class CombinationGoodsStockUpdateListener implements ShouldQueue class CombinationGoodsStockUpdateListener implements ShouldQueue
@ -54,6 +55,7 @@ class CombinationGoodsStockUpdateListener implements ShouldQueue
} }
} }
} }
$updateIds = [];
//拉取三分订单时可能出现组合订单的情况 需要同步扣减库存 //拉取三分订单时可能出现组合订单的情况 需要同步扣减库存
if ($combinationGoodsIds) { if ($combinationGoodsIds) {
$combinationGoods = CombinationGood::query() $combinationGoods = CombinationGood::query()
@ -61,7 +63,8 @@ class CombinationGoodsStockUpdateListener implements ShouldQueue
->whereIn('goods_sku_id', $combinationGoodsIds) ->whereIn('goods_sku_id', $combinationGoodsIds)
->get(); ->get();
foreach ($combinationGoods as $item) { foreach ($combinationGoods as $item) {
$goodsSku = GoodsSku::query()->find($item['item_id']); DB::transaction(function () use ($item, &$updateIds) {
$goodsSku = GoodsSku::query()->find($item['item_id'])->lockForUpdate();
$stock = $goodsSku->stock - $item['item_num']; $stock = $goodsSku->stock - $item['item_num'];
//新增逻辑 在线库存同步扣减 //新增逻辑 在线库存同步扣减
$saleStock = max($goodsSku->sale_stock - $item['item_num'], 0); $saleStock = max($goodsSku->sale_stock - $item['item_num'], 0);
@ -71,6 +74,7 @@ class CombinationGoodsStockUpdateListener implements ShouldQueue
$goodsSku->sale_stock = $saleStock; $goodsSku->sale_stock = $saleStock;
$goodsSku->save(); $goodsSku->save();
$updateIds[] = $goodsSku->id; $updateIds[] = $goodsSku->id;
});
} }
} }
// 计算主商品库存 // 计算主商品库存