From 790a469a7b0be4fdd881c1e2820d21504ea33f71 Mon Sep 17 00:00:00 2001 From: "autumn.g@foxmail.com" Date: Wed, 17 Jan 2024 19:34:28 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E5=88=86=E8=B4=A6=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/OrderBasicInfoServiceImpl.java | 40 ++++++++++++++++--- 1 file changed, 34 insertions(+), 6 deletions(-) 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())) {