Browse Source

Merge branch 'v1.0.0' of http://39.106.8.246:3003/apm/energy-alarm-service into v1.1.0

miaolijing 3 years ago
parent
commit
3392f96f66
24 changed files with 578 additions and 177 deletions
  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. 9 0
      src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/controller/AlarmConditionController.java
  4. 1 1
      src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/model/AlarmCondition.java
  5. 21 0
      src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/model/dto/QueryAlarmConditionByProjectDTO.java
  6. 37 22
      src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/model/vo/AlarmConditionItemVO.java
  7. 35 22
      src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/model/vo/AlarmConditionListItemVO.java
  8. 21 0
      src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/model/vo/ProjectAlarmConditionsVO.java
  9. 11 2
      src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/service/IAlarmConditionService.java
  10. 115 29
      src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/service/impl/AlarmConditionServiceImpl.java
  11. 87 17
      src/main/java/com/persagy/apm/alarmservice/project/alarmrule/controller/ProjectAlarmRuleController.java
  12. 1 1
      src/main/java/com/persagy/apm/alarmservice/project/alarmrule/model/vo/ProjectAlarmRuleListItemVO.java
  13. 36 0
      src/main/java/com/persagy/apm/alarmservice/project/alarmrule/model/vo/ProjectAlarmRuleWithObjsAndInfoCodes.java
  14. 5 9
      src/main/java/com/persagy/apm/alarmservice/project/alarmrule/service/impl/ProjectAlarmRuleServiceImpl.java
  15. 9 0
      src/main/java/com/persagy/apm/alarmservice/project/alarmruleobjrel/controller/ProjectAlarmRuleObjRelController.java
  16. 4 0
      src/main/java/com/persagy/apm/alarmservice/project/alarmruleobjrel/dao/ProjectAlarmRuleObjRelMapper.java
  17. 16 0
      src/main/java/com/persagy/apm/alarmservice/project/alarmruleobjrel/model/dto/QueryObjConditionRelDTO.java
  18. 31 0
      src/main/java/com/persagy/apm/alarmservice/project/alarmruleobjrel/model/vo/ObjConditionRel.java
  19. 11 0
      src/main/java/com/persagy/apm/alarmservice/project/alarmruleobjrel/service/IProjectAlarmRuleObjRelService.java
  20. 16 12
      src/main/java/com/persagy/apm/alarmservice/project/alarmruleobjrel/service/impl/ProjectAlarmRuleObjRelServiceImpl.java
  21. 0 48
      src/main/java/com/persagy/apm/alarmservice/project/model/AlarmCondition.java
  22. 1 1
      src/main/resources/db/init/data.sql
  23. 1 1
      src/main/resources/mapper/ProjectAlarmRuleMapper.xml
  24. 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);

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

@@ -4,6 +4,7 @@ import com.persagy.apm.alarmservice.group.alarmrule.model.GroupAlarmRule;
 import com.persagy.apm.alarmservice.group.alarmrule.model.dto.GetGroupAlarmRuleDTO;
 import com.persagy.apm.alarmservice.group.alarmrule.service.IGroupAlarmRuleService;
 import com.persagy.apm.alarmservice.project.alarmcondition.model.Formula;
+import com.persagy.apm.alarmservice.project.alarmcondition.model.vo.ProjectAlarmConditionsVO;
 import com.persagy.apm.alarmservice.project.alarmcondition.service.IAlarmConditionService;
 
 import com.persagy.apm.alarmservice.project.alarmcondition.model.AlarmCondition;
