From e60f3171b0da0632f1411a377a3fc6ef768ac170 Mon Sep 17 00:00:00 2001 From: wangqian <1406304305@qq.com> Date: Sat, 30 May 2026 19:42:17 +0800 Subject: [PATCH] 首页查询占比优化保留2位小数 --- urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/app/homepage/vo/AppWorkOrderSummaryRspVo.java | 2 +- urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/homepage/HomepageSummaryServiceImpl.java | 33 +++++++++++++++------------------ 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/app/homepage/vo/AppWorkOrderSummaryRspVo.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/app/homepage/vo/AppWorkOrderSummaryRspVo.java index 51b6af5..b64d94b 100644 --- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/app/homepage/vo/AppWorkOrderSummaryRspVo.java +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/app/homepage/vo/AppWorkOrderSummaryRspVo.java @@ -17,7 +17,7 @@ public class AppWorkOrderSummaryRspVo { /*总条数*/ private String totalNum; /*占比*/ - private List percents; + private List percents; /*单位工单统计*/ private List table; diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/homepage/HomepageSummaryServiceImpl.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/homepage/HomepageSummaryServiceImpl.java index 4e8127a..0a1cfea 100644 --- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/homepage/HomepageSummaryServiceImpl.java +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/homepage/HomepageSummaryServiceImpl.java @@ -320,32 +320,29 @@ public class HomepageSummaryServiceImpl implements HomepageSummaryService{ .mapToInt(AppWorkOrderSummaryVo::getTotal) .sum(); - List percents; + List percents; if (totalNum <= 0) { - percents = Collections.singletonList(0); + percents = Collections.singletonList(0.00); } else { - List tempPercents = workOrderList.stream() + // 2. 计算原始百分比 + List tempList = workOrderList.stream() .map(vo -> { - double percent = (vo.getTotal() * 100.0) / totalNum; - int round = (int) Math.round(percent); - // 核心:只要 >0 的,至少给 1%,不允许出现 0% - return (round == 0 && vo.getTotal() > 0) ? 1 : round; + double val = (vo.getTotal() * 100.0) / totalNum; + // 保留两位小数 + return Math.round(val * 100.0) / 100.0; }) .collect(Collectors.toList()); - // 校准总和 = 100% - int sum = tempPercents.stream().mapToInt(Integer::intValue).sum(); - int diff = sum - 100; // 多出来的部分,从最大值减掉 + // 3. 计算总和,校准到 100.00 + double sum = tempList.stream().mapToDouble(Double::doubleValue).sum(); + double diff = Math.round((100.00 - sum) * 100.0) / 100.0; - if (diff != 0 && !tempPercents.isEmpty()) { - // 找出最大值的索引,把差值减掉(最合理,不会出现0) - OptionalInt maxIndex = IntStream.range(0, tempPercents.size()) - .reduce((i, j) -> tempPercents.get(i) > tempPercents.get(j) ? i : j); - if (maxIndex.isPresent()) { - tempPercents.set(maxIndex.getAsInt(), tempPercents.get(maxIndex.getAsInt()) - diff); - } + if (Math.abs(diff) > 0.001 && !tempList.isEmpty()) { + // 把差值补到最后一个元素上,保证总和 = 100.00 + int lastIdx = tempList.size() - 1; + tempList.set(lastIdx, Math.round((tempList.get(lastIdx) + diff) * 100.0) / 100.0); } - percents = tempPercents; + percents = tempList; } // 6. 封装返回数据 respVo.setLegend(companyNameList); -- libgit2 0.21.4