193 lines
7.9 KiB
Java
193 lines
7.9 KiB
Java
package com.gunshi.project.hsz.timetask;
|
|
|
|
|
|
import com.gunshi.project.hsz.common.model.StStbprpB;
|
|
import com.gunshi.project.hsz.entity.enums.AlarmTypeEnum;
|
|
import com.gunshi.project.hsz.entity.vo.AttResBaseVo;
|
|
import com.gunshi.project.hsz.mapper.AlarmSetMapper;
|
|
import com.gunshi.project.hsz.mapper.AttResBaseMapper;
|
|
import com.gunshi.project.hsz.model.AlarmSet;
|
|
import com.gunshi.project.hsz.common.model.StRiverRReal;
|
|
import com.gunshi.project.hsz.model.WaterAlarm;
|
|
import com.gunshi.project.hsz.service.StRiverRRealService;
|
|
import com.gunshi.project.hsz.service.StRsvrRService;
|
|
import com.gunshi.project.hsz.service.StStbprpBService;
|
|
import com.gunshi.project.hsz.service.WaterAlarmService;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.context.annotation.Profile;
|
|
import org.springframework.scheduling.annotation.Async;
|
|
import org.springframework.scheduling.annotation.EnableScheduling;
|
|
import org.springframework.scheduling.annotation.Scheduled;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
import java.math.BigDecimal;
|
|
import java.time.Instant;
|
|
import java.util.List;
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
/**
|
|
* 告警定时任务
|
|
*/
|
|
@Component
|
|
@Slf4j
|
|
@EnableScheduling
|
|
@Profile({"prod","dev","local"})
|
|
public class AlarmTask {
|
|
|
|
@Autowired
|
|
private AlarmSetMapper alarmSetMapper;
|
|
|
|
@Autowired
|
|
private AttResBaseMapper attResBaseMapper;
|
|
|
|
@Autowired
|
|
private WaterAlarmService waterAlarmService;
|
|
|
|
@Autowired
|
|
private StRiverRRealService stRiverRRealService;
|
|
|
|
@Autowired
|
|
private StStbprpBService stStbprpBService;
|
|
|
|
@Async
|
|
@Scheduled(cron = "0 7 * * * *")
|
|
public void updateAlarmSet(){
|
|
//查询告警设置中所有的配置的站点
|
|
List<AlarmSet> alarmSets = alarmSetMapper.selectList(null);
|
|
//去实时水情查询数据
|
|
for (AlarmSet alarmSet : alarmSets) {
|
|
String stcd = alarmSet.getStcd();//获取站点编号
|
|
saveRiverData(stcd);
|
|
}
|
|
}
|
|
|
|
@Async
|
|
@Scheduled(cron = "0 7 * * * *")
|
|
public void updateWaterAlarm(){
|
|
List<AttResBaseVo> attResBaseVos = attResBaseMapper.queryList2();
|
|
for (AttResBaseVo attResBaseVo : attResBaseVos) {
|
|
saveResStData(attResBaseVo);
|
|
}
|
|
}
|
|
|
|
private void saveResStData(AttResBaseVo entity){
|
|
Integer calState = entity.getCalState();//是否超校核
|
|
|
|
Integer desState = entity.getDesState();//是否超设计
|
|
|
|
Integer flState = entity.getFlState();//是否超汛限
|
|
WaterAlarm waterAlarmNew = waterAlarmService.getBaseMapper().selectByStcdNew(entity.getStcd());
|
|
if(waterAlarmNew != null){
|
|
//判断最新的时间是否大于
|
|
//最新数据时间
|
|
Instant newDataInstant = entity.getTm().toInstant();
|
|
//老数据告警时间
|
|
Instant currentDataInstant = waterAlarmNew.getAlarmTime().toInstant();
|
|
if(newDataInstant.compareTo(currentDataInstant) <= 0){
|
|
//如果不是最新数据,直接结束
|
|
return;
|
|
}
|
|
}
|
|
if(calState > 0){
|
|
Integer level = AlarmTypeEnum.RESERVOIR_OVER_CHECK.getLevel();
|
|
WaterAlarm waterAlarm = new WaterAlarm();
|
|
waterAlarm.setStcd(entity.getStcd());
|
|
waterAlarm.setStnm(entity.getStnm());
|
|
waterAlarm.setAlarmTime(entity.getTm());
|
|
waterAlarm.setCurValue(entity.getRz());
|
|
waterAlarm.setAlarmValue(entity.getCalFloodLev());
|
|
waterAlarm.setOverValue(entity.getRz().subtract(entity.getCalFloodLev()));
|
|
waterAlarm.setAlarmType(level);
|
|
waterAlarmService.save(waterAlarm);
|
|
}
|
|
if(desState > 0){
|
|
Integer level = AlarmTypeEnum.RESERVOIR_OVER_DESIGN.getLevel();
|
|
WaterAlarm waterAlarm = new WaterAlarm();
|
|
waterAlarm.setStcd(entity.getStcd());
|
|
waterAlarm.setStnm(entity.getStnm());
|
|
waterAlarm.setAlarmTime(entity.getTm());
|
|
waterAlarm.setCurValue(entity.getRz());
|
|
waterAlarm.setAlarmValue(entity.getDesFloodLev());
|
|
waterAlarm.setOverValue(entity.getRz().subtract(entity.getDesFloodLev()));
|
|
waterAlarm.setAlarmType(level);
|
|
waterAlarmService.save(waterAlarm);
|
|
}
|
|
if(flState > 0){
|
|
Integer level = AlarmTypeEnum.RESERVOIR_OVER_FLOOD_LIMIT.getLevel();
|
|
WaterAlarm waterAlarm = new WaterAlarm();
|
|
waterAlarm.setStcd(entity.getStcd());
|
|
waterAlarm.setStnm(entity.getStnm());
|
|
waterAlarm.setAlarmTime(entity.getTm());
|
|
waterAlarm.setCurValue(entity.getRz());
|
|
waterAlarm.setAlarmValue(entity.getFlLowLimLev());
|
|
waterAlarm.setOverValue(entity.getRz().subtract(entity.getFlLowLimLev()));
|
|
waterAlarm.setAlarmType(level);
|
|
waterAlarmService.save(waterAlarm);
|
|
}
|
|
}
|
|
|
|
private void saveRiverData(String stcd){
|
|
//根据站点编码查询真实水位数据
|
|
StRiverRReal stRiverRReal = stRiverRRealService.getBaseMapper().queryQByStcd(stcd);
|
|
//查询该站点最新一条数据
|
|
WaterAlarm waterAlarmNew = waterAlarmService.getBaseMapper().selectByStcdNew(stcd);
|
|
|
|
|
|
if(stRiverRReal != null){
|
|
//该站点,真实河道水位的最新数据的时间
|
|
Instant newDateInstant = stRiverRReal.getTm().toInstant();
|
|
//告警表中,该站点的最新数据的时间
|
|
if(waterAlarmNew != null){
|
|
Instant curDateInstant = waterAlarmNew.getAlarmTime().toInstant();
|
|
if(newDateInstant.compareTo(curDateInstant) <= 0){
|
|
//如果要插入数据的时间与当前告警表中数据相同,则直接跳过本条数据
|
|
return;
|
|
}
|
|
}
|
|
AlarmSet alarmSet = alarmSetMapper.queryByStcd(stcd);
|
|
//警告水位
|
|
BigDecimal warnWaterLevel = alarmSet.getWarnWaterLevel();
|
|
//保证水位
|
|
BigDecimal promiseWaterLevel = alarmSet.getPromiseWaterLevel();
|
|
if(alarmSet == null){
|
|
return;
|
|
}else{
|
|
BigDecimal rz =stRiverRReal.getZ();
|
|
if(rz == null){
|
|
return;
|
|
}
|
|
if(rz.compareTo(warnWaterLevel) >=0 && rz.compareTo(promiseWaterLevel) <=0){
|
|
BigDecimal gap = rz.subtract(warnWaterLevel);
|
|
//河道超警戒
|
|
Integer level = AlarmTypeEnum.RIVER_OVER_WARNING.getLevel();
|
|
WaterAlarm waterAlarm = new WaterAlarm();
|
|
waterAlarm.setStcd(stRiverRReal.getStcd());
|
|
waterAlarm.setStnm(stRiverRReal.getStnm());
|
|
waterAlarm.setAlarmTime(stRiverRReal.getTm());
|
|
waterAlarm.setCurValue(stRiverRReal.getZ());
|
|
waterAlarm.setAlarmValue(warnWaterLevel);
|
|
waterAlarm.setOverValue(gap);
|
|
waterAlarm.setAlarmType(level);
|
|
waterAlarmService.save(waterAlarm);
|
|
}else if(rz.compareTo(promiseWaterLevel) >0){
|
|
BigDecimal gap = rz.subtract(promiseWaterLevel);
|
|
//河道超保证
|
|
Integer level = AlarmTypeEnum.RIVER_OVER_GUARANTEE.getLevel();
|
|
WaterAlarm waterAlarm = new WaterAlarm();
|
|
waterAlarm.setStcd(stRiverRReal.getStcd());
|
|
waterAlarm.setStnm(stRiverRReal.getStnm());
|
|
waterAlarm.setAlarmTime(stRiverRReal.getTm());
|
|
waterAlarm.setCurValue(stRiverRReal.getZ());
|
|
waterAlarm.setAlarmValue(promiseWaterLevel);
|
|
waterAlarm.setOverValue(gap);
|
|
waterAlarm.setAlarmType(level);
|
|
waterAlarmService.save(waterAlarm);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|