瀏覽代碼

Merge branch 'alarm-engine-cloud' of http://39.106.8.246:3003/persagy/persagy-zkt-project-alarm.git into alarm-engine-cloud

gaoyu 3 年之前
父節點
當前提交
6b64c8dfe1

+ 0 - 68
src/main/java/com/persagy/job/AlarmContinueJob.java

@@ -1,68 +0,0 @@
-package com.persagy.job;
-
-import com.alibaba.fastjson.JSONObject;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.collect.Lists;
-import com.persagy.cache.AlarmLastTimeCache;
-import com.persagy.client.GroupNettyClient;
-import com.persagy.entity.AlarmLastTime;
-import com.persagy.entity.NettyMessage;
-import com.persagy.enumeration.NettyMsgTypeEnum;
-import com.persagy.enumeration.YesNoEnum;
-import lombok.extern.slf4j.Slf4j;
-import org.quartz.DisallowConcurrentExecution;
-import org.quartz.JobExecutionContext;
-import org.quartz.JobExecutionException;
-import org.quartz.PersistJobDataAfterExecution;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.quartz.QuartzJobBean;
-
-import java.util.concurrent.ConcurrentHashMap;
-
-/**
- * @description: 发送报警持续消息定时任务
- * @author: lixing
- * @company: Persagy Technology Co.,Ltd
- * @since: 2021/2/4 5:52 下午
- * @version: V1.0
- */
-@DisallowConcurrentExecution
-@PersistJobDataAfterExecution
-@Slf4j
-public class AlarmContinueJob extends QuartzJobBean {
-
-    @Autowired
-    private AlarmLastTimeCache alarmLastTimeCache;
-    @Autowired
-    GroupNettyClient groupNettyClient;
-
-    @Override
-    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
-        ConcurrentHashMap<String, AlarmLastTime> alarmLastTimeMap = alarmLastTimeCache.getAll();
-        if (alarmLastTimeMap.isEmpty()) {return;}
-        for (String alarmId : alarmLastTimeMap.keySet()) {
-            AlarmLastTime alarmLastTime = alarmLastTimeMap.get(alarmId);
-            if (YesNoEnum.NO.equals(alarmLastTime.getHasSent()) &&
-                    alarmLastTime.getAlarmLastMsg() != null &&
-                    YesNoEnum.YES.equals(alarmLastTime.getAlarmHasCreated())) {
-                // 发送报警持续时间
-                NettyMessage<JSONObject> nettyMessage = new NettyMessage<>(
-                        NettyMsgTypeEnum.ALARM_CONTINUE, alarmLastTime.getProjectId());
-                ObjectNode alarmLastMsg = alarmLastTime.getAlarmLastMsg();
-                JSONObject msg = (JSONObject)JSONObject.parse(alarmLastMsg.toString());
-                nettyMessage.setContent(Lists.newArrayList(msg));
-                try {
-                    groupNettyClient.sendMessage(nettyMessage.toString());
-                } catch (InterruptedException e) {
-                    log.error("报警持续消息发送失败", e);
-                }
-                // 状态设置为已发送
-                alarmLastTimeCache.updateHasSent(alarmId, YesNoEnum.YES);
-            }
-            if (YesNoEnum.YES.equals(alarmLastTime.getHasSent()) &&
-                    YesNoEnum.YES.equals(alarmLastTime.getDeleteAvailable())) {
-                alarmLastTimeCache.remove(alarmLastTime.getId());
-            }
-        }
-    }
-}

+ 0 - 12
src/main/java/com/persagy/service/AlarmQuartzService.java

@@ -18,16 +18,4 @@ public interface AlarmQuartzService {
     String addExpireJob(Date startTime, String jobName, String jobGroupName, JobDataMap jobDataMap) throws SchedulerException;
 
     String deleteExpireJob(String jobName, String jobGroupName) throws SchedulerException;
-
-    /**
-     * @description: 创建发送报警持续消息定时任务
-     * @param:
-     * @return: void
-     * @exception:
-     * @author: lixing
-     * @company: Persagy Technology Co.,Ltd
-     * @since: 2021/2/6 10:54 上午
-     * @version: V1.0
-     */
-    void createSendAlarmLastMsgSchedule() throws SchedulerException;
 }

+ 14 - 12
src/main/java/com/persagy/service/impl/AlarmHandleServiceImpl.java

@@ -149,11 +149,11 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
             paramMap.put(funcIdArray[i], Double.parseDouble(values[i]));
         }
 
-        calculateAlarmConditions(dataTime, meterId, itemCode, paramMap);
+        triggerOrEndAlarm(dataTime, meterId, itemCode, paramMap);
     }
 
     /**
-     * 遍历设备的所有报警条件,计算报警的产生和恢复
+     * 通过报警对象和报警类型找到内存中对应的报警条件,计算报警的产生和恢复
      *
      * @param dataTime 采集日期
      * @param meterId  报警对象id
@@ -162,7 +162,7 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
      * @author lixing
      * @version V1.0 2021/10/22 5:19 下午
      */
