diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loancasecloseapply/LoanCaseCloseApplyService.java b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loancasecloseapply/LoanCaseCloseApplyService.java index 2437424352..c33e649080 100644 --- a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loancasecloseapply/LoanCaseCloseApplyService.java +++ b/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 busVinSidList = loanCaseProgressVehService.selectByMainSid(loanCaseCloseApply.getBusSid()); busVinSidList.removeAll(Collections.singleton(null)); BigDecimal executeExpenseAmount = BigDecimal.ZERO; + Map 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(); diff --git a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loancaseexecuteapply/LoanCaseExecuteApplyService.java b/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loancaseexecuteapply/LoanCaseExecuteApplyService.java index 0d19db0266..94f7060d42 100644 --- a/anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loancaseexecuteapply/LoanCaseExecuteApplyService.java +++ b/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 busVinSidList = loanCaseProgressVehService.selectByMainSid(loanCaseExecuteApply.getBusSid()); BigDecimal executeAmountInArear= loanCaseExecuteApply.getExecuteAmountInArear();//其中执行欠款金额 - if(executeAmountInArear != null){ - executeAmountInArear = executeAmountInArear.divide(BigDecimal.valueOf(busVinSidList.size()),2, RoundingMode.HALF_UP); + Map 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();