diff --git a/src/main/java/com/gunshi/project/hsz/timetask/AlarmTask.java b/src/main/java/com/gunshi/project/hsz/timetask/AlarmTask.java new file mode 100644 index 0000000..3c635ef --- /dev/null +++ b/src/main/java/com/gunshi/project/hsz/timetask/AlarmTask.java @@ -0,0 +1,158 @@ +package com.gunshi.project.hsz.timetask; + + +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +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.mapper.StRsvrRRealMapper; +import com.gunshi.project.hsz.model.AlarmSet; +import com.gunshi.project.hsz.model.StRsvrRReal; +import com.gunshi.project.hsz.model.WaterAlarm; +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.LocalDateTime; +import java.time.ZoneId; +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 StRsvrRRealMapper stRsvrRRealMapper; + + @Autowired + private AttResBaseMapper attResBaseMapper; + + @Autowired + private WaterAlarmService waterAlarmService; + +// @Async +// @Scheduled(fixedRate = 5, timeUnit = TimeUnit.MINUTES) + public void updateAlarmSet(){ + //查询告警设置中所有的配置的站点 + List alarmSets = alarmSetMapper.selectList(null); + //去实时水情查询数据 + for (AlarmSet alarmSet : alarmSets) { + String stcd = alarmSet.getStcd();//获取站点编号 + saveRiverData(stcd); + } + } + +// @Async +// @Scheduled(fixedRate = 5, timeUnit = TimeUnit.MINUTES) + public void updateWaterAlarm(){ + List attResBaseVos = attResBaseMapper.queryList(); + AttResBaseVo attResBaseVo = attResBaseVos.get(0); + saveResStData(attResBaseVo); + } + + private void saveResStData(AttResBaseVo entity){ + Integer calState = entity.getCalState();//是否超校核 + + Integer desState = entity.getDesState();//是否超设计 + + Integer flState = entity.getFlState();//是否超汛限 + + 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().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); + 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().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); + 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().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); + 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){ + StRsvrRReal stRsvrRReal = stRsvrRRealMapper.queryRzByStcd(stcd); + if(stRsvrRReal != null){ + AlarmSet alarmSet = alarmSetMapper.queryByStcd(stcd); + //警告水位 + BigDecimal warnWaterLevel = alarmSet.getWarnWaterLevel(); + //保证水位 + BigDecimal promiseWaterLevel = alarmSet.getPromiseWaterLevel(); + if(alarmSet == null){ + return; + }else{ + BigDecimal rz = new BigDecimal(stRsvrRReal.getRz()); + 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(stRsvrRReal.getStcd()); + waterAlarm.setStnm(stRsvrRReal.getStnm()); + waterAlarm.setAlarmTime(stRsvrRReal.getTm().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); + waterAlarm.setCurValue(new BigDecimal(stRsvrRReal.getRz())); + 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(stRsvrRReal.getStcd()); + waterAlarm.setStnm(stRsvrRReal.getStnm()); + waterAlarm.setAlarmTime(stRsvrRReal.getTm().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); + waterAlarm.setCurValue(new BigDecimal(stRsvrRReal.getRz())); + waterAlarm.setAlarmValue(promiseWaterLevel); + waterAlarm.setOverValue(gap); + waterAlarm.setAlarmType(level); + waterAlarmService.save(waterAlarm); + } + } + } + + + } +}