修复:#320 支付手续费计算不正确,超过付款金额 #334

plp
YunaiV 2 years ago
parent a532ba0579
commit 379c143dbb

@ -39,7 +39,6 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.RoundingMode;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@ -347,7 +346,7 @@ public class PayOrderServiceImpl implements PayOrderService {
.successTime(notify.getSuccessTime()).extensionId(orderExtension.getId()).no(orderExtension.getNo()) .successTime(notify.getSuccessTime()).extensionId(orderExtension.getId()).no(orderExtension.getNo())
.channelOrderNo(notify.getChannelOrderNo()).channelUserId(notify.getChannelUserId()) .channelOrderNo(notify.getChannelOrderNo()).channelUserId(notify.getChannelUserId())
.channelFeeRate(channel.getFeeRate()) .channelFeeRate(channel.getFeeRate())
.channelFeePrice(MoneyUtils.calculateRatePrice(order.getPrice(), channel.getFeeRate(), 0, RoundingMode.HALF_UP).intValue()) .channelFeePrice(MoneyUtils.calculateRatePrice(order.getPrice(), channel.getFeeRate()))
.build()); .build());
if (updateCounts == 0) { // 校验状态,必须是待支付 if (updateCounts == 0) { // 校验状态,必须是待支付
throw exception(ORDER_STATUS_IS_NOT_WAITING); throw exception(ORDER_STATUS_IS_NOT_WAITING);

@ -1,16 +1,28 @@
package cn.iocoder.yudao.module.pay.util; package cn.iocoder.yudao.module.pay.util;
import cn.hutool.core.util.NumberUtil;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import cn.hutool.core.util.NumberUtil;
/** /**
* *
* *
* @author * @author
*/ */
public class MoneyUtils { public class MoneyUtils {
/**
*
*
* @param price
* @param rate 56.77% 56.77
* @return
*/
public static Integer calculateRatePrice(Integer price, Double rate) {
return calculateRatePrice(price, rate, 0, RoundingMode.HALF_UP).intValue();
}
/** /**
* *
* *
@ -21,7 +33,7 @@ public class MoneyUtils {
*/ */
public static BigDecimal calculateRatePrice(Number price, Number rate, int scale, RoundingMode roundingMode) { public static BigDecimal calculateRatePrice(Number price, Number rate, int scale, RoundingMode roundingMode) {
return NumberUtil.toBigDecimal(price).multiply(NumberUtil.toBigDecimal(rate)) // 乘以 return NumberUtil.toBigDecimal(price).multiply(NumberUtil.toBigDecimal(rate)) // 乘以
.divide(BigDecimal.valueOf(100), scale, roundingMode); // 除以100 .divide(BigDecimal.valueOf(100), scale, roundingMode); // 除以 100
} }
} }

Loading…
Cancel
Save