Merge remote-tracking branch 'origin/bd_dev' into bd_dev

This commit is contained in:
cabbage 2025-07-07 17:55:14 +08:00
commit ca411f9770
1 changed files with 15 additions and 9 deletions

View File

@ -47,6 +47,7 @@ import javax.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.net.InetAddress; import java.net.InetAddress;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -259,6 +260,7 @@ public class JdPayServiceImpl implements IJdPayService {
List<TOnlinePaymentSepAccD> sepAccDList = new ArrayList<>(); List<TOnlinePaymentSepAccD> sepAccDList = new ArrayList<>();
if(ObjectUtil.isNotEmpty(jdPayBankProperties)){ if(ObjectUtil.isNotEmpty(jdPayBankProperties)){
List<JdPaySeparateAccountConfig> separateAccounts = jdPayBankProperties.getSeparateAccounts(); List<JdPaySeparateAccountConfig> separateAccounts = jdPayBankProperties.getSeparateAccounts();
separateAccounts.sort(Comparator.comparing(JdPaySeparateAccountConfig::getProportion).reversed());
if(ObjectUtil.isNotEmpty(separateAccounts)){ if(ObjectUtil.isNotEmpty(separateAccounts)){
BigDecimal tradeAmount = onlinePayment.getPayMoney(); BigDecimal tradeAmount = onlinePayment.getPayMoney();
BigDecimal remaining = onlinePayment.getPayMoney(); BigDecimal remaining = onlinePayment.getPayMoney();
@ -267,14 +269,17 @@ public class JdPayServiceImpl implements IJdPayService {
BigDecimal subTradeAmount; BigDecimal subTradeAmount;
if(i == separateAccounts.size() - 1){ if(i == separateAccounts.size() - 1){
subTradeAmount = remaining; subTradeAmount = remaining;
log.info("分账 最后一个账户( 总 - 已分账 ) : {}, {}", subTradeAmount, remaining);
}else{ }else{
subTradeAmount = tradeAmount.subtract(tradeAmount.multiply(separateAccount.getProportion().setScale(2, BigDecimal.ROUND_DOWN)).setScale(2, BigDecimal.ROUND_DOWN)); 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); remaining = remaining.subtract(subTradeAmount).setScale(2, BigDecimal.ROUND_DOWN);
log.info("分账 过程 : {}, {}, {}", subTradeAmount, remaining, separateAccount.getProportion().setScale(2, BigDecimal.ROUND_DOWN));
} }
JdPayDivisionAccountTradeInfo divisionAccountTradeInfo = new JdPayDivisionAccountTradeInfo(); JdPayDivisionAccountTradeInfo divisionAccountTradeInfo = new JdPayDivisionAccountTradeInfo();
divisionAccountTradeInfo.setMerchantNo(separateAccount.getAccount()); divisionAccountTradeInfo.setMerchantNo(separateAccount.getAccount());
divisionAccountTradeInfo.setOutTradeNo(onlinePayment.getBusinessCode() + "_" + (i + 1)); divisionAccountTradeInfo.setOutTradeNo(onlinePayment.getBusinessCode() + "_" + (i + 1));
divisionAccountTradeInfo.setTradeAmount(subTradeAmount.multiply(new BigDecimal(100)).intValue() + ""); divisionAccountTradeInfo.setTradeAmount(subTradeAmount.multiply(new BigDecimal(100)).intValue() + "");
if(subTradeAmount.compareTo(BigDecimal.ZERO) > 0){
divisionAccountTradeInfoList.add(divisionAccountTradeInfo); divisionAccountTradeInfoList.add(divisionAccountTradeInfo);
sepAccDList.add( sepAccDList.add(
TOnlinePaymentSepAccD.builder() TOnlinePaymentSepAccD.builder()
@ -287,6 +292,7 @@ public class JdPayServiceImpl implements IJdPayService {
} }
} }
} }
}
divisionAccount.setVersion( "V2" ); divisionAccount.setVersion( "V2" );
divisionAccount.setDivisionAccountTradeInfoList(divisionAccountTradeInfoList); divisionAccount.setDivisionAccountTradeInfoList(divisionAccountTradeInfoList);