-    private void calculateAlarmConditions(String dataTime, String meterId, String itemCode, HashMap<String, Object> paramMap) throws Exception {
+    private void triggerOrEndAlarm(String dataTime, String meterId, String itemCode, HashMap<String, Object> paramMap) throws Exception {
         // 获取设备的报警条件
         ObjConditionInfo objConditionInfo = alarmInfoCache.getAlarmConditionsByObjId(meterId);
         if (objConditionInfo == null || CollectionUtils.isEmpty(objConditionInfo.getConditions())) {
@@ -203,16 +203,18 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
             if (triggerResult && endResult) {
                 log.error("报警触发条件和报警恢复条件同时满足,请检查,报警定义详情【{}】", alarmCondition);
             }
+            AlarmDefine alarmDefine = null;
+            try {
+                alarmDefine = AlarmDefine.convert2AlarmDefine(itemCodeCondition.getItemCode(),
+                        alarmCondition, meterId, objConditionInfo.getProjectId());
+            } catch (Exception e) {
+                log.error("报警条件转换为报警定义出现异常", e);
+                return;
+            }
+
+            // redis加锁 // TODO: 2021/11/15  
+            synchronized (alarmDefine.getId().intern()) {
 
-            synchronized (conditionId.intern()) {
-                AlarmDefine alarmDefine = null;
-                try {
-                    alarmDefine = AlarmDefine.convert2AlarmDefine(itemCodeCondition.getItemCode(),
-                            alarmCondition, meterId, objConditionInfo.getProjectId());
-                } catch (Exception e) {
-                    log.error("报警条件转换为报警定义出现异常", e);
-                    return;
-                }
                 //报警产生值满足(这里的满足不考虑报警持续时间)
                 if (triggerResult) {
                     log.debug("满足报警条件");

+ 0 - 72
src/main/java/com/persagy/service/impl/AlarmQuartzServiceImpl.java

@@ -1,16 +1,13 @@
 package com.persagy.service.impl;
 
 import cn.hutool.core.date.DateUtil;
-import com.alibaba.fastjson.JSONObject;
 import com.persagy.entity.ExpireAlarmMessage;
-import com.persagy.job.AlarmContinueJob;
 import com.persagy.job.AlarmExpireJob;
 import com.persagy.job.ExpireAlarmQueue;
 import com.persagy.service.AlarmQuartzService;
 import com.persagy.utils.DateUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.quartz.*;
-import org.quartz.impl.matchers.GroupMatcher;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
@@ -42,11 +39,6 @@ public class AlarmQuartzServiceImpl implements AlarmQuartzService {
         } catch (InterruptedException e) {
             e.printStackTrace();
         }
-        try {
-            createSendAlarmLastMsgSchedule();
-        } catch (SchedulerException e) {
-            log.error("发送报警持续时间定时任务创建失败!");
-        }
 
         while (true) {
             try {
@@ -100,50 +92,6 @@ public class AlarmQuartzServiceImpl implements AlarmQuartzService {
         return "success";
     }
 
-    /**
-     * @description: 获取当前所有定时任务的信息,调试时使用,上线请勿用
-     * @param:
-     * @return: java.util.List<java.util.Map < java.lang.String, java.lang.Object>>
-     * @exception:
-     * @author: lixing
-     * @company: Persagy Technology Co.,Ltd
-     * @since: 2021/1/14 下午1:15
-     * @version: V1.0
-     */
-    public List<Map<String, Object>> queryAllJob() {
-        List<Map<String, Object>> jobList = null;
-        try {
-            GroupMatcher<JobKey> matcher = GroupMatcher.anyJobGroup();
-            Set<JobKey> jobKeys = quartzScheduler.getJobKeys(matcher);
-            jobList = new ArrayList<Map<String, Object>>();
-            for (JobKey jobKey : jobKeys) {
-                List<? extends Trigger> triggers = quartzScheduler.getTriggersOfJob(jobKey);
-                for (Trigger trigger : triggers) {
-                    Map<String, Object> map = new HashMap<>();
-                    map.put("jobName", jobKey.getName());
-                    map.put("jobGroupName", jobKey.getGroup());
-                    map.put("description", "触发器:" + trigger.getKey());
-                    Trigger.TriggerState triggerState = quartzScheduler.getTriggerState(trigger.getKey());
-                    map.put("jobStatus", triggerState.name());
-                    if (trigger instanceof CronTrigger) {
-                        CronTrigger cronTrigger = (CronTrigger) trigger;
-                        String cronExpression = cronTrigger.getCronExpression();
-                        map.put("jobTime", cronExpression);
-                    } else if (trigger instanceof SimpleTrigger) {
-                        SimpleTrigger simpleTrigger = (SimpleTrigger) trigger;
-                        map.put("jobTime", simpleTrigger.getStartTime());
-                    }
-
-                    jobList.add(map);
-                }
-            }
-        } catch (SchedulerException e) {
-            log.error("获取当前定时任务发生异常", e);
-        }
-        log.info("当前所有定时任务数量:[{}]", jobList.size());
-        log.info("当前所有定时任务:[{}]", JSONObject.toJSONString(jobList));
-        return jobList;
-    }
 
 
     /**
@@ -170,26 +118,6 @@ public class AlarmQuartzServiceImpl implements AlarmQuartzService {
         return "success!";
     }
 
-    @Override
-    public void createSendAlarmLastMsgSchedule() throws SchedulerException {
-        String jobName = "sendAlarmLastMsg";
-        String jobGroupName = "sendMsg";
-        log.info("创建发送报警消息定时任务");
-        JobDetail jobDetail = JobBuilder.newJob(AlarmContinueJob.class)
-                .withIdentity(jobName, jobGroupName)
-                .requestRecovery()
-                .build();
-        Trigger trigger = TriggerBuilder.newTrigger()
-                .withIdentity("trigger_" + jobName, jobGroupName)
-                .startNow()
-                .withSchedule(simpleSchedule().
-                        withIntervalInMilliseconds(10000).
-                        repeatForever())
-                .build();
-        Set<Trigger> triggerSet = new HashSet<>();
-        triggerSet.add(trigger);
-        quartzScheduler.scheduleJob(jobDetail, triggerSet, true);
-    }
 
 
 }