@@ -89,6 +90,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(

+ 1 - 1
src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/model/AlarmCondition.java

@@ -23,7 +23,7 @@ import java.util.List;
 @EqualsAndHashCode(callSuper = true)
 @Data
 @ApiModel(description = "报警条件")
-@TableName(autoResultMap = true)
+@TableName(value = "alarm_condition_bak", autoResultMap = true)
 public class AlarmCondition extends AuditableEntity<AlarmCondition> implements Serializable {
     private static final long serialVersionUID = 268657175929005281L;
 

+ 21 - 0
src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/model/dto/QueryAlarmConditionByProjectDTO.java

@@ -0,0 +1,21 @@
+package com.persagy.apm.alarmservice.project.alarmcondition.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-09-08 22:30:38
+ */
+@Data
+@ApiModel(value = "根据项目查询报警条件入参")
+public class QueryAlarmConditionByProjectDTO {
+
+    @ApiModelProperty(value = "项目id", required = true)
+    @NotBlank(message = "项目id不能为空")
+    private String projectId;
+    
+}

+ 37 - 22
src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/model/vo/AlarmConditionItemVO.java

@@ -1,10 +1,16 @@
 package com.persagy.apm.alarmservice.project.alarmcondition.model.vo;
 
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
+import com.persagy.apm.alarmservice.group.calculatemethod.model.dto.CalculateMethodDTO;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import java.util.Date;
+import java.util.List;
+
 import com.fasterxml.jackson.annotation.JsonInclude;
+import org.json.JSONObject;
 
 /**
  * @author lixing
@@ -16,32 +22,41 @@ import com.fasterxml.jackson.annotation.JsonInclude;
 public class AlarmConditionItemVO {
     @ApiModelProperty("主键")
     private String id;
-    
+
     @ApiModelProperty("包含的参数")
-    private Object infoCodes;
-    
-    @ApiModelProperty("前端展示")
-    private Object frontend;
-    
-    @ApiModelProperty("后端使用")
-    private Object backend;
-    
+    private List<String> infoCodes;
+
+    @ApiModelProperty("触发条件-前端展示")
+    private List<List<CalculateMethodDTO>> triggerFrontend;
+
+    @ApiModelProperty("触发条件-后端使用")
+    private String triggerBackend;
+
     @ApiModelProperty("触发时长")
     private Integer triggerUphold;
-    
+
     @ApiModelProperty("报警等级")
     private String alarmLevel;
-    
-    @ApiModelProperty("创建人")
-    private String creator;
-    
-    @ApiModelProperty("创建时间")
-    private Date creationTime;
-    
-    @ApiModelProperty("修改人")
-    private String modifier;
-    
-    @ApiModelProperty("修改时间")
-    private Date modifiedTime;
+
+    @ApiModelProperty("持续多久后恢复")
+    private Integer endUphold;
+
+    @ApiModelProperty("触发规则-中文描述")
+    private List<String> triggerRules;
+
+    @ApiModelProperty("恢复条件-前端")
+    private List<List<CalculateMethodDTO>> endFrontend;
+
+    @ApiModelProperty("恢复条件-后端")
+    private String endBackend;
+
+    @ApiModelProperty("恢复规则-中文描述")
+    private List<String> endRules;
+
+    @ApiModelProperty("生效时间类型")
+    private String effectTimeType;
+
+    @ApiModelProperty("生效时间详情")
+    private JSONObject effectTimeDetail;
     
 }

+ 35 - 22
src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/model/vo/AlarmConditionListItemVO.java

@@ -1,10 +1,14 @@
 package com.persagy.apm.alarmservice.project.alarmcondition.model.vo;
 
+import com.persagy.apm.alarmservice.group.calculatemethod.model.dto.CalculateMethodDTO;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import java.util.Date;
+import java.util.List;
+
 import com.fasterxml.jackson.annotation.JsonInclude;
+import org.json.JSONObject;
 
 /**
  * @author lixing
@@ -16,32 +20,41 @@ import com.fasterxml.jackson.annotation.JsonInclude;
 public class AlarmConditionListItemVO {
     @ApiModelProperty("主键")
     private String id;
-    
+
     @ApiModelProperty("包含的参数")
-    private Object infoCodes;
-    
-    @ApiModelProperty("前端展示")
-    private Object frontend;
-    
-    @ApiModelProperty("后端使用")
-    private Object backend;
-    
+    private List<String> infoCodes;
+
+    @ApiModelProperty("触发条件-前端展示")
+    private List<List<CalculateMethodDTO>> triggerFrontend;
+
+    @ApiModelProperty("触发条件-后端使用")
+    private String triggerBackend;
+
     @ApiModelProperty("触发时长")
     private Integer triggerUphold;
-    
+
     @ApiModelProperty("报警等级")
     private String alarmLevel;
-    
-    @ApiModelProperty("创建人")
-    private String creator;
-    
-    @ApiModelProperty("创建时间")
-    private Date creationTime;
-    
-    @ApiModelProperty("修改人")
-    private String modifier;
-    
-    @ApiModelProperty("修改时间")
-    private Date modifiedTime;
+
+    @ApiModelProperty("持续多久后恢复")
+    private Integer endUphold;
+
+    @ApiModelProperty("触发规则-中文描述")
+    private List<String> triggerRules;
+
+    @ApiModelProperty("恢复条件-前端")
+    private List<List<CalculateMethodDTO>> endFrontend;
+
+    @ApiModelProperty("恢复条件-后端")
+    private String endBackend;
+
+    @ApiModelProperty("恢复规则-中文描述")
+    private List<String> endRules;
+
+    @ApiModelProperty("生效时间类型")
+    private String effectTimeType;
+
+    @ApiModelProperty("生效时间详情")
+    private JSONObject effectTimeDetail;
     
 }

+ 21 - 0
src/main/java/com/persagy/apm/alarmservice/project/alarmcondition/model/vo/ProjectAlarmConditionsVO.java

@@ -0,0 +1,21 @@
+package com.persagy.apm.alarmservice.project.alarmcondition.model.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-09-08 22:30:38
+ */
+@Data
+@ApiModel(value = "项目的所有报警条件")
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class ProjectAlarmConditionsVO {
+    @ApiModelProperty("项目id")
+    private String projectId;
+
+}

+ 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();
 }

+ 115 - 29
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
     }
 
     /**
@@ -194,11 +274,12 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
      */
     @Override
     public AlarmCondition queryAlarmConditionDetail(String id) {
-        AlarmCondition alarmCondition = getById(id);
-        if (alarmCondition == null) {
-            throw new IllegalArgumentException("查看AlarmCondition详情时发生异常,找不到要查看的记录,id=" + id);
-        }
-        return alarmCondition;
+//        AlarmCondition alarmCondition = getById(id);
+//        if (alarmCondition == null) {
+//            throw new IllegalArgumentException("查看AlarmCondition详情时发生异常,找不到要查看的记录,id=" + id);
+//        }
+//        return alarmCondition;
+        return getById(id);
     }
 
     /**
@@ -220,7 +301,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 +477,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 +489,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 +546,9 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
         }
         return ResultHelper.success();
     }
+
+    @Override
+    public List<AlarmCondition> queryAllAlarmConditions() {
+        return queryAlarmConditionList(new QueryAlarmConditionDTO());
+    }
 }

+ 87 - 17
src/main/java/com/persagy/apm/alarmservice/project/alarmrule/controller/ProjectAlarmRuleController.java

@@ -1,27 +1,34 @@
 package com.persagy.apm.alarmservice.project.alarmrule.controller;
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.persagy.apm.alarmservice.group.alarmrule.dao.GroupAlarmRuleMapper;
-import com.persagy.apm.alarmservice.group.alarmrule.model.vo.GroupAlarmRuleListItemVO;
-import com.persagy.apm.alarmservice.group.monitorindicator.model.MonitorIndicator;
+import com.persagy.apm.alarmservice.project.alarmcondition.model.AlarmCondition;
+import com.persagy.apm.alarmservice.project.alarmcondition.service.IAlarmConditionService;
 import com.persagy.apm.alarmservice.project.alarmrule.dao.ProjectAlarmRuleMapper;
+import com.persagy.apm.alarmservice.project.alarmrule.model.ConvertProjectAlarmRuleTool;
+import com.persagy.apm.alarmservice.project.alarmrule.model.ProjectAlarmRule;
+import com.persagy.apm.alarmservice.project.alarmrule.model.dto.*;
+import com.persagy.apm.alarmservice.project.alarmrule.model.vo.ProjectAlarmRuleItemVO;
+import com.persagy.apm.alarmservice.project.alarmrule.model.vo.ProjectAlarmRuleListItemVO;
+import com.persagy.apm.alarmservice.project.alarmrule.model.vo.ProjectAlarmRuleWithObjsAndInfoCodes;
 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.ProjectVO;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.service.IProjectAlarmRuleObjRelService;
+import com.persagy.apm.common.response.ApmResponseUpsertVO;
+import com.persagy.apm.common.response.CommonResult;
+import com.persagy.apm.common.response.PageList;
+import com.persagy.apm.common.utils.ResultHelper;
 import com.persagy.common.enums.ResponseCode;
-import org.apache.commons.lang.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import com.persagy.apm.alarmservice.project.alarmrule.model.*;
-import com.persagy.apm.alarmservice.project.alarmrule.model.vo.*;
-import com.persagy.apm.alarmservice.project.alarmrule.model.dto.*;
-import com.persagy.apm.common.response.*;
-import com.persagy.apm.common.utils.ResultHelper;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 import springfox.documentation.annotations.ApiIgnore;
 
 import javax.validation.Valid;
@@ -46,6 +53,15 @@ public class ProjectAlarmRuleController {
     private IProjectAlarmRuleObjRelService projectAlarmRuleObjRelService;
     @Autowired
     private ProjectAlarmRuleMapper projectAlarmRuleMapper;
+    @Autowired
+    private IAlarmConditionService alarmConditionService;
+
+    @ApiOperation(value = "查询所有的项目")
+    @PostMapping("/projects")
+    public CommonResult<List<ProjectVO>> queryProjects() {
+        List<ProjectVO> projects = projectAlarmRuleService.getProject();
+        return ResultHelper.single(projects);
+    }
 
     @ApiOperation(value = "创建项目报警规则")
     @PostMapping("/create")
@@ -100,7 +116,7 @@ public class ProjectAlarmRuleController {
     }
 
 
-    @ApiOperation(value = "项目报警规则列表")
+    @ApiOperation(value = "项目报警规则列表(不含报警条件)")
     @ApiIgnore
     @PostMapping("/query")
     public CommonResult<PageList<ProjectAlarmRuleListItemVO>> queryProjectAlarmRule(
@@ -118,7 +134,7 @@ public class ProjectAlarmRuleController {
         int page = pageQueryProjectAlarmRuleDTO.getPage();
         int size = pageQueryProjectAlarmRuleDTO.getSize();
         pageQueryProjectAlarmRuleDTO.setStartIndex((page - 1) * size);
-//        int count = projectAlarmRuleMapper.queryCount(pageQueryProjectAlarmRuleDTO);
+        //        int count = projectAlarmRuleMapper.queryCount(pageQueryProjectAlarmRuleDTO);
         List<ProjectAlarmRuleListItemVO> projectAlarmRuleListItemVOS = projectAlarmRuleMapper.queryList(pageQueryProjectAlarmRuleDTO);
         List<ProjectAlarmRuleListItemVO> result = new ArrayList<>();
         for (ProjectAlarmRuleListItemVO projectAlarmRuleListItemVO : projectAlarmRuleListItemVOS) {
@@ -138,10 +154,64 @@ public class ProjectAlarmRuleController {
                 result.add(projectAlarmRuleListItemVO);
             }
         }
-        List<ProjectAlarmRuleListItemVO> collect = result.stream().sorted(Comparator.comparing(ProjectAlarmRuleListItemVO::getAlarmItemName,
+        // 报警类型名称按照中文排序
+        List<ProjectAlarmRuleListItemVO> collect = result.stream().sorted(Comparator.comparing(
+                ProjectAlarmRuleListItemVO::getAlarmItemName,
                 Collator.getInstance(Locale.CHINA))).collect(Collectors.toList());
         List<ProjectAlarmRuleListItemVO> resultList = projectAlarmRuleService.pageBySubList(collect, size, page);
         return ResultHelper.multi(resultList, result.size());
     }
+
+    @ApiOperation(value = "项目报警规则列表(含关联的监测指标和设备)")
+    @PostMapping("/query_with_indicators_objs")
+    public CommonResult<PageList<ProjectAlarmRuleWithObjsAndInfoCodes>> queryProjectAlarmRuleWithCondition(
+            @Valid @RequestBody QueryProjectAlarmRuleDTO queryProjectAlarmRuleDTO) {
+        List<ProjectAlarmRule> projectAlarmRuleList = projectAlarmRuleService.queryProjectAlarmRuleList(queryProjectAlarmRuleDTO);
+        List<ProjectAlarmRuleWithObjsAndInfoCodes> resultList = new LinkedList<>();
+        for (ProjectAlarmRule projectAlarmRule : projectAlarmRuleList) {
+            ProjectAlarmRuleWithObjsAndInfoCodes projectAlarmRuleWithObjsAndInfoCodes =
+                    convert2ProjectAlarmRuleWithObjsAndInfoCodes(projectAlarmRule);
+            if (projectAlarmRuleWithObjsAndInfoCodes == null) {continue;}
+
+            resultList.add(projectAlarmRuleWithObjsAndInfoCodes);
+        }
+        return ResultHelper.multi(resultList);
+    }
+
+    /**
+     * 项目报警规则对象转换为项目报警规则(含关联的监测指标和设备)
+     *
+     * @param projectAlarmRule 项目报警规则
+     * @return 项目报警规则(含关联的监测指标和设备)
+     * @author lixing
+     * @version V1.0 2021/10/26 11:14 上午
+     */
+    private ProjectAlarmRuleWithObjsAndInfoCodes convert2ProjectAlarmRuleWithObjsAndInfoCodes(ProjectAlarmRule projectAlarmRule) {
+        ProjectAlarmRuleWithObjsAndInfoCodes projectAlarmRuleWithObjsAndInfoCodes = new ProjectAlarmRuleWithObjsAndInfoCodes();
+        projectAlarmRuleWithObjsAndInfoCodes.setId(projectAlarmRule.getId());
+        projectAlarmRuleWithObjsAndInfoCodes.setProjectId(projectAlarmRule.getProjectId());
+        projectAlarmRuleWithObjsAndInfoCodes.setAlarmItemCode(projectAlarmRule.getAlarmItemCode());
+        // 查询报警规则关联的报警条件,从报警条件中取关联的监测指标
+        String alarmConditionId = projectAlarmRule.getAlarmConditionId();
+        AlarmCondition alarmCondition = alarmConditionService.queryAlarmConditionDetail(alarmConditionId);
+        if (alarmCondition == null) {
+            return null;
+        }
+        projectAlarmRuleWithObjsAndInfoCodes.setInfoCodes(alarmCondition.getInfoCodes());
+        // 从关联关系表中获取关联的设备
+        QueryProjectAlarmRuleObjRelDTO queryProjectAlarmRuleObjRelDTO = new QueryProjectAlarmRuleObjRelDTO();
+        queryProjectAlarmRuleObjRelDTO.setProjectAlarmRuleId(projectAlarmRule.getId());
+        // 屏蔽状态 1-open、0- 屏蔽
+        Integer open = 1;
+        queryProjectAlarmRuleObjRelDTO.setOpen(open);
+        List<ProjectAlarmRuleObjRel> projectAlarmRuleObjRelList = projectAlarmRuleObjRelService.
+                queryProjectAlarmRuleObjRelList(queryProjectAlarmRuleObjRelDTO);
+        if (!CollectionUtils.isEmpty(projectAlarmRuleObjRelList)) {
+            List<String> objIds = projectAlarmRuleObjRelList.stream().map(
+                    ProjectAlarmRuleObjRel::getObjId).collect(Collectors.toList());
+            projectAlarmRuleWithObjsAndInfoCodes.setObjIds(objIds);
+        }
+        return projectAlarmRuleWithObjsAndInfoCodes;
+    }
 }
 

