最大雨量计算
parent
6892654b36
commit
29d65cf805
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue