bugfix 修复偶尔出现不会自动退款的bug

This commit is contained in:
Lemon
2025-06-06 15:32:46 +08:00
parent ab275cdafd
commit a90216e174

View File

@@ -1923,7 +1923,7 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
public OrderSplitResult realTimeOrderSplit(AfterSettleOrderDTO afterSettleOrderDTO) throws BaseAdaPayException {
// 查询订单信息
OrderBasicInfo orderBasicInfo = this.getOrderInfoByOrderCode(afterSettleOrderDTO.getOrderCode());
afterSettleOrderDTO.setOrderBasicInfo(orderBasicInfo);
String payMode = orderBasicInfo.getPayMode();
// 校验订单支付金额,消费金额,退款金额
BigDecimal orderPayAmount = afterSettleOrderDTO.getOrderPayAmount(); // 支付金额
@@ -1932,31 +1932,35 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
BigDecimal orderRefundAmount = afterSettleOrderDTO.getOrderRefundAmount(); // 退款金额
// 如果是白名单支付, 直接返回
if (StringUtils.equals(orderBasicInfo.getPayMode(), "3")) {
logger.info("realTimeOrderSplit-订单:{}, payMode:{}, 白名单支付不做处理", afterSettleOrderDTO.getOrderCode(), orderBasicInfo.getPayMode());
if (StringUtils.equals(payMode, OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue())) {
logger.info("realTimeOrderSplit-订单:{}, payMode:{}, 白名单支付不做处理", afterSettleOrderDTO.getOrderCode(), payMode);
return null;
}
// 如果是余额支付, 校验消费金额 - 折扣金额 + 退款金额 = 支付金额
if (StringUtils.equals(orderBasicInfo.getPayMode(), "1")) {
if (StringUtils.equals(payMode, OrderPayModeEnum.PAYMENT_OF_PRINCIPAL_BALANCE.getValue())) {
// 订单折扣金额 = 电费折扣金额 + 服务费折扣金额
BigDecimal orderDiscountAmount = afterSettleOrderDTO.getOrderElectricityDiscountAmount().add(afterSettleOrderDTO.getOrderServiceDiscountAmount());
if (orderConsumeAmount.subtract(orderDiscountAmount).add(orderRefundAmount).compareTo(orderPayAmount) != 0) {
logger.info("realTimeOrderSplit-订单:{}, payMode:{}, 支付金额({})与消费金额({})-折扣金额({})+退款金额({})不相等",
afterSettleOrderDTO.getOrderCode(), orderBasicInfo.getPayMode(), orderPayAmount, orderConsumeAmount, orderDiscountAmount, orderRefundAmount);
afterSettleOrderDTO.getOrderCode(), payMode, orderPayAmount, orderConsumeAmount, orderDiscountAmount, orderRefundAmount);
return null;
}
}
// 如果是在线支付, 校验消费金额+ 退款金额 = 支付金额
if (StringUtils.equals(orderBasicInfo.getPayMode(), "4") || StringUtils.equals(orderBasicInfo.getPayMode(), "5")) {
if (StringUtils.equals(payMode, OrderPayModeEnum.PAYMENT_OF_WECHATPAY.getValue()) || StringUtils.equals(payMode, OrderPayModeEnum.PAYMENT_OF_ALIPAY.getValue())) {
if (orderSettleAmount.add(orderRefundAmount).compareTo(orderPayAmount) != 0) {
logger.info("realTimeOrderSplit-订单:{}, payMode:{}, 支付金额({})与结算金额({})+退款金额({})不相等",
afterSettleOrderDTO.getOrderCode(), orderBasicInfo.getPayMode(), orderPayAmount, orderSettleAmount, orderRefundAmount);
afterSettleOrderDTO.getOrderCode(), payMode, orderPayAmount, orderSettleAmount, orderRefundAmount);
return null;
}
}
// 校验通过将退款金额重新set为了避免数据库的退款金额没有及时更新
orderBasicInfo.setRefundAmount(orderRefundAmount);
afterSettleOrderDTO.setOrderBasicInfo(orderBasicInfo);
// 订单退款,汇付退款
try {
refundMethod(afterSettleOrderDTO);