فهرست منبع

修改集团报警公式

xujiaheng 3 سال پیش
والد
کامیت
ef4dd18f72

+ 26 - 0
src/main/java/com/persagy/apm/alarmservice/alarmcondition/model/Formula.java

@@ -0,0 +1,26 @@
+package com.persagy.apm.alarmservice.alarmcondition.model;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
+import com.persagy.apm.common.model.entity.AuditableEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ * 报警条件(AlarmCondition)实体类
+ * @author lixing
+ * @version V1.0 2021-09-08 22:30:38
+ */
+@Data
+public class Formula implements Serializable {
+    private static final long serialVersionUID = 268657175929005281L;
+
+    private String key;
+    private String label;
+    private String value;
+
+}

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

@@ -18,7 +18,7 @@ import java.util.Map;
 public class AddAlarmConditionDTO {
     @ApiModelProperty(value = "包含的参数", required = true)
     //@NotNull(message = "包含的参数不能为空") // todo 更新校验规则
-    private List<List<String>> infoCodes;
+    private Object infoCodes;
     
     @ApiModelProperty(value = "报警触发规则", required = true)
     @NotNull(message = "报警触发规则不能为空") // todo 更新校验规则

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

@@ -22,7 +22,7 @@ public class UpdateAlarmConditionDTO {
     
     @ApiModelProperty(value = "包含的参数", required = true)
     @NotNull(message = "包含的参数不能为空") // todo 更新校验规则
-    private List<List<String>> infoCodes;
+    private Object infoCodes;
     
     @ApiModelProperty(value = "前端展示", required = true)
     @NotNull(message = "前端展示不能为空") // todo 更新校验规则

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

@@ -6,6 +6,7 @@ import java.util.List;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.json.JSONException;
 
 /**
  * 报警条件(AlarmCondition) service接口

+ 33 - 53
src/main/java/com/persagy/apm/alarmservice/alarmcondition/service/impl/AlarmConditionServiceImpl.java

@@ -1,6 +1,7 @@
 package com.persagy.apm.alarmservice.alarmcondition.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -9,6 +10,7 @@ import com.google.common.base.CaseFormat;
 import com.persagy.apm.alarmservice.alarmcondition.dao.AlarmConditionMapper;
 import com.persagy.apm.alarmservice.alarmcondition.model.AlarmCondition;
 import com.persagy.apm.alarmservice.alarmcondition.model.ConvertAlarmConditionTool;
+import com.persagy.apm.alarmservice.alarmcondition.model.Formula;
 import com.persagy.apm.alarmservice.alarmcondition.model.dto.AddAlarmConditionDTO;
 import com.persagy.apm.alarmservice.alarmcondition.model.dto.PageQueryAlarmConditionDTO;
 import com.persagy.apm.alarmservice.alarmcondition.model.dto.QueryAlarmConditionDTO;
@@ -23,10 +25,7 @@ import org.apache.commons.lang.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * 报警条件(AlarmCondition) service层
@@ -49,79 +48,61 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
     public String createAlarmCondition(AddAlarmConditionDTO addAlarmConditionDTO) {
         AlarmCondition alarmCondition = ConvertAlarmConditionTool.INSTANCE.convertAddDto2Entity(addAlarmConditionDTO);
         List<List<CalculateMethodDTO>> frontend = addAlarmConditionDTO.getFrontend();
-        List<List<String>> infoCodes = addAlarmConditionDTO.getInfoCodes();
         Object json = JSON.toJSON(frontend);
         alarmCondition.setFrontend(json);
         //将前端公式转换成后台公式
-        String backend = frontend2Backend(frontend,infoCodes);
-        alarmCondition.setBackend(backend);
+        Map<String, String> stringMap = frontend2Backend(frontend);
+        alarmCondition.setBackend(stringMap.get("backend"));
+        alarmCondition.setInfoCodes(stringMap.get("infoCode"));
         // 设置默认值
         setDefaultValue(alarmCondition);
         save(alarmCondition);
         return alarmCondition.getId();
     }
 
-    private String frontend2Backend(List<List<CalculateMethodDTO>> frontend, List<List<String>> infoCodes) {
-        List<String> nullList = new ArrayList<>();
+    private Map<String, String> frontend2Backend(List<List<CalculateMethodDTO>> frontend) {
         StringBuffer allNotNull = new StringBuffer();
         StringBuffer allNull = new StringBuffer();
-        for (List<String> infoCode : infoCodes) {
-            StringBuffer notNullString = new StringBuffer();
-            StringBuffer nullString = new StringBuffer();
-            nullString.append("(");
-            notNullString.append("(");
-            for (String s : infoCode) {
-                notNullString.append(s).append("!=NaN").append(" && ");
-                nullString.append(s).append("==NaN").append(" || ");
-            }
-            notNullString.delete(notNullString.length() - 4, notNullString.length()).append(")").append("||");
-            allNotNull.append("(").append(notNullString).append(" || ");
-            nullString.delete(nullString.length() - 4, nullString.length()).append(")");
-            nullList.add(nullString.toString());
-        }
-        allNotNull.delete(allNotNull.length() - 4, allNotNull.length()).append(")");
-        for (int i = 0; i < frontend.size(); i++) {
-            StringBuffer calculateString = new StringBuffer();
-            for (int j = 0; j < frontend.get(i).size(); j++) {
-                CalculateMethodDTO calculateMethodDTO = frontend.get(i).get(j);
-                calculateString.append("(")
-                        .append(calculateMethodDTO.getMonitorIndicatorId())
-                        .append(calculateMethodDTO.getOperator())
-                        .append(calculateMethodDTO.getFormula()).append(")")
-                        .append(" && ");
-            }
-            calculateString.append("(").delete(calculateString.length() - 4, calculateString.length()).append(")");
-            allNull.append(nullList.get(i)).append("?true:").append(calculateString).append("||");
-        }
-        StringBuffer substring = new StringBuffer();
-        substring.append(allNotNull).append(allNull);
-
-
-
-
-
-        /*StringBuffer allNotNull = new StringBuffer();
-        StringBuffer allNull = new StringBuffer();
+        Set<String> infoCodesList = 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);
+                StringBuffer tempFormula = new StringBuffer();
+                for (Formula formula : formulas) {
+                    if(formula.getValue()!=null){
+                        nullString.append(formula.getValue()).append("==NaN").append(" || ");
+                        notNullString.append(formula.getValue()).append("!=NaN").append(" && ");
+                        tempFormula.append(formula.getValue());
+                        infoCodesList.add(formula.getValue());
+                    }else{
+                        tempFormula.append(formula.getLabel());
+                    }
+                }
+                calculateMethodDTO.setTempFormula(tempFormula.toString());
                 nullString.append(calculateMethodDTO.getMonitorIndicatorId()).append("==NaN").append(" || ");
                 notNullString.append(calculateMethodDTO.getMonitorIndicatorId()).append("!=NaN").append(" && ");
                 calculateString.append("(")
                         .append(calculateMethodDTO.getMonitorIndicatorId())
                         .append(calculateMethodDTO.getOperator())
-                        .append(calculateMethodDTO.getFormula()).append(")")
+                        .append(calculateMethodDTO.getTempFormula()).append(")")
                         .append(" && ");
             }
             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(" || ");
         }
+        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();*/
-        return substring.toString();
+        substring.append("(").append(allNotNull.substring(0, allNotNull.length() - 4)).append(")").append(" && ").append("(").append(allNull.substring(0, allNull.length() - 4)).append(")").toString();
+        Map<String, String> map = new HashMap();
+        map.put("infoCode",infoCode);
+        map.put("backend",substring.toString());
+        return map;
     }
 
     /**
@@ -171,13 +152,12 @@ public class AlarmConditionServiceImpl extends ServiceImpl<AlarmConditionMapper,
         alarmCondition.setModifier(PoemsContext.getContext().getUserId());
         if (updateAlarmConditionDTO.getFrontend() != null) {
             List<List<CalculateMethodDTO>> frontend = updateAlarmConditionDTO.getFrontend();
-            //Map<String, String> infoCodes = updateAlarmConditionDTO.getInfoCodes();
             String frontJson = JSON.toJSONString(frontend);
             alarmCondition.setFrontend(frontJson);
             //将前端公式转换成后台公式
-            List<List<String>> infoCodes = updateAlarmConditionDTO.getInfoCodes();
-            String backend = frontend2Backend(frontend, infoCodes);
-            alarmCondition.setBackend(backend);
+            Map<String, String> stringMap = frontend2Backend(frontend);
+            alarmCondition.setBackend(stringMap.get("backend"));
+            alarmCondition.setInfoCodes(stringMap.get("infoCode"));
         }
         updateById(alarmCondition);
     }

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

@@ -3,6 +3,7 @@ package com.persagy.apm.alarmservice.calculatemethod.model.dto;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import springfox.documentation.annotations.ApiIgnore;
 
 import javax.validation.constraints.NotNull;
 
@@ -28,5 +29,8 @@ public class CalculateMethodDTO {
     @ApiModelProperty(value = "是否是指标默认计算方式", required = true)
     @NotNull(message = "是否是指标默认计算方式不能为空") // todo 更新校验规则
     private Integer isDefault;
+
+    @ApiModelProperty(value = "临时存储公式")
+    private String tempFormula;
     
 }