mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-20 19:15:35 +08:00
订单分账逻辑
This commit is contained in:
@@ -3,11 +3,24 @@ package com.jsowell.adapay.vo;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* 订单分账结果
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class OrderSettleResult {
|
||||
/**
|
||||
* 状态
|
||||
* 订单编号
|
||||
*/
|
||||
private String orderCode;
|
||||
|
||||
/**
|
||||
* 订单结算金额
|
||||
*/
|
||||
private String settleAmt;
|
||||
|
||||
/**
|
||||
* 分账状态
|
||||
*/
|
||||
private String status;
|
||||
|
||||
|
||||
@@ -88,7 +88,7 @@ public interface PileMerchantInfoMapper {
|
||||
/**
|
||||
* 查询一级运营商
|
||||
*/
|
||||
List<PileMerchantInfo> queryFirstLevelMerchant();
|
||||
List<PileMerchantInfo> queryFirstLevelMerchantList();
|
||||
|
||||
/**
|
||||
* 根据appid查询对应一级运营商id
|
||||
|
||||
@@ -97,7 +97,7 @@ public interface IPileMerchantInfoService {
|
||||
* 查询一级运营商列表
|
||||
* @return
|
||||
*/
|
||||
List<PileMerchantInfo> queryFirstLevelMerchant();
|
||||
List<PileMerchantInfo> queryFirstLevelMerchantList();
|
||||
|
||||
String queryAppIdByMerchantId(String merchantId);
|
||||
|
||||
@@ -109,4 +109,9 @@ public interface IPileMerchantInfoService {
|
||||
List<String> getDeptIdsByAppId(String appId);
|
||||
|
||||
String getDelayModeByWechatAppId(String wechatAppId);
|
||||
|
||||
/**
|
||||
* 通过merchantId获取一级运营商信息
|
||||
*/
|
||||
PileMerchantInfo getFirstLevelMerchantByMerchantId(String merchantId);
|
||||
}
|
||||
|
||||
@@ -695,7 +695,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
transactionService.doUpdateOrder(dto);
|
||||
|
||||
// 订单支付结算
|
||||
orderPaymentSettlement(orderBasicInfo);
|
||||
OrderSettleResult orderSettleResult = orderPaymentSettlement(orderBasicInfo);
|
||||
|
||||
// 退款逻辑/需要退款的情况
|
||||
BigDecimal residue = orderBasicInfo.getRefundAmount();
|
||||
@@ -735,18 +735,33 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
* 清分账单生成逻辑改为当天第一笔结算后就新建,后面的产生的订单,追加更新
|
||||
*/
|
||||
private OrderSettleResult orderPaymentSettlement(OrderBasicInfo orderBasicInfo) {
|
||||
// 获取一级运营商appId
|
||||
String appId = pileMerchantInfoService.queryAppIdByMerchantId(orderBasicInfo.getMerchantId());
|
||||
if (StringUtils.isBlank(appId)) {
|
||||
String merchantId = orderBasicInfo.getMerchantId();
|
||||
String orderCode = orderBasicInfo.getOrderCode();
|
||||
// 获取一级运营商信息
|
||||
PileMerchantInfo merchantInfo = pileMerchantInfoService.getFirstLevelMerchantByMerchantId(merchantId);
|
||||
if (merchantInfo == null) {
|
||||
logger.info("订单分账逻辑-订单:{}, 查不到一级运营商信息", orderCode);
|
||||
return null;
|
||||
}
|
||||
String appId = merchantInfo.getAppId();
|
||||
String delayMode = merchantInfo.getDelayMode();
|
||||
|
||||
// 获取结算账户信息
|
||||
AdapayMemberAccount adapayMemberAccount = adapayMemberAccountService.selectByMerchantId(orderBasicInfo.getMerchantId());
|
||||
AdapayMemberAccount adapayMemberAccount = adapayMemberAccountService.selectByMerchantId(merchantId);
|
||||
if (adapayMemberAccount == null) {
|
||||
logger.info("订单分账逻辑-订单:{}, 运营商id:{}, 没有配置结算账户信息", orderCode, merchantId);
|
||||
return null;
|
||||
}
|
||||
|
||||
/*
|
||||
获取一级运营商的 延时分账设置
|
||||
使用延时分账的一级运营商,需要
|
||||
|
||||
未使用延时分账的一级运营商
|
||||
*/
|
||||
OrderSettleResult orderSettleResult = null;
|
||||
try {
|
||||
if (StringUtils.equals(delayMode, Constants.ADAPAY_PAY_MODE_DELAY)) {
|
||||
// 延时分账的处理逻辑
|
||||
if (OrderPayModeEnum.PAYMENT_OF_BALANCE.getValue().equals(orderBasicInfo.getPayMode())) {
|
||||
// 余额支付的订单
|
||||
orderSettleResult = doBalancePayment(orderBasicInfo, adapayMemberAccount, appId);
|
||||
@@ -754,9 +769,12 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
// 在线支付,进行支付确认分账
|
||||
orderSettleResult = doPaymentConfirm(orderBasicInfo, adapayMemberAccount, appId);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.error("订单交易确认失败:{}", orderBasicInfo.getOrderCode(), e);
|
||||
} else {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
return orderSettleResult;
|
||||
}
|
||||
|
||||
@@ -1208,7 +1226,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public OrderSettleResult doBalancePayment(OrderBasicInfo orderBasicInfo, AdapayMemberAccount adapayMemberAccount, String wechatAppId) throws BaseAdaPayException {
|
||||
public OrderSettleResult doBalancePayment(OrderBasicInfo orderBasicInfo, AdapayMemberAccount adapayMemberAccount, String wechatAppId) {
|
||||
BigDecimal settleAmount = orderBasicInfo.getSettleAmount();
|
||||
String orderCode = orderBasicInfo.getOrderCode();
|
||||
|
||||
@@ -1222,28 +1240,22 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
for (BalanceDeductionAmountVO vo : list) {
|
||||
String paymentId = vo.getPaymentId();
|
||||
BigDecimal deductionAmount = vo.getDeductionAmount();
|
||||
String delayMode = vo.getDelayMode();
|
||||
|
||||
if (StringUtils.equals(delayMode, Constants.ADAPAY_PAY_MODE_DELAY)) {
|
||||
// 延时分账,使用确认交易API
|
||||
PaymentConfirmResponse paymentConfirmResponse = adapayService.createPaymentConfirmRequest(paymentId, adapayMemberAccount, deductionAmount, orderCode, wechatAppId);
|
||||
if (paymentConfirmResponse != null && paymentConfirmResponse.isNotFailed()) {
|
||||
confirmAmt = confirmAmt.add(new BigDecimal(paymentConfirmResponse.getConfirmed_amt()));
|
||||
feeAmt = feeAmt.add(new BigDecimal(paymentConfirmResponse.getFee_amt()));
|
||||
status = paymentConfirmResponse.getStatus();
|
||||
description = paymentConfirmResponse.getDescription();
|
||||
// 延时分账,使用确认交易API
|
||||
PaymentConfirmResponse paymentConfirmResponse = adapayService.createPaymentConfirmRequest(paymentId, adapayMemberAccount, deductionAmount, orderCode, wechatAppId);
|
||||
if (paymentConfirmResponse != null && paymentConfirmResponse.isNotFailed()) {
|
||||
confirmAmt = confirmAmt.add(new BigDecimal(paymentConfirmResponse.getConfirmed_amt()));
|
||||
feeAmt = feeAmt.add(new BigDecimal(paymentConfirmResponse.getFee_amt()));
|
||||
status = paymentConfirmResponse.getStatus();
|
||||
description = paymentConfirmResponse.getDescription();
|
||||
|
||||
// 更新这笔交易的剩余金额
|
||||
MemberAdapayRecord record = memberAdapayRecordService.selectByPaymentId(paymentId);
|
||||
// 更新此笔交易单的消费金额 = 历史消费金额 + 本次消费金额
|
||||
record.setSpendAmt(record.getSpendAmt().add(deductionAmount));
|
||||
// 更新此笔交易单的剩余金额 = 支付金额 - 累计退款金额 - 累计消费金额
|
||||
record.setBalanceAmt(record.getPayAmt().subtract(record.getRefundAmt()).subtract(record.getSpendAmt()));
|
||||
memberAdapayRecordService.updateByPrimaryKeySelective(record);
|
||||
}
|
||||
} else {
|
||||
// 实时分账
|
||||
logger.info("实时分账");
|
||||
// 更新这笔交易的剩余金额
|
||||
MemberAdapayRecord record = memberAdapayRecordService.selectByPaymentId(paymentId);
|
||||
// 更新此笔交易单的消费金额 = 历史消费金额 + 本次消费金额
|
||||
record.setSpendAmt(record.getSpendAmt().add(deductionAmount));
|
||||
// 更新此笔交易单的剩余金额 = 支付金额 - 累计退款金额 - 累计消费金额
|
||||
record.setBalanceAmt(record.getPayAmt().subtract(record.getRefundAmt()).subtract(record.getSpendAmt()));
|
||||
memberAdapayRecordService.updateByPrimaryKeySelective(record);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1314,10 +1326,9 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
*
|
||||
* @param orderBasicInfo 订单
|
||||
* @param adapayMemberAccount 结算账户
|
||||
* @throws BaseAdaPayException
|
||||
*/
|
||||
@Override
|
||||
public OrderSettleResult doPaymentConfirm(OrderBasicInfo orderBasicInfo, AdapayMemberAccount adapayMemberAccount, String wechatAppId) throws BaseAdaPayException {
|
||||
public OrderSettleResult doPaymentConfirm(OrderBasicInfo orderBasicInfo, AdapayMemberAccount adapayMemberAccount, String wechatAppId) {
|
||||
// 查询订单的交易id
|
||||
String orderCode = orderBasicInfo.getOrderCode();
|
||||
AdapayCallbackRecord adapayCallbackRecord = adapayCallbackRecordService.selectByOrderCode(orderCode);
|
||||
@@ -2747,9 +2758,6 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
|
||||
// 余额支付
|
||||
balancePayOrder(dto);
|
||||
} else if (StringUtils.equals(dto.getPayMode(), OrderPayModeEnum.PAYMENT_OF_WECHATPAY.getValue())) {
|
||||
// 微信支付
|
||||
// dto.setOrderBasicInfo(orderInfo);
|
||||
|
||||
// 2023-07-11 全部改为汇付支付
|
||||
dto.setGoodsTitle("充电费用");
|
||||
dto.setGoodsDesc("充电桩预付款金额");
|
||||
|
||||
@@ -339,8 +339,8 @@ public class PileMerchantInfoServiceImpl implements IPileMerchantInfoService {
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public List<PileMerchantInfo> queryFirstLevelMerchant() {
|
||||
return pileMerchantInfoMapper.queryFirstLevelMerchant();
|
||||
public List<PileMerchantInfo> queryFirstLevelMerchantList() {
|
||||
return pileMerchantInfoMapper.queryFirstLevelMerchantList();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -407,4 +407,27 @@ public class PileMerchantInfoServiceImpl implements IPileMerchantInfoService {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PileMerchantInfo getFirstLevelMerchantByMerchantId(String merchantId) {
|
||||
if (StringUtils.isBlank(merchantId)) {
|
||||
return null;
|
||||
}
|
||||
// 拿merchantId先查一次
|
||||
PileMerchantInfo pileMerchantInfo = selectPileMerchantInfoById(merchantId);
|
||||
if (pileMerchantInfo == null) {
|
||||
return null;
|
||||
}
|
||||
if (StringUtils.equals(pileMerchantInfo.getMerchantLevel(), Constants.ONE)) {
|
||||
// 如果是一级运营商直接返回
|
||||
return pileMerchantInfo;
|
||||
}
|
||||
// 通过parentId再查一次
|
||||
String parentId = pileMerchantInfo.getParentId();
|
||||
pileMerchantInfo = selectPileMerchantInfoById(parentId);
|
||||
if (pileMerchantInfo == null) {
|
||||
return null;
|
||||
}
|
||||
return pileMerchantInfo;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user