update 分账逻辑

This commit is contained in:
2024-01-17 19:34:28 +08:00
parent e922f558ec
commit 790a469a7b

View File

@@ -775,6 +775,15 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
return adapayCallbackRecord;
}
private AdapayCallbackRecord selectAdapayCallbackRecordByPaymentId(String paymentId) {
AdapayCallbackRecord adapayCallbackRecord = adapayCallbackRecordService.selectByPaymentId(paymentId);
if (adapayCallbackRecord == null) {
logger.error("根据支付id:{}, 未查询到汇付支付回调信息", paymentId);
throw new BusinessException(ReturnCodeEnum.CODE_ADAPAY_CALLBACK_IS_NULL_ERROR);
}
return adapayCallbackRecord;
}
/**
* 延迟商家订单退款处理逻辑
* 例如:举视以及下面的二级运营商
@@ -1432,17 +1441,36 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
* @param adapayMemberAccount 结算账户
*/
public OrderSettleResult doPaymentConfirmWithDelay(OrderBasicInfo orderBasicInfo, AdapayMemberAccount adapayMemberAccount, String wechatAppId) throws BaseAdaPayException {
// 订单编号
String orderCode = orderBasicInfo.getOrderCode();
// 查询该笔订单的支付交易回调
AdapayCallbackRecord adapayCallbackRecord = selectAdapayCallbackRecord(orderCode);
// 支付id
String paymentId = adapayCallbackRecord.getPaymentId();
// 订单结算金额
BigDecimal settleAmount = orderBasicInfo.getSettleAmount();
// 查询订单支付记录
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()));
}
}
List<String> paymentIds = paymentInfos.stream().map(PaymentInfo::getPaymentId).collect(Collectors.toList());
// 查询该笔订单的支付交易回调
// AdapayCallbackRecord adapayCallbackRecord = selectAdapayCallbackRecordByPaymentId(paymentInfos.get(0).getPaymentId());
// 支付id
String paymentId = paymentInfos.get(0).getPaymentId();
// 校验订单分账金额
OrderSettleResult result = verifyOrderConfirmAmount(Lists.newArrayList(paymentId), orderCode, settleAmount, wechatAppId);
OrderSettleResult result = verifyOrderConfirmAmount(paymentIds, orderCode, settleAmount, wechatAppId);
// 校验订单是否分账 状态为非交易完成的时候,进行分账处理
if (!AdapayStatusEnum.SUCCEEDED.getValue().equals(result.getStatus())) {