Переглянути джерело

修改为接受报警条件和报警条件与设备的关联关系

lixing 3 роки тому
батько
коміт
c5343a7b4e
15 змінених файлів з 336 додано та 54 видалено
  1. 71 0
      src/main/java/com/persagy/apm/alarmservice/common/jms/JmsSender.java
  2. 22 11
      src/main/java/com/persagy/apm/alarmservice/group/alarmrule/service/impl/GroupAlarmRuleServiceImpl.java
  3. 8 0
      src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/controller/AlarmConditionController.java
  4. 11 2
      src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/service/IAlarmConditionService.java
  5. 109 24
      src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/service/impl/AlarmConditionServiceImpl.java
  6. 8 0
      src/main/java/com/persagy/apm/alarmservice/project/alarmrule/controller/ProjectAlarmRuleController.java
  7. 5 9
      src/main/java/com/persagy/apm/alarmservice/project/alarmrule/service/impl/ProjectAlarmRuleServiceImpl.java
  8. 9 0
      src/main/java/com/persagy/apm/alarmservice/project/alarmruleobjrel/controller/ProjectAlarmRuleObjRelController.java
  9. 4 0
      src/main/java/com/persagy/apm/alarmservice/project/alarmruleobjrel/dao/ProjectAlarmRuleObjRelMapper.java
  10. 16 0
      src/main/java/com/persagy/apm/alarmservice/project/alarmruleobjrel/model/dto/QueryObjConditionRelDTO.java
  11. 31 0
      src/main/java/com/persagy/apm/alarmservice/project/alarmruleobjrel/model/vo/ObjConditionRel.java
  12. 11 0
      src/main/java/com/persagy/apm/alarmservice/project/alarmruleobjrel/service/IProjectAlarmRuleObjRelService.java
  13. 13 6
      src/main/java/com/persagy/apm/alarmservice/project/alarmruleobjrel/service/impl/ProjectAlarmRuleObjRelServiceImpl.java
  14. 1 1
      src/main/resources/mapper/ProjectAlarmRuleMapper.xml
  15. 17 1
      src/main/resources/mapper/ProjectAlarmRuleObjRelMapper.xml

+ 71 - 0
src/main/java/com/persagy/apm/alarmservice/common/jms/JmsSender.java

@@ -0,0 +1,71 @@
+package com.persagy.apm.alarmservice.common.jms;
+
+import com.persagy.apm.alarmservice.common.configuration.rabbitmq.JacksonMapper;
+import com.persagy.apm.alarmservice.common.model.DmpMessage;
+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.springframework.amqp.core.TopicExchange;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Component;
+
+/**
+ * 消息发送者
+ *
+ * @author lixing
+ * @version V1.0 2021/10/25 2:12 下午
+ **/
+@Slf4j
+@Component
+public class JmsSender {
+    @Autowired
+    private RabbitTemplate rabbitTemplate;
+
+    /**
+     * 交换机
+     */
+    private final String exchange = "exchange-alarm-service";
+
+    /**
+     * 报警条件路由键
+     */
+    private final String alarmConditionRoutingKey = "alarm-condition-routing-key";
+
+    /**
+     * 报警对象与报警条件关联关系路由键
+     */
+    private final String objConditionRelRoutingKey = "obj-condition-rel-routing-key";
+
+
+    @Bean
+    public TopicExchange exchange() {
+        return new TopicExchange(exchange);
+    }
+
+    /**
+     * 发送报警条件消息
+     *
+     * @param message 消息内容
+     * @author lixing
+     * @version V1.0 2021/10/25 2:18 下午
+     */
+    public void sendConditionMsg(DmpMessage message) {
+        log.info("向rabbitMQ发送报警条件消息,message:" + JacksonMapper.toSimpleJson(message));
+        rabbitTemplate.convertAndSend(exchange, alarmConditionRoutingKey, message);
+    }
+
+    /**
+     * 发送设备与报警条件关联消息
+     *
+     * @param message 消息内容
+     * @author lixing
+     * @version V1.0 2021/10/25 2:18 下午
+     */
+    public void sendObjConditionRelMsg(DmpMessage message) {
+        log.info("向rabbitMQ发送设备与报警条件关联消息,message:" + JacksonMapper.toSimpleJson(message));
+        rabbitTemplate.convertAndSend(exchange, objConditionRelRoutingKey, message);
+    }
+}

+ 22 - 11
src/main/java/com/persagy/apm/alarmservice/group/alarmrule/service/impl/GroupAlarmRuleServiceImpl.java

