From 309e1d8d926a16c231646ae95c45c6f388d46dfc Mon Sep 17 00:00:00 2001 From: yangzhe123 <2824096059@qq.com> Date: Mon, 8 Sep 2025 09:56:44 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B0=B4=E6=83=85=E5=91=8A=E8=AD=A6=E5=AE=9A?= =?UTF-8?q?=E6=97=B6=E4=BB=BB=E5=8A=A1=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../project/hsz/mapper/WaterAlarmMapper.java | 9 ++++ .../gunshi/project/hsz/model/WaterAlarm.java | 2 +- .../project/hsz/timetask/AlarmTask.java | 41 ++++++++++++------- 3 files changed, 36 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/gunshi/project/hsz/mapper/WaterAlarmMapper.java b/src/main/java/com/gunshi/project/hsz/mapper/WaterAlarmMapper.java index 929fbc2..5041069 100644 --- a/src/main/java/com/gunshi/project/hsz/mapper/WaterAlarmMapper.java +++ b/src/main/java/com/gunshi/project/hsz/mapper/WaterAlarmMapper.java @@ -52,4 +52,13 @@ ORDER BY alarm_type ASC; """) List countTypeByYear(@Param("year") Integer year); + + + @Select(""" + select t.* from water_alarm t + where t.stcd = #{stcd} + order by t.alarm_time desc + limit 1 +""") + WaterAlarm selectByStcdNew(@Param("stcd") String stcd); } diff --git a/src/main/java/com/gunshi/project/hsz/model/WaterAlarm.java b/src/main/java/com/gunshi/project/hsz/model/WaterAlarm.java index 7c5cf40..26fed45 100644 --- a/src/main/java/com/gunshi/project/hsz/model/WaterAlarm.java +++ b/src/main/java/com/gunshi/project/hsz/model/WaterAlarm.java @@ -71,6 +71,6 @@ public class WaterAlarm { */ @Schema(description = "告警时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - private LocalDateTime alarmTime; + private Date alarmTime; } \ No newline at end of file diff --git a/src/main/java/com/gunshi/project/hsz/timetask/AlarmTask.java b/src/main/java/com/gunshi/project/hsz/timetask/AlarmTask.java index acc7720..df2ee85 100644 --- a/src/main/java/com/gunshi/project/hsz/timetask/AlarmTask.java +++ b/src/main/java/com/gunshi/project/hsz/timetask/AlarmTask.java @@ -20,10 +20,13 @@ import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; +import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneId; +import java.util.Date; import java.util.List; import java.util.concurrent.TimeUnit; @@ -32,16 +35,13 @@ import java.util.concurrent.TimeUnit; */ @Component @Slf4j -//@EnableScheduling -//@Profile({"prod","dev","local"}) +@EnableScheduling +@Profile({"prod","dev","local"}) public class AlarmTask { @Autowired private AlarmSetMapper alarmSetMapper; - @Autowired - private StRsvrRRealMapper stRsvrRRealMapper; - @Autowired private AttResBaseMapper attResBaseMapper; @@ -52,7 +52,7 @@ public class AlarmTask { private StRiverRRealService stRiverRRealService; // @Async -// @Scheduled(fixedRate = 5, timeUnit = TimeUnit.MINUTES) + @Scheduled(fixedRate = 10, timeUnit = TimeUnit.SECONDS) public void updateAlarmSet(){ //查询告警设置中所有的配置的站点 List alarmSets = alarmSetMapper.selectList(null); @@ -64,7 +64,7 @@ public class AlarmTask { } // @Async -// @Scheduled(fixedRate = 5, timeUnit = TimeUnit.MINUTES) + //@Scheduled(fixedRate = 30, timeUnit = TimeUnit.SECONDS) public void updateWaterAlarm(){ List attResBaseVos = attResBaseMapper.queryList(); AttResBaseVo attResBaseVo = attResBaseVos.get(0); @@ -83,7 +83,7 @@ public class AlarmTask { WaterAlarm waterAlarm = new WaterAlarm(); waterAlarm.setStcd(entity.getStcd()); waterAlarm.setStnm(entity.getStnm()); - waterAlarm.setAlarmTime(entity.getTm().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); + waterAlarm.setAlarmTime(entity.getTm()); waterAlarm.setCurValue(entity.getRz()); waterAlarm.setAlarmValue(entity.getCalFloodLev()); waterAlarm.setOverValue(entity.getRz().subtract(entity.getCalFloodLev())); @@ -95,7 +95,7 @@ public class AlarmTask { WaterAlarm waterAlarm = new WaterAlarm(); waterAlarm.setStcd(entity.getStcd()); waterAlarm.setStnm(entity.getStnm()); - waterAlarm.setAlarmTime(entity.getTm().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); + waterAlarm.setAlarmTime(entity.getTm()); waterAlarm.setCurValue(entity.getRz()); waterAlarm.setAlarmValue(entity.getDesFloodLev()); waterAlarm.setOverValue(entity.getRz().subtract(entity.getDesFloodLev())); @@ -107,7 +107,7 @@ public class AlarmTask { WaterAlarm waterAlarm = new WaterAlarm(); waterAlarm.setStcd(entity.getStcd()); waterAlarm.setStnm(entity.getStnm()); - waterAlarm.setAlarmTime(entity.getTm().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); + waterAlarm.setAlarmTime(entity.getTm()); waterAlarm.setCurValue(entity.getRz()); waterAlarm.setAlarmValue(entity.getFlLowLimLev()); waterAlarm.setOverValue(entity.getRz().subtract(entity.getFlLowLimLev())); @@ -117,9 +117,20 @@ public class AlarmTask { } private void saveRiverData(String stcd){ - //StRsvrRReal stRsvrRReal = stRsvrRRealMapper.queryRzByStcd(stcd); + //根据站点编码查询真实水位数据 StRiverRReal stRiverRReal = stRiverRRealService.getBaseMapper().queryQByStcd(stcd); + //查询该站点最新一条数据 + WaterAlarm waterAlarmNew = waterAlarmService.getBaseMapper().selectByStcdNew(stcd); + + if(stRiverRReal != null){ + Instant newDateInstant = stRiverRReal.getTm().toInstant(); + Instant curDateInstant = waterAlarmNew.getAlarmTime().toInstant(); + if(newDateInstant.compareTo(curDateInstant) <= 0){ + //如果要插入数据的时间与当前告警表中数据相同,则直接跳过本条数据 + return; + } + AlarmSet alarmSet = alarmSetMapper.queryByStcd(stcd); //警告水位 BigDecimal warnWaterLevel = alarmSet.getWarnWaterLevel(); @@ -129,27 +140,27 @@ public class AlarmTask { return; }else{ BigDecimal rz =stRiverRReal.getZ(); - if(rz.compareTo(warnWaterLevel) >=0 && rz.compareTo(promiseWaterLevel) <0){ + 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.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){ + }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.setAlarmTime(stRiverRReal.getTm()); waterAlarm.setCurValue(stRiverRReal.getZ()); waterAlarm.setAlarmValue(promiseWaterLevel); waterAlarm.setOverValue(gap);