部分暴雨灾害链报告产出,部分内容待完善
This commit is contained in:
@@ -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());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user