@@ -1,7 +1,6 @@
 package com.persagy.apm.alarmservice.group.alarmrule.service.impl;
 
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
+import cn.hutool.core.thread.ExecutorBuilder;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -26,9 +25,6 @@ import com.persagy.apm.common.context.AppContext;
 import com.persagy.apm.common.context.poems.PoemsContext;
 import com.persagy.apm.common.model.dto.Sort;
 import com.persagy.apm.energyalarmstarter.alarmdata.feign.DmpResult;
-import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.AlarmCondition;
-import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.AlarmEffectTime;
-import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.alarmconfig.AddAlarmConfigDTO;
 import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.alarmconfig.BatchDeleteAlarmConfigDTO;
 import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.alarmconfig.DeleteAlarmConfigDTO;
 import com.persagy.apm.energyalarmstarter.alarmdata.model.dto.alarmconfig.QueryAlarmConfigDTO;
@@ -53,6 +49,8 @@ import java.sql.Timestamp;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.ThreadPoolExecutor;
 import java.util.stream.Collectors;
 
 /**
@@ -76,6 +74,12 @@ public class GroupAlarmRuleServiceImpl extends ServiceImpl<GroupAlarmRuleMapper,
     @Autowired
     private IProjectAlarmRuleObjRelService projectAlarmRuleObjRelService;
 
+    ExecutorService executor = ExecutorBuilder.create()
+            .setCorePoolSize(5)
+            .setMaxPoolSize(10)
+            .setHandler(new ThreadPoolExecutor.CallerRunsPolicy())
+            .build();
+
     /**
      * 创建集团报警规则
      *
@@ -94,8 +98,18 @@ public class GroupAlarmRuleServiceImpl extends ServiceImpl<GroupAlarmRuleMapper,
         groupAlarmRule.setAlarmConditionId((String) conditionMap.get("id"));
         setDefaultValue(groupAlarmRule);
         save(groupAlarmRule);
-        //2、同步创建项目报警
-        projectAlarmRuleService.addProjectAlarmRules(addGroupAlarmRuleDTO);
+        //2、异步创建项目报警
+        String userId = PoemsContext.getContext().getUserId();
+        String groupCode = PoemsContext.getContext().getGroupCode();
+        String projectId = PoemsContext.getContext().getProjectId();
+        String pd = PoemsContext.getContext().getPd();
+        String loginDevice = PoemsContext.getContext().getLoginDevice();
+        executor.execute(() -> {
+            // 切换线程需要重新设置线程中的通用变量
+            PoemsContext.setContext(userId, loginDevice, pd, groupCode, projectId);
+            projectAlarmRuleService.addProjectAlarmRules(addGroupAlarmRuleDTO);
+        });
+
         // 勿删,后续有可能恢复 lixing
 //        List<ProjectVO> projects = projectAlarmRuleService.getProject();
 //        if (projects.size() == 0) {
@@ -199,7 +213,7 @@ public class GroupAlarmRuleServiceImpl extends ServiceImpl<GroupAlarmRuleMapper,
         //获得报警规则
         UpdateAlarmConditionDTO alarmCondition = updateGroupAlarmRuleDTO.getAlarmCondition();
         Map<String, Object> conditionMap = alarmConditionService.frontend2Backend(alarmCondition.getFrontend());
-        alarmConditionService.updateById(conditionMap, alarmCondition);
+        alarmConditionService.updateAlarmCondition(conditionMap, alarmCondition);
         // 勿删,后续可能启用 lixing
 //        //删除中台设备的报警条件
 //        String condition = updateGroupAlarmRuleDTO.getCondition();
@@ -372,9 +386,6 @@ public class GroupAlarmRuleServiceImpl extends ServiceImpl<GroupAlarmRuleMapper,
     public void delete(DeleteGroupAlarmRuleDTO deleteGroupAlarmRuleDTO) throws Exception {
         String groupRuleId = deleteGroupAlarmRuleDTO.getId();
         GroupAlarmRule groupAlarmRule = getById(groupRuleId);
-//        GetGroupAlarmRuleDTO getGroupAlarmRuleDTO = new GetGroupAlarmRuleDTO();
-//        getGroupAlarmRuleDTO.setGroupId(groupRuleId);
-//        GroupAlarmRule groupAlarmRule = getGroupAlarmRule(getGroupAlarmRuleDTO);
         this.deleteGroupAlarmRule(groupRuleId);
         alarmConditionService.deleteAlarmCondition(deleteGroupAlarmRuleDTO.getAlarmConditionId());
         projectAlarmRuleService.deleteBatch(groupAlarmRule);

+ 8 - 0
src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/controller/AlarmConditionController.java

@@ -89,6 +89,14 @@ public class AlarmConditionController {
         return ResultHelper.multi(resultList);
     }
 
+    @ApiOperation(value = "全部报警条件列表")
+    @ApiIgnore
+    @PostMapping("/query_all")
+    public CommonResult<List<AlarmCondition>> queryAllAlarmCondition() {
+        List<AlarmCondition> alarmConditionList = alarmConditionService.queryAllAlarmConditions();
+        return ResultHelper.single(alarmConditionList);
+    }
+
     @ApiOperation(value = "报警条件合法性校验")
     @PostMapping("/validate")
     public CommonResult<Boolean> validate(

+ 11 - 2
src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/service/IAlarmConditionService.java

@@ -79,9 +79,18 @@ public interface IAlarmConditionService  {
 
     void saveCondition(AlarmCondition alarmCondition);
 
-    Map<String, Object> swtichAlarmCondition(AddAlarmConditionDTO addAlarmConditionDTO);
+    Map<String, Object> switchAlarmCondition(AddAlarmConditionDTO addAlarmConditionDTO);
 
     Map<String, Object> frontend2Backend(List<List<CalculateMethodDTO>> frontend);
 
-    void updateById(Map<String, Object> conditionMap, UpdateAlarmConditionDTO alarmCondition);
+    void updateAlarmCondition(Map<String, Object> conditionMap, UpdateAlarmConditionDTO alarmCondition);
+
+    /**
+     * 查询所有的报警条件
+     *
+     * @return 报警条件列表
+     * @author lixing
+     * @version V1.0 2021/10/22 9:59 上午
+     */
+    List<AlarmCondition> queryAllAlarmConditions();
 }

