四全-水库溢洪
parent
5d234dc250
commit
ed19e7e57d
|
|
@ -16,19 +16,23 @@ import java.util.Date;
|
||||||
public class StZqrlBCountVo {
|
public class StZqrlBCountVo {
|
||||||
private String stcd;
|
private String stcd;
|
||||||
|
|
||||||
private BigDecimal val;
|
private BigDecimal val; //溢洪流量
|
||||||
|
|
||||||
private BigDecimal currDayValSum;
|
private BigDecimal currDayValSum; //当日溢洪流量
|
||||||
|
|
||||||
@JsonFormat(pattern = DateFormatString.YYYY_MM_DD_HH_MM_SS, timezone = "GMT+8")
|
@JsonFormat(pattern = DateFormatString.YYYY_MM_DD_HH_MM_SS, timezone = "GMT+8")
|
||||||
private Date createTime;
|
private Date createTime;
|
||||||
|
|
||||||
private BigDecimal currMonthSum;
|
private BigDecimal currMonthSum;// 当月溢洪流量
|
||||||
|
|
||||||
private BigDecimal currYearSum;
|
private BigDecimal currYearSum; // 当年溢洪流量
|
||||||
|
|
||||||
|
private Long currYearCount; // 本年溢洪次数
|
||||||
|
|
||||||
|
private BigDecimal currYearMaxVal; // 本年单次最大溢洪量
|
||||||
|
|
||||||
|
private String maxOverflowPeriod; // 最大溢洪量时间段
|
||||||
|
|
||||||
private Long currYearCount;
|
|
||||||
|
|
||||||
private BigDecimal currYearMaxVal;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
@ -192,7 +193,7 @@ public class StStbprpBService extends ServiceImpl<StStbprpBMapper, StStbprpB> {
|
||||||
StZqrlBCountVo vo = new StZqrlBCountVo();
|
StZqrlBCountVo vo = new StZqrlBCountVo();
|
||||||
vo.setStcd(stcd.toString());
|
vo.setStcd(stcd.toString());
|
||||||
|
|
||||||
//取出当月的水位
|
//取出当月的时间 20xx-xx-01 00:00:00
|
||||||
Calendar calendar = Calendar.getInstance();
|
Calendar calendar = Calendar.getInstance();
|
||||||
Date now = calendar.getTime();
|
Date now = calendar.getTime();
|
||||||
calendar.set(Calendar.DAY_OF_MONTH, 1);
|
calendar.set(Calendar.DAY_OF_MONTH, 1);
|
||||||
|
|
@ -200,13 +201,35 @@ public class StStbprpBService extends ServiceImpl<StStbprpBMapper, StStbprpB> {
|
||||||
calendar.set(Calendar.MINUTE, 0);
|
calendar.set(Calendar.MINUTE, 0);
|
||||||
calendar.set(Calendar.SECOND, 0);
|
calendar.set(Calendar.SECOND, 0);
|
||||||
calendar.set(Calendar.MILLISECOND, 0);
|
calendar.set(Calendar.MILLISECOND, 0);
|
||||||
|
Date monthStart = calendar.getTime();
|
||||||
|
|
||||||
|
//取本年的时间 20xx-01-01 00:00:00
|
||||||
|
calendar.set(Calendar.MONTH,0);
|
||||||
|
calendar.set(Calendar.DAY_OF_MONTH, 1);
|
||||||
|
calendar.set(Calendar.HOUR_OF_DAY, 0);
|
||||||
|
calendar.set(Calendar.MINUTE, 0);
|
||||||
|
calendar.set(Calendar.SECOND, 0);
|
||||||
|
calendar.set(Calendar.MILLISECOND, 0);
|
||||||
|
Date yearStart = calendar.getTime();
|
||||||
|
|
||||||
|
|
||||||
|
calendar.setTime(now);
|
||||||
|
calendar.set(Calendar.HOUR_OF_DAY, 0);
|
||||||
|
calendar.set(Calendar.MINUTE, 0);
|
||||||
|
calendar.set(Calendar.SECOND, 0);
|
||||||
|
calendar.set(Calendar.MILLISECOND, 0);
|
||||||
|
Date dayStart = calendar.getTime();
|
||||||
|
|
||||||
|
//查询当年水位数据
|
||||||
List<StRsvrR> rsvrList = rsvrRService.lambdaQuery()
|
List<StRsvrR> rsvrList = rsvrRService.lambdaQuery()
|
||||||
.eq(StRsvrR::getStcd, stcd)
|
.eq(StRsvrR::getStcd, stcd)
|
||||||
.between(StRsvrR::getTm, calendar.getTime(), now)
|
.between(StRsvrR::getTm, yearStart, now)
|
||||||
.orderByAsc(true, StRsvrR::getTm)
|
.orderByAsc(true, StRsvrR::getTm)
|
||||||
.list();
|
.list();
|
||||||
|
|
||||||
|
//获取水位流量关系
|
||||||
List<StZqrlB> zqrlList = stZqrlBService.list();
|
List<StZqrlB> zqrlList = stZqrlBService.list();
|
||||||
|
zqrlList.sort(Comparator.comparing(StZqrlB::getZ));
|
||||||
|
|
||||||
List<RsvrComplexVo> complexList = new ArrayList<>();
|
List<RsvrComplexVo> complexList = new ArrayList<>();
|
||||||
int idx = 0;
|
int idx = 0;
|
||||||
|
|
@ -216,14 +239,19 @@ public class StStbprpBService extends ServiceImpl<StStbprpBMapper, StStbprpB> {
|
||||||
complex.setRz(rz);
|
complex.setRz(rz);
|
||||||
complex.setTm(rsvr.getTm());
|
complex.setTm(rsvr.getTm());
|
||||||
|
|
||||||
BigDecimal q = stZqrlBService.getQFromZqrl(rz, zqrlList);
|
//TODO 这里需要重新计算水位-流量对应数据
|
||||||
|
//BigDecimal q = stZqrlBService.getQFromZqrl(rz, zqrlList);
|
||||||
|
BigDecimal q = stZqrlBService.getQByZqrl(zqrlList,rz);
|
||||||
complex.setQ(q);
|
complex.setQ(q);
|
||||||
if (idx == 0) {
|
//计算当前时间段溢洪量
|
||||||
complex.setSv(BigDecimal.ZERO);
|
complex.setSv(complex.getQ().multiply(BigDecimal.valueOf(60 * 60)));
|
||||||
} else {
|
// if (idx == 0) {
|
||||||
RsvrComplexVo complexPrev = complexList.get(idx - 1);
|
// complex.setSv(BigDecimal.ZERO);
|
||||||
complex.setSv(complexPrev.getSv().add(complexPrev.getQ().multiply(BigDecimal.valueOf(60 * 60))));
|
// } else {
|
||||||
}
|
// //计算溢洪量
|
||||||
|
// RsvrComplexVo complexPrev = complexList.get(idx - 1);
|
||||||
|
// complex.setSv(complexPrev.getSv().add(complex.getQ().multiply(BigDecimal.valueOf(60 * 60))));
|
||||||
|
// }
|
||||||
|
|
||||||
complexList.add(complex);
|
complexList.add(complex);
|
||||||
idx++;
|
idx++;
|
||||||
|
|
@ -233,22 +261,68 @@ public class StStbprpBService extends ServiceImpl<StStbprpBMapper, StStbprpB> {
|
||||||
vo.setVal(complexList.getLast().getQ());
|
vo.setVal(complexList.getLast().getQ());
|
||||||
vo.setCreateTime(complexList.getLast().getTm());
|
vo.setCreateTime(complexList.getLast().getTm());
|
||||||
|
|
||||||
calendar.setTime(now);
|
|
||||||
calendar.set(Calendar.HOUR_OF_DAY, 0);
|
|
||||||
calendar.set(Calendar.MINUTE, 0);
|
|
||||||
calendar.set(Calendar.SECOND, 0);
|
|
||||||
calendar.set(Calendar.MILLISECOND, 0);
|
|
||||||
Date today = calendar.getTime();
|
|
||||||
//今日sv的和
|
//今日sv的和
|
||||||
BigDecimal sumToday = complexList.stream().filter(complex -> complex.getTm().after(today))
|
BigDecimal sumToday = complexList.stream().filter(complex -> complex.getTm().after(dayStart))
|
||||||
.map(RsvrComplexVo::getSv)
|
.map(RsvrComplexVo::getSv)
|
||||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
vo.setCurrDayValSum(sumToday);
|
vo.setCurrDayValSum(sumToday);
|
||||||
//当月sv的和
|
|
||||||
BigDecimal sumMonth = complexList.stream().map(RsvrComplexVo::getSv)
|
// 当月溢洪量总和(筛选本月数据)
|
||||||
|
BigDecimal sumMonth = complexList.stream()
|
||||||
|
.filter(complex -> (complex.getTm().after(monthStart) || complex.getTm().equals(monthStart))
|
||||||
|
&& complex.getTm().before(now) || complex.getTm().equals(now))
|
||||||
|
.map(RsvrComplexVo::getSv)
|
||||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
vo.setCurrMonthSum(sumMonth);
|
vo.setCurrMonthSum(sumMonth);
|
||||||
|
|
||||||
|
// 当年溢洪量总和(所有数据都是当年的,直接求和)
|
||||||
|
BigDecimal sumYear = complexList.stream()
|
||||||
|
.map(RsvrComplexVo::getSv)
|
||||||
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
vo.setCurrYearSum(sumYear);
|
||||||
|
|
||||||
|
|
||||||
|
// 计算本年溢洪次数(溢洪量>0)
|
||||||
|
long overflowCount = complexList.stream()
|
||||||
|
.filter(complex -> complex.getSv().compareTo(BigDecimal.ZERO) > 0)
|
||||||
|
.count();
|
||||||
|
vo.setCurrYearCount(overflowCount);
|
||||||
|
|
||||||
|
|
||||||
|
// 本年单次最大溢洪量
|
||||||
|
Optional<RsvrComplexVo> maxOverflowComplex = complexList.stream()
|
||||||
|
.max(Comparator.comparing(RsvrComplexVo::getSv));
|
||||||
|
if (maxOverflowComplex.isPresent()) {
|
||||||
|
RsvrComplexVo maxComplex = maxOverflowComplex.get();
|
||||||
|
vo.setCurrYearMaxVal(maxComplex.getSv());
|
||||||
|
|
||||||
|
// 假设最大溢洪量持续了一段时间(这里需要根据业务逻辑确定)
|
||||||
|
// 简单处理:显示发生时间
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat("MM-dd HH:mm:ss");
|
||||||
|
// 如果需要更复杂的时间段计算,可以根据前后数据点来判断
|
||||||
|
int maxIndex = complexList.indexOf(maxComplex);
|
||||||
|
if (maxIndex < complexList.size() - 1) {
|
||||||
|
// 可以取前后时间点作为时间段的参考
|
||||||
|
Date startTime = complexList.get(maxIndex).getTm();
|
||||||
|
Date endTime = complexList.get(maxIndex + 1).getTm();
|
||||||
|
String period = sdf.format(startTime) + " ~ " + sdf.format(endTime);
|
||||||
|
vo.setMaxOverflowPeriod(period);
|
||||||
|
}else{
|
||||||
|
Date startTime = complexList.get(maxIndex).getTm();
|
||||||
|
String period = sdf.format(startTime) + " ~ " + sdf.format(now);
|
||||||
|
vo.setMaxOverflowPeriod(period);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
vo.setCurrYearMaxVal(BigDecimal.ZERO);
|
||||||
|
vo.setMaxOverflowPeriod("无溢洪记录");
|
||||||
|
}
|
||||||
|
// BigDecimal maxOverflow = complexList.stream()
|
||||||
|
// .map(RsvrComplexVo::getSv)
|
||||||
|
// .max(Comparator.naturalOrder())
|
||||||
|
// .orElse(BigDecimal.ZERO);
|
||||||
|
// vo.setCurrYearMaxVal(maxOverflow);
|
||||||
|
|
||||||
return vo;
|
return vo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue