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.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<TOnlinePaymentSepAccD> sepAccDList = new ArrayList<>();
if(ObjectUtil.isNotEmpty(jdPayBankProperties)){
List<JdPaySeparateAccountConfig> 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()
);
}
}
}
}