From c017753fe630cd11efd1ed37a511644160cc0561 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E5=BB=BA=E7=82=8A?= <924182103@qq.com> Date: Thu, 31 Oct 2024 14:37:42 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=94=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Goods/GoodsCombinationController.php | 1 - .../CombinationGoodsStockUpdateListener.php | 24 +++++++++++-------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/app/Http/Controllers/Goods/GoodsCombinationController.php b/app/Http/Controllers/Goods/GoodsCombinationController.php index 33f429e..d12eec3 100644 --- a/app/Http/Controllers/Goods/GoodsCombinationController.php +++ b/app/Http/Controllers/Goods/GoodsCombinationController.php @@ -67,7 +67,6 @@ class GoodsCombinationController extends Controller ->sum('already_cancel_number'); $item['total_orders_num'] = $number - $cancelNumber; foreach ($item['combinationGoods'] as $combinationItem) { - Log::info("TEST", [$combinationItem]); $title = !empty($combinationItem['goodsSkuItem']['name']) ? $combinationItem['goodsSkuItem']['name'] : (!empty($combinationItem['goodsSkuItem']['goods']) ? $combinationItem['goodsSkuItem']['goods']['title'] . " " . $combinationItem['goodsSkuItem']['title'] : $combinationItem['goodsSkuItem']['title']); diff --git a/app/Listeners/CombinationGoodsStockUpdateListener.php b/app/Listeners/CombinationGoodsStockUpdateListener.php index ae05118..8b295ee 100644 --- a/app/Listeners/CombinationGoodsStockUpdateListener.php +++ b/app/Listeners/CombinationGoodsStockUpdateListener.php @@ -9,6 +9,7 @@ use App\Utils\DateTimeUtils; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Queue\InteractsWithQueue; use App\Events\BatchStockUpdateEvent; +use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; class CombinationGoodsStockUpdateListener implements ShouldQueue @@ -54,6 +55,7 @@ class CombinationGoodsStockUpdateListener implements ShouldQueue } } } + $updateIds = []; //拉取三分订单时可能出现组合订单的情况 需要同步扣减库存 if ($combinationGoodsIds) { $combinationGoods = CombinationGood::query() @@ -61,16 +63,18 @@ class CombinationGoodsStockUpdateListener implements ShouldQueue ->whereIn('goods_sku_id', $combinationGoodsIds) ->get(); foreach ($combinationGoods as $item) { - $goodsSku = GoodsSku::query()->find($item['item_id']); - $stock = $goodsSku->stock - $item['item_num']; - //新增逻辑 在线库存同步扣减 - $saleStock = max($goodsSku->sale_stock - $item['item_num'],0); - [$status, $stock] = $this->checkStatusAndStock($goodsSku, $stock, $saleStock); - $goodsSku->status = $status; - $goodsSku->stock = $stock; - $goodsSku->sale_stock = $saleStock; - $goodsSku->save(); - $updateIds[] = $goodsSku->id; + DB::transaction(function () use ($item, &$updateIds) { + $goodsSku = GoodsSku::query()->find($item['item_id'])->lockForUpdate(); + $stock = $goodsSku->stock - $item['item_num']; + //新增逻辑 在线库存同步扣减 + $saleStock = max($goodsSku->sale_stock - $item['item_num'], 0); + [$status, $stock] = $this->checkStatusAndStock($goodsSku, $stock, $saleStock); + $goodsSku->status = $status; + $goodsSku->stock = $stock; + $goodsSku->sale_stock = $saleStock; + $goodsSku->save(); + $updateIds[] = $goodsSku->id; + }); } } // 计算主商品库存