+ 109 - 24
src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/service/impl/AlarmConditionServiceImpl.java

@@ -65,14 +65,15 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
 
         // 设置默认值
         setDefaultValue(alarmCondition);
-        save(alarmCondition);
+        saveCondition(alarmCondition);
         stringMap.put("id", alarmCondition.getId());
         return stringMap;
     }
 
     @Override
-    public void saveCondition(AlarmCondition alarmCondition){
+    public void saveCondition(AlarmCondition alarmCondition) {
         save(alarmCondition);
+        // 发送创建报警条件消息至mq // TODO: 2021/10/25  
     }
 
     /**
@@ -83,7 +84,7 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
      * @version V1.0 2021-09-08 22:30:38
      */
     @Override
-    public Map<String, Object> swtichAlarmCondition(AddAlarmConditionDTO addAlarmConditionDTO) {
+    public Map<String, Object> switchAlarmCondition(AddAlarmConditionDTO addAlarmConditionDTO) {
         AlarmCondition alarmCondition = ConvertAlarmConditionTool.INSTANCE.convertAddDto2Entity(addAlarmConditionDTO);
         List<List<CalculateMethodDTO>> frontend = addAlarmConditionDTO.getTriggerFrontend();
         alarmCondition.setTriggerFrontend(frontend);
@@ -93,13 +94,76 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
         alarmCondition.setInfoCodes((List<String>) stringMap.get("infoCode"));
         // 设置默认值
         setDefaultValue(alarmCondition);
-        stringMap.put("alarmCondition",alarmCondition);
+        stringMap.put("alarmCondition", alarmCondition);
         stringMap.put("id", alarmCondition.getId());
         return stringMap;
     }
 
     @Override
     public Map<String, Object> frontend2Backend(List<List<CalculateMethodDTO>> frontend) {
+        // TODO: 2021/10/21 后端条件示例
+        //
+        /* frontend示例 规则1: 新风焓值 ≥ 1;运行状态 = 停止 规则2: 新风焓值 ≥ 新风焓值 + 1
+        [
+              [
+                {
+                  "formula": [
+                    {
+                        "label": "1",
+                        "key": "enter3"
+                    }
+                  ],
+                  "tempFormula": "1",
+                  "monitorIndicatorName": "新风焓值",
+                  "monitorIndicatorId": "ACATAH_FreshAirH",
+                  "operator": "≥"
+                },
+                {
+                  "formula": [
+                    {
+                        "label": "停止",
+                        "value": "0",
+                        "key": "dic"
+                    }
+                  ],
+                  "tempFormula": "0",
+                  "monitorIndicatorName": "运行状态",
+                  "monitorIndicatorId": "ACATAH_RunStatus",
+                  "operator": "="
+                }
+              ],
+              [
+                {
+                  "formula": [
+                    {
+                        "label": "新风焓值",
+                        "value": "ACATAH_FreshAirH",
+                        "key": "6"
+                    },
+                    {
+                        "key": "8",
+                        "label": "+"
+                    },
+                    {
+                        "key": "enter9",
+                        "label": "1",
+                        "error": true
+                    }
+                  ],
+                  "tempFormula": "ACATAH_FreshAirH",
+                  "monitorIndicatorName": "新风焓值",
+                  "monitorIndicatorId": "ACATAH_FreshAirH",
+                  "operator": "≥",
+                  "dictionaries": [],
+                  "error": {
+                    "monitorIndicatorId": false,
+                    "operator": false,
+                    "formula": ""
+                  }
+                }
+              ]
+        ]
+        */
         StringBuffer allNotNull = new StringBuffer();
         StringBuffer allNull = new StringBuffer();
         Set<String> infoCodesSet = new HashSet<>();
@@ -108,6 +172,8 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
             StringBuffer notNullString = new StringBuffer();
             StringBuffer nullString = new StringBuffer();
             StringBuffer calculateString = new StringBuffer();
+            // 一条规则中包含的公式(中文)
+            List<String> ruleDisplayFormulaList = new ArrayList<>();
             for (CalculateMethodDTO calculateMethodDTO : calculateMethodDtoList) {
                 infoCodesSet.add(calculateMethodDTO.getMonitorIndicatorId());
                 List<Formula> formulas = calculateMethodDTO.getFormula();
@@ -115,17 +181,24 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
                 StringBuffer displayFormula = new StringBuffer();
                 displayFormula.append(calculateMethodDTO.getMonitorIndicatorName()).append(calculateMethodDTO.getOperator());
                 for (Formula formula : formulas) {
+                    displayFormula.append(formula.getLabel());
+                    if ("dic".equals(formula.getKey())) {
+                        // 如果formula是字典选项
+                        tempFormula.append(formula.getValue());
+                        continue;
+                    }
                     if (StringUtils.isNotBlank(formula.getValue())) {
+                        // 如果formula不是字典选项,且value值不为空,代表formula是个监测指标
                         nullString.append(formula.getValue()).append("==NaN").append(" || ");
                         notNullString.append(formula.getValue()).append("!=NaN").append(" && ");
                         tempFormula.append(formula.getValue());
                         infoCodesSet.add(formula.getValue());
                     } else {
+                        // formula为数字或操作符
                         tempFormula.append(replace(formula.getLabel()));
                     }
-                    displayFormula.append(formula.getLabel());
                 }
-                displayFormulaList.add(displayFormula.toString());
+                ruleDisplayFormulaList.add(displayFormula.toString());
                 calculateMethodDTO.setTempFormula(tempFormula.toString());
                 nullString.append(calculateMethodDTO.getMonitorIndicatorId()).append("==NaN").append(" || ");
                 notNullString.append(calculateMethodDTO.getMonitorIndicatorId()).append("!=NaN").append(" && ");
@@ -135,21 +208,21 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
                         .append(calculateMethodDTO.getTempFormula()).append(")")
                         .append(" && ");
             }
+            displayFormulaList.add(String.join(",", ruleDisplayFormulaList));
             notNullString.delete(notNullString.length() - 4, notNullString.length()).append(")");
             allNotNull.append("(").append(notNullString).append(" || ");
-            allNull.append("(").append("(").append(nullString.substring(0, nullString.length() - 4)).append(")").append("?true:").append("(").append(calculateString.substring(0, calculateString.length() - 4)).append(")").append(")").append(" || ");
+            allNull.append("(").append("(").append(nullString.substring(0, nullString.length() - 4)).append(")")
+                    .append("?false:").append("(").append(calculateString.substring(0, calculateString.length() - 4)).append(")").append(")").append(" || ");
 
         }
         StringBuffer substring = new StringBuffer();
-        substring.append("(").append(allNotNull.substring(0, allNotNull.length() - 4)).append(")").append(" && ").append("(").append(allNull.substring(0, allNull.length() - 4)).append(")").toString();
-        Map<String, Object> map = new HashMap();
-        List<String> infoCodesList = new ArrayList<>();
-        infoCodesList.addAll(infoCodesSet);
-        List<String> displayFormula = new ArrayList();
-        displayFormula.addAll(displayFormulaList);
+        substring.append("(").append(allNotNull.substring(0, allNotNull.length() - 4)).append(")")
+                .append(" && ").append("(").append(allNull.substring(0, allNull.length() - 4)).append(")");
+        Map<String, Object> map = new HashMap<>();
+        List<String> infoCodesList = new ArrayList<>(infoCodesSet);
+        List<String> displayFormula = new ArrayList<>(displayFormulaList);
         map.put("infoCode", infoCodesList);
         map.put("backend", substring.toString());
-        map.put("end", "!" + substring);
         map.put("displayFormula", displayFormula);
         return map;
     }
@@ -162,15 +235,22 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
     }
 
     @Override
