部分暴雨灾害链报告产出,部分内容待完善

This commit is contained in:
wzy-warehouse
2026-06-28 16:16:51 +08:00
parent 0c59afa490
commit 30acf435ee
2 changed files with 27 additions and 13 deletions
@@ -102,16 +102,18 @@ public class IReportOutputServiceImpl implements ReportOutputService {
// 获取降雨概况 // 获取降雨概况
List<RainfallDistrictSummaryResponseDTO> rainData = fetchRainData(); List<RainfallDistrictSummaryResponseDTO> rainData = fetchRainData();
List<String> districtNames = top3DistrictNames(rainData); List<String> allDistricts = allDistrictNames(rainData);
List<String> top3Districts = top3DistrictNames(rainData);
// 获取风险统计 // 获取风险统计
int riskCount = sumCount(riskSpotsMapper.queryRiskNumberByDistrictName(districtNames)); int riskCount = sumCount(riskSpotsMapper.queryRiskNumberByDistrictName(top3Districts));
int hiddenCount = sumCount(hiddenDangerSpotsMapper.queryHiddenDangerNumberByDistrictName(districtNames)); int hiddenCount = sumCount(hiddenDangerSpotsMapper.queryHiddenDangerNumberByDistrictName(top3Districts));
int predictPointNum = inferenceResultMapper.getTheNumberOfPredictedPoints(); int predictPointNum = sumCount(riskSpotsMapper.queryRiskNumberByDistrictName(allDistricts))
+ sumCount(hiddenDangerSpotsMapper.queryHiddenDangerNumberByDistrictName(allDistricts));
// 构建模板数据模型 // 构建模板数据模型
Map<String, Object> model = buildTemplateModel(sim, disasterDataList, rainData, Map<String, Object> model = buildTemplateModel(sim, disasterDataList, rainData,
districtNames, riskCount, hiddenCount, predictPointNum); allDistricts, top3Districts, riskCount, hiddenCount, predictPointNum);
// 渲染输出 // 渲染输出
return renderReport( return renderReport(
@@ -144,6 +146,16 @@ public class IReportOutputServiceImpl implements ReportOutputService {
return resp != null ? resp.getData() : Collections.emptyList(); return resp != null ? resp.getData() : Collections.emptyList();
} }
/**
* 全部行政区名称
*/
private List<String> allDistrictNames(List<RainfallDistrictSummaryResponseDTO> rainData) {
return rainData.stream()
.filter(d -> d.getDistrictName() != null && !d.getDistrictName().isEmpty())
.map(RainfallDistrictSummaryResponseDTO::getDistrictName)
.collect(Collectors.toList());
}
/** /**
* 降雨量前3行政区 * 降雨量前3行政区
*/ */
@@ -195,7 +207,7 @@ public class IReportOutputServiceImpl implements ReportOutputService {
.map(spot -> { .map(spot -> {
Double prob = probabilities.get(spot.getId() + "_1"); Double prob = probabilities.get(spot.getId() + "_1");
if (prob == null) return null; if (prob == null) return null;
String level = prob >= 0.70 ? "" : ""; String level = prob >= 70 ? "" : "";
return new DisasterRiskData.SpotRisk() return new DisasterRiskData.SpotRisk()
.setPosition(spot.getPosition()) .setPosition(spot.getPosition())
.setProbability(prob) .setProbability(prob)
@@ -242,7 +254,8 @@ public class IReportOutputServiceImpl implements ReportOutputService {
* @param sim 模拟结果 * @param sim 模拟结果
* @param disasterDataList 灾害数据 * @param disasterDataList 灾害数据
* @param rainData 降雨数据 * @param rainData 降雨数据
* @param districtNames 灾害名称 * @param allDistricts 所有灾害名称
* @param top3Districts top3灾害名称
* @param riskCount 灾害数量 * @param riskCount 灾害数量
* @param hiddenCount 隐患数量 * @param hiddenCount 隐患数量
* @param predictPointNum 预测点数 * @param predictPointNum 预测点数
@@ -252,7 +265,8 @@ public class IReportOutputServiceImpl implements ReportOutputService {
XianInferenceResult sim, XianInferenceResult sim,
List<DisasterRiskData> disasterDataList, List<DisasterRiskData> disasterDataList,
List<RainfallDistrictSummaryResponseDTO> rainData, List<RainfallDistrictSummaryResponseDTO> rainData,
List<String> districtNames, List<String> allDistricts,
List<String> top3Districts,
int riskCount, int riskCount,
int hiddenCount, int hiddenCount,
int predictPointNum) { 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(), "MM月dd日HH时mm分"));
m.put("降雨时间", DateTimeUtils.datetimeFormat(sim.getOccurredTime(), "yyyy年MM月dd日HH时")); 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("持续时间", cond.getDuration() == null ? 72 : cond.getDuration());
m.put("降雨量", buildRainfallStr(rainData, districtNames)); m.put("降雨量", buildRainfallStr(rainData, allDistricts));
m.put("降雨集中区域", districtNames.isEmpty() ? "" : districtNames.get(0)); m.put("降雨集中区域", String.join("", top3Districts));
m.put("风险区数量", riskCount); m.put("风险区数量", riskCount);
m.put("隐患点数量", hiddenCount); m.put("隐患点数量", hiddenCount);
m.put("致灾因子", String.join("", reportProperties.getDisasterCausingFactors().getRainfall().getType()) + ""); m.put("致灾因子", String.join("", reportProperties.getDisasterCausingFactors().getRainfall().getType()) + "");
@@ -15,7 +15,7 @@ import java.util.concurrent.atomic.AtomicInteger;
*/ */
public class ReportTableBuilder { 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( builder.addRow(Rows.of(
String.valueOf(idx.getAndIncrement()), String.valueOf(idx.getAndIncrement()),
spot.getPosition(), spot.getPosition(),
PCT_FMT.format(spot.getProbability()), PCT_FMT.format(spot.getProbability()) + "%",
spot.getRiskLevel() spot.getRiskLevel()
).center().create()); ).center().create());
} }