diff --git a/src/main/java/com/gunshi/project/hsz/entity/vo/AttResBaseVo.java b/src/main/java/com/gunshi/project/hsz/entity/vo/AttResBaseVo.java index 99df414..a177f2a 100644 --- a/src/main/java/com/gunshi/project/hsz/entity/vo/AttResBaseVo.java +++ b/src/main/java/com/gunshi/project/hsz/entity/vo/AttResBaseVo.java @@ -233,7 +233,15 @@ public class AttResBaseVo { @Schema(description = "灌溉流量 (m³/s)") private BigDecimal irrigationFlowSum; + @Schema(description = "灌溉时间") + @JsonFormat(pattern = DateFormatString.YYYY_MM_DD_HH_MM_SS, timezone = "GMT+8") + private Date irrigationFlowTm; + @Schema(description = "生态供水流量 (m³/s)") private BigDecimal ecologyFlow; + @Schema(description = "生态供水时间") + @JsonFormat(pattern = DateFormatString.YYYY_MM_DD_HH_MM_SS, timezone = "GMT+8") + private Date ecologyFlowTm; + } diff --git a/src/main/java/com/gunshi/project/hsz/service/ReservoirWaterService.java b/src/main/java/com/gunshi/project/hsz/service/ReservoirWaterService.java index 79205c0..378fa23 100644 --- a/src/main/java/com/gunshi/project/hsz/service/ReservoirWaterService.java +++ b/src/main/java/com/gunshi/project/hsz/service/ReservoirWaterService.java @@ -76,13 +76,17 @@ public class ReservoirWaterService { for (AttResBaseVo vo : attResBaseVos) { BigDecimal rz = vo.getRz(); - List zvarlList = stZvarlBMapper.selectList(null); - for (StZvarlB zvarl : zvarlList) { - if (zvarl.getRz().equals(rz)) { - vo.setNowCap(zvarl.getW()); - break; - } - } + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.orderByAsc(StZvarlB::getRz); + List zvarlList = stZvarlBMapper.selectList(queryWrapper); + BigDecimal w = stZvarlBService.getWByZvarl(zvarlList, rz); + vo.setNowCap(w); +// for (StZvarlB zvarl : zvarlList) { +// if (zvarl.getRz().equals(rz)) { +// vo.setNowCap(zvarl.getW()); +// break; +// } +// } } //查询所有测站的库容曲线 // List zvarlList = queryZval(attResBaseVos.stream().map(AttResBaseVo::getStcd).collect(Collectors.toList())); @@ -156,7 +160,14 @@ public class ReservoirWaterService { totalSum = totalSum.add(stWaterRReal2.getQ()); } for (AttResBaseVo attResBaseVo : voList) { + //设置灌溉流量 attResBaseVo.setIrrigationFlowSum(totalSum); + //设置灌溉流量时间 + if(stWaterRReal1 != null){ + attResBaseVo.setIrrigationFlowTm(stWaterRReal1.getTm()); + }else if(stWaterRReal2 != null){ + attResBaseVo.setIrrigationFlowTm(stWaterRReal2.getTm()); + } } //获取新建生态供水流量站最新得流量 String ecologyStcd = "1114"; @@ -164,7 +175,10 @@ public class ReservoirWaterService { ecologyQw.eq("stcd", ecologyStcd).orderBy(true, false, "tm"); StWaterRReal ecologyWaterRReal = stWaterRRealService.getOne(ecologyQw); if(ecologyWaterRReal != null){ - voList.stream().forEach(o -> o.setEcologyFlow(ecologyWaterRReal.getQ())); + voList.stream().forEach(o -> { + o.setEcologyFlow(ecologyWaterRReal.getQ()); + o.setEcologyFlowTm(ecologyWaterRReal.getTm()); + }); } return voList; } diff --git a/src/main/java/com/gunshi/project/hsz/service/StStbprpBService.java b/src/main/java/com/gunshi/project/hsz/service/StStbprpBService.java index eb0496d..d1dfe4a 100644 --- a/src/main/java/com/gunshi/project/hsz/service/StStbprpBService.java +++ b/src/main/java/com/gunshi/project/hsz/service/StStbprpBService.java @@ -243,64 +243,89 @@ public class StStbprpBService extends ServiceImpl { BigDecimal maxYearSv = BigDecimal.ZERO; Date maxQStartTime = null; Date maxQEndTime = null; - boolean inMaxQPeriod = false; - int idx = 0; - for (int i =0;i 0){ - int compare = complex.getSv().compareTo(maxYearSv); - if(compare > 0){ - //发现更大的溢洪流量 - maxYearSv = complex.getSv(); - maxQStartTime = rsvr.getTm(); - maxQEndTime = null; - inMaxQPeriod = true; - }else if(compare == 0 && inMaxQPeriod){ - // 连续的最大Q值,更新结束时间 - // 如果是最后一条数据,使用当前时间作为结束时间 - if (i == rsvrList.size() - 1) { - maxQEndTime = now; - } else { - maxQEndTime = rsvrList.get(i + 1).getTm(); - } - }else{ - // Q值变小,结束当前最大Q值期间 - inMaxQPeriod = false; + + BigDecimal currentSv = complex.getSv(); + complexList.add(complex); + + /** + * 嗯,这段代码,,,希望未来的你能看得懂 + */ + // 处理溢洪量逻辑 + if (currentSv.compareTo(BigDecimal.ZERO) > 0) { + // 1. 发现更大的溢洪量 + if (currentSv.compareTo(maxYearSv) > 0) { + maxYearSv = currentSv; + // 开始新的最大值段 + currentSegmentStart = rsvr.getTm(); + currentSegmentValue = currentSv; + segmentActive = true; + maxQStartTime = currentSegmentStart; + maxQEndTime = null; // 重置结束时间 + } + // 2. 等于当前最大值且在活跃段中 + else if (currentSv.compareTo(maxYearSv) == 0 && segmentActive) { + // 继续当前段,不更新结束时间(等待第一个小于的值) + // 这里什么都不做,保持当前状态 + } + // 3. 小于当前最大值且在活跃段中 + else if (currentSv.compareTo(maxYearSv) < 0 && segmentActive) { + // 找到第一个小于最大值的点,作为结束时间 + maxQEndTime = rsvr.getTm(); + segmentActive = false; // 结束当前段 + } + // 4. 等于当前最大值但不在活跃段中(新的连续段开始) + else if (currentSv.compareTo(maxYearSv) == 0 && !segmentActive) { + // 开始新的连续段 + currentSegmentStart = rsvr.getTm(); + currentSegmentValue = currentSv; + segmentActive = true; + // 更新全局开始时间(取最新的开始时间) + maxQStartTime = currentSegmentStart; + maxQEndTime = null; // 重置结束时间 + } + } else { + // 遇到0值且在活跃段中 + if (segmentActive && currentSegmentValue.compareTo(maxYearSv) == 0) { + // 找到第一个小于最大值的点(0值),作为结束时间 + maxQEndTime = rsvr.getTm(); + segmentActive = false; } } - - complexList.add(complex); - idx++; } - // 设置最大Q值及其时间范围 + + // 处理最后一条数据仍是最大值的情况 + if (segmentActive && maxQStartTime != null && maxQEndTime == null) { + maxQEndTime = new Date(); // 结束时间为当前时间 + } + // 设置结果 vo.setCurrYearMaxVal(maxYearSv); - if (maxQStartTime != null) { + if (maxQStartTime != null && maxQEndTime != null) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - if (maxQEndTime != null) { - String period = sdf.format(maxQStartTime) + " ~ " + sdf.format(maxQEndTime); - vo.setMaxOverflowPeriod(period); - } else { - // 如果最大Q值只出现在一个时间点,时间范围就是这个时间点 - String period = sdf.format(maxQStartTime); - vo.setMaxOverflowPeriod(period); - } + String period = sdf.format(maxQStartTime) + " ~ " + sdf.format(maxQEndTime); + vo.setMaxOverflowPeriod(period); } else { vo.setMaxOverflowPeriod("无溢洪记录"); } diff --git a/src/main/java/com/gunshi/project/hsz/service/StZvarlBService.java b/src/main/java/com/gunshi/project/hsz/service/StZvarlBService.java index e9c79d9..a132a5d 100644 --- a/src/main/java/com/gunshi/project/hsz/service/StZvarlBService.java +++ b/src/main/java/com/gunshi/project/hsz/service/StZvarlBService.java @@ -94,11 +94,11 @@ public class StZvarlBService extends ServiceImpl { BigDecimal minRz = zvarlBS.get(0).getRz(); BigDecimal maxRz = zvarlBS.get(zvarlBS.size() - 1).getRz(); if (rz.compareTo(minRz) < 0) { - // 低于最低水位,可以选择抛出异常或进行外推(这里选择抛出异常) + // 低于最低水位,返回值0 return BigDecimal.ZERO; } if (rz.compareTo(maxRz) > 0) { - // 高于最高水位,可以选择抛出异常或进行外推(这里选择抛出异常) + // 高于最高水位,返回值0 return BigDecimal.ZERO; } int l = 0;