+ 1 - 1
src/main/java/com/persagy/apm/alarmservice/project/alarmrule/model/vo/ProjectAlarmRuleListItemVO.java

@@ -58,7 +58,7 @@ public class ProjectAlarmRuleListItemVO {
     private List<ProjectAlarmRuleObjRel> relListItemList;
 
     @ApiModelProperty(value = "报警规则", required = true)
-    @NotNull(message = "报警规则不能为空") // todo 更新校验规则
+    @NotNull(message = "报警规则不能为空")
     private AlarmConditionListItemVO alarmCondition;
 
 }

+ 36 - 0
src/main/java/com/persagy/apm/alarmservice/project/alarmrule/model/vo/ProjectAlarmRuleWithObjsAndInfoCodes.java

@@ -0,0 +1,36 @@
+package com.persagy.apm.alarmservice.project.alarmrule.model.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.persagy.apm.alarmservice.project.alarmcondition.model.vo.AlarmConditionListItemVO;
+import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.ProjectAlarmRuleObjRel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author lixing
+ * @version V1.0 2021-09-08 22:46:16
+ */
+@Data
+@ApiModel(value = "项目报警规则列表返回结果参数(含关联的设备id和包含的监测指标)")
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class ProjectAlarmRuleWithObjsAndInfoCodes {
+    @ApiModelProperty("主键")
+    private String id;
+    
+    @ApiModelProperty("报警条目编码")
+    private String alarmItemCode;
+
+    @ApiModelProperty("包含的监测指标")
+    private List<String> infoCodes;
+
+    @ApiModelProperty("项目id")
+    private String projectId;
+    
+    @ApiModelProperty("关联的报警对象")
+    private List<String> objIds;
+}

