Browse Source

商品活动限购同类

master
weigang 5 years ago
parent
commit
c490d7d6a1
  1. 9
      app/Service/v3/Implementations/GoodsActivityService.php
  2. 7
      app/Service/v3/Implementations/OrderOnlineService.php
  3. 2
      app/Service/v3/Interfaces/GoodsActivityServiceInterface.php

9
app/Service/v3/Implementations/GoodsActivityService.php

@ -133,18 +133,13 @@ class GoodsActivityService implements GoodsActivityServiceInterface
/** /**
* 统计订单中活动商品的数量,并校验 * 统计订单中活动商品的数量,并校验
* @param $orderGoods
* @param $goodsIds
* @param int $limitNum * @param int $limitNum
* @return bool * @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() $sourceGoods = GoodsActivity::query()
->whereIn('id', $goodsIds) ->whereIn('id', $goodsIds)
->get()->toArray(); ->get()->toArray();

7
app/Service/v3/Implementations/OrderOnlineService.php

@ -158,6 +158,7 @@ class OrderOnlineService implements OrderOnlineServiceInterface
$dataChildren = []; # 子订单 $dataChildren = []; # 子订单
$dataOrderGoods = []; # 订单商品 $dataOrderGoods = []; # 订单商品
$storeTypeIds = []; # 订单中的商户类型,用于校验红包 $storeTypeIds = []; # 订单中的商户类型,用于校验红包
$activityGoodsIds = []; # 活动商品IDs
foreach ($storeList as $key => &$storeItem) { foreach ($storeList as $key => &$storeItem) {
@ -214,6 +215,10 @@ class OrderOnlineService implements OrderOnlineServiceInterface
} }
$isCacheInventory = true; $isCacheInventory = true;
if ($cart->activity_type == 2) {
$activityGoodsIds[] = $cart->goods_id;
}
// 算金额 // 算金额
$goodsAmount = bcmul((string)$goods->price, (string)$cart->num); # 当前商品的金额 $goodsAmount = bcmul((string)$goods->price, (string)$cart->num); # 当前商品的金额
$subAmount = bcadd((string)$subAmount, (string)$goodsAmount); # 当前店铺子订单的金额 $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){ if(!$check){
$this->log->event(LogLabel::ORDER_ONLINE_LOG, ['msg' => '订单中有活动商品超过限购数量', 'data' => json_encode($dataOrderGoods)]); $this->log->event(LogLabel::ORDER_ONLINE_LOG, ['msg' => '订单中有活动商品超过限购数量', 'data' => json_encode($dataOrderGoods)]);
throw new ErrorCodeException(ErrorCode::GOODS_ACTIVITY_RESTRICT_LIMIT); throw new ErrorCodeException(ErrorCode::GOODS_ACTIVITY_RESTRICT_LIMIT);

2
app/Service/v3/Interfaces/GoodsActivityServiceInterface.php

@ -13,5 +13,5 @@ interface GoodsActivityServiceInterface
public function detail($goodsId); public function detail($goodsId);
public function cacheRecord($goodsId, $num, $userId); public function cacheRecord($goodsId, $num, $userId);
public function clearCacheRecord($goodsId, $num, $userId); public function clearCacheRecord($goodsId, $num, $userId);
public function checkOrderActivityCount($orderGoods, $limitNum=1);
public function checkOrderActivityCount($goodsIds, $limitNum=1);
} }
Loading…
Cancel
Save