From 5e5ad630f6ae5ab372647dedec437746dbc3baf5 Mon Sep 17 00:00:00 2001 From: HH Date: Wed, 14 Dec 2022 01:35:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AD=90=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E7=9A=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ghy/common/adapay/AdapayErrorCode.java | 6 +++ .../service/impl/OrderDetailServiceImpl.java | 51 +++++++++++-------- 2 files changed, 37 insertions(+), 20 deletions(-) create mode 100644 ghy-common/src/main/java/com/ghy/common/adapay/AdapayErrorCode.java diff --git a/ghy-common/src/main/java/com/ghy/common/adapay/AdapayErrorCode.java b/ghy-common/src/main/java/com/ghy/common/adapay/AdapayErrorCode.java new file mode 100644 index 00000000..b16e0f8b --- /dev/null +++ b/ghy-common/src/main/java/com/ghy/common/adapay/AdapayErrorCode.java @@ -0,0 +1,6 @@ +package com.ghy.common.adapay; + +public interface AdapayErrorCode { + + String CONFIRM_AMT_OVER_LIMIT = "confirm_amt_over_limit"; +} diff --git a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java index e23bec45..e07c18e9 100644 --- a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java +++ b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java @@ -2,6 +2,7 @@ package com.ghy.order.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.ghy.common.adapay.AdapayErrorCode; import com.ghy.common.adapay.model.AdapayStatusEnum; import com.ghy.common.adapay.model.DivMember; import com.ghy.common.adapay.model.PaymentDTO; @@ -394,28 +395,38 @@ public class OrderDetailServiceImpl implements OrderDetailService { divMembers.add(divMember); //调用分账 logger.info("子订单[code={}]的[改价单]的分账信息: {}", odCode, JSON.toJSONString(divMembers)); - JSONObject response; - response = adapayService.paymentConfirm(financialDetail.getDeptId(), fcRecord.getRemark(), + JSONObject response = adapayService.paymentConfirm(financialDetail.getDeptId(), fcRecord.getRemark(), payment.getOrderNo() + "_" + System.currentTimeMillis(), AdapayUtils.bigDecimalToString(fcRecord.getChangeMoney()), divMembers, null, null); - logger.info("子订单[code={}]的[改价单]的分账结果: {}", odCode, response.toJSONString()); - boolean status = AdapayStatusEnum.succeeded.code.equals(response.getString("status")); - // 如果确认支付失败 这里抛出异常 回滚订单状态 - Assert.isTrue(status, response.getString("error_msg")); - // 这是被扣掉的手续费 - String fee_amt = response.getString("fee_amt"); - feeAmt = new BigDecimal(fee_amt); - if (feeAmt.compareTo(platformFD.getPayMoney()) < 0 && !"0.00".equals(fee_amt)) { - // 用平台抽成来补偿改价单的手续费 修改平台抽成子财务单金额 - update.setPayMoney(platformFD.getPayMoney().subtract(feeAmt)); - int i = financialDetailService.updateFinancialDetail(update); - compensate = i > 0; - } else { - logger.warn("主订单[code={}]的平台抽成金额不足以承担子订单[code={}]的[改价单]的手续费", - orderDetail.getOrderMasterCode(), odCode); - // 平台抽成不足以承担改价单手续费了 那没办法了只能自己承担 - // 待提现金额里减去改价单手续费 - dtx = dtx.subtract(feeAmt); + if (AdapayStatusEnum.succeeded.code.equals(response.getString("status"))) { // 分账成功 + logger.info("子订单[code={}]的[改价单]分账成功", odCode); + // 这是被扣掉的手续费 + String fee_amt = response.getString("fee_amt"); + feeAmt = new BigDecimal(fee_amt); + if (feeAmt.compareTo(platformFD.getPayMoney()) < 0 && !"0.00".equals(fee_amt)) { + // 用平台抽成来补偿改价单的手续费 修改平台抽成子财务单金额 + update.setPayMoney(platformFD.getPayMoney().subtract(feeAmt)); + int i = financialDetailService.updateFinancialDetail(update); + compensate = i > 0; + } else { + logger.warn("主订单[code={}]的平台抽成金额不足以承担子订单[code={}]的[改价单]的手续费", + orderDetail.getOrderMasterCode(), odCode); + // 平台抽成不足以承担改价单手续费了 那没办法了只能自己承担 + // 待提现金额里减去改价单手续费 + dtx = dtx.subtract(feeAmt); + } + } else { // 分账失败 + if (AdapayErrorCode.CONFIRM_AMT_OVER_LIMIT.equals(response.getString("error_code"))) { + // 当前确认金额 > 支付金额 - 已支付确认金额 - 已支付撤销金额 + // 这里有两种可能 1.可能是之前算错了手续费的旧订单 + // 2.可能是之前执行过完单流程 改价单分账成功了 但是子财务单分账失败了 + // 所以直接跳过 + logger.info("子订单[code={}] 跳过[改价单]分账", odCode); + } else { + logger.error("子订单[code={}]的[改价单 paymentId={}]分账失败: {}", odCode, fcRecord.getRemark(), response.toJSONString()); + // 其它错误抛异常 + throw new IllegalArgumentException(response.getString("error_msg")); + } } } else { logger.error("financialChangeRecords.size = " + financialChangeRecords.size());