From 5497a43e5c20bc3f1e6ae642b8c22fd5ddf71cd2 Mon Sep 17 00:00:00 2001 From: yangzhe123 <2824096059@qq.com> Date: Fri, 29 Aug 2025 09:20:30 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B0=B4=E6=83=85=E5=91=8A=E8=AD=A6/=E5=91=8A?= =?UTF-8?q?=E8=AD=A6=E8=AE=BE=E7=BD=AE=20=E5=AE=9A=E6=97=B6=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../project/hsz/timetask/AlarmTask.java | 158 ++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 src/main/java/com/gunshi/project/hsz/timetask/AlarmTask.java 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); + } + } + } + + + } +}