|
@@ -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;
|
|
@@ -20,13 +22,10 @@ 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 org.apache.commons.lang.StringUtils;
|
|
|
-import org.json.JSONArray;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
-import java.util.Date;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+import java.util.*;
|
|
|
|
|
|
/**
|
|
|
* 报警条件(AlarmCondition) service层
|
|
@@ -49,43 +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();
|
|
|
- addAlarmConditionDTO.getInfoCodes();
|
|
|
Object json = JSON.toJSON(frontend);
|
|
|
alarmCondition.setFrontend(json);
|
|
|
//将前端公式转换成后台公式
|
|
|
- String backend = frontend2Backend(frontend);
|
|
|
- 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) {
|
|
|
- StringBuffer sb = new StringBuffer();
|
|
|
+ private Map<String, String> frontend2Backend(List<List<CalculateMethodDTO>> frontend) {
|
|
|
+ StringBuffer allNotNull = new StringBuffer();
|
|
|
+ StringBuffer allNull = new StringBuffer();
|
|
|
+ Set<String> infoCodesList = new HashSet<>();
|
|
|
for (List<CalculateMethodDTO> calculateMethodDTOS : frontend) {
|
|
|
StringBuffer notNullString = new StringBuffer();
|
|
|
- notNullString.append("(");
|
|
|
StringBuffer nullString = new StringBuffer();
|
|
|
- nullString.append("(");
|
|
|
StringBuffer calculateString = new StringBuffer();
|
|
|
for (CalculateMethodDTO calculateMethodDTO : calculateMethodDTOS) {
|
|
|
- nullString.append(calculateMethodDTO.getMonitorIndicatorId()).append("==NaN").append("||");
|
|
|
- notNullString.append("(").append(calculateMethodDTO.getMonitorIndicatorId()).append("!=NaN").append("&&");
|
|
|
+ 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.append(")").append("||");
|
|
|
- //sb.append(calculateString.substring(0, calculateString.length() - 4)).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 substring = sb.substring(0, sb.length() - 4);
|
|
|
-// for (Map.Entry<String, String> entry : infoCodes.entrySet()) {
|
|
|
-// calculateString.toString().replace(entry.getKey(),entry.getValue());
|
|
|
-// }
|
|
|
- return substring;
|
|
|
+ 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, String> map = new HashMap();
|
|
|
+ map.put("infoCode",infoCode);
|
|
|
+ map.put("backend",substring.toString());
|
|
|
+ return map;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -135,12 +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);
|
|
|
//将前端公式转换成后台公式
|
|
|
- String backend = frontend2Backend(frontend);
|
|
|
- alarmCondition.setBackend(backend);
|
|
|
+ Map<String, String> stringMap = frontend2Backend(frontend);
|
|
|
+ alarmCondition.setBackend(stringMap.get("backend"));
|
|
|
+ alarmCondition.setInfoCodes(stringMap.get("infoCode"));
|
|
|
}
|
|
|
updateById(alarmCondition);
|
|
|
}
|