diff --git a/app/Service/v3/Implementations/GoodsActivityService.php b/app/Service/v3/Implementations/GoodsActivityService.php index e15ad50..691b46f 100644 --- a/app/Service/v3/Implementations/GoodsActivityService.php +++ b/app/Service/v3/Implementations/GoodsActivityService.php @@ -133,18 +133,13 @@ class GoodsActivityService implements GoodsActivityServiceInterface /** * 统计订单中活动商品的数量,并校验 - * @param $orderGoods + * @param $goodsIds * @param int $limitNum * @return bool */ - public function checkOrderActivityCount($orderGoods, $limitNum=1) + public function checkOrderActivityCount($goodsIds, $limitNum=1) { - $goodsIds = []; - foreach ($orderGoods as $key => &$storeGoods) { - $goodsIds = array_merge($goodsIds, array_column(array_values($storeGoods), 'goods_id')); - } - $sourceGoods = GoodsActivity::query() ->whereIn('id', $goodsIds) ->get()->toArray(); diff --git a/app/Service/v3/Implementations/OrderOnlineService.php b/app/Service/v3/Implementations/OrderOnlineService.php index 6208a23..2679efb 100644 --- a/app/Service/v3/Implementations/OrderOnlineService.php +++ b/app/Service/v3/Implementations/OrderOnlineService.php @@ -158,6 +158,7 @@ class OrderOnlineService implements OrderOnlineServiceInterface $dataChildren = []; # 子订单 $dataOrderGoods = []; # 订单商品 $storeTypeIds = []; # 订单中的商户类型,用于校验红包 + $activityGoodsIds = []; # 活动商品IDs foreach ($storeList as $key => &$storeItem) { @@ -214,6 +215,10 @@ class OrderOnlineService implements OrderOnlineServiceInterface } $isCacheInventory = true; + if ($cart->activity_type == 2) { + $activityGoodsIds[] = $cart->goods_id; + } + // 算金额 $goodsAmount = bcmul((string)$goods->price, (string)$cart->num); # 当前商品的金额 $subAmount = bcadd((string)$subAmount, (string)$goodsAmount); # 当前店铺子订单的金额 @@ -330,7 +335,7 @@ class OrderOnlineService implements OrderOnlineServiceInterface } // 判断是否有购买多个特价商品 - $check = $this->goodsActivityService->checkOrderActivityCount($dataOrderGoods); + $check = $this->goodsActivityService->checkOrderActivityCount($activityGoodsIds); if(!$check){ $this->log->event(LogLabel::ORDER_ONLINE_LOG, ['msg' => '订单中有活动商品超过限购数量', 'data' => json_encode($dataOrderGoods)]); throw new ErrorCodeException(ErrorCode::GOODS_ACTIVITY_RESTRICT_LIMIT); diff --git a/app/Service/v3/Interfaces/GoodsActivityServiceInterface.php b/app/Service/v3/Interfaces/GoodsActivityServiceInterface.php index 64ab163..cac9c86 100644 --- a/app/Service/v3/Interfaces/GoodsActivityServiceInterface.php +++ b/app/Service/v3/Interfaces/GoodsActivityServiceInterface.php @@ -13,5 +13,5 @@ interface GoodsActivityServiceInterface public function detail($goodsId); public function cacheRecord($goodsId, $num, $userId); public function clearCacheRecord($goodsId, $num, $userId); - public function checkOrderActivityCount($orderGoods, $limitNum=1); + public function checkOrderActivityCount($goodsIds, $limitNum=1); } \ No newline at end of file