diff --git a/bd-third/src/main/java/com/hzs/third/pay/service/impl/JdPayServiceImpl.java b/bd-third/src/main/java/com/hzs/third/pay/service/impl/JdPayServiceImpl.java index 1d69fcbc..aa79bc01 100644 --- a/bd-third/src/main/java/com/hzs/third/pay/service/impl/JdPayServiceImpl.java +++ b/bd-third/src/main/java/com/hzs/third/pay/service/impl/JdPayServiceImpl.java @@ -47,6 +47,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.net.InetAddress; import java.util.ArrayList; +import java.util.Comparator; import java.util.List; import java.util.concurrent.TimeUnit; @@ -259,6 +260,7 @@ public class JdPayServiceImpl implements IJdPayService { List sepAccDList = new ArrayList<>(); if(ObjectUtil.isNotEmpty(jdPayBankProperties)){ List separateAccounts = jdPayBankProperties.getSeparateAccounts(); + separateAccounts.sort(Comparator.comparing(JdPaySeparateAccountConfig::getProportion).reversed()); if(ObjectUtil.isNotEmpty(separateAccounts)){ BigDecimal tradeAmount = onlinePayment.getPayMoney(); BigDecimal remaining = onlinePayment.getPayMoney(); @@ -267,23 +269,27 @@ public class JdPayServiceImpl implements IJdPayService { BigDecimal subTradeAmount; if(i == separateAccounts.size() - 1){ subTradeAmount = remaining; + log.info("分账 最后一个账户( 总 - 已分账 ) : {}, {}", subTradeAmount, remaining); }else{ subTradeAmount = tradeAmount.subtract(tradeAmount.multiply(separateAccount.getProportion().setScale(2, BigDecimal.ROUND_DOWN)).setScale(2, BigDecimal.ROUND_DOWN)); remaining = remaining.subtract(subTradeAmount).setScale(2, BigDecimal.ROUND_DOWN); + log.info("分账 过程 : {}, {}, {}", subTradeAmount, remaining, separateAccount.getProportion().setScale(2, BigDecimal.ROUND_DOWN)); } JdPayDivisionAccountTradeInfo divisionAccountTradeInfo = new JdPayDivisionAccountTradeInfo(); divisionAccountTradeInfo.setMerchantNo(separateAccount.getAccount()); divisionAccountTradeInfo.setOutTradeNo(onlinePayment.getBusinessCode() + "_" + (i + 1)); divisionAccountTradeInfo.setTradeAmount(subTradeAmount.multiply(new BigDecimal(100)).intValue() + ""); - divisionAccountTradeInfoList.add(divisionAccountTradeInfo); - sepAccDList.add( - TOnlinePaymentSepAccD.builder() - .account(separateAccount.getAccount()) - .proportion(separateAccount.getProportion()) - .tradeAmount(subTradeAmount) - .outTradeNo(divisionAccountTradeInfo.getOutTradeNo()) - .build() - ); + if(subTradeAmount.compareTo(BigDecimal.ZERO) > 0){ + divisionAccountTradeInfoList.add(divisionAccountTradeInfo); + sepAccDList.add( + TOnlinePaymentSepAccD.builder() + .account(separateAccount.getAccount()) + .proportion(separateAccount.getProportion()) + .tradeAmount(subTradeAmount) + .outTradeNo(divisionAccountTradeInfo.getOutTradeNo()) + .build() + ); + } } } }