update 分润

This commit is contained in:
Guoqs
2024-09-24 16:39:42 +08:00
parent ec1385a110
commit 597e74e4e9
4 changed files with 52 additions and 22 deletions

View File

@@ -11,7 +11,7 @@ import com.jsowell.adapay.dto.QueryPaymentConfirmDTO;
import com.jsowell.adapay.response.PaymentConfirmResponse;
import com.jsowell.adapay.response.QueryPaymentConfirmDetailResponse;
import com.jsowell.adapay.service.AdapayService;
import com.jsowell.adapay.vo.OrderSettleResult;
import com.jsowell.adapay.vo.OrderSplitResult;
import com.jsowell.adapay.vo.PaymentInfo;
import com.jsowell.common.enums.adapay.AdapayStatusEnum;
import com.jsowell.common.enums.ykc.*;
@@ -110,7 +110,7 @@ public class TempService {
// 执行分账
for (OrderBasicInfo orderBasicInfo : orderBasicInfos) {
try {
OrderSettleResult orderSettleResult = null;
OrderSplitResult orderSettleResult = null;
logger.info("手动接口执行订单分账逻辑-orderCode:{}, payMode:{}", orderBasicInfo.getOrderCode(), orderBasicInfo.getPayMode());
if (OrderPayModeEnum.PAYMENT_OF_PRINCIPAL_BALANCE.getValue().equals(orderBasicInfo.getPayMode())) {
logger.info("手动接口执行订单分账逻辑-order:{}, result:{}", JSON.toJSONString(orderBasicInfo), JSON.toJSONString(orderSettleResult));

View File

@@ -8,7 +8,7 @@ import lombok.Setter;
*/
@Getter
@Setter
public class OrderSettleResult {
public class OrderSplitResult {
/**
* 订单编号
*/

View File

@@ -2,7 +2,7 @@ package com.jsowell.pile.service;
import com.huifu.adapay.core.exception.BaseAdaPayException;
import com.jsowell.adapay.response.PaymentReverseResponse;
import com.jsowell.adapay.vo.OrderSettleResult;
import com.jsowell.adapay.vo.OrderSplitResult;
import com.jsowell.common.core.domain.ykc.RealTimeMonitorData;
import com.jsowell.common.core.domain.ykc.TransactionRecordsData;
import com.jsowell.pile.domain.AdapayMemberAccount;
@@ -198,9 +198,9 @@ public interface OrderBasicInfoService{
* @return
* @throws BaseAdaPayException
*/
OrderSettleResult doPaymentConfirmWithDelay(OrderBasicInfo orderBasicInfo, AdapayMemberAccount adapayMemberAccount, String wechatAppId) throws BaseAdaPayException;
OrderSplitResult doPaymentConfirmWithDelay(OrderBasicInfo orderBasicInfo, AdapayMemberAccount adapayMemberAccount, String wechatAppId) throws BaseAdaPayException;
OrderSettleResult doBalancePaymentWithDelay(OrderBasicInfo orderBasicInfo, AdapayMemberAccount adapayMemberAccount, String wechatAppId) throws BaseAdaPayException;
OrderSplitResult doBalancePaymentWithDelay(OrderBasicInfo orderBasicInfo, AdapayMemberAccount adapayMemberAccount, String wechatAppId) throws BaseAdaPayException;
/**
* 批量查询订单
@@ -375,7 +375,7 @@ public interface OrderBasicInfoService{
void retryRefundOrder(String orderCode) throws BaseAdaPayException;
void retryRefundOrder(OrderBasicInfo orderBasicInfo) throws BaseAdaPayException;
OrderSettleResult orderPaymentSettlementAndRefund(OrderBasicInfo orderBasicInfo);
OrderSplitResult orderPaymentSettlementAndRefund(OrderBasicInfo orderBasicInfo);
void returnUpdateOrderBasicInfo(OrderBasicInfo orderBasicInfo, TransactionRecordsData data);

View File

@@ -6,12 +6,13 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.huifu.adapay.core.exception.BaseAdaPayException;
import com.jsowell.adapay.common.DivMember;
import com.jsowell.adapay.dto.QueryConfirmReverseDTO;
import com.jsowell.adapay.dto.QueryPaymentConfirmDTO;
import com.jsowell.adapay.operation.PaymentReverseOperation;
import com.jsowell.adapay.response.*;
import com.jsowell.adapay.service.AdapayService;
import com.jsowell.adapay.vo.OrderSettleResult;
import com.jsowell.adapay.vo.OrderSplitResult;
import com.jsowell.adapay.vo.PaymentInfo;
import com.jsowell.common.constant.CacheConstants;
import com.jsowell.common.constant.Constants;
@@ -736,7 +737,7 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
* 订单结算完成就执行清分and退款
*/
@Override
public OrderSettleResult orderPaymentSettlementAndRefund(OrderBasicInfo orderBasicInfo) {
public OrderSplitResult orderPaymentSettlementAndRefund(OrderBasicInfo orderBasicInfo) {
String merchantId = orderBasicInfo.getMerchantId();
String orderCode = orderBasicInfo.getOrderCode();
// 获取一级运营商信息
@@ -827,7 +828,7 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
* @param wechatAppId 小程序appId
* @return
*/
private OrderSettleResult notDelayMerchantOrderRefundLogic(OrderBasicInfo orderBasicInfo, AdapayMemberAccount adapayMemberAccount, String wechatAppId) {
private OrderSplitResult notDelayMerchantOrderRefundLogic(OrderBasicInfo orderBasicInfo, AdapayMemberAccount adapayMemberAccount, String wechatAppId) {
try {
String payMode = orderBasicInfo.getPayMode();
if (StringUtils.equals(payMode, OrderPayModeEnum.PAYMENT_OF_PRINCIPAL_BALANCE.getValue())) {
@@ -1210,7 +1211,7 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
// 执行分账
for (OrderBasicInfo orderBasicInfo : orderBasicInfos) {
try {
OrderSettleResult orderSettleResult;
OrderSplitResult orderSettleResult;
if (OrderPayModeEnum.PAYMENT_OF_PRINCIPAL_BALANCE.getValue().equals(orderBasicInfo.getPayMode())) {
// 余额支付的订单
orderSettleResult = doBalancePaymentWithDelay(orderBasicInfo, adapayMemberAccount, appId);
@@ -1305,7 +1306,7 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
* @return
*/
@Override
public OrderSettleResult doBalancePaymentWithDelay(OrderBasicInfo orderBasicInfo, AdapayMemberAccount adapayMemberAccount, String wechatAppId) throws BaseAdaPayException {
public OrderSplitResult doBalancePaymentWithDelay(OrderBasicInfo orderBasicInfo, AdapayMemberAccount adapayMemberAccount, String wechatAppId) throws BaseAdaPayException {
// 订单结算金额
BigDecimal settleAmount = orderBasicInfo.getSettleAmount();
// 订单编号
@@ -1328,7 +1329,7 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
List<String> collect = paymentInfos.stream().map(PaymentInfo::getPaymentId).collect(Collectors.toList());
// 校验是否分账
OrderSettleResult result = verifyOrderConfirmAmount(collect, orderCode, settleAmount, wechatAppId);
OrderSplitResult result = verifyOrderConfirmAmount(collect, orderCode, settleAmount, wechatAppId);
if (!AdapayStatusEnum.SUCCEEDED.getValue().equals(result.getStatus())) {
// 没有分账,执行分账逻辑
for (BalanceDeductionAmountVO vo : list) {
@@ -1348,7 +1349,7 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
}
// 分账接口返回的信息
result = new OrderSettleResult();
result = new OrderSplitResult();
result.setConfirmAmt(confirmAmt.toString());
result.setStatus(status);
result.setFeeAmt(feeAmt.toString());
@@ -1452,7 +1453,7 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
* @param orderBasicInfo 订单
* @param adapayMemberAccount 结算账户
*/
public OrderSettleResult doPaymentConfirmWithDelay(OrderBasicInfo orderBasicInfo, AdapayMemberAccount adapayMemberAccount, String wechatAppId) throws BaseAdaPayException {
public OrderSplitResult doPaymentConfirmWithDelay(OrderBasicInfo orderBasicInfo, AdapayMemberAccount adapayMemberAccount, String wechatAppId) throws BaseAdaPayException {
// 订单编号
String orderCode = orderBasicInfo.getOrderCode();
// 订单结算金额
@@ -1479,7 +1480,7 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
String paymentId = paymentInfos.get(0).getPaymentId();
// 校验订单分账金额
OrderSettleResult result = verifyOrderConfirmAmount(paymentIds, orderCode, settleAmount, wechatAppId);
OrderSplitResult result = verifyOrderConfirmAmount(paymentIds, orderCode, settleAmount, wechatAppId);
// 校验订单是否分账 状态为非交易完成的时候,进行分账处理
if (!AdapayStatusEnum.SUCCEEDED.getValue().equals(result.getStatus())) {
@@ -1488,7 +1489,7 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
adapayMemberAccount, settleAmount, orderCode, wechatAppId);
// 分账接口返回的信息
result = new OrderSettleResult();
result = new OrderSplitResult();
result.setConfirmAmt(paymentConfirmResponse.getConfirm_amt());
result.setStatus(paymentConfirmResponse.getStatus());
result.setFeeAmt(paymentConfirmResponse.getFee_amt());
@@ -1500,22 +1501,51 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
/**
* 订单实时分账方法
* 2024年9月24日16点17分 新的分账方法
*/
public OrderSettleResult doPaymentConfirmWithRealTime(OrderBasicInfo orderBasicInfo, AdapayMemberAccount adapayMemberAccount, String wechatAppId) throws BaseAdaPayException {
public OrderSplitResult realTimeOrderSplit(OrderBasicInfo orderBasicInfo, AdapayMemberAccount adapayMemberAccount, String wechatAppId) throws BaseAdaPayException {
// 订单编号
String orderCode = orderBasicInfo.getOrderCode();
// 订单结算金额
BigDecimal settleAmount = orderBasicInfo.getSettleAmount();
// 查询订单支付记录
List<OrderPayRecord> orderPayRecordList = orderPayRecordService.getOrderPayRecordList(orderCode);
// 选出需要分账的支付id
// 需要分账信息
List<PaymentInfo> 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()));
}
}
// 根据站点id查询该站点配置的分账信息, 如果为空表示本运营商分100%
List<AdapayMemberAccount> memberAccountList = Lists.newArrayList(adapayMemberAccount);
// 计算每个账户 订单分账金额
List<DivMember> divMemberList = splitAmount(memberAccountList, settleAmount, paymentInfos);
return null;
}
/**
* 计算每个账户需要分账的金额
* @param memberAccountList 参与分账的账户信息
* @param settleAmount 订单总结算金额
* @param paymentInfos 支付记录信息
* @return
*/
private List<DivMember> splitAmount(List<AdapayMemberAccount> memberAccountList, BigDecimal settleAmount, List<PaymentInfo> paymentInfos) {
List<DivMember> resultList = Lists.newArrayList();
return resultList;
}
/**
* 校验订单分账金额
*
@@ -1523,7 +1553,7 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
* @param orderCode 订单编号
* @param settleAmount 结算金额
*/
private OrderSettleResult verifyOrderConfirmAmount(List<String> paymentIds, String orderCode, BigDecimal settleAmount, String wechatAppId) throws BaseAdaPayException {
private OrderSplitResult verifyOrderConfirmAmount(List<String> paymentIds, String orderCode, BigDecimal settleAmount, String wechatAppId) throws BaseAdaPayException {
// 分账金额
BigDecimal totalConfirmAmt = BigDecimal.ZERO;
// 手续费
@@ -1559,7 +1589,7 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
}
}
OrderSettleResult result = new OrderSettleResult();
OrderSplitResult result = new OrderSplitResult();
result.setOrderCode(orderCode);
result.setSettleAmt(settleAmount.toString());
result.setConfirmAmt(totalConfirmAmt.toString());