-    public void updateById(Map<String, Object> conditionMap, UpdateAlarmConditionDTO condition) {
+    public void updateAlarmCondition(Map<String, Object> conditionMap, UpdateAlarmConditionDTO condition) {
         AlarmCondition alarmCondition = new AlarmCondition();
+        alarmCondition.setInfoCodes((List<String>) conditionMap.get("infoCode"));
         alarmCondition.setTriggerFrontend(condition.getFrontend());
-        alarmCondition.setAlarmLevel(condition.getAlarmLevel());
         alarmCondition.setTriggerBackend((String) conditionMap.get("backend"));
-        alarmCondition.setInfoCodes((List<String>) conditionMap.get("infoCode"));
         alarmCondition.setTriggerUphold(condition.getTriggerUphold());
+        alarmCondition.setAlarmLevel(condition.getAlarmLevel());
+        alarmCondition.setTriggerRules((List<String>) conditionMap.get("displayFormula"));
+        alarmCondition.setEndBackend("!(" + conditionMap.get("backend") + ")");
         alarmCondition.setId(condition.getId());
+        updateAndSendMsg2MQ(alarmCondition);
+    }
+
+    private void updateAndSendMsg2MQ(AlarmCondition alarmCondition) {
         updateById(alarmCondition);
+        // 发送消息至MQ // TODO: 2021/10/25
     }
 
     /**
@@ -220,7 +300,7 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
             alarmCondition.setTriggerBackend((String) stringMap.get("backend"));
             alarmCondition.setInfoCodes((List<String>) stringMap.get("infoCode"));
         }
-        updateById(alarmCondition);
+        updateAndSendMsg2MQ(alarmCondition);
     }
 
     /**
@@ -396,9 +476,9 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
      * @return
      */
     public CommonResult validate(String expression, String variable) {
-//        if (variables == null || variables.isEmpty()) {
-//            return ResultHelper.failure(ResponseCode.C0134.getCode(), "内置变量为空");
-//        }
+        //        if (variables == null || variables.isEmpty()) {
+        //            return ResultHelper.failure(ResponseCode.C0134.getCode(), "内置变量为空");
+        //        }
         // 去空格
         expression = expression.replaceAll(" ", "");
         // 连续运算符处理
@@ -408,9 +488,9 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
         if (org.apache.commons.lang3.StringUtils.contains(expression, "()")) {
             return ResultHelper.failure(ResponseCode.C0134.getCode(), "公式不合法");
         }
-//        expression = expression.replaceAll("\\)\\(", "\\)*\\(");
-//        expression = expression.replaceAll("\\(\\-", "\\(0-");
-//        expression = expression.replaceAll("\\(\\+", "\\(0+");
+        //        expression = expression.replaceAll("\\)\\(", "\\)*\\(");
+        //        expression = expression.replaceAll("\\(\\-", "\\(0-");
+        //        expression = expression.replaceAll("\\(\\+", "\\(0+");
         // 校验变量
         String[] splits = expression.split("\\+|\\-|\\*|\\/|\\(|\\)");
         for (String split : splits) {
@@ -465,4 +545,9 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
         }
         return ResultHelper.success();
     }
+
+    @Override
+    public List<AlarmCondition> queryAllAlarmConditions() {
+        return queryAlarmConditionList(new QueryAlarmConditionDTO());
+    }
 }

