Browse Source

修改诉讼多台车除不尽按照规则若总额-n*平均值<>0,则最后一台车+(总额-n*平均值)

master
dimengzhe 2 weeks ago
parent
commit
fcd1316fac
  1. 29
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loancasecloseapply/LoanCaseCloseApplyService.java
  2. 32
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loancaseexecuteapply/LoanCaseExecuteApplyService.java

29
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loancasecloseapply/LoanCaseCloseApplyService.java

@ -581,16 +581,43 @@ public class LoanCaseCloseApplyService extends MybatisBaseService<LoanCaseCloseA
List<String> busVinSidList = loanCaseProgressVehService.selectByMainSid(loanCaseCloseApply.getBusSid());
busVinSidList.removeAll(Collections.singleton(null));
BigDecimal executeExpenseAmount = BigDecimal.ZERO;
Map<String, BigDecimal> vinAmountMap = new HashMap<>();
if(!busVinSidList.isEmpty()){
LoanCaseExecuteApply loanCaseExecuteApply = loanCaseProgressExecuteService.selectByBusSid(loanCaseCloseApply.getBusSid());
if(loanCaseExecuteApply != null){
executeExpenseAmount= loanCaseExecuteApply.getExecuteExpenseAmount();//预计申请坏账金额
if(executeExpenseAmount != null){
executeExpenseAmount = executeExpenseAmount.divide(BigDecimal.valueOf(busVinSidList.size()),2, RoundingMode.HALF_UP);
int size = busVinSidList.size();
// 四舍五入到2位小数的平均值
BigDecimal roundedAverage = executeExpenseAmount.divide(BigDecimal.valueOf(size), 2, RoundingMode.HALF_UP);
// n台车 × roundedAverage
BigDecimal totalRounded = roundedAverage.multiply(BigDecimal.valueOf(size)).setScale(2, RoundingMode.HALF_UP);
if (executeExpenseAmount.setScale(2, RoundingMode.HALF_UP).compareTo(totalRounded) == 0) {
// 能整除,直接平均
for (String vinSid : busVinSidList) {
vinAmountMap.put(vinSid, roundedAverage);
}
} else {
// 不能整除,最后一台车补差值
BigDecimal totalForNMinusOne = roundedAverage.multiply(BigDecimal.valueOf(size - 1));
BigDecimal lastAmount = executeExpenseAmount.subtract(totalForNMinusOne).setScale(2, RoundingMode.HALF_UP);
for (int i = 0; i < size; i++) {
String vinSid = busVinSidList.get(i);
if (i == size - 1) {
vinAmountMap.put(vinSid, lastAmount);
} else {
vinAmountMap.put(vinSid, roundedAverage);
}
}
}
}
}
for (int i = 0; i < busVinSidList.size(); i++) {
String busVinSid = busVinSidList.get(i);
executeExpenseAmount = vinAmountMap.get(busVinSid);
BusSalesOrderVehicle busSalesOrderVehicle = busSalesOrderVehicleFeign.details(busVinSid).getData();
String customerNumber = "";
BusSalesOrder salesOrder = busSalesOrderFeign.fetchBySid(busSalesOrderVehicle.getSalesOrderSid()).getData();

32
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loancaseexecuteapply/LoanCaseExecuteApplyService.java

@ -556,11 +556,39 @@ public class LoanCaseExecuteApplyService extends MybatisBaseService<LoanCaseExec
SysOrganizationVo deptVo = sysOrganizationFeign.fetchBySid(loanCaseExecuteApply.getDeptSid()).getData();
List<String> busVinSidList = loanCaseProgressVehService.selectByMainSid(loanCaseExecuteApply.getBusSid());
BigDecimal executeAmountInArear= loanCaseExecuteApply.getExecuteAmountInArear();//其中执行欠款金额
if(executeAmountInArear != null){
executeAmountInArear = executeAmountInArear.divide(BigDecimal.valueOf(busVinSidList.size()),2, RoundingMode.HALF_UP);
Map<String, BigDecimal> vinAmountMap = new HashMap<>();
if (executeAmountInArear != null && !busVinSidList.isEmpty()) {
int size = busVinSidList.size();
// 四舍五入到2位小数的平均值
BigDecimal roundedAverage = executeAmountInArear.divide(BigDecimal.valueOf(size), 2, RoundingMode.HALF_UP);
// n台车 × roundedAverage
BigDecimal totalRounded = roundedAverage.multiply(BigDecimal.valueOf(size)).setScale(2, RoundingMode.HALF_UP);
if (executeAmountInArear.setScale(2, RoundingMode.HALF_UP).compareTo(totalRounded) == 0) {
// 能整除,直接平均
for (String vinSid : busVinSidList) {
vinAmountMap.put(vinSid, roundedAverage);
}
} else {
// 不能整除,最后一台车补差值
BigDecimal totalForNMinusOne = roundedAverage.multiply(BigDecimal.valueOf(size - 1));
BigDecimal lastAmount = executeAmountInArear.subtract(totalForNMinusOne).setScale(2, RoundingMode.HALF_UP);
for (int i = 0; i < size; i++) {
String vinSid = busVinSidList.get(i);
if (i == size - 1) {
vinAmountMap.put(vinSid, lastAmount);
} else {
vinAmountMap.put(vinSid, roundedAverage);
}
}
}
}
for (int i = 0; i < busVinSidList.size(); i++) {
String busVinSid = busVinSidList.get(i);
executeAmountInArear = vinAmountMap.get(busVinSid);
BusSalesOrderVehicle busSalesOrderVehicle = busSalesOrderVehicleFeign.details(busVinSid).getData();
String customerNumber = "";
BusSalesOrder salesOrder = busSalesOrderFeign.fetchBySid(busSalesOrderVehicle.getSalesOrderSid()).getData();

Loading…
Cancel
Save