Browse Source

增加项目报警规则列表(含关联的监测指标和设备)接口

lixing 3 years ago
parent
commit
c8157e08ed

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

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

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

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

@@ -274,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);
     }
 
     /**

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

@@ -1,28 +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;
@@ -47,6 +53,8 @@ public class ProjectAlarmRuleController {
     private IProjectAlarmRuleObjRelService projectAlarmRuleObjRelService;
     @Autowired
     private ProjectAlarmRuleMapper projectAlarmRuleMapper;
+    @Autowired
+    private IAlarmConditionService alarmConditionService;
 
     @ApiOperation(value = "查询所有的项目")
     @PostMapping("/projects")
@@ -108,7 +116,7 @@ public class ProjectAlarmRuleController {
     }
 
 
-    @ApiOperation(value = "项目报警规则列表")
+    @ApiOperation(value = "项目报警规则列表(不含报警条件)")
     @ApiIgnore
     @PostMapping("/query")
     public CommonResult<PageList<ProjectAlarmRuleListItemVO>> queryProjectAlarmRule(
@@ -126,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) {
@@ -146,10 +154,65 @@ 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 = "项目报警规则列表(含关联的监测指标和设备)")
+    @ApiIgnore
+    @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;
 
 }

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

@@ -177,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());
             }
 
         }

+ 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