diff --git a/jsowell-admin/src/main/java/com/jsowell/service/TempService.java b/jsowell-admin/src/main/java/com/jsowell/service/TempService.java index f44eb5df9..326aad132 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/TempService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/TempService.java @@ -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)); diff --git a/jsowell-pile/src/main/java/com/jsowell/adapay/vo/OrderSettleResult.java b/jsowell-pile/src/main/java/com/jsowell/adapay/vo/OrderSplitResult.java similarity index 94% rename from jsowell-pile/src/main/java/com/jsowell/adapay/vo/OrderSettleResult.java rename to jsowell-pile/src/main/java/com/jsowell/adapay/vo/OrderSplitResult.java index 3311a6049..3d2fc7263 100644 --- a/jsowell-pile/src/main/java/com/jsowell/adapay/vo/OrderSettleResult.java +++ b/jsowell-pile/src/main/java/com/jsowell/adapay/vo/OrderSplitResult.java @@ -8,7 +8,7 @@ import lombok.Setter; */ @Getter @Setter -public class OrderSettleResult { +public class OrderSplitResult { /** * 订单编号 */ diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java b/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java index 844e739dd..d21c61a61 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/service/OrderBasicInfoService.java @@ -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); 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 1c49f00f0..51693ec21 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 @@ -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 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 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())); + } } + + // 根据站点id查询该站点配置的分账信息, 如果为空表示本运营商分100% + List memberAccountList = Lists.newArrayList(adapayMemberAccount); + + // 计算每个账户 订单分账金额 + List divMemberList = splitAmount(memberAccountList, settleAmount, paymentInfos); + return null; } + /** + * 计算每个账户需要分账的金额 + * @param memberAccountList 参与分账的账户信息 + * @param settleAmount 订单总结算金额 + * @param paymentInfos 支付记录信息 + * @return + */ + private List splitAmount(List memberAccountList, BigDecimal settleAmount, List paymentInfos) { + List resultList = Lists.newArrayList(); + + + + return resultList; + } + /** * 校验订单分账金额 * @@ -1523,7 +1553,7 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService { * @param orderCode 订单编号 * @param settleAmount 结算金额 */ - private OrderSettleResult verifyOrderConfirmAmount(List paymentIds, String orderCode, BigDecimal settleAmount, String wechatAppId) throws BaseAdaPayException { + private OrderSplitResult verifyOrderConfirmAmount(List 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());