校验分账金额方法

This commit is contained in:
Guoqs
2025-04-16 14:10:36 +08:00
parent fd4287bdf2
commit c2821c11d9
2 changed files with 25 additions and 24 deletions

View File

@@ -1957,33 +1957,31 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
}
/**
* 校验金额方法
* 校验分账金额方法
*/
private boolean verifyOrderAllAmount(AfterSettleOrderDTO afterSettleOrderDTO) {
/*
订单相关的所有金额需要满足一下规则
订单总消费金额 = 订单总电费金额 + 订单总服务费金额
实际消费电费金额 = 订单总电费金额 - 电费优惠金额
实际消费服务费金额 = 订单总服务费金额 - 服务费优惠金额
订单总优惠金额 = 电费优惠金额 + 服务费优惠金额
订单实际消费金额 = 订单总消费金额 - 订单总优惠金额
实际消费总金额 = 订单总消费金额 - 订单总优惠金额
订单退款金额 = 订单支付金额 - 实际消费总金额
订单结算金额 = 实际消费电费金额 + 实际消费服务费金额
*/
String orderCode = afterSettleOrderDTO.getOrderCode();
// 查询订单支付记录
List<OrderPayRecord> orderPayRecordList = orderPayRecordService.getOrderPayRecordList(orderCode);
// 选出需要分账的支付id
List<PaymentInfo> paymentInfos = Lists.newArrayList();
for (OrderPayRecord orderPayRecord : orderPayRecordList) {
BigDecimal payAmount = orderPayRecord.getPayAmount();
BigDecimal refundAmount = orderPayRecord.getRefundAmount() == null ? BigDecimal.ZERO : orderPayRecord.getRefundAmount();
// 如果相减等于0说明这笔支付单退完了就不用分账了
BigDecimal subtract = payAmount.subtract(refundAmount);
if (subtract.compareTo(BigDecimal.ZERO) > 0) {
paymentInfos.addAll(orderPayRecordService.parseDeductionRecord(orderPayRecord.getDeductionRecord()));
} else {
logger.info("realTimeOrderSplit-订单:{}, 支付记录:{}, 支付金额({})与退款金额({})相等,不需要分账", orderCode, orderPayRecord.getPaymentId(), payAmount, refundAmount);
}
}
logger.info("根据订单号:{}, 查询出{}笔支付信息, 需要分账的支付信息为:{}", orderCode, paymentInfos.size(), JSON.toJSONString(paymentInfos));
return true;
}
/**
* 实时分账方法
* 实时分账方法/新分账方法
* @param afterSettleOrderDTO
*/
@Override
@@ -2003,7 +2001,6 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
return null;
}
// 校验分账
verifyOrderAllAmount(afterSettleOrderDTO);
// 根据站点id查询分账配置(如果未配置则初始化)
@@ -2230,13 +2227,13 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
}
/**
* 执行订单退款
* 执行订单退款/新退款方法
*/
private void refundMethod(AfterSettleOrderDTO afterSettleOrderDTO) {
// 退款
String mode = pileMerchantInfoService.getDelayModeByMerchantId(afterSettleOrderDTO.getMerchantId());
AbstractProgramLogic orderLogic = ProgramLogicFactory.getProgramLogic(mode);
orderLogic.refundOrder(afterSettleOrderDTO.getOrderBasicInfo());
orderLogic.refundOrder(afterSettleOrderDTO.getOrderBasicInfo()); // 新逻辑
}
/**