Browse Source

修改报警条件参数

xujiaheng 3 years ago
parent
commit
fd7fca5a6d
15 changed files with 182 additions and 85 deletions
  1. 10 11
      src/main/java/com/persagy/apm/alarmservice/alarmcondition/controller/AlarmConditionController.java
  2. 5 4
      src/main/java/com/persagy/apm/alarmservice/alarmcondition/model/AlarmCondition.java
  3. 1 4
      src/main/java/com/persagy/apm/alarmservice/alarmcondition/model/dto/ValidateAlarmConditionDTO.java
  4. 3 0
      src/main/java/com/persagy/apm/alarmservice/alarmcondition/service/IAlarmConditionService.java
  5. 111 13
      src/main/java/com/persagy/apm/alarmservice/alarmcondition/service/impl/AlarmConditionServiceImpl.java
  6. 4 1
      src/main/java/com/persagy/apm/alarmservice/calculatemethod/model/dto/CalculateMethodDTO.java
  7. 3 0
      src/main/java/com/persagy/apm/alarmservice/group/alarmrule/model/dto/PageQueryGroupAlarmRuleDTO.java
  8. 3 0
      src/main/java/com/persagy/apm/alarmservice/group/alarmrule/model/vo/GroupAlarmRuleListItemVO.java
  9. 0 1
      src/main/java/com/persagy/apm/alarmservice/group/alarmrule/service/impl/GroupAlarmRuleServiceImpl.java
  10. 3 0
      src/main/java/com/persagy/apm/alarmservice/project/alarmrule/service/IProjectAlarmRuleService.java
  11. 23 5
      src/main/java/com/persagy/apm/alarmservice/project/alarmrule/service/impl/ProjectAlarmRuleServiceImpl.java
  12. 5 4
      src/main/java/com/persagy/apm/alarmservice/project/alarmruleobjrel/service/impl/ProjectAlarmRuleObjRelServiceImpl.java
  13. 0 35
      src/main/java/com/persagy/apm/common/method/CommonMethod.java
  14. 3 3
      src/main/resources/mapper/AlarmConditionMapper.xml
  15. 8 4
      src/main/resources/mapper/GroupAlarmRuleMapper.xml

+ 10 - 11
src/main/java/com/persagy/apm/alarmservice/alarmcondition/controller/AlarmConditionController.java

@@ -15,11 +15,11 @@ import org.springframework.web.bind.annotation.*;
 import springfox.documentation.annotations.ApiIgnore;
 
 import javax.validation.Valid;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * 报警条件控制层
+ *
  * @author lixing
  * @version V1.0 2021-09-08 22:30:38
  */