+ 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);
 }

+ 16 - 12
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;
 
@@ -175,23 +177,20 @@ public class ProjectAlarmRuleObjRelServiceImpl extends ServiceImpl<ProjectAlarmR
 
         if (queryProjectAlarmRuleObjRelDTO != null) {
 
-            // todo 需判断使用like还是eq
             if (StringUtils.isNotEmpty(queryProjectAlarmRuleObjRelDTO.getProjectAlarmRuleId())) {
-                queryWrapper.like(ProjectAlarmRuleObjRel.PROP_PROJECT_ALARM_RULE_ID, queryProjectAlarmRuleObjRelDTO.getProjectAlarmRuleId());
+                queryWrapper.eq(ProjectAlarmRuleObjRel.PROP_PROJECT_ALARM_RULE_ID, queryProjectAlarmRuleObjRelDTO.getProjectAlarmRuleId());
             }
 
-            // todo 需判断使用like还是eq
             if (StringUtils.isNotEmpty(queryProjectAlarmRuleObjRelDTO.getEquipId())) {
-                queryWrapper.like(ProjectAlarmRuleObjRel.PROP_OBJ_ID, queryProjectAlarmRuleObjRelDTO.getEquipId());
+                queryWrapper.eq(ProjectAlarmRuleObjRel.PROP_OBJ_ID, queryProjectAlarmRuleObjRelDTO.getEquipId());
             }
 
             if (queryProjectAlarmRuleObjRelDTO.getOpen() != null) {
                 queryWrapper.eq(ProjectAlarmRuleObjRel.PROP_OPEN, queryProjectAlarmRuleObjRelDTO.getOpen());
             }
 
-            // todo 需判断使用like还是eq
             if (StringUtils.isNotEmpty(queryProjectAlarmRuleObjRelDTO.getProjectId())) {
-                queryWrapper.like(ProjectAlarmRuleObjRel.PROP_PROJECT_ID, queryProjectAlarmRuleObjRelDTO.getProjectId());
+                queryWrapper.eq(ProjectAlarmRuleObjRel.PROP_PROJECT_ID, queryProjectAlarmRuleObjRelDTO.getProjectId());
             }
 
         }