+ 8 - 0
src/main/java/com/persagy/apm/alarmservice/project/alarmrule/controller/ProjectAlarmRuleController.java

@@ -8,6 +8,7 @@ import com.persagy.apm.alarmservice.project.alarmrule.dao.ProjectAlarmRuleMapper
 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.vo.ProjectVO;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.service.IProjectAlarmRuleObjRelService;
 import com.persagy.common.enums.ResponseCode;
 import org.apache.commons.lang.StringUtils;
@@ -47,6 +48,13 @@ public class ProjectAlarmRuleController {
     @Autowired
     private ProjectAlarmRuleMapper projectAlarmRuleMapper;
 
+    @ApiOperation(value = "查询所有的项目")
+    @PostMapping("/projects")
+    public CommonResult<List<ProjectVO>> queryProjects() {
+        List<ProjectVO> projects = projectAlarmRuleService.getProject();
+        return ResultHelper.single(projects);
+    }
+
     @ApiOperation(value = "创建项目报警规则")
     @PostMapping("/create")
     public CommonResult<ApmResponseUpsertVO> createProjectAlarmRule(

+ 5 - 9
src/main/java/com/persagy/apm/alarmservice/project/alarmrule/service/impl/ProjectAlarmRuleServiceImpl.java

@@ -193,7 +193,7 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
         ProjectAlarmRule projectAlarmRule = getById(updateProjectAlarmRuleDTO.getId());
         projectAlarmRule.setModifier(AppContext.getContext().getAccountId());
         AddAlarmConditionDTO alarmCondition = updateProjectAlarmRuleDTO.getAlarmCondition();
-        Map<String, Object> conditionMap = alarmConditionService.swtichAlarmCondition(alarmCondition);
+        Map<String, Object> conditionMap = alarmConditionService.switchAlarmCondition(alarmCondition);
         //查询已有项目报警
         int belongOld = projectAlarmRule.getBelong();
         int belongNew = updateProjectAlarmRuleDTO.getBelong();
@@ -402,28 +402,24 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
 
         if (queryProjectAlarmRuleDTO != null) {
 
-            // todo 需判断使用like还是eq
             if (StringUtils.isNotEmpty(queryProjectAlarmRuleDTO.getGroupId())) {
-                queryWrapper.like(ProjectAlarmRule.PROP_GROUP_ID, queryProjectAlarmRuleDTO.getGroupId());
+                queryWrapper.eq(ProjectAlarmRule.PROP_GROUP_ID, queryProjectAlarmRuleDTO.getGroupId());
             }
 
-            // todo 需判断使用like还是eq
             if (StringUtils.isNotEmpty(queryProjectAlarmRuleDTO.getAlarmItemCode())) {
-                queryWrapper.like(ProjectAlarmRule.PROP_ALARM_ITEM_CODE, queryProjectAlarmRuleDTO.getAlarmItemCode());
+                queryWrapper.eq(ProjectAlarmRule.PROP_ALARM_ITEM_CODE, queryProjectAlarmRuleDTO.getAlarmItemCode());
             }
 
-            // todo 需判断使用like还是eq
             if (StringUtils.isNotEmpty(queryProjectAlarmRuleDTO.getAlarmConditionId())) {
-                queryWrapper.like(ProjectAlarmRule.PROP_ALARM_CONDITION_ID, queryProjectAlarmRuleDTO.getAlarmConditionId());
+                queryWrapper.eq(ProjectAlarmRule.PROP_ALARM_CONDITION_ID, queryProjectAlarmRuleDTO.getAlarmConditionId());
             }
 
             if (queryProjectAlarmRuleDTO.getBelong() != null) {
                 queryWrapper.eq(ProjectAlarmRule.PROP_BELONG, queryProjectAlarmRuleDTO.getBelong());
             }
 
-            // todo 需判断使用like还是eq
             if (StringUtils.isNotEmpty(queryProjectAlarmRuleDTO.getProjectId())) {
-                queryWrapper.like(ProjectAlarmRule.PROP_PROJECT_ID, queryProjectAlarmRuleDTO.getProjectId());
+                queryWrapper.eq(ProjectAlarmRule.PROP_PROJECT_ID, queryProjectAlarmRuleDTO.getProjectId());
             }
 
         }

+ 9 - 0
src/main/java/com/persagy/apm/alarmservice/project/alarmruleobjrel/controller/ProjectAlarmRuleObjRelController.java

@@ -85,6 +85,15 @@ public class ProjectAlarmRuleObjRelController {
         List<ProjectAlarmRuleObjRelListItemVO> resultList = ConvertProjectAlarmRuleObjRelTool.INSTANCE.convert2List(projectAlarmRuleObjRelList);
         return ResultHelper.multi(resultList);
     }
+
+    @ApiOperation(value = "监测对象与报警条件的关联列表")
+    @ApiIgnore
+    @PostMapping("/query_obj_condition_rels")
+    public CommonResult<List<ObjConditionRel>> queryObjAlarmConditionRel(
+            @Valid @RequestBody QueryObjConditionRelDTO queryObjConditionRelDTO) {
+        List<ObjConditionRel> objConditionRels = projectAlarmRuleObjRelService.queryObjAlarmConditionRel(queryObjConditionRelDTO);
+        return ResultHelper.single(objConditionRels);
+    }
     
     //@ApiOperation(value = "项目报警规则与监测对象的关联列表, 分页查询")
     //@PostMapping("/query")

+ 4 - 0
src/main/java/com/persagy/apm/alarmservice/project/alarmruleobjrel/dao/ProjectAlarmRuleObjRelMapper.java

@@ -2,7 +2,9 @@ package com.persagy.apm.alarmservice.project.alarmruleobjrel.dao;
 
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.ProjectAlarmRuleObjRel;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.dto.QueryObjConditionRelDTO;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.dto.ShieldManageDTO;
+import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.vo.ObjConditionRel;
 import feign.Param;
 import org.apache.ibatis.annotations.Mapper;
 
@@ -19,4 +21,6 @@ public interface ProjectAlarmRuleObjRelMapper extends BaseMapper<ProjectAlarmRul
     void updateStatus(@Param("shieldManageDTOList") List<ShieldManageDTO> shieldManageDTOList, @Param("projectAlarmRuleId") String projectAlarmRuleId, @Param("projectId") String projectId);
 
     void deleteByProjectAlarmRuleId(String id);
+
+    List<ObjConditionRel> queryObjAlarmConditionRel(String projectId);
 }

+ 16 - 0
src/main/java/com/persagy/apm/alarmservice/project/alarmruleobjrel/model/dto/QueryObjConditionRelDTO.java

@@ -0,0 +1,16 @@
+package com.persagy.apm.alarmservice.project.alarmruleobjrel.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-09-08 22:46:37
+ */
+@Data
+@ApiModel(value = "查询监测对象与报警条件关联入参")
+public class QueryObjConditionRelDTO {
+    @ApiModelProperty(value = "项目id")
+    private String projectId;
+}

+ 31 - 0
src/main/java/com/persagy/apm/alarmservice/project/alarmruleobjrel/model/vo/ObjConditionRel.java

@@ -0,0 +1,31 @@
+package com.persagy.apm.alarmservice.project.alarmruleobjrel.model.vo;
+
+import lombok.Builder;
+import lombok.Data;
+
+/**
+ * 设备与报警条件的关联
+ *
+ * @author lixing
+ * @version V1.0 2021/10/22 9:42 上午
+ **/
+@Data
+@Builder
+public class ObjConditionRel {
+    /**
+     * 报警对象id
+     */
+    private String objId;
+    /**
+     * 报警类型编码
+     */
+    private String itemCode;
+    /**
+     * 项目id
+     */
+    private String projectId;
+    /**
+     * 报警条件id
+     */
+    private String conditionId;
+}

+ 11 - 0
src/main/java/com/persagy/apm/alarmservice/project/alarmruleobjrel/service/IProjectAlarmRuleObjRelService.java

@@ -4,6 +4,7 @@ import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.*;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.dto.*;
 import java.util.List;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.vo.ObjConditionRel;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.vo.ProjectAlarmRuleObjRelListItemVO;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.vo.ProjectAlarmRuleObjRelVO;
 
@@ -92,4 +93,14 @@ public interface IProjectAlarmRuleObjRelService  {
     List<ProjectAlarmRuleObjRel> queryObjRelList(List<String> strings);
 
     void saveProjectAlarmRule(List<ProjectAlarmRuleObjRel> addEquipList);
+
+    /**
+     * 查询报警对象与报警条件的关联关系
+     *
+     * @param queryObjConditionRelDTO 查询条件
+     * @return 报警对象与报警条件的关联关系
+     * @author lixing
+     * @version V1.0 2021/10/22 10:46 上午
+     */
+    List<ObjConditionRel> queryObjAlarmConditionRel(QueryObjConditionRelDTO queryObjConditionRelDTO);
 }

+ 13 - 6
src/main/java/com/persagy/apm/alarmservice/project/alarmruleobjrel/service/impl/ProjectAlarmRuleObjRelServiceImpl.java

@@ -7,18 +7,18 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.base.CaseFormat;
 import com.google.common.base.Function;
 import com.google.common.base.Predicate;
-import com.persagy.apm.alarmservice.group.alarmrule.model.ConvertGroupAlarmRuleTool;
 import com.persagy.apm.alarmservice.group.management.model.equip.dto.QueryEquipDTO;
 import com.persagy.apm.alarmservice.group.management.model.equip.vo.EquipItem;
 import com.persagy.apm.alarmservice.group.management.service.GroupManagementService;
+import com.persagy.apm.alarmservice.project.alarmrule.model.ProjectAlarmRule;
+import com.persagy.apm.alarmservice.project.alarmrule.model.dto.QueryProjectAlarmRuleDTO;
 import com.persagy.apm.alarmservice.project.alarmrule.service.IProjectAlarmRuleService;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.dao.ProjectAlarmRuleObjRelMapper;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.ConvertProjectAlarmRuleObjRelTool;
-import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.ConvertProjectAlarmRuleObjRelToolImpl;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.ProjectAlarmRuleObjRel;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.dto.*;
+import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.vo.ObjConditionRel;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.vo.ProjectAlarmRuleObjRelListItemVO;
-import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.vo.ProjectAlarmRuleObjRelVO;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.vo.ProjectVO;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.service.IProjectAlarmRuleObjRelService;
 import com.persagy.apm.common.constant.enums.ValidEnum;
@@ -35,8 +35,10 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
-import java.text.Collator;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.stream.Collectors;
 
@@ -359,7 +361,7 @@ public class ProjectAlarmRuleObjRelServiceImpl extends ServiceImpl<ProjectAlarmR
     @Override
     public List<ProjectAlarmRuleObjRelListItemVO> queryRuleObjRel(QueryRuleObjRelDTO queryRuleObjRelDTO) {
         List<ProjectAlarmRuleObjRel> resultList = new ArrayList<>();
-        if(StringUtils.isNotBlank(queryRuleObjRelDTO.getProjectAlarmRuleId())){
+        if (StringUtils.isNotBlank(queryRuleObjRelDTO.getProjectAlarmRuleId())) {
             //1、查询项目报警下的未屏蔽的报警对象
             QueryWrapper<ProjectAlarmRuleObjRel> queryWrapper = new QueryWrapper<>();
             queryWrapper.eq(ProjectAlarmRuleObjRel.PROP_PROJECT_ALARM_RULE_ID, queryRuleObjRelDTO.getProjectAlarmRuleId());
@@ -436,4 +438,9 @@ public class ProjectAlarmRuleObjRelServiceImpl extends ServiceImpl<ProjectAlarmR
     public void saveProjectAlarmRule(List<ProjectAlarmRuleObjRel> addEquipList) {
         saveBatch(addEquipList);
     }
+
+    @Override
+    public List<ObjConditionRel> queryObjAlarmConditionRel(QueryObjConditionRelDTO queryObjConditionRelDTO) {
+        return projectAlarmRuleObjRelMapper.queryObjAlarmConditionRel(queryObjConditionRelDTO.getProjectId());
+    }
 }

+ 1 - 1
src/main/resources/mapper/ProjectAlarmRuleMapper.xml

@@ -53,7 +53,7 @@
         a.modified_time,
         a.modifier,
         c.alarm_level,
-        c.backend,c.frontend,c.info_codes,c.trigger_uphold
+        c.trigger_backend,c.trigger_frontend,c.info_codes,c.trigger_uphold
         from project_alarm_rule a
         left join alarm_condition c on a.alarm_condition_id = c.id
         where a.group_id = #{groupId} and a.valid = 1 and a.project_id = #{projectId}

+ 17 - 1
src/main/resources/mapper/ProjectAlarmRuleObjRelMapper.xml

@@ -29,7 +29,23 @@
         </foreach>
     </update>
     <delete id="deleteByProjectAlarmRuleId">
-        delete from project_alarm_rule_obj_rel where project_alarm_rule_id = #{id} and open = 1
+        delete
+        from project_alarm_rule_obj_rel
+        where project_alarm_rule_id = #{id}
+          and open = 1
     </delete>
+    <select id="queryObjAlarmConditionRel"
+            resultType="com.persagy.apm.alarmservice.project.alarmruleobjrel.model.vo.ObjConditionRel">
+        select rel.obj_id as objId,
+        rule.project_id as projectId,
+        rule.alarm_item_code as itemCode,
+        rule.alarm_condition_id as conditionId
+        from project_alarm_rule rule,
+        project_alarm_rule_obj_rel rel
+        where rule.id = rel.project_alarm_rule_id
+        <if test="projectId != null and projectId != ''">
+            and rule.project_id = #{projectId};
+        </if>
+    </select>
 </mapper>