|
@@ -1,16 +1,30 @@
|
|
|
package com.persagy.apm.alarmservice.common.jms;
|
|
|
|
|
|
+import cn.hutool.core.lang.generator.UUIDGenerator;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
import com.persagy.apm.alarmservice.common.configuration.rabbitmq.JacksonMapper;
|
|
|
+import com.persagy.apm.alarmservice.common.enums.JmsTypeEnum;
|
|
|
import com.persagy.apm.alarmservice.common.model.DmpMessage;
|
|
|
+import com.persagy.apm.alarmservice.project.alarmcondition.model.AlarmCondition;
|
|
|
+import com.persagy.apm.alarmservice.project.alarmrule.model.ProjectAlarmRule;
|
|
|
+import com.persagy.apm.alarmservice.project.alarmrule.service.IProjectAlarmRuleService;
|
|
|
+import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.ProjectAlarmRuleObjRel;
|
|
|
+import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.dto.QueryProjectAlarmRuleObjRelDTO;
|
|
|
+import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.vo.ObjConditionRel;
|
|
|
+import com.persagy.apm.alarmservice.project.alarmruleobjrel.service.IProjectAlarmRuleObjRelService;
|
|
|
+import com.persagy.apm.common.context.poems.PoemsContext;
|
|
|
+import com.persagy.apm.energyalarmstarter.alarmdata.utils.DateUtils;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
-import org.springframework.amqp.core.Binding;
|
|
|
-import org.springframework.amqp.core.BindingBuilder;
|
|
|
-import org.springframework.amqp.core.Queue;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.amqp.core.TopicExchange;
|
|
|
import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.context.annotation.Bean;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
|
+
|
|
|
+import java.util.*;
|
|
|
|
|
|
/**
|
|
|
* 消息发送者
|
|
@@ -21,8 +35,14 @@ import org.springframework.stereotype.Component;
|
|
|
@Slf4j
|
|
|
@Component
|
|
|
public class JmsSender {
|
|
|
+ @Value("${spring.application.name}")
|
|
|
+ private String appName;
|
|
|
@Autowired
|
|
|
private RabbitTemplate rabbitTemplate;
|
|
|
+ @Autowired
|
|
|
+ IProjectAlarmRuleService projectAlarmRuleService;
|
|
|
+ @Autowired
|
|
|
+ IProjectAlarmRuleObjRelService projectAlarmRuleObjRelService;
|
|
|
|
|
|
/**
|
|
|
* 交换机
|
|
@@ -52,7 +72,7 @@ public class JmsSender {
|
|
|
* @author lixing
|
|
|
* @version V1.0 2021/10/25 2:18 下午
|
|
|
*/
|
|
|
- public void sendConditionMsg(DmpMessage message) {
|
|
|
+ private void sendConditionMsg(DmpMessage message) {
|
|
|
log.info("向rabbitMQ发送报警条件消息,message:" + JacksonMapper.toSimpleJson(message));
|
|
|
rabbitTemplate.convertAndSend(exchange, alarmConditionRoutingKey, message);
|
|
|
}
|
|
@@ -64,8 +84,214 @@ public class JmsSender {
|
|
|
* @author lixing
|
|
|
* @version V1.0 2021/10/25 2:18 下午
|
|
|
*/
|
|
|
- public void sendObjConditionRelMsg(DmpMessage message) {
|
|
|
+ private void sendObjConditionRelMsg(DmpMessage message) {
|
|
|
log.info("向rabbitMQ发送设备与报警条件关联消息,message:" + JacksonMapper.toSimpleJson(message));
|
|
|
rabbitTemplate.convertAndSend(exchange, objConditionRelRoutingKey, message);
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 发送新建报警条件的消息
|
|
|
+ *
|
|
|
+ * @param alarmCondition 新增的报警条件
|
|
|
+ * @author lixing
|
|
|
+ * @version V1.0 2021/10/26 2:37 下午
|
|
|
+ */
|
|
|
+ public void sendNewAlarmConditionMsg(AlarmCondition alarmCondition) {
|
|
|
+ DmpMessage dmpMessage = initDmpMessage();
|
|
|
+
|
|
|
+ dmpMessage.setMid(alarmCondition.getId());
|
|
|
+ dmpMessage.setStr1(JSONObject.toJSONString(alarmCondition));
|
|
|
+ dmpMessage.setType(JmsTypeEnum.NEW_CONDITION.getType());
|
|
|
+
|
|
|
+ sendConditionMsg(dmpMessage);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 发送更新报警条件的消息
|
|
|
+ *
|
|
|
+ * @param alarmCondition 更新的报警条件
|
|
|
+ * @author lixing
|
|
|
+ * @version V1.0 2021/10/26 2:37 下午
|
|
|
+ */
|
|
|
+ public void sendUpdateAlarmConditionMsg(AlarmCondition alarmCondition) {
|
|
|
+ DmpMessage dmpMessage = initDmpMessage();
|
|
|
+
|
|
|
+ dmpMessage.setMid(alarmCondition.getId());
|
|
|
+ dmpMessage.setStr1(JSONObject.toJSONString(alarmCondition));
|
|
|
+ dmpMessage.setType(JmsTypeEnum.UPDATE_CONDITION.getType());
|
|
|
+
|
|
|
+ sendConditionMsg(dmpMessage);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 发送删除报警条件的消息
|
|
|
+ *
|
|
|
+ * @param alarmConditionId 删除的报警条件Id
|
|
|
+ * @author lixing
|
|
|
+ * @version V1.0 2021/10/26 2:37 下午
|
|
|
+ */
|
|
|
+ public void sendDeleteAlarmConditionMsg(String alarmConditionId) {
|
|
|
+ DmpMessage dmpMessage = initDmpMessage();
|
|
|
+
|
|
|
+ dmpMessage.setMid(alarmConditionId);
|
|
|
+ dmpMessage.setStr1(alarmConditionId);
|
|
|
+ dmpMessage.setType(JmsTypeEnum.DELETE_CONDITION.getType());
|
|
|
+
|
|
|
+ sendConditionMsg(dmpMessage);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 初始化消息体
|
|
|
+ *
|
|
|
+ * @return DmpMessage对象
|
|
|
+ * @author lixing
|
|
|
+ * @version V1.0 2021/10/26 2:36 下午
|
|
|
+ */
|
|
|
+ private DmpMessage initDmpMessage() {
|
|
|
+ DmpMessage dmpMessage = new DmpMessage();
|
|
|
+ dmpMessage.setUserId(PoemsContext.getContext().getUserId());
|
|
|
+ dmpMessage.setGroupCode(PoemsContext.getContext().getGroupCode());
|
|
|
+ dmpMessage.setProjectId(PoemsContext.getContext().getProjectId());
|
|
|
+ dmpMessage.setAppId(appName);
|
|
|
+ dmpMessage.setSendTime(DateUtils.date2Str(new Date(), DateUtils.SDF_SECOND));
|
|
|
+ return dmpMessage;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 发送新建设备与报警条件关联关系的消息
|
|
|
+ *
|
|
|
+ * @param relationList 新增的关联关系
|
|
|
+ * @author lixing
|
|
|
+ * @version V1.0 2021/10/26 2:37 下午
|
|
|
+ */
|
|
|
+ public void sendNewObjConditionRelListMsg(List<ProjectAlarmRuleObjRel> relationList) {
|
|
|
+ DmpMessage dmpMessage = initDmpMessage();
|
|
|
+
|
|
|
+ List<ObjConditionRel> relList = convert2ObjConditionRelList(relationList);
|
|
|
+ if (relList == null) {return;}
|
|
|
+ UUIDGenerator uuidGenerator = new UUIDGenerator();
|
|
|
+ dmpMessage.setMid(uuidGenerator.next());
|
|
|
+ dmpMessage.setStr1(JSONObject.toJSONString(relList));
|
|
|
+ dmpMessage.setType(JmsTypeEnum.NEW_OBJ_CONDITION_REL.getType());
|
|
|
+
|
|
|
+ sendObjConditionRelMsg(dmpMessage);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 发送新建设备与报警条件关联关系的消息
|
|
|
+ *
|
|
|
+ * @param ruleId 报警规则id
|
|
|
+ * @author lixing
|
|
|
+ * @version V1.0 2021/10/26 2:37 下午
|
|
|
+ */
|
|
|
+ public void sendNewObjConditionRelListMsg(String ruleId) {
|
|
|
+ // 查询报警规则关联的设备
|
|
|
+ List<ProjectAlarmRuleObjRel> projectAlarmRuleObjRelList = getProjectAlarmRuleObjRels(ruleId);
|
|
|
+
|
|
|
+ sendNewObjConditionRelListMsg(projectAlarmRuleObjRelList);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 将设备与项目报警规则关联关系转换为设备与报警条件关联关系
|
|
|
+ *
|
|
|
+ * @param relationList 设备与项目报警规则关联关系列表
|
|
|
+ * @return 设备与报警条件关联关系列表
|
|
|
+ * @author lixing
|
|
|
+ * @version V1.0 2021/10/26 3:17 下午
|
|
|
+ */
|
|
|
+ private List<ObjConditionRel> convert2ObjConditionRelList(List<ProjectAlarmRuleObjRel> relationList) {
|
|
|
+ if (CollectionUtils.isEmpty(relationList)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 报警规则和设备列表的映射
|
|
|
+ Map<String, List<String>> ruleIdObjListMap = new HashMap<>();
|
|
|
+ for (ProjectAlarmRuleObjRel projectAlarmRuleObjRel : relationList) {
|
|
|
+ String ruleId = projectAlarmRuleObjRel.getProjectAlarmRuleId();
|
|
|
+ List<String> objList;
|
|
|
+ if (ruleIdObjListMap.containsKey(ruleId)) {
|
|
|
+ objList = ruleIdObjListMap.get(ruleId);
|
|
|
+ } else {
|
|
|
+ objList = new ArrayList<>();
|
|
|
+ ruleIdObjListMap.put(ruleId, objList);
|
|
|
+ }
|
|
|
+ objList.add(projectAlarmRuleObjRel.getObjId());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取报警规则详情,拼装结果
|
|
|
+ List<ObjConditionRel> relList = getObjConditionRels(ruleIdObjListMap);
|
|
|
+ return relList;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 将报警规则id与设备关联关系映射转换为ObjConditionRel列表
|
|
|
+ *
|
|
|
+ * @param ruleIdObjListMap 报警规则id与设备关联关系映射
|
|
|
+ * @return ObjConditionRel列表
|
|
|
+ * @author lixing
|
|
|
+ * @version V1.0 2021/10/26 5:21 下午
|
|
|
+ */
|
|
|
+ private List<ObjConditionRel> getObjConditionRels(Map<String, List<String>> ruleIdObjListMap) {
|
|
|
+ List<ObjConditionRel> relList = new LinkedList<>();
|
|
|
+ for (String ruleId : ruleIdObjListMap.keySet()) {
|
|
|
+ ProjectAlarmRule projectAlarmRule = projectAlarmRuleService.queryProjectAlarmRuleDetail(ruleId);
|
|
|
+ List<String> objIds = ruleIdObjListMap.get(ruleId);
|
|
|
+ for (String objId : objIds) {
|
|
|
+ ObjConditionRel objConditionRel = ObjConditionRel.builder().
|
|
|
+ objId(objId).itemCode(projectAlarmRule.getAlarmItemCode()).
|
|
|
+ projectId(projectAlarmRule.getProjectId()).conditionId(projectAlarmRule.getAlarmConditionId()).
|
|
|
+ build();
|
|
|
+ relList.add(objConditionRel);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return relList;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 发送移除设备与报警条件关联关系的消息
|
|
|
+ *
|
|
|
+ * @param ruleId 报警规则id
|
|
|
+ * @author lixing
|
|
|
+ * @version V1.0 2021/10/26 2:37 下午
|
|
|
+ */
|
|
|
+ public void sendRemoveObjConditionRelListMsg(String ruleId) {
|
|
|
+ if (StringUtils.isBlank(ruleId)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ DmpMessage dmpMessage = initDmpMessage();
|
|
|
+
|
|
|
+ // 查询报警规则下的所有关联关系
|
|
|
+ List<ProjectAlarmRuleObjRel> projectAlarmRuleObjRelList = getProjectAlarmRuleObjRels(ruleId);
|
|
|
+
|
|
|
+ if (CollectionUtils.isEmpty(projectAlarmRuleObjRelList)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ List<ObjConditionRel> relList = convert2ObjConditionRelList(projectAlarmRuleObjRelList);
|
|
|
+
|
|
|
+ if (relList == null) {return;}
|
|
|
+ UUIDGenerator uuidGenerator = new UUIDGenerator();
|
|
|
+ dmpMessage.setMid(uuidGenerator.next());
|
|
|
+ dmpMessage.setStr1(JSONObject.toJSONString(relList));
|
|
|
+ dmpMessage.setType(JmsTypeEnum.DELETE_OBJ_CONDITION_REL.getType());
|
|
|
+
|
|
|
+ sendObjConditionRelMsg(dmpMessage);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取报警规则与设备的关联关系
|
|
|
+ *
|
|
|
+ * @param ruleId 报警规则id
|
|
|
+ * @return 报警规则与设备的关联关系列表
|
|
|
+ * @author lixing
|
|
|
+ * @version V1.0 2021/10/26 5:33 下午
|
|
|
+ */
|
|
|
+ private List<ProjectAlarmRuleObjRel> getProjectAlarmRuleObjRels(String ruleId) {
|
|
|
+ QueryProjectAlarmRuleObjRelDTO queryProjectAlarmRuleObjRelDTO = new QueryProjectAlarmRuleObjRelDTO();
|
|
|
+ queryProjectAlarmRuleObjRelDTO.setProjectAlarmRuleId(ruleId);
|
|
|
+ // 屏蔽状态 1-open、0- 屏蔽
|
|
|
+ queryProjectAlarmRuleObjRelDTO.setOpen(1);
|
|
|
+ return projectAlarmRuleObjRelService.
|
|
|
+ queryProjectAlarmRuleObjRelList(queryProjectAlarmRuleObjRelDTO);
|
|
|
+ }
|
|
|
}
|