diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java index 155deeb45..a0b2774f7 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java @@ -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 orderPayRecordList = orderPayRecordService.getOrderPayRecordList(orderCode); + + // 选出需要分账的支付id + List 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 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())) {