Browse Source

修复获取报警记录名称失败的bug

lixing 3 years ago
parent
commit
56886dcc65

+ 6 - 12
AlarmEngineStarter/src/main/java/com/persagy/apm/energyalarmstarter/alarmengine/jms/AlarmEngineMsgHandler.java

@@ -232,17 +232,12 @@ public class AlarmEngineMsgHandler {
      */
     @SneakyThrows
     public void incrementSyncAlarmConfig(DmpMessage dmpMessage) {
-        Map<String, JSONArray> changedAlarmConfigs = alarmRecordMsgHandler.queryChangedAlarmConfigs(dmpMessage);
-        JSONArray createdConfigUniques = changedAlarmConfigs.get("createdConfigUniques");
-        JSONArray deletedConfigUniques = changedAlarmConfigs.get("deletedConfigUniques");
+        log.debug("增量同步报警定义");
+        Map<String, List<AlarmConfigItem>> changedAlarmConfigs = alarmRecordMsgHandler.queryChangedAlarmConfigs(dmpMessage);
+        List<AlarmConfigItem> createdConfigUniques = changedAlarmConfigs.get("createdConfigUniques");
+        List<AlarmConfigItem> deletedConfigUniques = changedAlarmConfigs.get("deletedConfigUniques");
         if (!CollectionUtils.isEmpty(deletedConfigUniques)) {
-            // 处理删除的报警定义 // TODO: 2021/11/20
-            // 报警定义中不包含报警条件的id
-            // 需要根据报警定义中的报警类型,从设备与报警条件的关联关系中找到对应的报警条件id。
-            // 删除报警条件
-            // 删除关联关系
-            List<AlarmConfigItem> alarmConfigItems = deletedConfigUniques.toJavaList(AlarmConfigItem.class);
-            for (AlarmConfigItem alarmConfigItem : alarmConfigItems) {
+            for (AlarmConfigItem alarmConfigItem : deletedConfigUniques) {
                 //从redis拿到设备的报警条件信息
                 ObjConditionInfo objConditionInfo = redisUtil.get(RedisConstants.OBJ_CONDITION_REL, alarmConfigItem.getObjId(), ObjConditionInfo.class);
                 LinkedList<ItemCodeCondition> conditions = objConditionInfo.getConditions();
@@ -263,9 +258,8 @@ public class AlarmEngineMsgHandler {
             }
         }
         if (!CollectionUtils.isEmpty(createdConfigUniques)) {
-            List<AlarmConfigItem> alarmConfigItems = createdConfigUniques.toJavaList(AlarmConfigItem.class);
             List<ObjConditionRel> createdRelList = new ArrayList<>();
-            for (AlarmConfigItem alarmConfigItem : alarmConfigItems) {
+            for (AlarmConfigItem alarmConfigItem : createdConfigUniques) {
                 // 数据中台报警条件转化为业务中台报警条件和设备与条件的关联关系
                 AlarmCondition alarmCondition = avgAlarmDmpCondition(alarmConfigItem);
                 if (alarmCondition == null) {

+ 5 - 1
AlarmEngineStarter/src/main/java/com/persagy/apm/energyalarmstarter/alarmengine/jms/JmsConfig.java

@@ -214,13 +214,17 @@ public class JmsConfig {
             if (JmsAlarmRecordEnum.CONTINUE_ALARM.getType().equals(msg.getType())) {
                 msgHandler.alarmContinue(msg);
             }
+            // 手动确认消息消费成功
+            channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
             //解锁
             JSONObject data = msg.getExts();
             redisUtil.unlock(alarmRecordLockPrefix + data.getString("id"));
         } catch (Exception e) {
             log.error("报警记录消息消费失败", e);
+            // 消息扔回消息队列
+            channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true);
         }
-        channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
+
     }
 
     /**

+ 59 - 22
AlarmEngineStarter/src/main/java/com/persagy/apm/energyalarmstarter/alarmengine/service/AlarmRecordMsgHandler.java

@@ -8,6 +8,7 @@ import com.persagy.apm.energyalarmstarter.alarmdata.feign.AlarmUrlParam;
 import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.alarmitem.QueryAlarmItemDTO;
 import com.persagy.apm.energyalarmstarter.alarmdata.feign.DmpResult;
 import com.persagy.apm.energyalarmstarter.alarmdata.feign.client.AlarmClient;
+import com.persagy.apm.energyalarmstarter.alarmdata.model.vo.AlarmConfigItem;
 import com.persagy.apm.energyalarmstarter.alarmdata.model.vo.AlarmItem;
 import com.persagy.apm.energyalarmstarter.alarmdata.mq.model.DmpMessage;
 import com.persagy.apm.energyalarmstarter.alarmdata.service.AlarmItemServiceImpl;
@@ -18,6 +19,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.CollectionUtils;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -181,14 +183,14 @@ public abstract class AlarmRecordMsgHandler extends BaseService {
      */
     public String createAlarm(JSONObject data) throws Exception {
         //报警分类(设备、空间、系统 Eq,Sp,Sy)
-        String category = data.getString("category");
         String objId = data.getString("objId");
         String projectId = data.getString("projectId");
         String itemCode = data.getString("itemCode");
+        String alarmCategory = getAlarmCategory(getAlarmUrlParam(data), itemCode);
 
         data.put("classCode", getObjClassCode(getAlarmUrlParam(data), objId));
-        data.put("category", getAlarmCategory(getAlarmUrlParam(data), itemCode));
-        data.put("name", getAlarmName(projectId,objId,category));
+        data.put("category", alarmCategory);
+        data.put("name", getAlarmName(projectId,objId,alarmCategory));
         data.put("remark", getAlarmRemark(getAlarmUrlParam(data), objId, itemCode));
         data.put("supplement", getAlarmSupplement(getAlarmUrlParam(data), data));
         data.put("level", getAlarmLevel(data));
@@ -257,7 +259,7 @@ public abstract class AlarmRecordMsgHandler extends BaseService {
      * @since: 2020/12/1 12:06 下午
      * @version: V1.0
      */
-    public Map<String, JSONArray> queryChangedAlarmConfigs(DmpMessage dmpMessage) throws Exception {
+    public Map<String, List<AlarmConfigItem>> queryChangedAlarmConfigs(DmpMessage dmpMessage) throws Exception {
         String projectId = dmpMessage.getProjectId();
         JSONObject exts = dmpMessage.getExts();
         //删除报警定义
@@ -269,7 +271,11 @@ public abstract class AlarmRecordMsgHandler extends BaseService {
         createdConfigUniques = CollectionUtils.isEmpty(createdConfigUniques) ? new JSONArray() : createdConfigUniques;
         deletedConfigUniques = CollectionUtils.isEmpty(deletedConfigUniques) ? new JSONArray() : deletedConfigUniques;
         updatedConfigUniques = CollectionUtils.isEmpty(updatedConfigUniques) ? new JSONArray() : updatedConfigUniques;
-        createdConfigUniques.addAll(updatedConfigUniques);
+
+        log.debug("新增了{}条报警定义", createdConfigUniques.size());
+        log.debug("删除了{}条报警定义", deletedConfigUniques.size());
+        log.debug("更新了{}条报警定义", updatedConfigUniques.size());
+
         List<String> defineList = createdConfigUniques.stream().map(
                 p -> JSONObject.parseObject(JSONObject.toJSONString(p))
         ).map(this::getAlarmConfigDefineId).collect(Collectors.toList());
@@ -279,30 +285,61 @@ public abstract class AlarmRecordMsgHandler extends BaseService {
                 t -> !defineList.contains(getAlarmConfigDefineId(t))
         ).collect(Collectors.toCollection(JSONArray::new));
 
-        JSONArray alarmConfigArr = new JSONArray();
+        List<AlarmConfigItem> createdAlarmConfigs = new ArrayList<>();
+        List<AlarmConfigItem> deletedAlarmConfigs = deletedConfigUniques.toJavaList(AlarmConfigItem.class);
+        
         for (Object p : createdConfigUniques) {
             JSONObject jsonObject = JSONObject.parseObject(JSON.toJSONString(p));
-            JSONObject data = new JSONObject();
-            data.put("projectId", projectId);
-            data.put("groupCode", dmpMessage.getGroupCode());
-            data.put("itemCode", jsonObject.getString("itemCode"));
-            data.put("objId", jsonObject.getString("objId"));
-            data.put("userId", "system");
-            DmpResult<JSONArray> alarmConfigQueryResult = alarmClient.queryAlarmConfig(getAlarmUrlParam(data), getRequestBody(data));
-            JSONArray tmpAlarmConfigArr = alarmConfigQueryResult.getData();
-            if (!CollectionUtils.isEmpty(tmpAlarmConfigArr)) {
-                // 报警定义中的信息点转换为表号、功能号
-                initAlarmConfigInfoCodes(tmpAlarmConfigArr);
-                alarmConfigArr.addAll(tmpAlarmConfigArr);
+            String itemCode = jsonObject.getString("itemCode");
+            String objId = jsonObject.getString("objId");
+            List<AlarmConfigItem> alarmConfigItems = queryAlarmConfig(dmpMessage.getGroupCode(), projectId, itemCode, objId);
+            if (!CollectionUtils.isEmpty(alarmConfigItems)) {
+                createdAlarmConfigs.addAll(alarmConfigItems);
+            }
+        }
+
+        for (Object p : updatedConfigUniques) {
+            JSONObject jsonObject = JSONObject.parseObject(JSON.toJSONString(p));
+            String itemCode = jsonObject.getString("itemCode");
+            String objId = jsonObject.getString("objId");
+            List<AlarmConfigItem> alarmConfigItems = queryAlarmConfig(dmpMessage.getGroupCode(), projectId, itemCode, objId);
+            if (!CollectionUtils.isEmpty(alarmConfigItems)) {
+                // 根据open状态判断报警定义应该删除还是新增
+                for (AlarmConfigItem alarmConfigItem : alarmConfigItems) {
+                    if (alarmConfigItem.getOpen() == 1) {
+                        createdAlarmConfigs.add(alarmConfigItem);
+                    }
+                    if (alarmConfigItem.getOpen() == 0) {
+                        deletedAlarmConfigs.add(alarmConfigItem);
+                    }
+                }
             }
-            log.info("新增和更新的报警定义-------------------:{}", tmpAlarmConfigArr);
         }
-        Map<String, JSONArray> resultMap = new HashMap<>();
-        resultMap.put("createdConfigUniques", alarmConfigArr);
-        resultMap.put("deletedConfigUniques", deletedConfigUniques);
+
+        Map<String, List<AlarmConfigItem>> resultMap = new HashMap<>();
+        resultMap.put("createdConfigUniques", createdAlarmConfigs);
+        resultMap.put("deletedConfigUniques", deletedAlarmConfigs);
+        log.debug("报警定义的更改转换,更新操作被转换为新增和删除操作");
+        log.debug("实际新增了{}条报警定义", createdAlarmConfigs.size());
+        log.debug("实际删除了{}条报警定义", deletedAlarmConfigs.size());
         return resultMap;
     }
 
+    private List<AlarmConfigItem> queryAlarmConfig(String groupCode, String projectId, String itemCode, String objId) throws Exception {
+        JSONObject data = new JSONObject();
+        data.put("projectId", projectId);
+        data.put("groupCode", groupCode);
+        data.put("itemCode", itemCode);
+        data.put("objId", objId);
+        data.put("userId", "system");
+        DmpResult<JSONArray> alarmConfigQueryResult = alarmClient.queryAlarmConfig(getAlarmUrlParam(data), getRequestBody(data));
+        JSONArray tmpAlarmConfigArr = alarmConfigQueryResult.getData();
+        if (CollectionUtils.isEmpty(tmpAlarmConfigArr)) {
+            return null;
+        }
+        return tmpAlarmConfigArr.toJavaList(AlarmConfigItem.class);
+    }
+
     /**
      * @description: 获取报警定义唯一标识
      * @param: obj