mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-04 20:28:44 +08:00 
			
		
		
		
	【代码优化】商城: 满减送活动
This commit is contained in:
		@@ -95,8 +95,10 @@ public class RewardActivityMatchRespDTO {
 | 
			
		||||
         *
 | 
			
		||||
         * key: 优惠劵模版编号
 | 
			
		||||
         * value:对应的优惠券数量
 | 
			
		||||
         *
 | 
			
		||||
         * 目的:用于订单支付后赠送优惠券
 | 
			
		||||
         */
 | 
			
		||||
        private Map<Long, Integer> giveCoupons;
 | 
			
		||||
        private Map<Long, Integer> giveCouponTemplateCounts;
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -80,7 +80,7 @@ public class RewardActivityBaseVO {
 | 
			
		||||
        private Integer point;
 | 
			
		||||
 | 
			
		||||
        @Schema(description = "赠送的优惠劵编号的数组")
 | 
			
		||||
        private Map<Long, Integer> giveCoupons;
 | 
			
		||||
        private Map<Long, Integer> giveCouponTemplateCounts;
 | 
			
		||||
 | 
			
		||||
        @AssertTrue(message = "赠送的积分不能小于 0")
 | 
			
		||||
        @JsonIgnore
 | 
			
		||||
 
 | 
			
		||||
@@ -107,9 +107,12 @@ public class RewardActivityDO extends BaseDO {
 | 
			
		||||
        /**
 | 
			
		||||
         * 赠送的优惠劵
 | 
			
		||||
         *
 | 
			
		||||
         *  key: 优惠劵模版编号,value:对应的数量
 | 
			
		||||
         * key: 优惠劵模版编号
 | 
			
		||||
         * value:对应的优惠券数量
 | 
			
		||||
         *
 | 
			
		||||
         * 目的:用于订单支付后赠送优惠券
 | 
			
		||||
         */
 | 
			
		||||
        private Map<Long, Integer> giveCoupons;
 | 
			
		||||
        private Map<Long, Integer> giveCouponTemplateCounts;
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -296,7 +296,6 @@ public class TradeOrderDO extends BaseDO {
 | 
			
		||||
     */
 | 
			
		||||
    private Integer vipPrice;
 | 
			
		||||
 | 
			
		||||
    // TODO @puhui999:我们要不要把相关的字段,定义的更明确一点?例如说,giveCouponTemplateCounts 赠送的优惠劵模版数量,或者 giveCouponCounts 赠送的优惠劵数量。感受上,Coupons 和 Map 有点点重叠哈。
 | 
			
		||||
    /**
 | 
			
		||||
     * 赠送的优惠劵
 | 
			
		||||
     *
 | 
			
		||||
@@ -306,7 +305,7 @@ public class TradeOrderDO extends BaseDO {
 | 
			
		||||
     * 目的:用于订单支付后赠送优惠券
 | 
			
		||||
     */
 | 
			
		||||
    @TableField(typeHandler = JacksonTypeHandler.class)
 | 
			
		||||
    private Map<Long, Integer> giveCouponsMap;
 | 
			
		||||
    private Map<Long, Integer> giveCouponTemplateCounts;
 | 
			
		||||
    /**
 | 
			
		||||
     * 赠送的优惠劵编号
 | 
			
		||||
     *
 | 
			
		||||
 
 | 
			
		||||
@@ -202,7 +202,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
 | 
			
		||||
        order.setProductCount(getSumValue(calculateRespBO.getItems(), TradePriceCalculateRespBO.OrderItem::getCount, Integer::sum));
 | 
			
		||||
        order.setUserIp(getClientIP()).setTerminal(getTerminal());
 | 
			
		||||
        // 使用 + 赠送优惠券
 | 
			
		||||
        order.setGiveCouponsMap(calculateRespBO.getGiveCoupons());
 | 
			
		||||
        order.setGiveCouponTemplateCounts(calculateRespBO.getGiveCouponTemplateCounts());
 | 
			
		||||
        // 支付 + 退款信息
 | 
			
		||||
        order.setAdjustPrice(0).setPayStatus(false);
 | 
			
		||||
        order.setRefundStatus(TradeOrderRefundStatusEnum.NONE.getStatus()).setRefundPrice(0);
 | 
			
		||||
 
 | 
			
		||||
@@ -42,11 +42,11 @@ public class TradeCouponOrderHandler implements TradeOrderHandler {
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void afterPayOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
 | 
			
		||||
        if (CollUtil.isEmpty(order.getGiveCouponsMap())) {
 | 
			
		||||
        if (CollUtil.isEmpty(order.getGiveCouponTemplateCounts())) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        // 赠送优惠券
 | 
			
		||||
        List<Long> couponIds = couponApi.takeCouponsByAdmin(order.getGiveCouponsMap(), order.getUserId());
 | 
			
		||||
        List<Long> couponIds = couponApi.takeCouponsByAdmin(order.getGiveCouponTemplateCounts(), order.getUserId());
 | 
			
		||||
        if (CollUtil.isEmpty(couponIds)) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -76,10 +76,12 @@ public class TradePriceCalculateRespBO {
 | 
			
		||||
    /**
 | 
			
		||||
     * 赠送的优惠劵
 | 
			
		||||
     *
 | 
			
		||||
     *  key: 优惠劵编号,value:对应的优惠券数量
 | 
			
		||||
     * 目的:用于后续取消或者售后订单时,需要扣减赠送
 | 
			
		||||
     * key: 优惠劵模版编号
 | 
			
		||||
     * value:对应的优惠券数量
 | 
			
		||||
     *
 | 
			
		||||
     * 目的:用于订单支付后赠送优惠券
 | 
			
		||||
     */
 | 
			
		||||
    private Map<Long, Integer> giveCoupons;
 | 
			
		||||
    private Map<Long, Integer> giveCouponTemplateCounts;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 订单价格
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,7 @@ public class TradePriceCalculatorHelper {
 | 
			
		||||
                                                               List<ProductSpuRespDTO> spuList, List<ProductSkuRespDTO> skuList) {
 | 
			
		||||
        // 创建 PriceCalculateRespDTO 对象
 | 
			
		||||
        TradePriceCalculateRespBO result = new TradePriceCalculateRespBO();
 | 
			
		||||
        result.setType(getOrderType(param)).setPromotions(new ArrayList<>()).setGiveCoupons(new LinkedHashMap<>());
 | 
			
		||||
        result.setType(getOrderType(param)).setPromotions(new ArrayList<>()).setGiveCouponTemplateCounts(new LinkedHashMap<>());
 | 
			
		||||
 | 
			
		||||
        // 创建它的 OrderItem 属性
 | 
			
		||||
        result.setItems(new ArrayList<>(param.getItems().size()));
 | 
			
		||||
 
 | 
			
		||||
@@ -107,13 +107,13 @@ public class TradeRewardActivityPriceCalculator implements TradePriceCalculator
 | 
			
		||||
            result.setFreeDelivery(true);
 | 
			
		||||
        }
 | 
			
		||||
        // 4.3 记录赠送的优惠券
 | 
			
		||||
        if (CollUtil.isNotEmpty(rule.getGiveCoupons())) {
 | 
			
		||||
            for (Map.Entry<Long, Integer> entry : rule.getGiveCoupons().entrySet()) {
 | 
			
		||||
                Map<Long, Integer> giveCoupons = result.getGiveCoupons();
 | 
			
		||||
                if (giveCoupons.get(entry.getKey()) == null) { // 情况一:还没有赠送的优惠券
 | 
			
		||||
                    result.setGiveCoupons(rule.getGiveCoupons());
 | 
			
		||||
        if (CollUtil.isNotEmpty(rule.getGiveCouponTemplateCounts())) {
 | 
			
		||||
            for (Map.Entry<Long, Integer> entry : rule.getGiveCouponTemplateCounts().entrySet()) {
 | 
			
		||||
                Map<Long, Integer> giveCouponTemplateCounts = result.getGiveCouponTemplateCounts();
 | 
			
		||||
                if (giveCouponTemplateCounts.get(entry.getKey()) == null) { // 情况一:还没有赠送的优惠券
 | 
			
		||||
                    result.setGiveCouponTemplateCounts(rule.getGiveCouponTemplateCounts());
 | 
			
		||||
                } else { // 情况二:别的满减活动送过同类优惠券,则直接增加数量
 | 
			
		||||
                    giveCoupons.put(entry.getKey(), giveCoupons.get(entry.getKey()) + entry.getValue());
 | 
			
		||||
                    giveCouponTemplateCounts.put(entry.getKey(), giveCouponTemplateCounts.get(entry.getKey()) + entry.getValue());
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -49,7 +49,7 @@ public class TradeRewardActivityPriceCalculatorTest extends BaseMockitoUnitTest
 | 
			
		||||
        TradePriceCalculateRespBO result = new TradePriceCalculateRespBO()
 | 
			
		||||
                .setType(TradeOrderTypeEnum.NORMAL.getType())
 | 
			
		||||
                .setPrice(new TradePriceCalculateRespBO.Price())
 | 
			
		||||
                .setPromotions(new ArrayList<>()).setGiveCoupons(new LinkedHashMap<>())
 | 
			
		||||
                .setPromotions(new ArrayList<>()).setGiveCouponTemplateCounts(new LinkedHashMap<>())
 | 
			
		||||
                .setItems(asList(
 | 
			
		||||
                        new TradePriceCalculateRespBO.OrderItem().setSkuId(10L).setCount(2).setSelected(true)
 | 
			
		||||
                                .setPrice(100).setSpuId(1L),
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user