@@ -31,16 +31,16 @@ public class AlarmConditionController {
     @Autowired
     private IAlarmConditionService alarmConditionService;
 
-	@ApiOperation(value = "创建报警条件")
+    @ApiOperation(value = "创建报警条件")
     @ApiIgnore
-	@PostMapping("/create")
-	public CommonResult<ApmResponseUpsertVO> createAlarmCondition(
-	        @Valid @RequestBody AddAlarmConditionDTO addAlarmConditionDTO) {
+    @PostMapping("/create")
+    public CommonResult<ApmResponseUpsertVO> createAlarmCondition(
+            @Valid @RequestBody AddAlarmConditionDTO addAlarmConditionDTO) {
         Map<String, Object> alarmCondition = alarmConditionService.createAlarmCondition(addAlarmConditionDTO);
         return ResultHelper.single(new ApmResponseUpsertVO((String) alarmCondition.get("id")));
-	}
+    }
 
-	@ApiOperation(value = "报警条件详情")
+    @ApiOperation(value = "报警条件详情")
     @ApiIgnore
     @PostMapping("/get")
     public CommonResult<AlarmConditionItemVO> queryAlarmConditionDetail(
@@ -84,11 +84,10 @@ public class AlarmConditionController {
     @PostMapping("/validate")
     public CommonResult<Boolean> validate(
             @Valid @RequestBody ValidateAlarmConditionDTO validateAlarmConditionDTO) {
-        StringBuffer calculateString = new StringBuffer();
+        List<Formula> formula = validateAlarmConditionDTO.getFrontend().getFormula();
+        return alarmConditionService.validate(formula);
 
-        return ResultHelper.success();
     }
-
     //@ApiOperation(value = "报警条件列表, 分页查询")
     //@PostMapping("/query")
     //public CommonResult<PageList<AlarmConditionListItemVO>> queryAlarmCondition(

+ 5 - 4
src/main/java/com/persagy/apm/alarmservice/alarmcondition/model/AlarmCondition.java

@@ -1,14 +1,16 @@
 package com.persagy.apm.alarmservice.alarmcondition.model;
 
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
+import com.persagy.apm.alarmservice.calculatemethod.model.dto.CalculateMethodDTO;
 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;
+import java.util.List;
 
 /**
  * 报警条件(AlarmCondition)实体类
@@ -18,17 +20,16 @@ import java.util.Date;
 @EqualsAndHashCode(callSuper = true)
 @Data
 @ApiModel(description = "报警条件")
-
 public class AlarmCondition extends AuditableEntity<AlarmCondition> implements Serializable {
     private static final long serialVersionUID = 268657175929005281L;
 
     @TableField(typeHandler = FastjsonTypeHandler.class)
     @ApiModelProperty("包含的参数")
-    private Object infoCodes;
+    private List<String> infoCodes;
 
     @TableField(typeHandler = FastjsonTypeHandler.class)
     @ApiModelProperty("前端展示")
-    private Object frontend;
+    private List<List<CalculateMethodDTO>> frontend;
 
     @TableField(typeHandler = FastjsonTypeHandler.class)
     @ApiModelProperty("后端使用")

+ 1 - 4
src/main/java/com/persagy/apm/alarmservice/alarmcondition/model/dto/ValidateAlarmConditionDTO.java

@@ -6,6 +6,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import javax.validation.constraints.NotNull;
+import java.util.List;
 
 /**
  * @author lixing
@@ -14,10 +15,6 @@ import javax.validation.constraints.NotNull;
 @Data
 @ApiModel(value = "报警条件合法性校验入参")
 public class ValidateAlarmConditionDTO {
-    @ApiModelProperty(value = "包含的参数", required = true)
-    @NotNull(message = "包含的参数不能为空") // todo 更新校验规则
-    private Object infoCodes;
-    
     @ApiModelProperty(value = "报警条件", required = true)
     @NotNull(message = "报警条件不能为空") // todo 更新校验规则
     private CalculateMethodDTO frontend;

+ 3 - 0
src/main/java/com/persagy/apm/alarmservice/alarmcondition/service/IAlarmConditionService.java

@@ -6,6 +6,7 @@ import java.util.List;
 import java.util.Map;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.persagy.apm.common.response.CommonResult;
 
 /**
  * 报警条件(AlarmCondition) service接口
@@ -72,4 +73,6 @@ public interface IAlarmConditionService  {
     * @version V1.0 2021-09-08 22:30:38
     */
     public IPage<AlarmCondition> pageQueryAlarmCondition(PageQueryAlarmConditionDTO pageQueryAlarmConditionDTO);
+
+    CommonResult<Boolean> validate(List<Formula> formulaString);
 }

+ 111 - 13
src/main/java/com/persagy/apm/alarmservice/alarmcondition/service/impl/AlarmConditionServiceImpl.java

@@ -17,15 +17,18 @@ import com.persagy.apm.alarmservice.alarmcondition.model.dto.QueryAlarmCondition
 import com.persagy.apm.alarmservice.alarmcondition.model.dto.UpdateAlarmConditionDTO;
 import com.persagy.apm.alarmservice.alarmcondition.service.IAlarmConditionService;
 import com.persagy.apm.alarmservice.calculatemethod.model.dto.CalculateMethodDTO;
-import com.persagy.apm.common.configuration.DataUtils;
 import com.persagy.apm.common.constant.enums.ValidEnum;
 import com.persagy.apm.common.context.poems.PoemsContext;
 import com.persagy.apm.common.model.dto.Sort;
+import com.persagy.apm.common.response.CommonResult;
+import com.persagy.apm.common.utils.ResultHelper;
+import com.persagy.common.enums.ResponseCode;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
 import java.util.*;
+import java.util.regex.Pattern;
 
 /**
  * 报警条件(AlarmCondition) service层
@@ -49,11 +52,11 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
         AlarmCondition alarmCondition = ConvertAlarmConditionTool.INSTANCE.convertAddDto2Entity(addAlarmConditionDTO);
         List<List<CalculateMethodDTO>> frontend = addAlarmConditionDTO.getFrontend();
         Object json = JSON.toJSON(frontend);
-        alarmCondition.setFrontend(json);
+        alarmCondition.setFrontend(frontend);
         //将前端公式转换成后台公式
         Map<String, Object> stringMap = frontend2Backend(frontend);
         alarmCondition.setBackend(stringMap.get("backend"));
-        alarmCondition.setInfoCodes(stringMap.get("infoCode"));
+        alarmCondition.setInfoCodes((List<String>) stringMap.get("infoCode"));
         // 设置默认值
         setDefaultValue(alarmCondition);
         save(alarmCondition);
@@ -64,16 +67,15 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
     private Map<String, Object> frontend2Backend(List<List<CalculateMethodDTO>> frontend) {
         StringBuffer allNotNull = new StringBuffer();
         StringBuffer allNull = new StringBuffer();
-        Set<String> infoCodesList = new HashSet<>();
+        Set<String> infoCodesSet = new HashSet<>();
         Set<String> displayFormulaList = new HashSet<>();
         for (List<CalculateMethodDTO> calculateMethodDTOS : frontend) {
             StringBuffer notNullString = new StringBuffer();
             StringBuffer nullString = new StringBuffer();
             StringBuffer calculateString = new StringBuffer();
             for (CalculateMethodDTO calculateMethodDTO : calculateMethodDTOS) {
-                infoCodesList.add(calculateMethodDTO.getMonitorIndicatorId());
-                String formular = calculateMethodDTO.getFormula();
-                List<Formula> formulas = JSONObject.parseArray(formular, Formula.class);
+                infoCodesSet.add(calculateMethodDTO.getMonitorIndicatorId());
+                List<Formula> formulas = calculateMethodDTO.getFormula();
                 StringBuffer tempFormula = new StringBuffer();
                 StringBuffer displayFormula = new StringBuffer();
                 displayFormula.append(calculateMethodDTO.getMonitorIndicatorName()).append(calculateMethodDTO.getOperator());
@@ -82,7 +84,7 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
                         nullString.append(formula.getValue()).append("==NaN").append(" || ");
                         notNullString.append(formula.getValue()).append("!=NaN").append(" && ");
                         tempFormula.append(formula.getValue());
-                        infoCodesList.add(formula.getValue());
+                        infoCodesSet.add(formula.getValue());
                     }else{
                         tempFormula.append(formula.getLabel());
                     }
@@ -103,11 +105,13 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
             allNull.append("(").append("(").append(nullString.substring(0, nullString.length() - 4)).append(")").append("?true:").append("(").append(calculateString.substring(0, calculateString.length() - 4)).append(")").append(")").append(" || ");
 
         }
-        String infoCode = JSON.toJSONString(infoCodesList);
+        //String infoCode = JSON.toJSONString(infoCodesList);
         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();
-        map.put("infoCode",infoCode);
+        List<String> infoCodesList = new ArrayList<>();
+        infoCodesList.addAll(infoCodesSet);
+        map.put("infoCode",infoCodesList);
         map.put("backend",substring.toString());
         map.put("displayFormula",displayFormulaList);
         return map;
@@ -125,7 +129,6 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
         alarmCondition.setCreationTime(new Date());
         alarmCondition.setModifiedTime(new Date());
         alarmCondition.setModifier(PoemsContext.getContext().getUserId());
-        alarmCondition.setId(DataUtils.getUUID());
         // todo 其他默认的属性
 
     }
@@ -161,11 +164,11 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
         if (updateAlarmConditionDTO.getFrontend() != null) {
             List<List<CalculateMethodDTO>> frontend = updateAlarmConditionDTO.getFrontend();
             String frontJson = JSON.toJSONString(frontend);
-            alarmCondition.setFrontend(frontJson);
+            alarmCondition.setFrontend(frontend);
             //将前端公式转换成后台公式
             Map<String, Object> stringMap = frontend2Backend(frontend);
             alarmCondition.setBackend(stringMap.get("backend"));
-            alarmCondition.setInfoCodes(stringMap.get("infoCode"));
+            alarmCondition.setInfoCodes((List<String>) stringMap.get("infoCode"));
         }
         updateById(alarmCondition);
     }
@@ -298,4 +301,99 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
 
         return getBaseMapper().selectPage(pageParam, queryWrapper);
     }
+
+    @Override
+    public CommonResult<Boolean> validate(List<Formula> formulas) {
+        StringBuffer displayFormula = new StringBuffer();
+        Set<String> infoCodesList = new HashSet<>();
+        for (Formula formula : formulas) {
+            if (formula.getValue() != null) {
+                String value = formula.getValue();
+                infoCodesList.add(value);
+                displayFormula.append(value);
+            }else {
+                displayFormula.append(formula.getLabel());
+            }
+        }
+        List<String> infoCodes = new ArrayList<>();
+        infoCodes.addAll(infoCodesList);
+        return this.validate(displayFormula.toString(), infoCodes);
+    }
+
+    /**
+     * 使用正则来校验数学公式
+     *
+     * @param expression 数学公式,包含变量
+     * @param variables  内置变量集合
+     * @return
+     */
+    public static CommonResult validate(String expression, List<String> variables) {
+//        if (variables == null || variables.isEmpty()) {
+//            return ResultHelper.failure(ResponseCode.C0134.getCode(), "内置变量为空");
+//        }
+        // 去空格
+        expression = expression.replaceAll(" ", "");
+        // 连续运算符处理
+        if (expression.split("[\\+\\-\\*\\/]{2,}").length > 1) {
+            return ResultHelper.failure(ResponseCode.C0134.getCode(), "公式不合法,包含连续运算符");
+        }
+        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+");
+        // 校验变量
+        String[] splits = expression.split("\\+|\\-|\\*|\\/|\\(|\\)");
+        for (String split : splits) {
+            if (org.apache.commons.lang3.StringUtils.isBlank(split) || Pattern.matches("[0-9]+", split)) {
+                continue;
+            }
+            if (!variables.contains(split)) {
+                return ResultHelper.failure(ResponseCode.C0134.getCode(), "公式不合法,包含非法变量或字符");
+            }
+        }
+        // 校验括号
+        Character preChar = null;
+        Stack<Character> stack = new Stack<>();
+        String resultExpression = expression;
+        for (int i = 0; i < expression.length(); i++) {
+            char currChar = expression.charAt(i);
+            if (i == 0) {
+                if (Pattern.matches("\\*|\\/", String.valueOf(currChar))) {
+                    return ResultHelper.failure(ResponseCode.C0134.getCode(), "公式不合法,以错误运算符开头");
+                }
+                if (currChar == '+') {
+                    resultExpression = expression.substring(1);
+                }
+                if (currChar == '-') {
+                    resultExpression = "0" + expression;
+                }
+            }
+            if ('(' == currChar) {
+                stack.push('(');
+            } else if (')' == currChar) {
+                if (stack.size() > 0) {
+                    stack.pop();
+                } else {
+                    return ResultHelper.failure(ResponseCode.C0134.getCode(), "公式不合法,括号不配对");
+                }
+            }
+            if (preChar != null && preChar == '(' && Pattern.matches("[\\+\\-\\*\\/]+", String.valueOf(currChar))) {
+                return ResultHelper.failure(ResponseCode.C0134.getCode(), "公式不合法,左括号后是运算符");
+            }
+            if (preChar != null && preChar == ')' && !Pattern.matches("[\\+\\-\\*\\/]+", String.valueOf(currChar))) {
+                return ResultHelper.failure(ResponseCode.C0134.getCode(), "公式不合法,右括号后面不是运算符");
+            }
+            if (i == expression.length() - 1) {
+                if (Pattern.matches("\\+|\\-|\\*|\\/", String.valueOf(currChar)))
+                    return ResultHelper.failure(ResponseCode.C0134.getCode(), "公式不合法,以运算符结尾");
+            }
+            preChar = currChar;
+        }
+        if (stack.size() > 0) {
+            return ResultHelper.failure(ResponseCode.C0134.getCode(), "公式不合法,括号不配对");
+        }
+        return ResultHelper.success();
+    }
 }

+ 4 - 1
src/main/java/com/persagy/apm/alarmservice/calculatemethod/model/dto/CalculateMethodDTO.java

@@ -1,11 +1,14 @@
 package com.persagy.apm.alarmservice.calculatemethod.model.dto;
 
+import com.persagy.apm.alarmservice.alarmcondition.model.Formula;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import springfox.documentation.annotations.ApiIgnore;
 
 import javax.validation.constraints.NotNull;
+import java.util.List;
+import java.util.Map;
 
 /**
  * @author lixing
@@ -20,7 +23,7 @@ public class CalculateMethodDTO {
     
     @ApiModelProperty(value = "公式", required = true)
     @NotNull(message = "公式不能为空") // todo 更新校验规则
-    private String formula;
+    private List<Formula> formula;
     
     @ApiModelProperty(value = "监测指标id", required = true)
     @NotNull(message = "监测指标id不能为空") // todo 更新校验规则

+ 3 - 0
src/main/java/com/persagy/apm/alarmservice/group/alarmrule/model/dto/PageQueryGroupAlarmRuleDTO.java

@@ -23,6 +23,9 @@ public class PageQueryGroupAlarmRuleDTO extends PageDTO {
     
     @ApiModelProperty(value = "报警条目编码", required = true)
     private String alarmItemCode;
+
+    @ApiModelProperty(value = "报警类型名称", required = true)
+    private String alarmItemName;
     
     @ApiModelProperty(value = "报警条件id", required = true)
     private String alarmConditionId;

+ 3 - 0
src/main/java/com/persagy/apm/alarmservice/group/alarmrule/model/vo/GroupAlarmRuleListItemVO.java

@@ -23,6 +23,9 @@ public class GroupAlarmRuleListItemVO {
     
     @ApiModelProperty("报警条目编码")
     private String alarmItemCode;
+
+    @ApiModelProperty("报警条目名称")
+    private String alarmItemName;
     
     @ApiModelProperty("报警条件")
     private AlarmConditionListItemVO alarmCondition;

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

@@ -109,7 +109,6 @@ public class GroupAlarmRuleServiceImpl extends ServiceImpl<GroupAlarmRuleMapper,
      */
     private void setDefaultValue(GroupAlarmRule groupAlarmRule) {
         groupAlarmRule.setCreator(AppContext.getContext().getAccountId());
-        groupAlarmRule.setId(DataUtils.getUUID());
         groupAlarmRule.setModifier(PoemsContext.getContext().getUserId());
         groupAlarmRule.setModifiedTime(new Date());
     }

+ 3 - 0
src/main/java/com/persagy/apm/alarmservice/project/alarmrule/service/IProjectAlarmRuleService.java

@@ -6,6 +6,7 @@ import com.persagy.apm.alarmservice.project.alarmrule.model.dto.*;
 import java.util.List;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.dto.AddProjectAlarmRuleObjRelDTO;
+import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.vo.ProjectVO;
 
 /**
  * 项目报警规则(ProjectAlarmRule) service接口
@@ -74,4 +75,6 @@ public interface IProjectAlarmRuleService  {
     public IPage<ProjectAlarmRule> pageQueryProjectAlarmRule(PageQueryProjectAlarmRuleDTO pageQueryProjectAlarmRuleDTO);
 
     List<AddProjectAlarmRuleObjRelDTO> addProjectAlarmRules(AddGroupAlarmRuleDTO addGroupAlarmRuleDTO);
+
+    List<ProjectVO> getProject();
 }

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

@@ -1,5 +1,6 @@
 package com.persagy.apm.alarmservice.project.alarmrule.service.impl;
 
+import com.alibaba.fastjson.JSONArray;
 import com.persagy.apm.alarmservice.alarmcondition.service.IAlarmConditionService;
 import com.persagy.apm.alarmservice.group.alarmrule.model.GroupAlarmRule;
 import com.persagy.apm.alarmservice.group.alarmrule.model.dto.AddGroupAlarmRuleDTO;
@@ -9,14 +10,13 @@ import com.persagy.apm.alarmservice.group.management.service.impl.GroupManagemen
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.dto.AddProjectAlarmRuleObjRelDTO;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.vo.ProjectVO;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.service.IProjectAlarmRuleObjRelService;
-import com.persagy.apm.common.configuration.DataUtils;
 import com.persagy.apm.common.context.AppContext;
 import com.persagy.apm.alarmservice.project.alarmrule.dao.ProjectAlarmRuleMapper;
 import com.persagy.apm.alarmservice.project.alarmrule.service.IProjectAlarmRuleService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.persagy.apm.common.context.poems.PoemsContext;
-import com.persagy.apm.common.method.CommonMethod;
 import com.persagy.apm.model.vo.GroupManagementVo;
+import org.apache.commons.io.IOUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.apache.commons.lang.StringUtils;
@@ -25,6 +25,10 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.persagy.apm.alarmservice.project.alarmrule.model.*;
 import com.persagy.apm.alarmservice.project.alarmrule.model.dto.*;
 
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -94,7 +98,6 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
      */
     private void setDefaultValue(ProjectAlarmRule projectAlarmRule) {
         projectAlarmRule.setCreator(AppContext.getContext().getAccountId());
-        projectAlarmRule.setId(DataUtils.getUUID());
         projectAlarmRule.setModifiedTime(new Date());
         // todo 其他默认的属性
 
@@ -312,7 +315,7 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
         String classCode = addGroupAlarmRuleDTO.getClassCode();
         List<GroupManagementVo> records = groupManagementService.getEquipList(condition,classCode);
         //查询所有项目
-        List<ProjectVO> projects = CommonMethod.getProject();
+        List<ProjectVO> projects = this.getProject();
         //遍历项目,组好对象进行插入
         List<ProjectAlarmRule> projectAlarmRuleList = new ArrayList<>();
         String alarmItemCode = addGroupAlarmRuleDTO.getAlarmItemCode();
@@ -341,7 +344,22 @@ public class ProjectAlarmRuleServiceImpl extends ServiceImpl<ProjectAlarmRuleMap
         saveBatch(projectAlarmRuleList);
 
         return addRelationList;
+    }
 
-
+    /**
+     * 获取项目
+     */
+    public List<ProjectVO> getProject() {
+        InputStream inputStream = ProjectAlarmRuleServiceImpl.class.getClassLoader()
+                .getResourceAsStream(File.separator + "json" + File.separator + "Project.json");
+        if (inputStream == null) {
+            return null;
+        }
+        try {
+            String str = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
+            return JSONArray.parseArray(str, ProjectVO.class);
+        } catch (IOException ioe) {
+            throw new RuntimeException("json文件有误", ioe);
+        }
     }
 }

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

