diff --git a/src/main/java/com/gunshi/project/xyt/controller/RainBasinDivisionController.java b/src/main/java/com/gunshi/project/xyt/controller/RainBasinDivisionController.java index dd32e0c..90205bd 100644 --- a/src/main/java/com/gunshi/project/xyt/controller/RainBasinDivisionController.java +++ b/src/main/java/com/gunshi/project/xyt/controller/RainBasinDivisionController.java @@ -7,6 +7,7 @@ import com.gunshi.project.xyt.entity.so.StPptnSo; import com.gunshi.project.xyt.entity.vo.CartogramVo; import com.gunshi.project.xyt.entity.vo.StPptnDetailsVo; import com.gunshi.project.xyt.entity.vo.StPptnVo; +import com.gunshi.project.xyt.model.StPptnRReal; import com.gunshi.project.xyt.service.RainBasinDivisionService; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -54,5 +55,8 @@ public class RainBasinDivisionController { return R.ok(rainBasinDivisionService.queryStPptnDetailsByStcd(stcd)); } - + @Post(path = "/maxRain",summary = "根据测站编码查询时间段内最大小时雨量") + public R maxRain(@RequestBody @Validated StPptnSo stPptnSo){ + return R.ok(rainBasinDivisionService.maxRain(stPptnSo)); + } } diff --git a/src/main/java/com/gunshi/project/xyt/service/RainBasinDivisionService.java b/src/main/java/com/gunshi/project/xyt/service/RainBasinDivisionService.java index 4fad2cb..389fbac 100644 --- a/src/main/java/com/gunshi/project/xyt/service/RainBasinDivisionService.java +++ b/src/main/java/com/gunshi/project/xyt/service/RainBasinDivisionService.java @@ -24,6 +24,8 @@ import java.time.LocalDateTime; import java.time.ZoneId; import java.time.temporal.ChronoUnit; import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.IntStream; /** * Description: @@ -457,4 +459,34 @@ public class RainBasinDivisionService { return count + 1; } + public StPptnRReal maxRain(StPptnSo stPptnSo) { + StPptnRReal stPptnRReal = new StPptnRReal(); + List stPptnVos = realRainMapper.queryStPptnPerHourByStcdAndStartTimeAndEndTime(stPptnSo.getStcd(), stPptnSo.getStartTime(), stPptnSo.getEndTime()); + stPptnRReal.setH1(stPptnVos.stream().max(Comparator.comparing(StPptnVo::getSumDrp)).get().getSumDrp()); + Collections.reverse(stPptnVos); + List list = Arrays.asList(3, 6, 12); + for(Integer num : list){ + BigDecimal data = calcMaxData(num,stPptnVos); + if(num == 3){ + stPptnRReal.setH3(data); + } + if(num == 6){ + stPptnRReal.setH6(data); + } + if(num == 12){ + stPptnRReal.setH12(data); + } + } + return stPptnRReal; + } + + private BigDecimal calcMaxData(Integer num, List stPptnVos) { + List list = stPptnVos.stream().map(StPptnVo::getSumDrp).collect(Collectors.toList()); + return IntStream.range(0, list.size() - num -1) + .mapToObj(i -> list.subList(i, Math.min(i + num, list.size()))) // 获取每几个数的子列表 + .map(sublist -> sublist.stream().reduce(BigDecimal.ZERO, BigDecimal::add)) + .max(BigDecimal::compareTo) + .orElse(BigDecimal.ZERO); + } + }