@@ -359,7 +358,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 +435,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());
+    }
 }

+ 0 - 48
src/main/java/com/persagy/apm/alarmservice/project/model/AlarmCondition.java

@@ -1,48 +0,0 @@
-package com.persagy.apm.alarmservice.project.model;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import com.persagy.apm.common.model.entity.AuditableEntity;
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * 报警条件(AlarmCondition)实体类
- * @author lixing
- * @version V1.0 2021-10-21 11:19:12
- */
-@EqualsAndHashCode(callSuper = true)
-@Data
-@ApiModel(description = "报警条件")
-public class AlarmCondition extends AuditableEntity<AlarmCondition> implements Serializable {
-    private static final long serialVersionUID = -69196501972192443L;
-
-    @ApiModelProperty("包含的参数")
-    private Object infoCodes;
-    
-    @ApiModelProperty("前端展示")
-    private Object frontend;
-    
-    @ApiModelProperty("后端使用")
-    private Object backend;
-    
-    @ApiModelProperty("持续多久后触发")
-    private Integer triggerUphold;
-    
-    @ApiModelProperty("报警等级")
-    private String alarmLevel;
-    
-    @ApiModelProperty("持续多久后恢复")
-    private Integer endUphold;
-    
-
-    public static String PROP_INFO_CODES = "info_codes";
-    public static String PROP_FRONTEND = "frontend";
-    public static String PROP_BACKEND = "backend";
-    public static String PROP_TRIGGER_UPHOLD = "trigger_uphold";
-    public static String PROP_ALARM_LEVEL = "alarm_level";
-    public static String PROP_END_UPHOLD = "end_uphold";
-
-}

File diff suppressed because it is too large
+ 1 - 1
src/main/resources/db/init/data.sql


+ 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>