【代码优化】商城: 满减送活动

This commit is contained in:
puhui999 2024-09-02 17:20:41 +08:00
parent 1bf7fd39fc
commit 79cb96702a
10 changed files with 26 additions and 20 deletions

View File

@ -95,8 +95,10 @@ public class RewardActivityMatchRespDTO {
*
* key: 优惠劵模版编号
* value对应的优惠券数量
*
* 目的用于订单支付后赠送优惠券
*/
private Map<Long, Integer> giveCoupons;
private Map<Long, Integer> giveCouponTemplateCounts;
}

View File

@ -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

View File

@ -107,9 +107,12 @@ public class RewardActivityDO extends BaseDO {
/**
* 赠送的优惠劵
*
* key: 优惠劵模版编号value对应的数量
* key: 优惠劵模版编号
* value对应的优惠券数量
*
* 目的用于订单支付后赠送优惠券
*/
private Map<Long, Integer> giveCoupons;
private Map<Long, Integer> giveCouponTemplateCounts;
}

View File

@ -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;
/**
* 赠送的优惠劵编号
*

View File

@ -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);

View File

@ -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;
}

View File

@ -76,10 +76,12 @@ public class TradePriceCalculateRespBO {
/**
* 赠送的优惠劵
*
* key: 优惠劵编号value对应的优惠券数量
* 目的用于后续取消或者售后订单时需要扣减赠送
* key: 优惠劵模版编号
* value对应的优惠券数量
*
* 目的用于订单支付后赠送优惠券
*/
private Map<Long, Integer> giveCoupons;
private Map<Long, Integer> giveCouponTemplateCounts;
/**
* 订单价格

View File

@ -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()));

View File

@ -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());
}
}
}

View File

@ -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),