Commit 9451342aae40c88c11a24b3238641a66535a1aac
1 parent
bf40767f
trade:营销商品(拼团、砍价)不能使用优惠劵
Showing
3 changed files
with
10 additions
and
6 deletions
yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/ErrorCodeConstants.java
| @@ -12,12 +12,6 @@ import cn.iocoder.yudao.framework.common.exception.ErrorCode; | @@ -12,12 +12,6 @@ import cn.iocoder.yudao.framework.common.exception.ErrorCode; | ||
| 12 | public interface ErrorCodeConstants { | 12 | public interface ErrorCodeConstants { |
| 13 | 13 | ||
| 14 | // ========== Order 模块 1011000000 ========== | 14 | // ========== Order 模块 1011000000 ========== |
| 15 | - ErrorCode ORDER_CREATE_SKU_NOT_FOUND = new ErrorCode(1011000001, "商品 SKU 不存在"); | ||
| 16 | - ErrorCode ORDER_CREATE_SPU_NOT_SALE = new ErrorCode(1011000002, "商品 SPU 不可售卖"); | ||
| 17 | - ErrorCode ORDER_CREATE_SKU_STOCK_NOT_ENOUGH = new ErrorCode(1011000004, "商品 SKU 库存不足"); | ||
| 18 | - ErrorCode ORDER_CREATE_SPU_NOT_FOUND = new ErrorCode(1011000005, "商品 SPU 不可售卖"); | ||
| 19 | - ErrorCode ORDER_CREATE_ADDRESS_NOT_FOUND = new ErrorCode(1011000006, "收货地址不存在"); | ||
| 20 | - | ||
| 21 | ErrorCode ORDER_ITEM_NOT_FOUND = new ErrorCode(1011000010, "交易订单项不存在"); | 15 | ErrorCode ORDER_ITEM_NOT_FOUND = new ErrorCode(1011000010, "交易订单项不存在"); |
| 22 | ErrorCode ORDER_NOT_FOUND = new ErrorCode(1011000011, "交易订单不存在"); | 16 | ErrorCode ORDER_NOT_FOUND = new ErrorCode(1011000011, "交易订单不存在"); |
| 23 | ErrorCode ORDER_ITEM_UPDATE_AFTER_SALE_STATUS_FAIL = new ErrorCode(1011000012, "交易订单项更新售后状态失败,请重试"); | 17 | ErrorCode ORDER_ITEM_UPDATE_AFTER_SALE_STATUS_FAIL = new ErrorCode(1011000012, "交易订单项更新售后状态失败,请重试"); |
| @@ -61,6 +55,7 @@ public interface ErrorCodeConstants { | @@ -61,6 +55,7 @@ public interface ErrorCodeConstants { | ||
| 61 | ErrorCode PRICE_CALCULATE_DELIVERY_PRICE_USER_ADDRESS_IS_EMPTY = new ErrorCode(1011003001, "计算快递运费异常,收件人地址编号为空"); | 55 | ErrorCode PRICE_CALCULATE_DELIVERY_PRICE_USER_ADDRESS_IS_EMPTY = new ErrorCode(1011003001, "计算快递运费异常,收件人地址编号为空"); |
| 62 | ErrorCode PRICE_CALCULATE_DELIVERY_PRICE_TEMPLATE_NOT_FOUND = new ErrorCode(1011003002, "计算快递运费异常,找不到对应的运费模板"); | 56 | ErrorCode PRICE_CALCULATE_DELIVERY_PRICE_TEMPLATE_NOT_FOUND = new ErrorCode(1011003002, "计算快递运费异常,找不到对应的运费模板"); |
| 63 | ErrorCode PRICE_CALCULATE_DELIVERY_PRICE_PICK_UP_STORE_IS_EMPTY = new ErrorCode(1011003003, "计算快递运费异常,自提点为空"); | 57 | ErrorCode PRICE_CALCULATE_DELIVERY_PRICE_PICK_UP_STORE_IS_EMPTY = new ErrorCode(1011003003, "计算快递运费异常,自提点为空"); |
| 58 | + ErrorCode PRICE_CALCULATE_COUPON_NOT_MATCH_NORMAL_ORDER = new ErrorCode(1011003004, "参与秒杀、拼团、砍价的营销商品,无法使用优惠劵"); | ||
| 64 | 59 | ||
| 65 | // ========== 物流 Express 模块 1011004000 ========== | 60 | // ========== 物流 Express 模块 1011004000 ========== |
| 66 | ErrorCode EXPRESS_NOT_EXISTS = new ErrorCode(1011004000, "快递公司不存在"); | 61 | ErrorCode EXPRESS_NOT_EXISTS = new ErrorCode(1011004000, "快递公司不存在"); |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeCouponPriceCalculator.java
| @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.trade.service.price.calculator; | @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.trade.service.price.calculator; | ||
| 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.hutool.core.util.ObjectUtil; | ||
| 5 | import cn.hutool.core.util.StrUtil; | 6 | import cn.hutool.core.util.StrUtil; |
| 6 | import cn.iocoder.yudao.module.promotion.api.coupon.CouponApi; | 7 | import cn.iocoder.yudao.module.promotion.api.coupon.CouponApi; |
| 7 | import cn.iocoder.yudao.module.promotion.api.coupon.dto.CouponRespDTO; | 8 | import cn.iocoder.yudao.module.promotion.api.coupon.dto.CouponRespDTO; |
| @@ -9,6 +10,7 @@ import cn.iocoder.yudao.module.promotion.api.coupon.dto.CouponValidReqDTO; | @@ -9,6 +10,7 @@ import cn.iocoder.yudao.module.promotion.api.coupon.dto.CouponValidReqDTO; | ||
| 9 | import cn.iocoder.yudao.module.promotion.enums.common.PromotionDiscountTypeEnum; | 10 | import cn.iocoder.yudao.module.promotion.enums.common.PromotionDiscountTypeEnum; |
| 10 | import cn.iocoder.yudao.module.promotion.enums.common.PromotionProductScopeEnum; | 11 | import cn.iocoder.yudao.module.promotion.enums.common.PromotionProductScopeEnum; |
| 11 | import cn.iocoder.yudao.module.promotion.enums.common.PromotionTypeEnum; | 12 | import cn.iocoder.yudao.module.promotion.enums.common.PromotionTypeEnum; |
| 13 | +import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum; | ||
| 12 | import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO; | 14 | import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO; |
| 13 | import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO; | 15 | import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO; |
| 14 | import org.springframework.core.annotation.Order; | 16 | import org.springframework.core.annotation.Order; |
| @@ -22,6 +24,7 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU | @@ -22,6 +24,7 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU | ||
| 22 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.filterList; | 24 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.filterList; |
| 23 | import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.COUPON_NO_MATCH_MIN_PRICE; | 25 | import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.COUPON_NO_MATCH_MIN_PRICE; |
| 24 | import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.COUPON_NO_MATCH_SPU; | 26 | import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.COUPON_NO_MATCH_SPU; |
| 27 | +import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.PRICE_CALCULATE_COUPON_NOT_MATCH_NORMAL_ORDER; | ||
| 25 | 28 | ||
| 26 | /** | 29 | /** |
| 27 | * 优惠劵的 {@link TradePriceCalculator} 实现类 | 30 | * 优惠劵的 {@link TradePriceCalculator} 实现类 |
| @@ -44,6 +47,10 @@ public class TradeCouponPriceCalculator implements TradePriceCalculator { | @@ -44,6 +47,10 @@ public class TradeCouponPriceCalculator implements TradePriceCalculator { | ||
| 44 | CouponRespDTO coupon = couponApi.validateCoupon(new CouponValidReqDTO() | 47 | CouponRespDTO coupon = couponApi.validateCoupon(new CouponValidReqDTO() |
| 45 | .setId(param.getCouponId()).setUserId(param.getUserId())); | 48 | .setId(param.getCouponId()).setUserId(param.getUserId())); |
| 46 | Assert.notNull(coupon, "校验通过的优惠劵({}),不能为空", param.getCouponId()); | 49 | Assert.notNull(coupon, "校验通过的优惠劵({}),不能为空", param.getCouponId()); |
| 50 | + // 1.2 只有【普通】订单,才允许使用优惠劵 | ||
| 51 | + if (ObjectUtil.notEqual(result.getType(), TradeOrderTypeEnum.NORMAL.getType())) { | ||
| 52 | + throw exception(PRICE_CALCULATE_COUPON_NOT_MATCH_NORMAL_ORDER); | ||
| 53 | + } | ||
| 47 | 54 | ||
| 48 | // 2.1 获得匹配的商品 SKU 数组 | 55 | // 2.1 获得匹配的商品 SKU 数组 |
| 49 | List<TradePriceCalculateRespBO.OrderItem> orderItems = filterMatchCouponOrderItems(result, coupon); | 56 | List<TradePriceCalculateRespBO.OrderItem> orderItems = filterMatchCouponOrderItems(result, coupon); |
yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeCouponPriceCalculatorTest.java
| @@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.promotion.api.coupon.dto.CouponValidReqDTO; | @@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.promotion.api.coupon.dto.CouponValidReqDTO; | ||
| 7 | import cn.iocoder.yudao.module.promotion.enums.common.PromotionDiscountTypeEnum; | 7 | import cn.iocoder.yudao.module.promotion.enums.common.PromotionDiscountTypeEnum; |
| 8 | import cn.iocoder.yudao.module.promotion.enums.common.PromotionProductScopeEnum; | 8 | import cn.iocoder.yudao.module.promotion.enums.common.PromotionProductScopeEnum; |
| 9 | import cn.iocoder.yudao.module.promotion.enums.common.PromotionTypeEnum; | 9 | import cn.iocoder.yudao.module.promotion.enums.common.PromotionTypeEnum; |
| 10 | +import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum; | ||
| 10 | import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO; | 11 | import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO; |
| 11 | import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO; | 12 | import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO; |
| 12 | import org.junit.jupiter.api.Test; | 13 | import org.junit.jupiter.api.Test; |
| @@ -47,6 +48,7 @@ public class TradeCouponPriceCalculatorTest extends BaseMockitoUnitTest { | @@ -47,6 +48,7 @@ public class TradeCouponPriceCalculatorTest extends BaseMockitoUnitTest { | ||
| 47 | new TradePriceCalculateReqBO.Item().setSkuId(40L).setCount(5).setSelected(false) // 匹配优惠劵,但是未选中 | 48 | new TradePriceCalculateReqBO.Item().setSkuId(40L).setCount(5).setSelected(false) // 匹配优惠劵,但是未选中 |
| 48 | )); | 49 | )); |
| 49 | TradePriceCalculateRespBO result = new TradePriceCalculateRespBO() | 50 | TradePriceCalculateRespBO result = new TradePriceCalculateRespBO() |
| 51 | + .setType(TradeOrderTypeEnum.NORMAL.getType()) | ||
| 50 | .setPrice(new TradePriceCalculateRespBO.Price()) | 52 | .setPrice(new TradePriceCalculateRespBO.Price()) |
| 51 | .setPromotions(new ArrayList<>()) | 53 | .setPromotions(new ArrayList<>()) |
| 52 | .setItems(asList( | 54 | .setItems(asList( |