Commit b4587fd79e5f58cfe52544c87f4146d9c2fdb235
1 parent
53e789df
product:订单表,增加 vip 优惠字段
Showing
17 changed files
with
103 additions
and
33 deletions
yudao-module-mall/yudao-module-product-biz/pom.xml
| ... | ... | @@ -23,12 +23,6 @@ |
| 23 | 23 | <artifactId>yudao-module-product-api</artifactId> |
| 24 | 24 | <version>${revision}</version> |
| 25 | 25 | </dependency> |
| 26 | - <!-- TODO 芋艿:看看~~~ --> | |
| 27 | - <dependency> | |
| 28 | - <groupId>cn.iocoder.boot</groupId> | |
| 29 | - <artifactId>yudao-module-trade-api</artifactId> | |
| 30 | - <version>${revision}</version> | |
| 31 | - </dependency> | |
| 32 | 26 | <dependency> |
| 33 | 27 | <groupId>cn.iocoder.boot</groupId> |
| 34 | 28 | <artifactId>yudao-module-member-api</artifactId> | ... | ... |
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/api/property/ProductPropertyValueApiImpl.java
| 1 | 1 | package cn.iocoder.yudao.module.product.api.property; |
| 2 | 2 | |
| 3 | 3 | import cn.iocoder.yudao.module.product.api.property.dto.ProductPropertyValueDetailRespDTO; |
| 4 | -import cn.iocoder.yudao.module.product.convert.propertyvalue.ProductPropertyValueConvert; | |
| 4 | +import cn.iocoder.yudao.module.product.convert.property.ProductPropertyValueConvert; | |
| 5 | 5 | import cn.iocoder.yudao.module.product.service.property.ProductPropertyValueService; |
| 6 | 6 | import org.springframework.stereotype.Service; |
| 7 | 7 | import org.springframework.validation.annotation.Validated; | ... | ... |
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/property/ProductPropertyValueController.java
| 1 | 1 | package cn.iocoder.yudao.module.product.controller.admin.property; |
| 2 | 2 | |
| 3 | -import cn.hutool.core.collection.CollectionUtil; | |
| 4 | -import cn.hutool.crypto.symmetric.AES; | |
| 5 | 3 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 6 | 4 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 7 | 5 | import cn.iocoder.yudao.module.product.controller.admin.property.vo.value.ProductPropertyValueCreateReqVO; |
| 8 | 6 | import cn.iocoder.yudao.module.product.controller.admin.property.vo.value.ProductPropertyValuePageReqVO; |
| 9 | 7 | import cn.iocoder.yudao.module.product.controller.admin.property.vo.value.ProductPropertyValueRespVO; |
| 10 | 8 | import cn.iocoder.yudao.module.product.controller.admin.property.vo.value.ProductPropertyValueUpdateReqVO; |
| 11 | -import cn.iocoder.yudao.module.product.convert.propertyvalue.ProductPropertyValueConvert; | |
| 9 | +import cn.iocoder.yudao.module.product.convert.property.ProductPropertyValueConvert; | |
| 12 | 10 | import cn.iocoder.yudao.module.product.service.property.ProductPropertyValueService; |
| 13 | 11 | import io.swagger.v3.oas.annotations.Operation; |
| 14 | 12 | import io.swagger.v3.oas.annotations.Parameter; |
| ... | ... | @@ -20,9 +18,6 @@ import org.springframework.web.bind.annotation.*; |
| 20 | 18 | import javax.annotation.Resource; |
| 21 | 19 | import javax.validation.Valid; |
| 22 | 20 | |
| 23 | -import java.util.Arrays; | |
| 24 | -import java.util.List; | |
| 25 | - | |
| 26 | 21 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| 27 | 22 | |
| 28 | 23 | @Tag(name = "管理后台 - 商品属性值") | ... | ... |
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/spu/AppProductSpuController.java
| 1 | 1 | package cn.iocoder.yudao.module.product.controller.app.spu; |
| 2 | 2 | |
| 3 | +import cn.hutool.core.collection.CollUtil; | |
| 3 | 4 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 4 | 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 6 | +import cn.iocoder.yudao.module.member.api.level.MemberLevelApi; | |
| 7 | +import cn.iocoder.yudao.module.member.api.level.dto.MemberLevelRespDTO; | |
| 8 | +import cn.iocoder.yudao.module.member.api.user.MemberUserApi; | |
| 9 | +import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; | |
| 5 | 10 | import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppProductSpuDetailRespVO; |
| 6 | -import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppProductSpuPageRespVO; | |
| 7 | 11 | import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppProductSpuPageReqVO; |
| 12 | +import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppProductSpuPageRespVO; | |
| 8 | 13 | import cn.iocoder.yudao.module.product.convert.spu.ProductSpuConvert; |
| 9 | 14 | import cn.iocoder.yudao.module.product.dal.dataobject.sku.ProductSkuDO; |
| 10 | 15 | import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuDO; |
| ... | ... | @@ -23,10 +28,12 @@ import org.springframework.web.bind.annotation.RestController; |
| 23 | 28 | |
| 24 | 29 | import javax.annotation.Resource; |
| 25 | 30 | import javax.validation.Valid; |
| 31 | +import java.util.Collections; | |
| 26 | 32 | import java.util.List; |
| 27 | 33 | |
| 28 | 34 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| 29 | 35 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| 36 | +import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; | |
| 30 | 37 | import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SPU_NOT_ENABLE; |
| 31 | 38 | import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.SPU_NOT_EXISTS; |
| 32 | 39 | |
| ... | ... | @@ -41,6 +48,11 @@ public class AppProductSpuController { |
| 41 | 48 | @Resource |
| 42 | 49 | private ProductSkuService productSkuService; |
| 43 | 50 | |
| 51 | + @Resource | |
| 52 | + private MemberLevelApi memberLevelApi; | |
| 53 | + @Resource | |
| 54 | + private MemberUserApi memberUserApi; | |
| 55 | + | |
| 44 | 56 | @GetMapping("/list") |
| 45 | 57 | @Operation(summary = "获得商品 SPU 列表") |
| 46 | 58 | @Parameters({ |
| ... | ... | @@ -51,14 +63,32 @@ public class AppProductSpuController { |
| 51 | 63 | @RequestParam("recommendType") String recommendType, |
| 52 | 64 | @RequestParam(value = "count", defaultValue = "10") Integer count) { |
| 53 | 65 | List<ProductSpuDO> list = productSpuService.getSpuList(recommendType, count); |
| 54 | - return success(ProductSpuConvert.INSTANCE.convertListForGetSpuList(list)); | |
| 66 | + if (CollUtil.isEmpty(list)) { | |
| 67 | + return success(Collections.emptyList()); | |
| 68 | + } | |
| 69 | + | |
| 70 | + // 拼接返回 | |
| 71 | + List<AppProductSpuPageRespVO> voList = ProductSpuConvert.INSTANCE.convertListForGetSpuList(list); | |
| 72 | + // 处理 vip 价格 | |
| 73 | + MemberLevelRespDTO memberLevel = getMemberLevel(); | |
| 74 | + voList.forEach(vo -> vo.setVipPrice(calculateVipPrice(vo.getPrice(), memberLevel))); | |
| 75 | + return success(voList); | |
| 55 | 76 | } |
| 56 | 77 | |
| 57 | 78 | @GetMapping("/page") |
| 58 | 79 | @Operation(summary = "获得商品 SPU 分页") |
| 59 | 80 | public CommonResult<PageResult<AppProductSpuPageRespVO>> getSpuPage(@Valid AppProductSpuPageReqVO pageVO) { |
| 60 | 81 | PageResult<ProductSpuDO> pageResult = productSpuService.getSpuPage(pageVO); |
| 61 | - return success(ProductSpuConvert.INSTANCE.convertPageForGetSpuPage(pageResult)); | |
| 82 | + if (CollUtil.isEmpty(pageResult.getList())) { | |
| 83 | + return success(PageResult.empty(pageResult.getTotal())); | |
| 84 | + } | |
| 85 | + | |
| 86 | + // 拼接返回 | |
| 87 | + PageResult<AppProductSpuPageRespVO> voPageResult = ProductSpuConvert.INSTANCE.convertPageForGetSpuPage(pageResult); | |
| 88 | + // 处理 vip 价格 | |
| 89 | + MemberLevelRespDTO memberLevel = getMemberLevel(); | |
| 90 | + voPageResult.getList().forEach(vo -> vo.setVipPrice(calculateVipPrice(vo.getPrice(), memberLevel))); | |
| 91 | + return success(voPageResult); | |
| 62 | 92 | } |
| 63 | 93 | |
| 64 | 94 | @GetMapping("/get-detail") |
| ... | ... | @@ -74,10 +104,40 @@ public class AppProductSpuController { |
| 74 | 104 | throw exception(SPU_NOT_ENABLE); |
| 75 | 105 | } |
| 76 | 106 | |
| 77 | - // 查询商品 SKU | |
| 107 | + // 拼接返回 | |
| 78 | 108 | List<ProductSkuDO> skus = productSkuService.getSkuListBySpuId(spu.getId()); |
| 79 | - // 拼接 | |
| 80 | - return success(ProductSpuConvert.INSTANCE.convertForGetSpuDetail(spu, skus)); | |
| 109 | + AppProductSpuDetailRespVO detailVO = ProductSpuConvert.INSTANCE.convertForGetSpuDetail(spu, skus); | |
| 110 | + // 处理 vip 价格 | |
| 111 | + MemberLevelRespDTO memberLevel = getMemberLevel(); | |
| 112 | + detailVO.setVipPrice(calculateVipPrice(detailVO.getPrice(), memberLevel)); | |
| 113 | + return success(detailVO); | |
| 114 | + } | |
| 115 | + | |
| 116 | + private MemberLevelRespDTO getMemberLevel() { | |
| 117 | + Long userId = getLoginUserId(); | |
| 118 | + if (userId == null) { | |
| 119 | + return null; | |
| 120 | + } | |
| 121 | + MemberUserRespDTO user = memberUserApi.getUser(userId); | |
| 122 | + if (user.getLevelId() == null || user.getLevelId() <= 0) { | |
| 123 | + return null; | |
| 124 | + } | |
| 125 | + return memberLevelApi.getMemberLevel(user.getLevelId()); | |
| 126 | + } | |
| 127 | + | |
| 128 | + /** | |
| 129 | + * 计算会员 VIP 优惠价格 | |
| 130 | + * | |
| 131 | + * @param price 原价 | |
| 132 | + * @param memberLevel 会员等级 | |
| 133 | + * @return 优惠价格 | |
| 134 | + */ | |
| 135 | + public Integer calculateVipPrice(Integer price, MemberLevelRespDTO memberLevel) { | |
| 136 | + if (memberLevel == null || memberLevel.getDiscountPercent() == null) { | |
| 137 | + return 0; | |
| 138 | + } | |
| 139 | + Integer newPrice = price * memberLevel.getDiscountPercent() / 100; | |
| 140 | + return price - newPrice; | |
| 81 | 141 | } |
| 82 | 142 | |
| 83 | 143 | } | ... | ... |
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/convert/propertyvalue/ProductPropertyValueConvert.java renamed to yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/convert/property/ProductPropertyValueConvert.java
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/convert/spu/ProductSpuConvert.java
| ... | ... | @@ -79,8 +79,6 @@ public interface ProductSpuConvert { |
| 79 | 79 | ProductSpuDO spu = list.get(i); |
| 80 | 80 | AppProductSpuPageRespVO spuVO = voList.get(i); |
| 81 | 81 | spuVO.setUnitName(DictFrameworkUtils.getDictDataLabel(DictTypeConstants.PRODUCT_UNIT, spu.getUnit())); |
| 82 | - // 计算 vip 价格 TODO 芋艿:临时的逻辑,等 vip 支持后 | |
| 83 | - spuVO.setVipPrice((int) (spuVO.getPrice() * 0.9)); | |
| 84 | 82 | } |
| 85 | 83 | return voList; |
| 86 | 84 | } |
| ... | ... | @@ -95,11 +93,6 @@ public interface ProductSpuConvert { |
| 95 | 93 | .setUnitName(DictFrameworkUtils.getDictDataLabel(DictTypeConstants.PRODUCT_UNIT, spu.getUnit())); |
| 96 | 94 | // 处理 SKU |
| 97 | 95 | spuVO.setSkus(convertListForGetSpuDetail(skus)); |
| 98 | - // 计算 vip 价格 TODO 芋艿:临时的逻辑,等 vip 支持后 | |
| 99 | - if (true) { | |
| 100 | - spuVO.setVipPrice((int) (spuVO.getPrice() * 0.9)); | |
| 101 | - spuVO.getSkus().forEach(sku -> sku.setVipPrice((int) (sku.getPrice() * 0.9))); | |
| 102 | - } | |
| 103 | 96 | return spuVO; |
| 104 | 97 | } |
| 105 | 98 | ... | ... |
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/package-info.java
yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/property/ProductPropertyValueServiceImpl.java
| ... | ... | @@ -5,7 +5,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 5 | 5 | import cn.iocoder.yudao.module.product.controller.admin.property.vo.value.ProductPropertyValueCreateReqVO; |
| 6 | 6 | import cn.iocoder.yudao.module.product.controller.admin.property.vo.value.ProductPropertyValuePageReqVO; |
| 7 | 7 | import cn.iocoder.yudao.module.product.controller.admin.property.vo.value.ProductPropertyValueUpdateReqVO; |
| 8 | -import cn.iocoder.yudao.module.product.convert.propertyvalue.ProductPropertyValueConvert; | |
| 8 | +import cn.iocoder.yudao.module.product.convert.property.ProductPropertyValueConvert; | |
| 9 | 9 | import cn.iocoder.yudao.module.product.dal.dataobject.property.ProductPropertyDO; |
| 10 | 10 | import cn.iocoder.yudao.module.product.dal.dataobject.property.ProductPropertyValueDO; |
| 11 | 11 | import cn.iocoder.yudao.module.product.dal.mysql.property.ProductPropertyValueMapper; | ... | ... |
yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/ErrorCodeConstants.java
| ... | ... | @@ -53,9 +53,7 @@ public interface ErrorCodeConstants { |
| 53 | 53 | |
| 54 | 54 | // ========== Price 相关 1011003000 ============ |
| 55 | 55 | ErrorCode PRICE_CALCULATE_PAY_PRICE_ILLEGAL = new ErrorCode(1011003000, "支付价格计算异常,原因:价格小于等于 0"); |
| 56 | - ErrorCode PRICE_CALCULATE_DELIVERY_PRICE_USER_ADDRESS_IS_EMPTY = new ErrorCode(1011003001, "计算快递运费异常,收件人地址编号为空"); | |
| 57 | 56 | ErrorCode PRICE_CALCULATE_DELIVERY_PRICE_TEMPLATE_NOT_FOUND = new ErrorCode(1011003002, "计算快递运费异常,找不到对应的运费模板"); |
| 58 | - ErrorCode PRICE_CALCULATE_DELIVERY_PRICE_PICK_UP_STORE_IS_EMPTY = new ErrorCode(1011003003, "计算快递运费异常,自提点为空"); | |
| 59 | 57 | ErrorCode PRICE_CALCULATE_COUPON_NOT_MATCH_NORMAL_ORDER = new ErrorCode(1011003004, "参与秒杀、拼团、砍价的营销商品,无法使用优惠劵"); |
| 60 | 58 | |
| 61 | 59 | // ========== 物流 Express 模块 1011004000 ========== | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderSettlementRespVO.java
| ... | ... | @@ -82,6 +82,9 @@ public class AppTradeOrderSettlementRespVO { |
| 82 | 82 | @Schema(description = "积分抵扣的金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "50") |
| 83 | 83 | private Integer pointPrice; |
| 84 | 84 | |
| 85 | + @Schema(description = "VIP 减免金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "30") | |
| 86 | + private Integer vipPrice; | |
| 87 | + | |
| 85 | 88 | @Schema(description = "实际支付金额(总),单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "450") |
| 86 | 89 | private Integer payPrice; |
| 87 | 90 | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeDeliveryPriceCalculator.java
| ... | ... | @@ -64,7 +64,8 @@ public class TradeDeliveryPriceCalculator implements TradePriceCalculator { |
| 64 | 64 | |
| 65 | 65 | private void calculateByPickUp(TradePriceCalculateReqBO param) { |
| 66 | 66 | if (param.getPickUpStoreId() == null) { |
| 67 | - throw exception(PRICE_CALCULATE_DELIVERY_PRICE_PICK_UP_STORE_IS_EMPTY); | |
| 67 | + // 价格计算时,如果为空就不算~最终下单,会校验该字段不允许空 | |
| 68 | + return; | |
| 68 | 69 | } |
| 69 | 70 | DeliveryPickUpStoreDO pickUpStore = deliveryPickUpStoreService.getDeliveryPickUpStore(param.getPickUpStoreId()); |
| 70 | 71 | if (pickUpStore == null || CommonStatusEnum.DISABLE.getStatus().equals(pickUpStore.getStatus())) { |
| ... | ... | @@ -77,7 +78,8 @@ public class TradeDeliveryPriceCalculator implements TradePriceCalculator { |
| 77 | 78 | private void calculateExpress(TradePriceCalculateReqBO param, TradePriceCalculateRespBO result) { |
| 78 | 79 | // 0. 得到收件地址区域 |
| 79 | 80 | if (param.getAddressId() == null) { |
| 80 | - throw exception(PRICE_CALCULATE_DELIVERY_PRICE_USER_ADDRESS_IS_EMPTY); | |
| 81 | + // 价格计算时,如果为空就不算~最终下单,会校验该字段不允许空 | |
| 82 | + return; | |
| 81 | 83 | } |
| 82 | 84 | AddressRespDTO address = addressApi.getAddress(param.getAddressId(), param.getUserId()); |
| 83 | 85 | Assert.notNull(address, "收件人({})的地址,不能为空", param.getUserId()); | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeDiscountActivityPriceCalculator.java
| 1 | 1 | package cn.iocoder.yudao.module.trade.service.price.calculator; |
| 2 | 2 | |
| 3 | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | +import cn.hutool.core.util.ObjectUtil; | |
| 4 | 5 | import cn.hutool.core.util.StrUtil; |
| 5 | 6 | import cn.iocoder.yudao.module.promotion.api.discount.DiscountActivityApi; |
| 6 | 7 | import cn.iocoder.yudao.module.promotion.api.discount.dto.DiscountProductRespDTO; |
| 7 | 8 | import cn.iocoder.yudao.module.promotion.enums.common.PromotionDiscountTypeEnum; |
| 8 | 9 | import cn.iocoder.yudao.module.promotion.enums.common.PromotionTypeEnum; |
| 10 | +import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum; | |
| 9 | 11 | import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO; |
| 10 | 12 | import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO; |
| 11 | 13 | import org.springframework.core.annotation.Order; |
| ... | ... | @@ -33,6 +35,10 @@ public class TradeDiscountActivityPriceCalculator implements TradePriceCalculato |
| 33 | 35 | |
| 34 | 36 | @Override |
| 35 | 37 | public void calculate(TradePriceCalculateReqBO param, TradePriceCalculateRespBO result) { |
| 38 | + // 0. 只有【普通】订单,才计算该优惠 | |
| 39 | + if (ObjectUtil.notEqual(result.getType(), TradeOrderTypeEnum.NORMAL.getType())) { | |
| 40 | + return; | |
| 41 | + } | |
| 36 | 42 | // 获得 SKU 对应的限时折扣活动 |
| 37 | 43 | List<DiscountProductRespDTO> discountProducts = discountActivityApi.getMatchDiscountProductList( |
| 38 | 44 | convertSet(result.getItems(), TradePriceCalculateRespBO.OrderItem::getSkuId)); | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeMemberLevelPriceCalculator.java
| 1 | 1 | package cn.iocoder.yudao.module.trade.service.price.calculator; |
| 2 | 2 | |
| 3 | +import cn.hutool.core.util.ObjectUtil; | |
| 3 | 4 | import cn.iocoder.yudao.module.member.api.level.MemberLevelApi; |
| 4 | 5 | import cn.iocoder.yudao.module.member.api.level.dto.MemberLevelRespDTO; |
| 5 | 6 | import cn.iocoder.yudao.module.member.api.user.MemberUserApi; |
| 6 | 7 | import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; |
| 7 | 8 | import cn.iocoder.yudao.module.promotion.enums.common.PromotionTypeEnum; |
| 9 | +import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum; | |
| 8 | 10 | import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO; |
| 9 | 11 | import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO; |
| 10 | 12 | import org.springframework.core.annotation.Order; |
| ... | ... | @@ -30,6 +32,10 @@ public class TradeMemberLevelPriceCalculator implements TradePriceCalculator { |
| 30 | 32 | |
| 31 | 33 | @Override |
| 32 | 34 | public void calculate(TradePriceCalculateReqBO param, TradePriceCalculateRespBO result) { |
| 35 | + // 0. 只有【普通】订单,才计算该优惠 | |
| 36 | + if (ObjectUtil.notEqual(result.getType(), TradeOrderTypeEnum.NORMAL.getType())) { | |
| 37 | + return; | |
| 38 | + } | |
| 33 | 39 | // 1. 获得用户的会员等级 |
| 34 | 40 | MemberUserRespDTO user = memberUserApi.getUser(param.getUserId()); |
| 35 | 41 | if (user.getLevelId() == null || user.getLevelId() <= 0) { | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeRewardActivityPriceCalculator.java
| 1 | 1 | package cn.iocoder.yudao.module.trade.service.price.calculator; |
| 2 | 2 | |
| 3 | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | +import cn.hutool.core.util.ObjectUtil; | |
| 4 | 5 | import cn.hutool.core.util.StrUtil; |
| 5 | 6 | import cn.iocoder.yudao.module.promotion.api.reward.RewardActivityApi; |
| 6 | 7 | import cn.iocoder.yudao.module.promotion.api.reward.dto.RewardActivityMatchRespDTO; |
| 7 | 8 | import cn.iocoder.yudao.module.promotion.enums.common.PromotionConditionTypeEnum; |
| 8 | 9 | import cn.iocoder.yudao.module.promotion.enums.common.PromotionTypeEnum; |
| 10 | +import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum; | |
| 9 | 11 | import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO; |
| 10 | 12 | import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO; |
| 11 | 13 | import org.springframework.core.annotation.Order; |
| ... | ... | @@ -32,6 +34,10 @@ public class TradeRewardActivityPriceCalculator implements TradePriceCalculator |
| 32 | 34 | |
| 33 | 35 | @Override |
| 34 | 36 | public void calculate(TradePriceCalculateReqBO param, TradePriceCalculateRespBO result) { |
| 37 | + // 0. 只有【普通】订单,才计算该优惠 | |
| 38 | + if (ObjectUtil.notEqual(result.getType(), TradeOrderTypeEnum.NORMAL.getType())) { | |
| 39 | + return; | |
| 40 | + } | |
| 35 | 41 | // 获得 SKU 对应的满减送活动 |
| 36 | 42 | List<RewardActivityMatchRespDTO> rewardActivities = rewardActivityApi.getMatchRewardActivityList( |
| 37 | 43 | convertSet(result.getItems(), TradePriceCalculateRespBO.OrderItem::getSpuId)); | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeDiscountActivityPriceCalculatorTest.java
| ... | ... | @@ -5,6 +5,7 @@ import cn.iocoder.yudao.module.promotion.api.discount.DiscountActivityApi; |
| 5 | 5 | import cn.iocoder.yudao.module.promotion.api.discount.dto.DiscountProductRespDTO; |
| 6 | 6 | import cn.iocoder.yudao.module.promotion.enums.common.PromotionDiscountTypeEnum; |
| 7 | 7 | import cn.iocoder.yudao.module.promotion.enums.common.PromotionTypeEnum; |
| 8 | +import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum; | |
| 8 | 9 | import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO; |
| 9 | 10 | import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO; |
| 10 | 11 | import org.junit.jupiter.api.Test; |
| ... | ... | @@ -42,6 +43,7 @@ public class TradeDiscountActivityPriceCalculatorTest extends BaseMockitoUnitTes |
| 42 | 43 | new TradePriceCalculateReqBO.Item().setSkuId(20L).setCount(3).setSelected(false) // 匹配活动,但未选中 |
| 43 | 44 | )); |
| 44 | 45 | TradePriceCalculateRespBO result = new TradePriceCalculateRespBO() |
| 46 | + .setType(TradeOrderTypeEnum.NORMAL.getType()) | |
| 45 | 47 | .setPrice(new TradePriceCalculateRespBO.Price()) |
| 46 | 48 | .setPromotions(new ArrayList<>()) |
| 47 | 49 | .setItems(asList( | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeMemberLevelPriceCalculatorTest.java
| ... | ... | @@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.member.api.level.dto.MemberLevelRespDTO; |
| 6 | 6 | import cn.iocoder.yudao.module.member.api.user.MemberUserApi; |
| 7 | 7 | import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; |
| 8 | 8 | import cn.iocoder.yudao.module.promotion.enums.common.PromotionTypeEnum; |
| 9 | +import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum; | |
| 9 | 10 | import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO; |
| 10 | 11 | import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO; |
| 11 | 12 | import org.junit.jupiter.api.Test; |
| ... | ... | @@ -44,6 +45,7 @@ public class TradeMemberLevelPriceCalculatorTest extends BaseMockitoUnitTest { |
| 44 | 45 | new TradePriceCalculateReqBO.Item().setSkuId(20L).setCount(3).setSelected(false) // 匹配活动,但未选中 |
| 45 | 46 | )); |
| 46 | 47 | TradePriceCalculateRespBO result = new TradePriceCalculateRespBO() |
| 48 | + .setType(TradeOrderTypeEnum.NORMAL.getType()) | |
| 47 | 49 | .setPrice(new TradePriceCalculateRespBO.Price()) |
| 48 | 50 | .setPromotions(new ArrayList<>()) |
| 49 | 51 | .setItems(asList( | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeRewardActivityPriceCalculatorTest.java
| ... | ... | @@ -5,6 +5,7 @@ import cn.iocoder.yudao.module.promotion.api.reward.RewardActivityApi; |
| 5 | 5 | import cn.iocoder.yudao.module.promotion.api.reward.dto.RewardActivityMatchRespDTO; |
| 6 | 6 | import cn.iocoder.yudao.module.promotion.enums.common.PromotionConditionTypeEnum; |
| 7 | 7 | import cn.iocoder.yudao.module.promotion.enums.common.PromotionTypeEnum; |
| 8 | +import cn.iocoder.yudao.module.trade.enums.order.TradeOrderTypeEnum; | |
| 8 | 9 | import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO; |
| 9 | 10 | import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO; |
| 10 | 11 | import org.junit.jupiter.api.Test; |
| ... | ... | @@ -44,6 +45,7 @@ public class TradeRewardActivityPriceCalculatorTest extends BaseMockitoUnitTest |
| 44 | 45 | new TradePriceCalculateReqBO.Item().setSkuId(30L).setCount(4).setSelected(true) // 匹配活动 2 |
| 45 | 46 | )); |
| 46 | 47 | TradePriceCalculateRespBO result = new TradePriceCalculateRespBO() |
| 48 | + .setType(TradeOrderTypeEnum.NORMAL.getType()) | |
| 47 | 49 | .setPrice(new TradePriceCalculateRespBO.Price()) |
| 48 | 50 | .setPromotions(new ArrayList<>()) |
| 49 | 51 | .setItems(asList( |
| ... | ... | @@ -157,6 +159,7 @@ public class TradeRewardActivityPriceCalculatorTest extends BaseMockitoUnitTest |
| 157 | 159 | new TradePriceCalculateReqBO.Item().setSkuId(30L).setCount(4).setSelected(true) |
| 158 | 160 | )); |
| 159 | 161 | TradePriceCalculateRespBO result = new TradePriceCalculateRespBO() |
| 162 | + .setType(TradeOrderTypeEnum.NORMAL.getType()) | |
| 160 | 163 | .setPrice(new TradePriceCalculateRespBO.Price()) |
| 161 | 164 | .setPromotions(new ArrayList<>()) |
| 162 | 165 | .setItems(asList( | ... | ... |