combinationGoodsUpdate) { return false; } $updateIds = $combinationGoodsIds = $combinationGoodsItemIds = []; if ($event->goodsSku) { if ($event->goodsSku->is_combination) { $combinationGoodsIds[] = $event->goodsSku->id; } else { $combinationGoodsItemIds[$event->goodsSku->id] = $event->goodsSku->stock; } } if ($event->goodsSkus) { foreach ($event->goodsSkus as $sku) { if ($sku->is_combination) { $combinationGoodsIds[] = $sku->id; } else { $combinationGoodsItemIds[$sku->id] = $sku->stock; } } } // 减子商品库存 if ($combinationGoodsIds) { $combinationGoods = CombinationGood::query() ->with('goodsSku:id,stock') ->whereIn('goods_sku_id', $combinationGoodsIds) ->get(); foreach ($combinationGoods as $item) { $sku = GoodsSku::query()->find($item['item_id']); $sku->stock -= $item['item_num']; $sku->save(); $updateIds[] = $sku->id; } } // 计算主商品库存 if ($combinationGoodsItemIds) { $combinationGoodsItems = CombinationGood::query() ->whereIn('item_id', array_keys($combinationGoodsItemIds)) ->get(); if ($combinationGoodsItems->isEmpty()){ 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']; } } } if ($updateIds) { event(new StockUpdateEvent($updateIds, 1, true)); } } }