|
|
|
@ -11,6 +11,7 @@ import com.alops.system.domain.dto.AlertRuleAddDto; |
|
|
|
import com.alops.system.domain.vo.AlertRuleVo; |
|
|
|
import com.alops.system.domain.vo.AlertRuleVo; |
|
|
|
import com.alops.system.mapper.AlertRuleConditionMapper; |
|
|
|
import com.alops.system.mapper.AlertRuleConditionMapper; |
|
|
|
import com.alops.system.mapper.AlertRuleMapper; |
|
|
|
import com.alops.system.mapper.AlertRuleMapper; |
|
|
|
|
|
|
|
import com.alops.system.mapper.DictAlarmParamMapper; |
|
|
|
import com.alops.system.service.IAlertRuleService; |
|
|
|
import com.alops.system.service.IAlertRuleService; |
|
|
|
|
|
|
|
|
|
|
|
import org.apache.commons.lang3.StringEscapeUtils; |
|
|
|
import org.apache.commons.lang3.StringEscapeUtils; |
|
|
|
@ -32,6 +33,9 @@ public class AlertRuleServiceImpl implements IAlertRuleService |
|
|
|
@Autowired |
|
|
|
@Autowired |
|
|
|
private AlertRuleConditionMapper alertRuleConditionMapper; |
|
|
|
private AlertRuleConditionMapper alertRuleConditionMapper; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Autowired |
|
|
|
|
|
|
|
private DictAlarmParamMapper dictAlarmParamMapper; |
|
|
|
|
|
|
|
|
|
|
|
//生成预警规则
|
|
|
|
//生成预警规则
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* 保存预警规则及条件,同时生成 SQL |
|
|
|
* 保存预警规则及条件,同时生成 SQL |
|
|
|
@ -58,6 +62,9 @@ public class AlertRuleServiceImpl implements IAlertRuleService |
|
|
|
} |
|
|
|
} |
|
|
|
rule.setAlertSql(sql); |
|
|
|
rule.setAlertSql(sql); |
|
|
|
rule.setEnable(1); |
|
|
|
rule.setEnable(1); |
|
|
|
|
|
|
|
//生成模版
|
|
|
|
|
|
|
|
String alertTemplate=generateAlertTemplate(dto); |
|
|
|
|
|
|
|
rule.setAlertTemplate(alertTemplate); |
|
|
|
// 插入规则
|
|
|
|
// 插入规则
|
|
|
|
alertRuleMapper.insertAlertRule(rule); |
|
|
|
alertRuleMapper.insertAlertRule(rule); |
|
|
|
|
|
|
|
|
|
|
|
@ -91,9 +98,11 @@ public class AlertRuleServiceImpl implements IAlertRuleService |
|
|
|
sql = buildSql(rule, conditions); |
|
|
|
sql = buildSql(rule, conditions); |
|
|
|
} |
|
|
|
} |
|
|
|
rule.setAlertSql(sql); |
|
|
|
rule.setAlertSql(sql); |
|
|
|
|
|
|
|
//生成模版
|
|
|
|
|
|
|
|
String alertTemplate=generateAlertTemplate(dto); |
|
|
|
|
|
|
|
rule.setAlertTemplate(alertTemplate); |
|
|
|
|
|
|
|
|
|
|
|
// 3. 更新规则表
|
|
|
|
// 3. 更新规则表
|
|
|
|
|
|
|
|
|
|
|
|
alertRuleMapper.updateAlertRule(rule); |
|
|
|
alertRuleMapper.updateAlertRule(rule); |
|
|
|
|
|
|
|
|
|
|
|
// 4. 先删旧条件,再插入新条件
|
|
|
|
// 4. 先删旧条件,再插入新条件
|
|
|
|
@ -306,6 +315,119 @@ public class AlertRuleServiceImpl implements IAlertRuleService |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* 生成基础告警模板 |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
// public String generateAlertTemplate(AlertRuleAddDto dto) {
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// AlertRuleCondition condition = dto.getAlertRuleConditionList().get(0);
|
|
|
|
|
|
|
|
// String paramName = condition.getParamName();
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// // 查询字典表获取参数中文名
|
|
|
|
|
|
|
|
// String paramCnName = dictAlarmParamMapper.selectCnNameByParamName(paramName);
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// if (paramCnName == null || paramCnName.isEmpty()) {
|
|
|
|
|
|
|
|
// paramCnName = paramName; // 查不到就用原名
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// String alertTemplate;
|
|
|
|
|
|
|
|
// if ("veneer_status".equalsIgnoreCase(paramName)) {
|
|
|
|
|
|
|
|
// // 单板运行状态模板
|
|
|
|
|
|
|
|
// alertTemplate = "设备名称{equ_name},设备号{equ_number},单板号是{veneer_id},单板运行状态是{veneer_status} 超出正常范围,请尽快检查,";
|
|
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
|
|
// // 其他参数模板
|
|
|
|
|
|
|
|
// alertTemplate = String.format("设备名称{equ_name},设备号{equ_number},%s是{%s},超出正常范围,请尽快检查,", paramCnName, paramName);
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// return alertTemplate;
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
public String generateAlertTemplate(AlertRuleAddDto dto) { |
|
|
|
|
|
|
|
AlertRuleCondition condition = dto.getAlertRuleConditionList().get(0); |
|
|
|
|
|
|
|
String paramName = condition.getParamName(); |
|
|
|
|
|
|
|
String operator = condition.getOperator(); |
|
|
|
|
|
|
|
String compareValue = condition.getCompareValue(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 查询字典表获取参数中文名
|
|
|
|
|
|
|
|
String paramCnName = dictAlarmParamMapper.selectCnNameByParamName(paramName); |
|
|
|
|
|
|
|
if (paramCnName == null || paramCnName.isEmpty()) { |
|
|
|
|
|
|
|
paramCnName = paramName; // 查不到就用原名
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String alertTemplate; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ("veneer_status".equalsIgnoreCase(paramName)) { |
|
|
|
|
|
|
|
// 单板运行状态模板
|
|
|
|
|
|
|
|
alertTemplate = "设备名称{equ_name},设备号{equ_number},单板号是{veneer_id},单板运行状态是{veneer_status} 超出正常范围,请尽快检查,"; |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
// 判断是否有比较符号和比较值(即为新逻辑)
|
|
|
|
|
|
|
|
if (operator != null && !operator.isEmpty()) { |
|
|
|
|
|
|
|
// 处理比较符号 -> 中文描述
|
|
|
|
|
|
|
|
String operatorDesc; |
|
|
|
|
|
|
|
switch (operator) { |
|
|
|
|
|
|
|
case "=": |
|
|
|
|
|
|
|
operatorDesc = "等于"; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case "!=": |
|
|
|
|
|
|
|
operatorDesc = "不等于"; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case "<": |
|
|
|
|
|
|
|
operatorDesc = "小于"; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case "<=": |
|
|
|
|
|
|
|
operatorDesc = "小于等于"; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case ">": |
|
|
|
|
|
|
|
operatorDesc = "大于"; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case ">=": |
|
|
|
|
|
|
|
operatorDesc = "大于等于"; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case "between": |
|
|
|
|
|
|
|
// between 用逗号分隔两个值
|
|
|
|
|
|
|
|
String[] range = compareValue != null ? compareValue.split(",") : new String[0]; |
|
|
|
|
|
|
|
if (range.length == 2) { |
|
|
|
|
|
|
|
operatorDesc = String.format("不在%s和%s之间", range[0], range[1]); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
operatorDesc = "不在设定范围内"; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case "CHANGED": |
|
|
|
|
|
|
|
operatorDesc = "发生了改变"; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
default: |
|
|
|
|
|
|
|
operatorDesc = operator; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 根据不同符号生成模板
|
|
|
|
|
|
|
|
if ("CHANGED".equalsIgnoreCase(operator)) { |
|
|
|
|
|
|
|
alertTemplate = String.format( |
|
|
|
|
|
|
|
"设备名称{equ_name},设备号{equ_number},%s是{%s}, %s,请尽快检查,", |
|
|
|
|
|
|
|
paramCnName, paramName, operatorDesc |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
} else if ("between".equalsIgnoreCase(operator)) { |
|
|
|
|
|
|
|
alertTemplate = String.format( |
|
|
|
|
|
|
|
"设备名称{equ_name},设备号{equ_number},%s{%s} %s,请尽快检查,", |
|
|
|
|
|
|
|
paramCnName, paramName, operatorDesc |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
alertTemplate = String.format( |
|
|
|
|
|
|
|
"设备名称{equ_name},设备号{equ_number},%s是{%s} %s %s,超出正常范围,请尽快检查,", |
|
|
|
|
|
|
|
paramCnName, paramName, operatorDesc, compareValue |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
// 没有比较符号时,保持原逻辑
|
|
|
|
|
|
|
|
alertTemplate = String.format( |
|
|
|
|
|
|
|
"设备名称{equ_name},设备号{equ_number},%s是{%s},超出正常范围,请尽快检查,", |
|
|
|
|
|
|
|
paramCnName, paramName |
|
|
|
|
|
|
|
); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return alertTemplate; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
|