gunshi-project-ss/src/main/java/com/gunshi/project/ss/service/ScreenMoniotrService.java

158 lines
6.3 KiB
Java

package com.gunshi.project.ss.service;
import com.gunshi.project.ss.common.mapper.StPptnRRealMapper;
import com.gunshi.project.ss.common.model.StFlowR;
import com.gunshi.project.ss.common.model.StPptnRReal;
import com.gunshi.project.ss.common.model.StRsvrR;
import com.gunshi.project.ss.common.model.StStbprpB;
import com.gunshi.project.ss.common.util.LocalDateTimeConverter;
import com.gunshi.project.ss.entity.vo.AttResBaseVo;
import com.gunshi.project.ss.entity.vo.ScreenRealFlowVo;
import com.gunshi.project.ss.entity.vo.ScreenRealPptnVo;
import com.gunshi.project.ss.entity.vo.ScreenRsvrVo;
import com.gunshi.project.ss.mapper.RealRainMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Service
@Slf4j
public class ScreenMoniotrService {
@Autowired
private StStbprpBService stStbprpBService;
@Autowired
private AttResBaseService attResBaseService;
@Autowired
private ReservoirWaterService reservoirWaterService;
@Autowired
private StRsvrRService stRsvrRService;
public List<ScreenRsvrVo> getScreenRsvr() {
//查询所有的水库水情站点
List<ScreenRsvrVo> res = new ArrayList<>();
List<AttResBaseVo> attResBaseVos = reservoirWaterService.listV2();
for (AttResBaseVo rsvrStation : attResBaseVos) {
ScreenRsvrVo entity = new ScreenRsvrVo();
entity.setStcd(rsvrStation.getStcd());
entity.setStnm(rsvrStation.getStnm());
entity.setLgtd(rsvrStation.getLgtd());
entity.setLttd(rsvrStation.getLttd());
BigDecimal rz = rsvrStation.getRz();
entity.setRz(rz);
BigDecimal nowCap = rsvrStation.getNowCap();
BigDecimal deadCap = rsvrStation.getDeadCap();
entity.setNowCap(rsvrStation.getNowCap());
if(nowCap != null && deadCap != null){
entity.setEffectiveCap(nowCap.subtract(deadCap));
}
BigDecimal flLowLimLev = rsvrStation.getFlLowLimLev();
entity.setFlLowLimLev(rsvrStation.getFlLowLimLev());
if(rz != null && flLowLimLev != null){
entity.setGapFlLowLimLev(rz.subtract(flLowLimLev));
}
Date tm = rsvrStation.getTm();
if(tm == null){
entity.setStatus(0);
}else{
StRsvrR one = stRsvrRService.lambdaQuery()
.eq(StRsvrR::getStcd, rsvrStation.getStcd())
.lt(StRsvrR::getTm, tm).orderByDesc(StRsvrR::getTm)
.last("limit 1").one();
if(one == null){
entity.setStatus(0);
}else{
entity.setTm(LocalDateTimeConverter.fromDate(one.getTm()));
//如果过去时刻水位高于当前水位 ->表示下降
String lastRz = one.getRz();
BigDecimal decimalRz = new BigDecimal(lastRz);
if(rz.compareTo(decimalRz) < 0){
entity.setStatus(2);
}else if(rz.compareTo(decimalRz) > 0){
entity.setStatus(1);
}else{
entity.setStatus(0);
}
}
}
res.add(entity);
}
return res;
}
@Autowired
private RealRainMapper realRainMapper;
@Autowired
private RainBasinDivisionService rainBasinDivisionService;
public List<ScreenRealPptnVo> gerRealPptn() {
List<StStbprpB> pptnStations = stStbprpBService.getPptnStations();
List<ScreenRealPptnVo> res = new ArrayList<>();
for (StStbprpB pptnStation : pptnStations) {
ScreenRealPptnVo vo = new ScreenRealPptnVo();
vo.setStcd(pptnStation.getStcd());
vo.setStnm(pptnStation.getStnm());
StPptnRReal stPptnRReal = realRainMapper.queryPptnByStcd(vo.getStcd());
if(stPptnRReal != null){
Date tm = stPptnRReal.getTm();
LocalDateTime nowTime = LocalDateTime.now();
LocalDateTime latestTime = LocalDateTime.ofInstant(tm.toInstant(), ZoneId.systemDefault());
boolean isToday = latestTime.toLocalDate().equals(nowTime.toLocalDate());
if(isToday){
Date date = new Date();
//今日雨量
BigDecimal todayDrp = rainBasinDivisionService.queryTodayDrpByStcdAndTime(vo.getStcd(), date);
vo.setTodayDrp(todayDrp);
//昨日雨量
BigDecimal yesterdayDrp = rainBasinDivisionService.queryYesterdayDrpByStcdAndTime(vo.getStcd(), date);
vo.setYesterdayDrp(yesterdayDrp);
//24h雨量
BigDecimal drp24 = rainBasinDivisionService.queryLast24HoursDrpByStcdAndTime(vo.getStcd(),date);
vo.setDrp24(drp24);
//48h雨量
BigDecimal drp48 = rainBasinDivisionService.queryLast48HoursDrpByStcdAndTime(vo.getStcd(),date);
vo.setDrp48(drp48);
//72h雨量
BigDecimal drp72 = rainBasinDivisionService.queryLast72HoursDrpByStcdAndTime(vo.getStcd(),date);
vo.setDrp72(drp72);
}
}
res.add(vo);
}
return res;
}
@Autowired
private StFlowRService stFlowRService;
public List<ScreenRealFlowVo> getRealFlow() {
List<ScreenRealFlowVo> res = new ArrayList<>();
List<StStbprpB> flowStations = stStbprpBService.getFlowStations();
for (StStbprpB flowStation : flowStations) {
ScreenRealFlowVo vo = new ScreenRealFlowVo();
vo.setStcd(flowStation.getStcd());
vo.setStnm(flowStation.getStnm());
StFlowR newDataByStcd = stFlowRService.getNewDataByStcd(flowStation.getStcd());
if(newDataByStcd != null){
vo.setQ(newDataByStcd.getQ());
vo.setTm(newDataByStcd.getTm());
}
res.add(vo);
}
return res;
}
}