Commit 53e789dfdcfe27c7cf43d96f194e2237d6dea22f
1 parent
aa5525d1
trade:订单表,增加 vip 优惠字段
Showing
14 changed files
with
297 additions
and
4 deletions
yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/common/PromotionTypeEnum.java
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/order/TradeOrderConvert.java
| ... | ... | @@ -65,6 +65,7 @@ public interface TradeOrderConvert { |
| 65 | 65 | @Mapping(source = "calculateRespBO.price.deliveryPrice", target = "deliveryPrice"), |
| 66 | 66 | @Mapping(source = "calculateRespBO.price.couponPrice", target = "couponPrice"), |
| 67 | 67 | @Mapping(source = "calculateRespBO.price.pointPrice", target = "pointPrice"), |
| 68 | + @Mapping(source = "calculateRespBO.price.vipPrice", target = "vipPrice"), | |
| 68 | 69 | @Mapping(source = "calculateRespBO.price.payPrice", target = "payPrice") |
| 69 | 70 | }) |
| 70 | 71 | TradeOrderDO convert(Long userId, String userIp, AppTradeOrderCreateReqVO createReqVO, | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/order/TradeOrderDO.java
| ... | ... | @@ -168,6 +168,7 @@ public class TradeOrderDO extends BaseDO { |
| 168 | 168 | * - {@link #discountPrice} |
| 169 | 169 | * + {@link #deliveryPrice} |
| 170 | 170 | * + {@link #adjustPrice} |
| 171 | + * - {@link #vipPrice} | |
| 171 | 172 | */ |
| 172 | 173 | private Integer payPrice; |
| 173 | 174 | |
| ... | ... | @@ -269,5 +270,9 @@ public class TradeOrderDO extends BaseDO { |
| 269 | 270 | // * 奖励的积分 TODO 疯狂:可以使用这个字段哈; |
| 270 | 271 | // */ |
| 271 | 272 | // private Integer rewardPoint; |
| 273 | + /** | |
| 274 | + * VIP 减免金额,单位:分 | |
| 275 | + */ | |
| 276 | + private Integer vipPrice; | |
| 272 | 277 | |
| 273 | 278 | } | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/dataobject/order/TradeOrderItemDO.java
| ... | ... | @@ -126,6 +126,7 @@ public class TradeOrderItemDO extends BaseDO { |
| 126 | 126 | * - {@link #discountPrice} |
| 127 | 127 | * + {@link #deliveryPrice} |
| 128 | 128 | * + {@link #adjustPrice} |
| 129 | + * - {@link #vipPrice} | |
| 129 | 130 | */ |
| 130 | 131 | private Integer payPrice; |
| 131 | 132 | |
| ... | ... | @@ -143,6 +144,10 @@ public class TradeOrderItemDO extends BaseDO { |
| 143 | 144 | * 对应 taobao 的 trade.point_fee 字段 |
| 144 | 145 | */ |
| 145 | 146 | private Integer pointPrice; |
| 147 | + /** | |
| 148 | + * VIP 减免金额,单位:分 | |
| 149 | + */ | |
| 150 | + private Integer vipPrice; | |
| 146 | 151 | // TODO @芋艿:如果商品 vip 折扣时,到底是新增一个 vipPrice 记录优惠记录,还是 vipDiscountPrice,记录 vip 的优惠;还是直接使用 vipPrice; |
| 147 | 152 | // 目前 crmeb 的选择,单独一个 vipPrice 记录优惠价格;感觉不一定合理,可以在看看有赞的; |
| 148 | 153 | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/bo/TradePriceCalculateRespBO.java
| ... | ... | @@ -90,6 +90,10 @@ public class TradePriceCalculateRespBO { |
| 90 | 90 | */ |
| 91 | 91 | private Integer pointPrice; |
| 92 | 92 | /** |
| 93 | + * VIP 减免金额,单位:分 | |
| 94 | + */ | |
| 95 | + private Integer vipPrice; | |
| 96 | + /** | |
| 93 | 97 | * 最终购买金额(总),单位:分 |
| 94 | 98 | * |
| 95 | 99 | * = {@link #totalPrice} |
| ... | ... | @@ -97,6 +101,7 @@ public class TradePriceCalculateRespBO { |
| 97 | 101 | * - {@link #pointPrice} |
| 98 | 102 | * - {@link #discountPrice} |
| 99 | 103 | * + {@link #deliveryPrice} |
| 104 | + * - {@link #vipPrice} | |
| 100 | 105 | */ |
| 101 | 106 | private Integer payPrice; |
| 102 | 107 | |
| ... | ... | @@ -159,6 +164,10 @@ public class TradePriceCalculateRespBO { |
| 159 | 164 | */ |
| 160 | 165 | private Integer pointPrice; |
| 161 | 166 | /** |
| 167 | + * VIP 减免金额,单位:分 | |
| 168 | + */ | |
| 169 | + private Integer vipPrice; | |
| 170 | + /** | |
| 162 | 171 | * 应付金额(总),单位:分 |
| 163 | 172 | * |
| 164 | 173 | * = {@link #price} * {@link #count} |
| ... | ... | @@ -166,6 +175,7 @@ public class TradePriceCalculateRespBO { |
| 166 | 175 | * - {@link #pointPrice} |
| 167 | 176 | * - {@link #discountPrice} |
| 168 | 177 | * + {@link #deliveryPrice} |
| 178 | + * - {@link #vipPrice} | |
| 169 | 179 | */ |
| 170 | 180 | private Integer payPrice; |
| 171 | 181 | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeMemberLevelPriceCalculator.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.trade.service.price.calculator; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.module.member.api.level.MemberLevelApi; | |
| 4 | +import cn.iocoder.yudao.module.member.api.level.dto.MemberLevelRespDTO; | |
| 5 | +import cn.iocoder.yudao.module.member.api.user.MemberUserApi; | |
| 6 | +import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; | |
| 7 | +import cn.iocoder.yudao.module.promotion.enums.common.PromotionTypeEnum; | |
| 8 | +import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO; | |
| 9 | +import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO; | |
| 10 | +import org.springframework.core.annotation.Order; | |
| 11 | +import org.springframework.stereotype.Component; | |
| 12 | + | |
| 13 | +import javax.annotation.Resource; | |
| 14 | + | |
| 15 | +import static cn.iocoder.yudao.module.trade.service.price.calculator.TradePriceCalculatorHelper.formatPrice; | |
| 16 | + | |
| 17 | +/** | |
| 18 | + * 会员 VIP 折扣的 {@link TradePriceCalculator} 实现类 | |
| 19 | + * | |
| 20 | + * @author 芋道源码 | |
| 21 | + */ | |
| 22 | +@Component | |
| 23 | +@Order(TradePriceCalculator.ORDER_MEMBER_LEVEL) | |
| 24 | +public class TradeMemberLevelPriceCalculator implements TradePriceCalculator { | |
| 25 | + | |
| 26 | + @Resource | |
| 27 | + private MemberLevelApi memberLevelApi; | |
| 28 | + @Resource | |
| 29 | + private MemberUserApi memberUserApi; | |
| 30 | + | |
| 31 | + @Override | |
| 32 | + public void calculate(TradePriceCalculateReqBO param, TradePriceCalculateRespBO result) { | |
| 33 | + // 1. 获得用户的会员等级 | |
| 34 | + MemberUserRespDTO user = memberUserApi.getUser(param.getUserId()); | |
| 35 | + if (user.getLevelId() == null || user.getLevelId() <= 0) { | |
| 36 | + return; | |
| 37 | + } | |
| 38 | + MemberLevelRespDTO level = memberLevelApi.getMemberLevel(user.getLevelId()); | |
| 39 | + if (level == null || level.getDiscountPercent() == null) { | |
| 40 | + return; | |
| 41 | + } | |
| 42 | + | |
| 43 | + // 2. 计算每个 SKU 的优惠金额 | |
| 44 | + result.getItems().forEach(orderItem -> { | |
| 45 | + // 2.1 计算优惠金额 | |
| 46 | + Integer vipPrice = calculateVipPrice(orderItem.getPayPrice(), level.getDiscountPercent()); | |
| 47 | + if (vipPrice <= 0) { | |
| 48 | + return; | |
| 49 | + } | |
| 50 | + | |
| 51 | + // 2.2 记录优惠明细 | |
| 52 | + if (orderItem.getSelected()) { | |
| 53 | + // 注意,只有在选中的情况下,才会记录到优惠明细。否则仅仅是更新 SKU 优惠金额,用于展示 | |
| 54 | + TradePriceCalculatorHelper.addPromotion(result, orderItem, | |
| 55 | + level.getId(), level.getName(), PromotionTypeEnum.MEMBER_LEVEL.getType(), | |
| 56 | + String.format("会员等级折扣:省 %s 元", formatPrice(vipPrice)), | |
| 57 | + vipPrice); | |
| 58 | + } | |
| 59 | + | |
| 60 | + // 2.3 更新 SKU 的优惠金额 | |
| 61 | + orderItem.setVipPrice(vipPrice); | |
| 62 | + TradePriceCalculatorHelper.recountPayPrice(orderItem); | |
| 63 | + }); | |
| 64 | + TradePriceCalculatorHelper.recountAllPrice(result); | |
| 65 | + } | |
| 66 | + | |
| 67 | + /** | |
| 68 | + * 计算会员 VIP 优惠价格 | |
| 69 | + * | |
| 70 | + * @param price 原价 | |
| 71 | + * @param discountPercent 折扣 | |
| 72 | + * @return 优惠价格 | |
| 73 | + */ | |
| 74 | + public Integer calculateVipPrice(Integer price, Integer discountPercent) { | |
| 75 | + if (discountPercent == null) { | |
| 76 | + return 0; | |
| 77 | + } | |
| 78 | + Integer newPrice = price * discountPercent / 100; | |
| 79 | + return price - newPrice; | |
| 80 | + } | |
| 81 | + | |
| 82 | +} | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradePriceCalculator.java
| ... | ... | @@ -13,6 +13,7 @@ import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO; |
| 13 | 13 | */ |
| 14 | 14 | public interface TradePriceCalculator { |
| 15 | 15 | |
| 16 | + int ORDER_MEMBER_LEVEL = 5; | |
| 16 | 17 | int ORDER_DISCOUNT_ACTIVITY = 10; |
| 17 | 18 | int ORDER_REWARD_ACTIVITY = 20; |
| 18 | 19 | int ORDER_COUPON = 30; | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradePriceCalculatorHelper.java
| ... | ... | @@ -52,7 +52,7 @@ public class TradePriceCalculatorHelper { |
| 52 | 52 | .setCount(item.getCount()).setCartId(item.getCartId()).setSelected(item.getSelected()); |
| 53 | 53 | // sku 价格 |
| 54 | 54 | orderItem.setPrice(sku.getPrice()).setPayPrice(sku.getPrice() * item.getCount()) |
| 55 | - .setDiscountPrice(0).setDeliveryPrice(0).setCouponPrice(0).setPointPrice(0); | |
| 55 | + .setDiscountPrice(0).setDeliveryPrice(0).setCouponPrice(0).setPointPrice(0).setVipPrice(0); | |
| 56 | 56 | // sku 信息 |
| 57 | 57 | orderItem.setPicUrl(sku.getPicUrl()).setProperties(sku.getProperties()) |
| 58 | 58 | .setWeight(sku.getWeight()).setVolume(sku.getVolume()); |
| ... | ... | @@ -96,7 +96,7 @@ public class TradePriceCalculatorHelper { |
| 96 | 96 | // 先重置 |
| 97 | 97 | TradePriceCalculateRespBO.Price price = result.getPrice(); |
| 98 | 98 | price.setTotalPrice(0).setDiscountPrice(0).setDeliveryPrice(0) |
| 99 | - .setCouponPrice(0).setPointPrice(0).setPayPrice(0); | |
| 99 | + .setCouponPrice(0).setPointPrice(0).setVipPrice(0).setPayPrice(0); | |
| 100 | 100 | // 再合计 item |
| 101 | 101 | result.getItems().forEach(item -> { |
| 102 | 102 | if (!item.getSelected()) { |
| ... | ... | @@ -107,6 +107,7 @@ public class TradePriceCalculatorHelper { |
| 107 | 107 | price.setDeliveryPrice(price.getDeliveryPrice() + item.getDeliveryPrice()); |
| 108 | 108 | price.setCouponPrice(price.getCouponPrice() + item.getCouponPrice()); |
| 109 | 109 | price.setPointPrice(price.getPointPrice() + item.getPointPrice()); |
| 110 | + price.setVipPrice(price.getVipPrice() + item.getVipPrice()); | |
| 110 | 111 | price.setPayPrice(price.getPayPrice() + item.getPayPrice()); |
| 111 | 112 | }); |
| 112 | 113 | } |
| ... | ... | @@ -121,7 +122,9 @@ public class TradePriceCalculatorHelper { |
| 121 | 122 | - orderItem.getDiscountPrice() |
| 122 | 123 | + orderItem.getDeliveryPrice() |
| 123 | 124 | - orderItem.getCouponPrice() |
| 124 | - - orderItem.getPointPrice()); | |
| 125 | + - orderItem.getPointPrice() | |
| 126 | + - orderItem.getVipPrice() | |
| 127 | + ); | |
| 125 | 128 | } |
| 126 | 129 | |
| 127 | 130 | /** |
| ... | ... | @@ -145,6 +148,9 @@ public class TradePriceCalculatorHelper { |
| 145 | 148 | if (orderItem.getPointPrice() == null) { |
| 146 | 149 | orderItem.setPointPrice(0); |
| 147 | 150 | } |
| 151 | + if (orderItem.getVipPrice() == null) { | |
| 152 | + orderItem.setVipPrice(0); | |
| 153 | + } | |
| 148 | 154 | recountPayPrice(orderItem); |
| 149 | 155 | }); |
| 150 | 156 | } | ... | ... |
yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/price/calculator/TradeMemberLevelPriceCalculatorTest.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.trade.service.price.calculator; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; | |
| 4 | +import cn.iocoder.yudao.module.member.api.level.MemberLevelApi; | |
| 5 | +import cn.iocoder.yudao.module.member.api.level.dto.MemberLevelRespDTO; | |
| 6 | +import cn.iocoder.yudao.module.member.api.user.MemberUserApi; | |
| 7 | +import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; | |
| 8 | +import cn.iocoder.yudao.module.promotion.enums.common.PromotionTypeEnum; | |
| 9 | +import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateReqBO; | |
| 10 | +import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO; | |
| 11 | +import org.junit.jupiter.api.Test; | |
| 12 | +import org.mockito.InjectMocks; | |
| 13 | +import org.mockito.Mock; | |
| 14 | + | |
| 15 | +import java.util.ArrayList; | |
| 16 | + | |
| 17 | +import static java.util.Arrays.asList; | |
| 18 | +import static org.junit.jupiter.api.Assertions.*; | |
| 19 | +import static org.mockito.ArgumentMatchers.eq; | |
| 20 | +import static org.mockito.Mockito.when; | |
| 21 | + | |
| 22 | +/** | |
| 23 | + * {@link TradeMemberLevelPriceCalculator} 的单元测试类 | |
| 24 | + * | |
| 25 | + * @author 芋道源码 | |
| 26 | + */ | |
| 27 | +public class TradeMemberLevelPriceCalculatorTest extends BaseMockitoUnitTest { | |
| 28 | + | |
| 29 | + @InjectMocks | |
| 30 | + private TradeMemberLevelPriceCalculator memberLevelPriceCalculator; | |
| 31 | + | |
| 32 | + @Mock | |
| 33 | + private MemberLevelApi memberLevelApi; | |
| 34 | + @Mock | |
| 35 | + private MemberUserApi memberUserApi; | |
| 36 | + | |
| 37 | + @Test | |
| 38 | + public void testCalculate() { | |
| 39 | + // 准备参数 | |
| 40 | + TradePriceCalculateReqBO param = new TradePriceCalculateReqBO() | |
| 41 | + .setUserId(1024L) | |
| 42 | + .setItems(asList( | |
| 43 | + new TradePriceCalculateReqBO.Item().setSkuId(10L).setCount(2).setSelected(true), // 匹配活动,且已选中 | |
| 44 | + new TradePriceCalculateReqBO.Item().setSkuId(20L).setCount(3).setSelected(false) // 匹配活动,但未选中 | |
| 45 | + )); | |
| 46 | + TradePriceCalculateRespBO result = new TradePriceCalculateRespBO() | |
| 47 | + .setPrice(new TradePriceCalculateRespBO.Price()) | |
| 48 | + .setPromotions(new ArrayList<>()) | |
| 49 | + .setItems(asList( | |
| 50 | + new TradePriceCalculateRespBO.OrderItem().setSkuId(10L).setCount(2).setSelected(true) | |
| 51 | + .setPrice(100), | |
| 52 | + new TradePriceCalculateRespBO.OrderItem().setSkuId(20L).setCount(3).setSelected(false) | |
| 53 | + .setPrice(50) | |
| 54 | + )); | |
| 55 | + // 保证价格被初始化上 | |
| 56 | + TradePriceCalculatorHelper.recountPayPrice(result.getItems()); | |
| 57 | + TradePriceCalculatorHelper.recountAllPrice(result); | |
| 58 | + | |
| 59 | + // mock 方法(会员等级) | |
| 60 | + when(memberUserApi.getUser(eq(1024L))).thenReturn(new MemberUserRespDTO().setLevelId(2048L)); | |
| 61 | + when(memberLevelApi.getMemberLevel(eq(2048L))).thenReturn( | |
| 62 | + new MemberLevelRespDTO().setId(2048L).setName("VIP 会员").setDiscountPercent(60)); | |
| 63 | + | |
| 64 | + // 调用 | |
| 65 | + memberLevelPriceCalculator.calculate(param, result); | |
| 66 | + // 断言:Price 部分 | |
| 67 | + TradePriceCalculateRespBO.Price price = result.getPrice(); | |
| 68 | + assertEquals(price.getTotalPrice(), 200); | |
| 69 | + assertEquals(price.getDiscountPrice(), 0); | |
| 70 | + assertEquals(price.getPointPrice(), 0); | |
| 71 | + assertEquals(price.getDeliveryPrice(), 0); | |
| 72 | + assertEquals(price.getCouponPrice(), 0); | |
| 73 | + assertEquals(price.getVipPrice(), 80); | |
| 74 | + assertEquals(price.getPayPrice(), 120); | |
| 75 | + assertNull(result.getCouponId()); | |
| 76 | + // 断言:SKU 1 | |
| 77 | + assertEquals(result.getItems().size(), 2); | |
| 78 | + TradePriceCalculateRespBO.OrderItem orderItem01 = result.getItems().get(0); | |
| 79 | + assertEquals(orderItem01.getSkuId(), 10L); | |
| 80 | + assertEquals(orderItem01.getCount(), 2); | |
| 81 | + assertEquals(orderItem01.getPrice(), 100); | |
| 82 | + assertEquals(orderItem01.getDiscountPrice(), 0); | |
| 83 | + assertEquals(orderItem01.getDeliveryPrice(), 0); | |
| 84 | + assertEquals(orderItem01.getCouponPrice(), 0); | |
| 85 | + assertEquals(orderItem01.getPointPrice(), 0); | |
| 86 | + assertEquals(orderItem01.getVipPrice(), 80); | |
| 87 | + assertEquals(orderItem01.getPayPrice(), 120); | |
| 88 | + // 断言:SKU 2 | |
| 89 | + TradePriceCalculateRespBO.OrderItem orderItem02 = result.getItems().get(1); | |
| 90 | + assertEquals(orderItem02.getSkuId(), 20L); | |
| 91 | + assertEquals(orderItem02.getCount(), 3); | |
| 92 | + assertEquals(orderItem02.getPrice(), 50); | |
| 93 | + assertEquals(orderItem02.getDiscountPrice(), 0); | |
| 94 | + assertEquals(orderItem02.getDeliveryPrice(), 0); | |
| 95 | + assertEquals(orderItem02.getCouponPrice(), 0); | |
| 96 | + assertEquals(orderItem02.getPointPrice(), 0); | |
| 97 | + assertEquals(orderItem02.getVipPrice(), 60); | |
| 98 | + assertEquals(orderItem02.getPayPrice(), 90); | |
| 99 | + // 断言:Promotion 部分 | |
| 100 | + assertEquals(result.getPromotions().size(), 1); | |
| 101 | + TradePriceCalculateRespBO.Promotion promotion01 = result.getPromotions().get(0); | |
| 102 | + assertEquals(promotion01.getId(), 2048L); | |
| 103 | + assertEquals(promotion01.getName(), "VIP 会员"); | |
| 104 | + assertEquals(promotion01.getType(), PromotionTypeEnum.MEMBER_LEVEL.getType()); | |
| 105 | + assertEquals(promotion01.getTotalPrice(), 200); | |
| 106 | + assertEquals(promotion01.getDiscountPrice(), 80); | |
| 107 | + assertTrue(promotion01.getMatch()); | |
| 108 | + assertEquals(promotion01.getDescription(), "会员等级折扣:省 0.80 元"); | |
| 109 | + TradePriceCalculateRespBO.PromotionItem promotionItem01 = promotion01.getItems().get(0); | |
| 110 | + assertEquals(promotion01.getItems().size(), 1); | |
| 111 | + assertEquals(promotionItem01.getSkuId(), 10L); | |
| 112 | + assertEquals(promotionItem01.getTotalPrice(), 200); | |
| 113 | + assertEquals(promotionItem01.getDiscountPrice(), 80); | |
| 114 | + } | |
| 115 | + | |
| 116 | +} | ... | ... |
yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/level/MemberLevelApi.java
| 1 | 1 | package cn.iocoder.yudao.module.member.api.level; |
| 2 | 2 | |
| 3 | +import cn.iocoder.yudao.module.member.api.level.dto.MemberLevelRespDTO; | |
| 3 | 4 | import cn.iocoder.yudao.module.member.enums.MemberExperienceBizTypeEnum; |
| 4 | 5 | |
| 5 | 6 | /** |
| ... | ... | @@ -10,6 +11,14 @@ import cn.iocoder.yudao.module.member.enums.MemberExperienceBizTypeEnum; |
| 10 | 11 | public interface MemberLevelApi { |
| 11 | 12 | |
| 12 | 13 | /** |
| 14 | + * 获得会员等级 | |
| 15 | + * | |
| 16 | + * @param id 会员等级编号 | |
| 17 | + * @return 会员等级 | |
| 18 | + */ | |
| 19 | + MemberLevelRespDTO getMemberLevel(Long id); | |
| 20 | + | |
| 21 | + /** | |
| 13 | 22 | * 增加会员经验 |
| 14 | 23 | * |
| 15 | 24 | * @param userId 会员ID | ... | ... |
yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/level/dto/MemberLevelRespDTO.java
0 → 100644
| 1 | +package cn.iocoder.yudao.module.member.api.level.dto; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | |
| 4 | +import lombok.Data; | |
| 5 | + | |
| 6 | +/** | |
| 7 | + * 会员等级 Resp DTO | |
| 8 | + * | |
| 9 | + * @author 芋道源码 | |
| 10 | + */ | |
| 11 | +@Data | |
| 12 | +public class MemberLevelRespDTO { | |
| 13 | + | |
| 14 | + /** | |
| 15 | + * 编号 | |
| 16 | + */ | |
| 17 | + private Long id; | |
| 18 | + /** | |
| 19 | + * 等级名称 | |
| 20 | + */ | |
| 21 | + private String name; | |
| 22 | + /** | |
| 23 | + * 等级 | |
| 24 | + */ | |
| 25 | + private Integer level; | |
| 26 | + /** | |
| 27 | + * 升级经验 | |
| 28 | + */ | |
| 29 | + private Integer experience; | |
| 30 | + /** | |
| 31 | + * 享受折扣 | |
| 32 | + */ | |
| 33 | + private Integer discountPercent; | |
| 34 | + /** | |
| 35 | + * 状态 | |
| 36 | + * | |
| 37 | + * 枚举 {@link CommonStatusEnum} | |
| 38 | + */ | |
| 39 | + private Integer status; | |
| 40 | + | |
| 41 | +} | ... | ... |
yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/user/dto/MemberUserRespDTO.java
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/api/level/MemberLevelApiImpl.java
| 1 | 1 | package cn.iocoder.yudao.module.member.api.level; |
| 2 | 2 | |
| 3 | +import cn.iocoder.yudao.module.member.api.level.dto.MemberLevelRespDTO; | |
| 4 | +import cn.iocoder.yudao.module.member.convert.level.MemberLevelConvert; | |
| 3 | 5 | import cn.iocoder.yudao.module.member.enums.MemberExperienceBizTypeEnum; |
| 4 | 6 | import cn.iocoder.yudao.module.member.service.level.MemberLevelService; |
| 5 | 7 | import org.springframework.stereotype.Service; |
| ... | ... | @@ -23,6 +25,11 @@ public class MemberLevelApiImpl implements MemberLevelApi { |
| 23 | 25 | private MemberLevelService memberLevelService; |
| 24 | 26 | |
| 25 | 27 | @Override |
| 28 | + public MemberLevelRespDTO getMemberLevel(Long id) { | |
| 29 | + return MemberLevelConvert.INSTANCE.convert02(memberLevelService.getLevel(id)); | |
| 30 | + } | |
| 31 | + | |
| 32 | + @Override | |
| 26 | 33 | public void addExperience(Long userId, Integer experience, Integer bizType, String bizId) { |
| 27 | 34 | MemberExperienceBizTypeEnum bizTypeEnum = MemberExperienceBizTypeEnum.getByType(bizType); |
| 28 | 35 | if (bizTypeEnum == null) { | ... | ... |
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/level/MemberLevelConvert.java
| 1 | 1 | package cn.iocoder.yudao.module.member.convert.level; |
| 2 | 2 | |
| 3 | +import cn.iocoder.yudao.module.member.api.level.dto.MemberLevelRespDTO; | |
| 3 | 4 | import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelCreateReqVO; |
| 4 | 5 | import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelRespVO; |
| 5 | 6 | import cn.iocoder.yudao.module.member.controller.admin.level.vo.level.MemberLevelSimpleRespVO; |
| ... | ... | @@ -33,4 +34,6 @@ public interface MemberLevelConvert { |
| 33 | 34 | |
| 34 | 35 | List<AppMemberLevelRespVO> convertList02(List<MemberLevelDO> list); |
| 35 | 36 | |
| 37 | + MemberLevelRespDTO convert02(MemberLevelDO bean); | |
| 38 | + | |
| 36 | 39 | } | ... | ... |