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

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<String> districtNames = top3DistrictNames(rainData);
List<String> allDistricts = allDistrictNames(rainData);
List<String> 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<String, Object> 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<String> allDistrictNames(List<RainfallDistrictSummaryResponseDTO> 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<DisasterRiskData> disasterDataList,
List<RainfallDistrictSummaryResponseDTO> rainData,
List<String> districtNames,
List<String> allDistricts,
List<String> 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()) + "");
@@ -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());
}