Pārlūkot izejas kodu

报警定义增加锁,避免重复产生报警记录

lixing 4 gadi atpakaļ
vecāks
revīzija
ae5b833113

+ 19 - 17
src/main/java/com/persagy/service/impl/AlarmHandleServiceImpl.java

@@ -109,23 +109,25 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
                         if (triggerResult && endResult) {
                             log.warn("报警触发条件和报警恢复条件同时满足,请检查,报警定义详情【{}】", alarmDefine.toString());
                         }
-                        AlarmState alarmState = alarmInfoCache.getAlarmState(defineId);
-                        if (Objects.isNull(alarmState)) {
-                            alarmState = new AlarmState(defineId);
-                        }
-                        //报警产生值满足(这里的满足不考虑报警持续时间)
-                        if (triggerResult) {
-                            log.info("有一条满足报警条件");
-                            log.info("--" + alarmDefine.toString());
-                            log.info("--" + JSONObject.toJSONString(paramMap));
-                            //报警的时候不考虑报警恢复,因为同时报警和报警恢复是不应该出现的
-                            handlerNowDataAlarm(alarmDefine, alarmState, dateTime, condition, defineId, paramMap);
-                        } else {
-                            log.info("不满足报警条件");
-                            log.info("--" + alarmDefine.toString());
-                            log.info("--" + JSONObject.toJSONString(paramMap));
-                            //当前数据正常
-                            handlerNowDataNormal(alarmDefine, dateTime, condition, defineId, endResult, alarmState, paramMap);
+                        synchronized (defineId.intern()) {
+                            AlarmState alarmState = alarmInfoCache.getAlarmState(defineId);
+                            if (Objects.isNull(alarmState)) {
+                                alarmState = new AlarmState(defineId);
+                            }
+                            //报警产生值满足(这里的满足不考虑报警持续时间)
+                            if (triggerResult) {
+                                log.info("有一条满足报警条件");
+                                log.info("--" + alarmDefine.toString());
+                                log.info("--" + JSONObject.toJSONString(paramMap));
+                                //报警的时候不考虑报警恢复,因为同时报警和报警恢复是不应该出现的
+                                handlerNowDataAlarm(alarmDefine, alarmState, dateTime, condition, defineId, paramMap);
+                            } else {
+                                log.info("不满足报警条件");
+                                log.info("--" + alarmDefine.toString());
+                                log.info("--" + JSONObject.toJSONString(paramMap));
+                                //当前数据正常
+                                handlerNowDataNormal(alarmDefine, dateTime, condition, defineId, endResult, alarmState, paramMap);
+                            }
                         }
                     } else {
                         log.warn("部分信息点没有数值:[{}]", codeDetail);