积分:Review代码修改

This commit is contained in:
owen 2023-09-26 23:54:43 +08:00
parent cd2d0b7089
commit 11ffa45b89
2 changed files with 18 additions and 24 deletions

View File

@ -56,7 +56,6 @@ public class TradePointGiveCalculator implements TradePriceCalculator {
TradePriceCalculateRespBO.OrderItem orderItem = orderItems.get(i); TradePriceCalculateRespBO.OrderItem orderItem = orderItems.get(i);
// 商品可能赠送了积分所以这里要加上 // 商品可能赠送了积分所以这里要加上
orderItem.setGivePoint(orderItem.getGivePoint() + dividePoints.get(i)); orderItem.setGivePoint(orderItem.getGivePoint() + dividePoints.get(i));
TradePriceCalculatorHelper.recountPayPrice(orderItem); // TODO @疯狂这个应该不用调用哇不影响支付金额
} }
// 3.3 更新订单赠送积分 // 3.3 更新订单赠送积分
TradePriceCalculatorHelper.recountAllGivePoint(result); TradePriceCalculatorHelper.recountAllGivePoint(result);

View File

@ -1,7 +1,6 @@
package cn.iocoder.yudao.module.trade.service.price.calculator; package cn.iocoder.yudao.module.trade.service.price.calculator;
import cn.hutool.core.util.BooleanUtil; import cn.hutool.core.util.BooleanUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.module.member.api.point.MemberPointApi; import cn.iocoder.yudao.module.member.api.point.MemberPointApi;
import cn.iocoder.yudao.module.member.api.point.dto.MemberPointConfigRespDTO; import cn.iocoder.yudao.module.member.api.point.dto.MemberPointConfigRespDTO;
@ -15,10 +14,11 @@ import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.RoundingMode;
import java.util.List; import java.util.List;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.filterList; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.filterList;
import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.PRICE_CALCULATE_PAY_PRICE_ILLEGAL;
// TODO @疯狂搞个单测嘿嘿 // TODO @疯狂搞个单测嘿嘿
/** /**
@ -45,7 +45,7 @@ public class TradePointUsePriceCalculator implements TradePriceCalculator {
} }
// 1.2 校验积分抵扣是否开启 // 1.2 校验积分抵扣是否开启
MemberPointConfigRespDTO config = memberPointApi.getConfig(); MemberPointConfigRespDTO config = memberPointApi.getConfig();
if (!checkDeductPointEnable(config)) { if (!isDeductPointEnable(config)) {
return; return;
} }
// 1.3 校验用户积分余额 // 1.3 校验用户积分余额
@ -55,7 +55,6 @@ public class TradePointUsePriceCalculator implements TradePriceCalculator {
} }
// 2.1 计算积分优惠金额 // 2.1 计算积分优惠金额
// TODO @疯狂如果计算出来优惠金额为 0那是不是不用执行后续逻辑哈
int pointPrice = calculatePointPrice(config, user.getPoint(), result); int pointPrice = calculatePointPrice(config, user.getPoint(), result);
// 2.2 计算分摊的积分抵扣金额 // 2.2 计算分摊的积分抵扣金额
List<TradePriceCalculateRespBO.OrderItem> orderItems = filterList(result.getItems(), TradePriceCalculateRespBO.OrderItem::getSelected); List<TradePriceCalculateRespBO.OrderItem> orderItems = filterList(result.getItems(), TradePriceCalculateRespBO.OrderItem::getSelected);
@ -77,18 +76,10 @@ public class TradePointUsePriceCalculator implements TradePriceCalculator {
TradePriceCalculatorHelper.recountAllPrice(result); TradePriceCalculatorHelper.recountAllPrice(result);
} }
// TODO @疯狂这个最好是 is 开头因为 check 或者 validator更多失败会抛出异常 private boolean isDeductPointEnable(MemberPointConfigRespDTO config) {
private boolean checkDeductPointEnable(MemberPointConfigRespDTO config) { return config != null &&
// TODO @疯狂这个要不直接写成 return config != null && config .... 多行这样一个形式 !BooleanUtil.isTrue(config.getTradeDeductEnable()) && // 积分功能是否启用
if (config == null) { config.getTradeDeductUnitPrice() != null && config.getTradeDeductUnitPrice() > 0; // 有没有配置1 积分抵扣多少分
return false;
}
if (!BooleanUtil.isTrue(config.getTradeDeductEnable())) {
return false;
}
// 有没有配置1 积分抵扣多少分
return config.getTradeDeductUnitPrice() != null && config.getTradeDeductUnitPrice() > 0;
} }
private Integer calculatePointPrice(MemberPointConfigRespDTO config, Integer usePoint, TradePriceCalculateRespBO result) { private Integer calculatePointPrice(MemberPointConfigRespDTO config, Integer usePoint, TradePriceCalculateRespBO result) {
@ -98,14 +89,18 @@ public class TradePointUsePriceCalculator implements TradePriceCalculator {
} }
// 积分优惠金额 // 积分优惠金额
int pointPrice = usePoint * config.getTradeDeductUnitPrice(); int pointPrice = usePoint * config.getTradeDeductUnitPrice();
// 0 元购!!!用户积分比较多时积分可以抵扣的金额要大于支付金额这时需要根据支付金额反推使用多少积分 if (result.getPrice().getPayPrice() <= pointPrice) {
if (result.getPrice().getPayPrice() < pointPrice) { // 禁止0元购
pointPrice = result.getPrice().getPayPrice(); throw exception(PRICE_CALCULATE_PAY_PRICE_ILLEGAL);
// 反推需要扣除的积分
usePoint = NumberUtil.toBigDecimal(pointPrice)
.divide(NumberUtil.toBigDecimal(config.getTradeDeductUnitPrice()), 0, RoundingMode.HALF_UP)
.intValue();
} }
// // 允许0 元购!!!用户积分比较多时积分可以抵扣的金额要大于支付金额这时需要根据支付金额反推使用多少积分
// if (result.getPrice().getPayPrice() < pointPrice) {
// pointPrice = result.getPrice().getPayPrice();
// // 反推需要扣除的积分
// usePoint = NumberUtil.toBigDecimal(pointPrice)
// .divide(NumberUtil.toBigDecimal(config.getTradeDeductUnitPrice()), 0, RoundingMode.HALF_UP)
// .intValue();
// }
// 记录使用的积分 // 记录使用的积分
result.setUsePoint(usePoint); result.setUsePoint(usePoint);
return pointPrice; return pointPrice;