Commit 2ceca1a20db4f585c1067504d8d6fed88870adf5

Authored by 芋道源码
Committed by Gitee
2 parents 2725376b e89e3c94

!1207 【缺陷修复】商城

Merge pull request !1207 from puhui999/develop
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/combination/CombinationRecordServiceImpl.java
@@ -375,7 +375,7 @@ public class CombinationRecordServiceImpl implements CombinationRecordService { @@ -375,7 +375,7 @@ public class CombinationRecordServiceImpl implements CombinationRecordService {
375 CombinationRecordDO updateRecord = new CombinationRecordDO().setId(item.getId()) 375 CombinationRecordDO updateRecord = new CombinationRecordDO().setId(item.getId())
376 .setStatus(status.getStatus()).setEndTime(now); 376 .setStatus(status.getStatus()).setEndTime(now);
377 if (CombinationRecordStatusEnum.isSuccess(status.getStatus())) { // 虚拟成团完事更改状态成功后还需要把参与人数修改为成团需要人数 377 if (CombinationRecordStatusEnum.isSuccess(status.getStatus())) { // 虚拟成团完事更改状态成功后还需要把参与人数修改为成团需要人数
378 - updateRecord.setUserCount(records.size()); 378 + updateRecord.setUserCount(records.size()).setVirtualGroup(Boolean.TRUE); // 标记为虚拟成团
379 } 379 }
380 updateRecords.add(updateRecord); 380 updateRecords.add(updateRecord);
381 }); 381 });
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/point/PointActivityServiceImpl.java
@@ -100,7 +100,7 @@ public class PointActivityServiceImpl implements PointActivityService { @@ -100,7 +100,7 @@ public class PointActivityServiceImpl implements PointActivityService {
100 } 100 }
101 pointActivityMapper.updateById(updateObj); 101 pointActivityMapper.updateById(updateObj);
102 // 2.2 更新商品 102 // 2.2 更新商品
103 - updateSeckillProduct(updateObj, updateReqVO.getProducts()); 103 + updatePointProduct(updateObj, updateReqVO.getProducts());
104 } 104 }
105 105
106 @Override 106 @Override
@@ -157,12 +157,12 @@ public class PointActivityServiceImpl implements PointActivityService { @@ -157,12 +157,12 @@ public class PointActivityServiceImpl implements PointActivityService {
157 } 157 }
158 158
159 /** 159 /**
160 - * 更新秒杀商品 160 + * 更新积分商品
161 * 161 *
162 - * @param activity 秒杀活动 162 + * @param activity 积分活动
163 * @param products 该活动的最新商品配置 163 * @param products 该活动的最新商品配置
164 */ 164 */
165 - private void updateSeckillProduct(PointActivityDO activity, List<PointProductSaveReqVO> products) { 165 + private void updatePointProduct(PointActivityDO activity, List<PointProductSaveReqVO> products) {
166 // 第一步,对比新老数据,获得添加、修改、删除的列表 166 // 第一步,对比新老数据,获得添加、修改、删除的列表
167 List<PointProductDO> newList = buildPointProductDO(activity, products); 167 List<PointProductDO> newList = buildPointProductDO(activity, products);
168 List<PointProductDO> oldList = pointProductMapper.selectListByActivityId(activity.getId()); 168 List<PointProductDO> oldList = pointProductMapper.selectListByActivityId(activity.getId());
@@ -211,10 +211,10 @@ public class PointActivityServiceImpl implements PointActivityService { @@ -211,10 +211,10 @@ public class PointActivityServiceImpl implements PointActivityService {
211 } 211 }
212 212
213 /** 213 /**
214 - * 校验秒杀商品是否都存在 214 + * 校验积分商品是否都存在
215 * 215 *
216 * @param spuId 商品 SPU 编号 216 * @param spuId 商品 SPU 编号
217 - * @param products 秒杀商品 217 + * @param products 积分商品
218 */ 218 */
219 private void validateProductExists(Long spuId, List<PointProductSaveReqVO> products) { 219 private void validateProductExists(Long spuId, List<PointProductSaveReqVO> products) {
220 // 1. 校验商品 spu 是否存在 220 // 1. 校验商品 spu 是否存在
yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/ErrorCodeConstants.java
@@ -37,6 +37,7 @@ public interface ErrorCodeConstants { @@ -37,6 +37,7 @@ public interface ErrorCodeConstants {
37 ErrorCode ORDER_CREATE_FAIL_EXIST_UNPAID = new ErrorCode(1_011_000_032, "交易订单创建失败,原因:存在未付款订单"); 37 ErrorCode ORDER_CREATE_FAIL_EXIST_UNPAID = new ErrorCode(1_011_000_032, "交易订单创建失败,原因:存在未付款订单");
38 ErrorCode ORDER_CANCEL_PAID_FAIL = new ErrorCode(1_011_000_033, "交易订单取消支付失败,原因:订单不是【{}】状态"); 38 ErrorCode ORDER_CANCEL_PAID_FAIL = new ErrorCode(1_011_000_033, "交易订单取消支付失败,原因:订单不是【{}】状态");
39 ErrorCode ORDER_PICK_UP_FAIL_NOT_VERIFY_USER = new ErrorCode(1_011_000_034, "交易订单自提失败,原因:你没有核销该门店订单的权限"); 39 ErrorCode ORDER_PICK_UP_FAIL_NOT_VERIFY_USER = new ErrorCode(1_011_000_034, "交易订单自提失败,原因:你没有核销该门店订单的权限");
  40 + ErrorCode ORDER_CREATE_FAIL_INSUFFICIENT_USER_POINTS = new ErrorCode(1_011_000_035, "交易订单创建失败,原因:用户积分不足");
40 41
41 // ========== After Sale 模块 1-011-000-100 ========== 42 // ========== After Sale 模块 1-011-000-100 ==========
42 ErrorCode AFTER_SALE_NOT_FOUND = new ErrorCode(1_011_000_100, "售后单不存在"); 43 ErrorCode AFTER_SALE_NOT_FOUND = new ErrorCode(1_011_000_100, "售后单不存在");
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/order/TradeOrderMapper.java
@@ -7,6 +7,7 @@ import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX; @@ -7,6 +7,7 @@ import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX;
7 import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderPageReqVO; 7 import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderPageReqVO;
8 import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderPageReqVO; 8 import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderPageReqVO;
9 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; 9 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
  10 +import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum;
10 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; 11 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
11 import org.apache.ibatis.annotations.Mapper; 12 import org.apache.ibatis.annotations.Mapper;
12 13
@@ -106,10 +107,22 @@ public interface TradeOrderMapper extends BaseMapperX&lt;TradeOrderDO&gt; { @@ -106,10 +107,22 @@ public interface TradeOrderMapper extends BaseMapperX&lt;TradeOrderDO&gt; {
106 .eq(TradeOrderDO::getCommentStatus, commentStatus)); 107 .eq(TradeOrderDO::getCommentStatus, commentStatus));
107 } 108 }
108 109
109 - default List<TradeOrderDO> selectListByUserIdAndSeckillActivityId(Long userId, Long seckillActivityId) {  
110 - return selectList(new LambdaUpdateWrapper<>(TradeOrderDO.class)  
111 - .eq(TradeOrderDO::getUserId, userId)  
112 - .eq(TradeOrderDO::getSeckillActivityId, seckillActivityId)); 110 + default List<TradeOrderDO> selectListByUserIdAndActivityId(Long userId, Long activityId, TradeOrderTypeEnum type) {
  111 + LambdaQueryWrapperX<TradeOrderDO> queryWrapperX = new LambdaQueryWrapperX<>();
  112 + queryWrapperX.eq(TradeOrderDO::getUserId, userId);
  113 + if (TradeOrderTypeEnum.isSeckill(type.getType())) {
  114 + queryWrapperX.eq(TradeOrderDO::getSeckillActivityId, activityId);
  115 + }
  116 + if (TradeOrderTypeEnum.isBargain(type.getType())) {
  117 + queryWrapperX.eq(TradeOrderDO::getBargainActivityId, activityId);
  118 + }
  119 + if (TradeOrderTypeEnum.isCombination(type.getType())) {
  120 + queryWrapperX.eq(TradeOrderDO::getCombinationActivityId, activityId);
  121 + }
  122 + if (TradeOrderTypeEnum.isPoint(type.getType())) {
  123 + queryWrapperX.eq(TradeOrderDO::getPointActivityId, activityId);
  124 + }
  125 + return selectList(queryWrapperX);
113 } 126 }
114 127
115 default TradeOrderDO selectOneByPickUpVerifyCode(String pickUpVerifyCode) { 128 default TradeOrderDO selectOneByPickUpVerifyCode(String pickUpVerifyCode) {
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderQueryService.java
@@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderSummary @@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderSummary
6 import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderPageReqVO; 6 import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderPageReqVO;
7 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; 7 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
8 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO; 8 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;
  9 +import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum;
9 import cn.iocoder.yudao.module.trade.framework.delivery.core.client.dto.ExpressTrackRespDTO; 10 import cn.iocoder.yudao.module.trade.framework.delivery.core.client.dto.ExpressTrackRespDTO;
10 11
11 import java.util.Collection; 12 import java.util.Collection;
@@ -110,13 +111,14 @@ public interface TradeOrderQueryService { @@ -110,13 +111,14 @@ public interface TradeOrderQueryService {
110 List<ExpressTrackRespDTO> getExpressTrackList(Long id); 111 List<ExpressTrackRespDTO> getExpressTrackList(Long id);
111 112
112 /** 113 /**
113 - * 【会员】在指定秒杀活动下,用户购买的商品数量 114 + * 【会员】在指定活动下,用户购买的商品数量
114 * 115 *
115 * @param userId 用户编号 116 * @param userId 用户编号
116 * @param activityId 活动编号 117 * @param activityId 活动编号
117 - * @return 秒杀商品数量 118 + * @param type 订单类型
  119 + * @return 活动商品数量
118 */ 120 */
119 - int getSeckillProductCount(Long userId, Long activityId); 121 + int getActivityProductCount(Long userId, Long activityId, TradeOrderTypeEnum type);
120 122
121 // =================== Order Item =================== 123 // =================== Order Item ===================
122 124
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderQueryServiceImpl.java
@@ -19,6 +19,7 @@ import cn.iocoder.yudao.module.trade.dal.mysql.order.TradeOrderMapper; @@ -19,6 +19,7 @@ import cn.iocoder.yudao.module.trade.dal.mysql.order.TradeOrderMapper;
19 import cn.iocoder.yudao.module.trade.dal.redis.RedisKeyConstants; 19 import cn.iocoder.yudao.module.trade.dal.redis.RedisKeyConstants;
20 import cn.iocoder.yudao.module.trade.enums.order.TradeOrderRefundStatusEnum; 20 import cn.iocoder.yudao.module.trade.enums.order.TradeOrderRefundStatusEnum;
21 import cn.iocoder.yudao.module.trade.enums.order.TradeOrderStatusEnum; 21 import cn.iocoder.yudao.module.trade.enums.order.TradeOrderStatusEnum;
  22 +import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum;
22 import cn.iocoder.yudao.module.trade.framework.delivery.core.client.ExpressClientFactory; 23 import cn.iocoder.yudao.module.trade.framework.delivery.core.client.ExpressClientFactory;
23 import cn.iocoder.yudao.module.trade.framework.delivery.core.client.dto.ExpressTrackQueryReqDTO; 24 import cn.iocoder.yudao.module.trade.framework.delivery.core.client.dto.ExpressTrackQueryReqDTO;
24 import cn.iocoder.yudao.module.trade.framework.delivery.core.client.dto.ExpressTrackRespDTO; 25 import cn.iocoder.yudao.module.trade.framework.delivery.core.client.dto.ExpressTrackRespDTO;
@@ -174,9 +175,9 @@ public class TradeOrderQueryServiceImpl implements TradeOrderQueryService { @@ -174,9 +175,9 @@ public class TradeOrderQueryServiceImpl implements TradeOrderQueryService {
174 } 175 }
175 176
176 @Override 177 @Override
177 - public int getSeckillProductCount(Long userId, Long activityId) { 178 + public int getActivityProductCount(Long userId, Long activityId, TradeOrderTypeEnum type) {
178 // 获得订单列表 179 // 获得订单列表
179 - List<TradeOrderDO> orders = tradeOrderMapper.selectListByUserIdAndSeckillActivityId(userId, activityId); 180 + List<TradeOrderDO> orders = tradeOrderMapper.selectListByUserIdAndActivityId(userId, activityId, type);
180 orders.removeIf(order -> TradeOrderStatusEnum.isCanceled(order.getStatus())); // 过滤掉【已取消】的订单 181 orders.removeIf(order -> TradeOrderStatusEnum.isCanceled(order.getStatus())); // 过滤掉【已取消】的订单
181 if (CollUtil.isEmpty(orders)) { 182 if (CollUtil.isEmpty(orders)) {
182 return 0; 183 return 0;
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradePointOrderHandler.java
@@ -2,6 +2,8 @@ package cn.iocoder.yudao.module.trade.service.order.handler; @@ -2,6 +2,8 @@ package cn.iocoder.yudao.module.trade.service.order.handler;
2 2
3 import cn.hutool.core.collection.CollUtil; 3 import cn.hutool.core.collection.CollUtil;
4 import cn.hutool.core.lang.Assert; 4 import cn.hutool.core.lang.Assert;
  5 +import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
  6 +import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
5 import cn.iocoder.yudao.module.promotion.api.point.PointActivityApi; 7 import cn.iocoder.yudao.module.promotion.api.point.PointActivityApi;
6 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; 8 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
7 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO; 9 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;
@@ -13,6 +15,9 @@ import org.springframework.stereotype.Component; @@ -13,6 +15,9 @@ import org.springframework.stereotype.Component;
13 import java.util.List; 15 import java.util.List;
14 import java.util.Objects; 16 import java.util.Objects;
15 17
  18 +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
  19 +import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.ORDER_CREATE_FAIL_INSUFFICIENT_USER_POINTS;
  20 +
16 /** 21 /**
17 * 积分商城活动订单的 {@link TradeOrderHandler} 实现类 22 * 积分商城活动订单的 {@link TradeOrderHandler} 实现类
18 * 23 *
@@ -23,6 +28,8 @@ public class TradePointOrderHandler implements TradeOrderHandler { @@ -23,6 +28,8 @@ public class TradePointOrderHandler implements TradeOrderHandler {
23 28
24 @Resource 29 @Resource
25 private PointActivityApi pointActivityApi; 30 private PointActivityApi pointActivityApi;
  31 + @Resource
  32 + private MemberUserApi memberUserApi;
26 33
27 @Override 34 @Override
28 public void beforeOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) { 35 public void beforeOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
@@ -31,6 +38,11 @@ public class TradePointOrderHandler implements TradeOrderHandler { @@ -31,6 +38,11 @@ public class TradePointOrderHandler implements TradeOrderHandler {
31 } 38 }
32 // 明确校验一下 39 // 明确校验一下
33 Assert.isTrue(orderItems.size() == 1, "积分商城活动兑换商品兑换时,只允许选择一个商品"); 40 Assert.isTrue(orderItems.size() == 1, "积分商城活动兑换商品兑换时,只允许选择一个商品");
  41 + // 校验用户剩余积分是否足够兑换商品
  42 + MemberUserRespDTO user = memberUserApi.getUser(order.getUserId());
  43 + if (user.getPoint() < order.getUsePoint()) {
  44 + throw exception(ORDER_CREATE_FAIL_INSUFFICIENT_USER_POINTS);
  45 + }
34 46
35 // 扣减积分商城活动的库存 47 // 扣减积分商城活动的库存
36 pointActivityApi.updatePointStockDecr(order.getPointActivityId(), 48 pointActivityApi.updatePointStockDecr(order.getPointActivityId(),
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradePointActivityPriceCalculator.java
@@ -56,36 +56,36 @@ public class TradePointActivityPriceCalculator implements TradePriceCalculator { @@ -56,36 +56,36 @@ public class TradePointActivityPriceCalculator implements TradePriceCalculator {
56 Assert.isTrue(param.getItems().size() == 1, "积分商城兑换商品时,只允许选择一个商品"); 56 Assert.isTrue(param.getItems().size() == 1, "积分商城兑换商品时,只允许选择一个商品");
57 // 2. 校验是否可以参与积分商城活动 57 // 2. 校验是否可以参与积分商城活动
58 TradePriceCalculateRespBO.OrderItem orderItem = result.getItems().get(0); 58 TradePriceCalculateRespBO.OrderItem orderItem = result.getItems().get(0);
59 - PointValidateJoinRespDTO activity = validateJoinSeckill( 59 + PointValidateJoinRespDTO activity = validateJoinPointActivity(
60 param.getUserId(), param.getPointActivityId(), 60 param.getUserId(), param.getPointActivityId(),
61 orderItem.getSkuId(), orderItem.getCount()); 61 orderItem.getSkuId(), orderItem.getCount());
62 62
  63 + // 3.0 积分兑换前置校验
  64 + Assert.isTrue(activity.getPoint() >= 1, "积分商城商品兑换积分必须大于 1");
63 // 3.1 记录优惠明细 65 // 3.1 记录优惠明细
  66 + int usePoint = activity.getPoint() * orderItem.getCount();
  67 + result.setUsePoint(usePoint);
  68 + orderItem.setUsePoint(usePoint);
64 int discountPrice = orderItem.getPayPrice(); // 情况一:单使用积分兑换 69 int discountPrice = orderItem.getPayPrice(); // 情况一:单使用积分兑换
65 - Assert.isTrue(activity.getPoint() >= 1, "积分商城商品兑换积分必须大于 1");  
66 - result.setUsePoint(activity.getPoint() * orderItem.getCount());  
67 - orderItem.setUsePoint(activity.getPoint() * orderItem.getCount());  
68 if (activity.getPrice() != null && activity.getPrice() > 0) { // 情况二:积分 + 金额 70 if (activity.getPrice() != null && activity.getPrice() > 0) { // 情况二:积分 + 金额
69 discountPrice = orderItem.getPayPrice() - activity.getPrice() * orderItem.getCount(); 71 discountPrice = orderItem.getPayPrice() - activity.getPrice() * orderItem.getCount();
70 } 72 }
71 - // 3.2 记录优惠明细  
72 TradePriceCalculatorHelper.addPromotion(result, orderItem, 73 TradePriceCalculatorHelper.addPromotion(result, orderItem,
73 param.getPointActivityId(), "积分商城活动", PromotionTypeEnum.POINT.getType(), 74 param.getPointActivityId(), "积分商城活动", PromotionTypeEnum.POINT.getType(),
74 StrUtil.format("积分商城活动:省 {} 元", TradePriceCalculatorHelper.formatPrice(discountPrice)), 75 StrUtil.format("积分商城活动:省 {} 元", TradePriceCalculatorHelper.formatPrice(discountPrice)),
75 discountPrice); 76 discountPrice);
76 -  
77 - // 3.3 更新 SKU 优惠金额 77 + // 3.2 更新 SKU 优惠金额
78 orderItem.setDiscountPrice(orderItem.getDiscountPrice() + discountPrice); 78 orderItem.setDiscountPrice(orderItem.getDiscountPrice() + discountPrice);
79 TradePriceCalculatorHelper.recountPayPrice(orderItem); 79 TradePriceCalculatorHelper.recountPayPrice(orderItem);
80 TradePriceCalculatorHelper.recountAllPrice(result); 80 TradePriceCalculatorHelper.recountAllPrice(result);
81 } 81 }
82 82
83 - private PointValidateJoinRespDTO validateJoinSeckill(Long userId, Long activityId, Long skuId, Integer count) { 83 + private PointValidateJoinRespDTO validateJoinPointActivity(Long userId, Long activityId, Long skuId, Integer count) {
84 // 1. 校验是否可以参与积分商城活动 84 // 1. 校验是否可以参与积分商城活动
85 PointValidateJoinRespDTO pointValidateJoinRespDTO = pointActivityApi.validateJoinPointActivity(activityId, skuId, count); 85 PointValidateJoinRespDTO pointValidateJoinRespDTO = pointActivityApi.validateJoinPointActivity(activityId, skuId, count);
86 // 2. 校验总限购数量,目前只有 trade 有具体下单的数据,需要交给 trade 价格计算使用 86 // 2. 校验总限购数量,目前只有 trade 有具体下单的数据,需要交给 trade 价格计算使用
87 - int activityProductCount = tradeOrderQueryService.getSeckillProductCount(userId, activityId);  
88 - if (activityProductCount + count > pointValidateJoinRespDTO.getCount()) { 87 + int pointProductCount = tradeOrderQueryService.getActivityProductCount(userId, activityId, TradeOrderTypeEnum.POINT);
  88 + if (pointProductCount + count > pointValidateJoinRespDTO.getCount()) {
89 throw exception(PRICE_CALCULATE_POINT_TOTAL_LIMIT_COUNT); 89 throw exception(PRICE_CALCULATE_POINT_TOTAL_LIMIT_COUNT);
90 } 90 }
91 return pointValidateJoinRespDTO; 91 return pointValidateJoinRespDTO;
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeSeckillActivityPriceCalculator.java
@@ -5,6 +5,7 @@ import cn.hutool.core.util.StrUtil; @@ -5,6 +5,7 @@ import cn.hutool.core.util.StrUtil;
5 import cn.iocoder.yudao.module.promotion.api.seckill.SeckillActivityApi; 5 import cn.iocoder.yudao.module.promotion.api.seckill.SeckillActivityApi;
6 import cn.iocoder.yudao.module.promotion.api.seckill.dto.SeckillValidateJoinRespDTO; 6 import cn.iocoder.yudao.module.promotion.api.seckill.dto.SeckillValidateJoinRespDTO;
7 import cn.iocoder.yudao.module.promotion.enums.common.PromotionTypeEnum; 7 import cn.iocoder.yudao.module.promotion.enums.common.PromotionTypeEnum;
  8 +import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum;
8 import cn.iocoder.yudao.module.trade.service.order.TradeOrderQueryService; 9 import cn.iocoder.yudao.module.trade.service.order.TradeOrderQueryService;
9 import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO; 10 import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO;
10 import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO; 11 import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO;
@@ -60,7 +61,7 @@ public class TradeSeckillActivityPriceCalculator implements TradePriceCalculator @@ -60,7 +61,7 @@ public class TradeSeckillActivityPriceCalculator implements TradePriceCalculator
60 // 1. 校验是否可以参与秒杀 61 // 1. 校验是否可以参与秒杀
61 SeckillValidateJoinRespDTO seckillActivity = seckillActivityApi.validateJoinSeckill(activityId, skuId, count); 62 SeckillValidateJoinRespDTO seckillActivity = seckillActivityApi.validateJoinSeckill(activityId, skuId, count);
62 // 2. 校验总限购数量,目前只有 trade 有具体下单的数据,需要交给 trade 价格计算使用 63 // 2. 校验总限购数量,目前只有 trade 有具体下单的数据,需要交给 trade 价格计算使用
63 - int seckillProductCount = tradeOrderQueryService.getSeckillProductCount(userId, activityId); 64 + int seckillProductCount = tradeOrderQueryService.getActivityProductCount(userId, activityId, TradeOrderTypeEnum.SECKILL);
64 if (seckillProductCount + count > seckillActivity.getTotalLimitCount()) { 65 if (seckillProductCount + count > seckillActivity.getTotalLimitCount()) {
65 throw exception(PRICE_CALCULATE_SECKILL_TOTAL_LIMIT_COUNT); 66 throw exception(PRICE_CALCULATE_SECKILL_TOTAL_LIMIT_COUNT);
66 } 67 }