diff --git a/hzims-service-api/alarm-api/src/main/java/com/hnac/hzims/alarm/constants/AlarmConstants.java b/hzims-service-api/alarm-api/src/main/java/com/hnac/hzims/alarm/constants/AlarmConstants.java index 17e9d45..68bf9c5 100644 --- a/hzims-service-api/alarm-api/src/main/java/com/hnac/hzims/alarm/constants/AlarmConstants.java +++ b/hzims-service-api/alarm-api/src/main/java/com/hnac/hzims/alarm/constants/AlarmConstants.java @@ -1,5 +1,7 @@ package com.hnac.hzims.alarm.constants; +import io.swagger.models.auth.In; + import java.util.Arrays; import java.util.List; @@ -28,19 +30,21 @@ public interface AlarmConstants { Integer IS_WX_MESSAGE = 8; - // 告警来源 : 0- HZ3000告警 1 -等级告警 2 -条件告警 3-FDP智能预警 4-视频预警 + // 告警来源 : 0- HZ3000告警 1 -等级告警 2 -条件告警 3-FDP智能预警 4-视频预警 5-开关机告警 Integer HZ3000_ALARM = 0; Integer LEVEL_ALARM = 1; Integer CONDITION_ALARM = 2; Integer EARLY_WARNING = 3; Integer VIDEO_WARNING = 4; - List ALARAM_SOURCE = Arrays.asList(HZ3000_ALARM,LEVEL_ALARM,CONDITION_ALARM,EARLY_WARNING); + Integer START_STOP_WARNING = 5; + List ALARAM_SOURCE = Arrays.asList(HZ3000_ALARM,LEVEL_ALARM,CONDITION_ALARM,EARLY_WARNING,START_STOP_WARNING); // 子类告警 // HZ3000告警 : 2-告警 3-故障 5-遥测越限 13-通讯中断 14-数据异常 // 等级告警 : 21-一级告警 22-二级告警 23-三级告警 // 智能预警 : 30-智能预警 // 条件告警 : 40-条件告警 + // 开关机告警 : 50-开机告警 51-关机告警 Integer WARNING = 2; Integer FAULT = 3; Integer OFFSIDE = 5; @@ -53,5 +57,8 @@ public interface AlarmConstants { List LEVEL_ALARAM = Arrays.asList(ONE_LEVEL,TWO_LEVEL,THREE_LEVEL); Integer EARLY = 30; Integer CONDITION = 40; + Integer START = 50; + Integer STOP = 51; + List START_STOP_ALARAM = Arrays.asList(START,STOP); String VIDEO_SCHEDULED_TASK= "VideoScheduledTask"; } diff --git a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/AlarmScheduledTask.java b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/AlarmScheduledTask.java index 0f6c56d..6172620 100644 --- a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/AlarmScheduledTask.java +++ b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/AlarmScheduledTask.java @@ -2,17 +2,15 @@ package com.hnac.hzims.scheduled.scheduled; import com.hnac.hzims.scheduled.service.alarm.AlarmQueryService; import com.xxl.job.core.biz.model.ReturnT; -import com.xxl.job.core.handler.annotation.XxlJob; import lombok.extern.slf4j.Slf4j; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.Date; -import static com.hnac.hzims.operational.main.constant.MainConstants.START_STOP_ALARM; - /** * 告警定时任务 @@ -29,9 +27,10 @@ public class AlarmScheduledTask { * 开停机告警 * @return ReturnT */ - @XxlJob(START_STOP_ALARM) - //@Scheduled(cron = "0/40 * * * * ? ") - public ReturnT startStopAlarm(String param) { + //@XxlJob(START_STOP_ALARM) + @Scheduled(cron = "0/40 * * * * ? ") + public ReturnT startStopAlarm() { + String param = ""; if (Func.isBlank(param)) { param = DateUtil.format(new Date(), "yyyy-MM"); } diff --git a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/MonitorScheduledTask.java b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/MonitorScheduledTask.java index 51131e3..0dbad04 100644 --- a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/MonitorScheduledTask.java +++ b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/MonitorScheduledTask.java @@ -42,8 +42,10 @@ public class MonitorScheduledTask { * 实时数据刷新 * @return ReturnT */ - @XxlJob(REAL_TIME_DATA) - public ReturnT loadRealData(String param) { + //@XxlJob(REAL_TIME_DATA) + @Scheduled(cron = "0/40 * * * * ? ") + public ReturnT loadRealData() { + String param = ""; if (Func.isBlank(param)) { param = DateUtil.format(new Date(), "yyyy-MM"); } diff --git a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/RealTargetScheduledTask.java b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/RealTargetScheduledTask.java index 951d307..921d24d 100644 --- a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/RealTargetScheduledTask.java +++ b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/RealTargetScheduledTask.java @@ -8,6 +8,7 @@ import lombok.extern.slf4j.Slf4j; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.Arrays; @@ -45,8 +46,10 @@ public class RealTargetScheduledTask { /** * 水电站-机组实时加载 */ - @XxlJob(LOAD_HYDROPOWER_UNIT_REAL) - public ReturnT loadHydropowerReal(String param) { + //@XxlJob(LOAD_HYDROPOWER_UNIT_REAL) + @Scheduled(cron = "0/40 * * * * ? ") + public ReturnT loadHydropowerReal() { + String param = ""; if (Func.isBlank(param)) { param = DateUtil.format(new Date(), "yyyy-MM"); } diff --git a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/alarm/impl/AlarmQueryServiceImpl.java b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/alarm/impl/AlarmQueryServiceImpl.java index f31a20f..3518db9 100644 --- a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/alarm/impl/AlarmQueryServiceImpl.java +++ b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/alarm/impl/AlarmQueryServiceImpl.java @@ -1,17 +1,25 @@ package com.hnac.hzims.scheduled.service.alarm.impl; import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.hnac.hzims.alarm.constants.AlarmConstants; import com.hnac.hzims.alarm.entity.AlarmEntity; +import com.hnac.hzims.operational.main.constant.HomePageConstant; +import com.hnac.hzims.operational.main.vo.HydropowerUnitRealVo; +import com.hnac.hzims.operational.station.entity.StationEntity; import com.hnac.hzims.scheduled.mapper.alarm.AlarmQueryMapper; import com.hnac.hzims.scheduled.service.alarm.AlarmQueryService; +import com.hnac.hzims.scheduled.service.operation.station.StationService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.MapUtils; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.tool.utils.CollectionUtil; import org.springblade.core.tool.utils.DateUtil; +import org.springblade.core.tool.utils.Func; import org.springblade.core.tool.utils.StringUtil; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import java.util.*; @@ -26,13 +34,116 @@ import java.util.stream.Collectors; @DS("alarm") public class AlarmQueryServiceImpl extends BaseServiceImpl implements AlarmQueryService { + + private final StationService stationService; + + private final RedisTemplate redisTemplate; + + private final static String start_stop_cache_final = "hzims:operation:start:stop:key"; + private final static String load_hydropower_unit_real_key = "hzims:operation:loadhydropowerunit:real:key"; + /** * 开停机告警 * @param param */ @Override public void startStopAlarm(String param) { + // 获取站点开关机状态 + Map startStopMap = (HashMap) redisTemplate.opsForValue().get(start_stop_cache_final);; + + // 查询接入水电站点 + List stations = stationService.list(new LambdaQueryWrapper() + .eq(StationEntity::getDataOrigin,0) + .eq(StationEntity::getType, HomePageConstant.HYDROPOWER) + ); + if(CollectionUtil.isEmpty(stations)){ + return; + } + + // 获取站点设备实时数据 + List reals = (List) redisTemplate.opsForValue().get(load_hydropower_unit_real_key); + if(CollectionUtil.isEmpty(reals)){ + return; + } + Map refresh = new HashMap<>(); + // 实时设备遍历 + reals.forEach(real->{ + // 过滤站点 + List list = stations.stream().filter(item -> item.getRefDept().equals(real.getDeptId())).collect(Collectors.toList()); + if(CollectionUtil.isEmpty(list)){ + return; + } + // 确定站点 + StationEntity station = list.get(0); + + // 数据初始化记录 + if(CollectionUtil.isEmpty(startStopMap)){ + if(Math.abs(real.getActivePower()) > 0){ + refresh.put(real.getDeviceCode(),1); + }else{ + refresh.put(real.getDeviceCode(),0); + } + return; + } + // 比对开机状态 + if(Math.abs(real.getActivePower()) > 0){ + if(startStopMap.get(real.getDeviceCode()) == 0){ + refresh.put(real.getDeviceCode(),1); + // 记录开机告警 + this.saveStartStopAlarm(station,real,1); + }else{ + refresh.put(real.getDeviceCode(),0); + } + }else{ + if(startStopMap.get(real.getDeviceCode()) == 1){ + refresh.put(real.getDeviceCode(),0); + // 记录关机告警 + this.saveStartStopAlarm(station,real,0); + }else{ + refresh.put(real.getDeviceCode(),1); + } + } + }); + redisTemplate.opsForValue().set(start_stop_cache_final,refresh); + } + + /** + * 保存站点设备开关机告警 + * @param station + * @param real + * @param state + */ + private void saveStartStopAlarm(StationEntity station, HydropowerUnitRealVo real, int state) { + AlarmEntity alarm = new AlarmEntity(); + alarm.setStationId(station.getCode()); + alarm.setStationName(station.getName()); + alarm.setDeviceCode(real.getDeviceCode()); + alarm.setDeviceName(real.getDeviceName()); + alarm.setAlarmId(station.getCode() + "_" + Func.randomUUID()); + alarm.setAlarmContext(station.getName() + "_" + real.getDeviceName() + "_关机"); + alarm.setAlarmSource(AlarmConstants.START_STOP_WARNING); + alarm.setAlarmType(AlarmConstants.STOP); + if(state == 1){ + alarm.setAlarmType(AlarmConstants.START); + alarm.setAlarmContext(station.getName() + "_" + real.getDeviceName() + "_开机"); + } + alarm.setStatus(0); + alarm.setAlarmTime(new Date()); + alarm.setIsRightTabulation(0); + alarm.setIsShowAlert(1); + alarm.setIsSmallBell(1); + alarm.setIsMask(1); + alarm.setIsBroadcast(0); + alarm.setIsPlatformMessage(1); + alarm.setIsShortMessage(1); + alarm.setIsWxMessage(1); + alarm.setTenantId(station.getTenantId()); + alarm.setCreateDept(station.getRefDept()); + alarm.setCreateUser(station.getCreateUser()); + alarm.setUpdateUser(station.getUpdateUser()); + alarm.setUpdateTime(station.getUpdateTime()); + this.save(alarm); } /** diff --git a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/station/impl/StationServiceImpl.java b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/station/impl/StationServiceImpl.java index e93135d..b043c48 100644 --- a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/station/impl/StationServiceImpl.java +++ b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/station/impl/StationServiceImpl.java @@ -1,5 +1,6 @@ package com.hnac.hzims.scheduled.service.operation.station.impl; +import com.baomidou.dynamic.datasource.annotation.DS; import com.hnac.hzims.operational.station.entity.StationEntity; import com.hnac.hzims.scheduled.mapper.operation.StationMapper; import com.hnac.hzims.scheduled.service.operation.station.StationService; @@ -14,6 +15,7 @@ import org.springframework.stereotype.Service; @Service @RequiredArgsConstructor @Slf4j +@DS("master") public class StationServiceImpl extends BaseServiceImpl implements StationService { } \ No newline at end of file