From 30acf435eed802327c2a4c6aff93933472c34409 Mon Sep 17 00:00:00 2001 From: wzy-warehouse <18135009705@163.com> Date: Sun, 28 Jun 2026 16:16:51 +0800 Subject: [PATCH] =?UTF-8?q?=E9=83=A8=E5=88=86=E6=9A=B4=E9=9B=A8=E7=81=BE?= =?UTF-8?q?=E5=AE=B3=E9=93=BE=E6=8A=A5=E5=91=8A=E4=BA=A7=E5=87=BA=EF=BC=8C?= =?UTF-8?q?=E9=83=A8=E5=88=86=E5=86=85=E5=AE=B9=E5=BE=85=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/IReportOutputServiceImpl.java | 36 +++++++++++++------ .../gis/xian/utils/ReportTableBuilder.java | 4 +-- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/gis/xian/service/impl/IReportOutputServiceImpl.java b/src/main/java/com/gis/xian/service/impl/IReportOutputServiceImpl.java index 79aecb3..dd4906a 100644 --- a/src/main/java/com/gis/xian/service/impl/IReportOutputServiceImpl.java +++ b/src/main/java/com/gis/xian/service/impl/IReportOutputServiceImpl.java @@ -102,16 +102,18 @@ public class IReportOutputServiceImpl implements ReportOutputService { // 获取降雨概况 List rainData = fetchRainData(); - List districtNames = top3DistrictNames(rainData); + List allDistricts = allDistrictNames(rainData); + List top3Districts = top3DistrictNames(rainData); // 获取风险统计 - int riskCount = sumCount(riskSpotsMapper.queryRiskNumberByDistrictName(districtNames)); - int hiddenCount = sumCount(hiddenDangerSpotsMapper.queryHiddenDangerNumberByDistrictName(districtNames)); - int predictPointNum = inferenceResultMapper.getTheNumberOfPredictedPoints(); + int riskCount = sumCount(riskSpotsMapper.queryRiskNumberByDistrictName(top3Districts)); + int hiddenCount = sumCount(hiddenDangerSpotsMapper.queryHiddenDangerNumberByDistrictName(top3Districts)); + int predictPointNum = sumCount(riskSpotsMapper.queryRiskNumberByDistrictName(allDistricts)) + + sumCount(hiddenDangerSpotsMapper.queryHiddenDangerNumberByDistrictName(allDistricts)); // 构建模板数据模型 Map model = buildTemplateModel(sim, disasterDataList, rainData, - districtNames, riskCount, hiddenCount, predictPointNum); + allDistricts, top3Districts, riskCount, hiddenCount, predictPointNum); // 渲染输出 return renderReport( @@ -144,6 +146,16 @@ public class IReportOutputServiceImpl implements ReportOutputService { return resp != null ? resp.getData() : Collections.emptyList(); } + /** + * 全部行政区名称 + */ + private List allDistrictNames(List rainData) { + return rainData.stream() + .filter(d -> d.getDistrictName() != null && !d.getDistrictName().isEmpty()) + .map(RainfallDistrictSummaryResponseDTO::getDistrictName) + .collect(Collectors.toList()); + } + /** * 降雨量前3行政区 */ @@ -195,7 +207,7 @@ public class IReportOutputServiceImpl implements ReportOutputService { .map(spot -> { Double prob = probabilities.get(spot.getId() + "_1"); if (prob == null) return null; - String level = prob >= 0.70 ? "高" : "中"; + String level = prob >= 70 ? "高" : "中"; return new DisasterRiskData.SpotRisk() .setPosition(spot.getPosition()) .setProbability(prob) @@ -242,7 +254,8 @@ public class IReportOutputServiceImpl implements ReportOutputService { * @param sim 模拟结果 * @param disasterDataList 灾害数据 * @param rainData 降雨数据 - * @param districtNames 灾害名称 + * @param allDistricts 所有灾害名称 + * @param top3Districts top3灾害名称 * @param riskCount 灾害数量 * @param hiddenCount 隐患数量 * @param predictPointNum 预测点数 @@ -252,7 +265,8 @@ public class IReportOutputServiceImpl implements ReportOutputService { XianInferenceResult sim, List disasterDataList, List rainData, - List districtNames, + List allDistricts, + List top3Districts, int riskCount, int hiddenCount, int predictPointNum) { @@ -263,10 +277,10 @@ public class IReportOutputServiceImpl implements ReportOutputService { // 基础文本 m.put("报告时间", DateTimeUtils.datetimeFormat(sim.getOccurredTime(), "MM月dd日HH时mm分")); m.put("降雨时间", DateTimeUtils.datetimeFormat(sim.getOccurredTime(), "yyyy年MM月dd日HH时")); - m.put("降雨地区", String.join("、", districtNames)); + m.put("降雨地区", String.join("、", allDistricts)); m.put("持续时间", cond.getDuration() == null ? 72 : cond.getDuration()); - m.put("降雨量", buildRainfallStr(rainData, districtNames)); - m.put("降雨集中区域", districtNames.isEmpty() ? "" : districtNames.get(0)); + m.put("降雨量", buildRainfallStr(rainData, allDistricts)); + m.put("降雨集中区域", String.join("、", top3Districts)); m.put("风险区数量", riskCount); m.put("隐患点数量", hiddenCount); m.put("致灾因子", String.join("、", reportProperties.getDisasterCausingFactors().getRainfall().getType()) + "等"); diff --git a/src/main/java/com/gis/xian/utils/ReportTableBuilder.java b/src/main/java/com/gis/xian/utils/ReportTableBuilder.java index cd99036..27bdc3c 100644 --- a/src/main/java/com/gis/xian/utils/ReportTableBuilder.java +++ b/src/main/java/com/gis/xian/utils/ReportTableBuilder.java @@ -15,7 +15,7 @@ import java.util.concurrent.atomic.AtomicInteger; */ public class ReportTableBuilder { - private static final DecimalFormat PCT_FMT = new DecimalFormat("0.00%"); + private static final DecimalFormat PCT_FMT = new DecimalFormat("0.00"); /** * 构建灾害风险表(四列:序号、位置、发生概率、灾害等级) @@ -34,7 +34,7 @@ public class ReportTableBuilder { builder.addRow(Rows.of( String.valueOf(idx.getAndIncrement()), spot.getPosition(), - PCT_FMT.format(spot.getProbability()), + PCT_FMT.format(spot.getProbability()) + "%", spot.getRiskLevel() ).center().create()); }