From 0f6cc61dfddff1541711277449d29f5dc6d02b0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E4=B8=96=E7=95=8C?= <642747453@qq.com> Date: Wed, 26 Apr 2023 11:43:25 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20#10000=20=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CombinationGoodsStockUpdateListener.php | 40 +++++++++++-------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/app/Listeners/CombinationGoodsStockUpdateListener.php b/app/Listeners/CombinationGoodsStockUpdateListener.php index e49f575..46740c2 100644 --- a/app/Listeners/CombinationGoodsStockUpdateListener.php +++ b/app/Listeners/CombinationGoodsStockUpdateListener.php @@ -36,7 +36,7 @@ class CombinationGoodsStockUpdateListener if ($event->goodsSku->is_combination) { $combinationGoodsIds[] = $event->goodsSku->id; } else { - $combinationGoodsItemIds[$event->goodsSku->id] = $event->goodsSku->stock; + $combinationGoodsItemIds[] = $event->goodsSku->id; } } if ($event->goodsSkus) { @@ -44,7 +44,7 @@ class CombinationGoodsStockUpdateListener if ($sku->is_combination) { $combinationGoodsIds[] = $sku->id; } else { - $combinationGoodsItemIds[$sku->id] = $sku->stock; + $combinationGoodsItemIds[$sku->id] = $sku->id; } } } @@ -63,23 +63,31 @@ class CombinationGoodsStockUpdateListener } // 计算主商品库存 if ($combinationGoodsItemIds) { - $combinationGoodsItems = CombinationGood::query() - ->whereIn('item_id', array_keys($combinationGoodsItemIds)) - ->get(); - if ($combinationGoodsItems->isEmpty()){ + $goodsSkuIds = CombinationGood::query() + ->whereIn('item_id', $combinationGoodsItemIds) + ->pluck('goods_sku_id') + ->toArray(); + if (empty($goodsSkuIds)) { return false; } - $goodsSkuIds = array_column($combinationGoodsItems->toArray(), 'goods_sku_id'); - $goodsSkus = GoodsSku::query() - ->whereIn('id', $goodsSkuIds) - ->pluck('stock', 'id') - ->toArray(); - foreach ($combinationGoodsItems as $item){ - $stock = $combinationGoodsItemIds[$item['item_id']] / $item['item_num']; - if ($stock < $goodsSkus[$item['goods_sku_id']]) { - GoodsSku::query()->where('id', $item['goods_sku_id'])->update(['stock' => $stock]); - $updateIds[] = $item['goods_sku_id']; + foreach ($goodsSkuIds as $goodsSkuId) { + $combinationGoods = CombinationGood::query() + ->with('goodsSkuItem:id,stock') + ->where('goods_sku_id', $goodsSkuId) + ->get(); + $stock = 0; + foreach ($combinationGoods as $goods) { + $num = $goods['goodsSkuItem']['stock'] / $goods['item_num']; + if (0 === $stock) { + $stock = $num; + continue; + } + if ($num < $stock) { + $stock = $num; + } } + GoodsSku::query()->where('id', $goodsSkuId)->update(['stock' => $stock]); + $updateIds[] = $goodsSkuId; } } if ($updateIds) { From 2f49c3e2c8cbff4a33ff09f24a952ebc7eb7bcbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E4=B8=96=E7=95=8C?= <642747453@qq.com> Date: Wed, 26 Apr 2023 11:44:14 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20#10000=20=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Listeners/CombinationGoodsStockUpdateListener.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Listeners/CombinationGoodsStockUpdateListener.php b/app/Listeners/CombinationGoodsStockUpdateListener.php index 46740c2..816085a 100644 --- a/app/Listeners/CombinationGoodsStockUpdateListener.php +++ b/app/Listeners/CombinationGoodsStockUpdateListener.php @@ -44,7 +44,7 @@ class CombinationGoodsStockUpdateListener if ($sku->is_combination) { $combinationGoodsIds[] = $sku->id; } else { - $combinationGoodsItemIds[$sku->id] = $sku->id; + $combinationGoodsItemIds[] = $sku->id; } } }