修改子订单完成的逻辑
This commit is contained in:
parent
653cd5784d
commit
5e5ad630f6
|
|
@ -0,0 +1,6 @@
|
|||
package com.ghy.common.adapay;
|
||||
|
||||
public interface AdapayErrorCode {
|
||||
|
||||
String CONFIRM_AMT_OVER_LIMIT = "confirm_amt_over_limit";
|
||||
}
|
||||
|
|
@ -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());
|
||||
|
|
|
|||
Loading…
Reference in New Issue