@@ -1,12 +1,12 @@
 package com.persagy.apm.alarmservice.project.alarmruleobjrel.service.impl;
 
+import com.persagy.apm.alarmservice.project.alarmrule.service.IProjectAlarmRuleService;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.vo.ProjectVO;
-import com.persagy.apm.common.configuration.DataUtils;
 import com.persagy.apm.common.context.AppContext;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.dao.ProjectAlarmRuleObjRelMapper;
 import com.persagy.apm.alarmservice.project.alarmruleobjrel.service.IProjectAlarmRuleObjRelService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.persagy.apm.common.method.CommonMethod;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.apache.commons.lang.StringUtils;
 import com.persagy.apm.common.constant.enums.ValidEnum;
@@ -34,6 +34,8 @@ import org.springframework.util.CollectionUtils;
 public class ProjectAlarmRuleObjRelServiceImpl extends ServiceImpl<ProjectAlarmRuleObjRelMapper, ProjectAlarmRuleObjRel>
         implements IProjectAlarmRuleObjRelService {
 
+    @Autowired
+    private IProjectAlarmRuleService projectAlarmRuleService;
     /**
      * 创建项目报警规则与监测对象的关联
      *
@@ -59,7 +61,6 @@ public class ProjectAlarmRuleObjRelServiceImpl extends ServiceImpl<ProjectAlarmR
      */
     private void setDefaultValue(ProjectAlarmRuleObjRel projectAlarmRuleObjRel) {
         projectAlarmRuleObjRel.setCreator(AppContext.getContext().getAccountId());
-        projectAlarmRuleObjRel.setId(DataUtils.getUUID());
         // todo 其他默认的属性
 
     }
@@ -255,7 +256,7 @@ public class ProjectAlarmRuleObjRelServiceImpl extends ServiceImpl<ProjectAlarmR
 
     @Override
     public void deleteBatch() {
-        List<ProjectVO> project = CommonMethod.getProject();
+        List<ProjectVO> project = projectAlarmRuleService.getProject();
         List<String> list = project.stream().map(ProjectVO::getProjectId).collect(Collectors.toList());
         QueryWrapper<ProjectAlarmRuleObjRel> queryWrapper = new QueryWrapper<>();
         queryWrapper.in(ProjectAlarmRuleObjRel.PROP_PROJECT_ID, list);

+ 0 - 35
src/main/java/com/persagy/apm/common/method/CommonMethod.java

@@ -1,35 +0,0 @@
-package com.persagy.apm.common.method;
-
-import com.alibaba.fastjson.JSONArray;
-import com.persagy.apm.alarmservice.project.alarmruleobjrel.model.vo.ProjectVO;
-import org.apache.commons.io.IOUtils;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
-import java.util.*;
-
-/**
- * 公共方法类
- */
-public class CommonMethod {
-    /**
-     * 获取项目
-     */
-    public static List<ProjectVO> getProject() {
-        InputStream inputStream = CommonMethod.class.getClassLoader()
-                .getResourceAsStream(File.separator + "json" + File.separator + "Project.json");
-        if (inputStream == null) {
-            return null;
-        }
-        try {
-            String str = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
-            return JSONArray.parseArray(str, ProjectVO.class);
-        } catch (IOException ioe) {
-            throw new RuntimeException("json文件有误", ioe);
-        }
-    }
-
-
-}

+ 3 - 3
src/main/resources/mapper/AlarmConditionMapper.xml

@@ -3,9 +3,9 @@
 <mapper namespace="com.persagy.apm.alarmservice.alarmcondition.dao.AlarmConditionMapper">
     <resultMap id="AlarmConditionMap" type="com.persagy.apm.alarmservice.alarmcondition.model.AlarmCondition">
 		<result column="id" property="id" />
-		<result column="info_codes" property="infoCodes" />
-		<result column="frontend" property="frontend" />
-		<result column="backend" property="backend" />
+		<result column="info_codes" property="infoCodes" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
+		<result column="frontend" property="frontend" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
+		<result column="backend" property="backend" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
 		<result column="trigger_uphold" property="triggerUphold" />
 		<result column="alarm_level" property="alarmLevel" />
 		<result column="ts" property="ts" />

+ 8 - 4
src/main/resources/mapper/GroupAlarmRuleMapper.xml

@@ -10,6 +10,7 @@
         <result column="creation_time" property="creationTime"/>
         <result column="modifier" property="modifier"/>
         <result column="modified_time" property="modifiedTime"/>
+        <result column="name" property="alarmItemName"/>
         <collection property="alarmCondition"
                     ofType="com.persagy.apm.alarmservice.alarmcondition.model.vo.AlarmConditionListItemVO">
             <result column="cid" property="id"/>
@@ -27,6 +28,7 @@
         select a.id,
         a.group_id,
         a.alarm_item_code,
+        c.name
         a.creator,
         a.creation_time,
         a.modifier,
@@ -39,9 +41,10 @@
         b.alarm_level
         from group_alarm_rule a
         left join alarm_condition b on a.alarm_condition_id = b.id
+        left join monitor_indicator c on a.alarm_item_code = c.id
         where a.group_id = #{groupId}
-        <if test="alarmItemCode != null">
-            and a.alarm_item_code = #{alarmItemCode}
+        <if test="alarmItemName != null">
+            and c.name = #{alarmItemName}
         </if>
         order by a.creation_time
         limit #{startIndex},#{size}
@@ -50,9 +53,10 @@
         select count(*)
         from group_alarm_rule a
         left join alarm_condition b on a.alarm_condition_id = b.id
+        left join monitor_indicator c on a.alarm_item_code = c.id
         where a.group_id = #{groupId}
-        <if test="alarmItemCode != null">
-            and a.alarm_item_code = #{alarmItemCode}
+        <if test="alarmItemName != null">
+            and c.name = #{alarmItemName}
         </if>
     </select>
 </mapper>