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()); }