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