From fcd1316fac2be86b2676bd35ad1599dd6035c61f Mon Sep 17 00:00:00 2001 From: dimengzhe Date: Wed, 21 May 2025 09:16:18 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=AF=89=E8=AE=BC=E5=A4=9A?= =?UTF-8?q?=E5=8F=B0=E8=BD=A6=E9=99=A4=E4=B8=8D=E5=B0=BD=E6=8C=89=E7=85=A7?= =?UTF-8?q?=E8=A7=84=E5=88=99=E8=8B=A5=E6=80=BB=E9=A2=9D-n*=E5=B9=B3?= =?UTF-8?q?=E5=9D=87=E5=80=BC<>0,=E5=88=99=E6=9C=80=E5=90=8E=E4=B8=80?= =?UTF-8?q?=E5=8F=B0=E8=BD=A6+=EF=BC=88=E6=80=BB=E9=A2=9D-n*=E5=B9=B3?= =?UTF-8?q?=E5=9D=87=E5=80=BC=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LoanCaseCloseApplyService.java | 29 ++++++++++++++++- .../LoanCaseExecuteApplyService.java | 32 +++++++++++++++++-- 2 files changed, 58 insertions(+), 3 deletions(-) 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();