最大雨量计算

master
wany 2024-09-25 09:30:41 +08:00
parent 6892654b36
commit 29d65cf805
2 changed files with 37 additions and 1 deletions

View File

@ -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<StPptnRReal> maxRain(@RequestBody @Validated StPptnSo stPptnSo){
return R.ok(rainBasinDivisionService.maxRain(stPptnSo));
}
}

View File

@ -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<StPptnVo> stPptnVos = realRainMapper.queryStPptnPerHourByStcdAndStartTimeAndEndTime(stPptnSo.getStcd(), stPptnSo.getStartTime(), stPptnSo.getEndTime());
stPptnRReal.setH1(stPptnVos.stream().max(Comparator.comparing(StPptnVo::getSumDrp)).get().getSumDrp());
Collections.reverse(stPptnVos);
List<Integer> 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<StPptnVo> stPptnVos) {
List<BigDecimal> 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);
}
}