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.StRiverRReal; import com.gunshi.project.hsz.model.StRsvrRReal; import com.gunshi.project.hsz.model.WaterAlarm; import com.gunshi.project.hsz.service.StRiverRRealService; 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; @Autowired private StRiverRRealService stRiverRRealService; // @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); StRiverRReal stRiverRReal = stRiverRRealService.getBaseMapper().queryQByStcd(stcd); if(stRiverRReal != null){ AlarmSet alarmSet = alarmSetMapper.queryByStcd(stcd); //警告水位 BigDecimal warnWaterLevel = alarmSet.getWarnWaterLevel(); //保证水位 BigDecimal promiseWaterLevel = alarmSet.getPromiseWaterLevel(); if(alarmSet == null){ return; }else{ BigDecimal rz =stRiverRReal.getZ(); 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().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); 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().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); waterAlarm.setCurValue(stRiverRReal.getZ()); waterAlarm.setAlarmValue(promiseWaterLevel); waterAlarm.setOverValue(gap); waterAlarm.setAlarmType(level); waterAlarmService.save(waterAlarm); } } } } }