Browse Source

1、优化风柜系统定时列表排序;

2、优化报警添加多个阈值;
dev_mz
25604 2 weeks ago
parent
commit
60a954bcd3
  1. 37
      mh-system/src/main/java/com/mh/system/service/operation/impl/AlarmRecordsServiceImpl.java
  2. 68
      mh-system/src/main/java/com/mh/system/service/policy/impl/PolicyManageServiceImpl.java

37
mh-system/src/main/java/com/mh/system/service/operation/impl/AlarmRecordsServiceImpl.java

@ -188,17 +188,18 @@ public class AlarmRecordsServiceImpl implements IAlarmRecordsService {
Date curTime = collectionParamsManage.getCurTime(); Date curTime = collectionParamsManage.getCurTime();
// 阈值 // 阈值
String threshold1 = alarmRule.getThreshold1(); String threshold1 = alarmRule.getThreshold1();
String threshold2 = alarmRule.getThreshold2();
// 设置Redis取消标记(有效期略大于延迟时间) // 设置Redis取消标记(有效期略大于延迟时间)
redisTemplate.deleteObject("alarm:cancel:" + collectionParamsManage.getId()); redisTemplate.deleteObject("alarm:cancel:" + collectionParamsManage.getId());
if (alarmRule.getTimePeriodSet() == 0 && DateUtils.isSameDay(curTime, new Date())) { if (alarmRule.getTimePeriodSet() == 0 && DateUtils.isSameDay(curTime, new Date())) {
// 执行相关操作 // 执行相关操作
insertOrUpdateRecord(alarmRule, curValue, threshold1, alarmCode, alarmRecords, collectionParamsManage); insertOrUpdateRecord(alarmRule, curValue, threshold1, threshold2, alarmCode, alarmRecords, collectionParamsManage);
} else if (alarmRule.getTimePeriodSet() == 1 } else if (alarmRule.getTimePeriodSet() == 1
&& DateUtils.isSameDay(collectionParamsManage.getCurTime(), new Date()) && DateUtils.isSameDay(collectionParamsManage.getCurTime(), new Date())
&& DateUtils.isCurrentTimeInRange(alarmRule.getBeginTime(), alarmRule.getEndTime(), curTime) && DateUtils.isCurrentTimeInRange(alarmRule.getBeginTime(), alarmRule.getEndTime(), curTime)
) { ) {
// 执行相关操作 // 执行相关操作
insertOrUpdateRecord(alarmRule, curValue, threshold1, alarmCode, alarmRecords, collectionParamsManage); insertOrUpdateRecord(alarmRule, curValue, threshold1, threshold2, alarmCode, alarmRecords, collectionParamsManage);
} }
} }
} }
@ -225,6 +226,7 @@ public class AlarmRecordsServiceImpl implements IAlarmRecordsService {
Date curTime = collectionParamsManage.getCurTime(); Date curTime = collectionParamsManage.getCurTime();
// 阈值 // 阈值
String threshold1 = alarmRule.getThreshold1(); String threshold1 = alarmRule.getThreshold1();
String threshold2 = alarmRule.getThreshold2();
if (curValue.compareTo(BigDecimal.ZERO) == 0) { if (curValue.compareTo(BigDecimal.ZERO) == 0) {
// 发送到延迟队列 // 发送到延迟队列
result.append(",").append(collectionParamsManage.getId()); result.append(",").append(collectionParamsManage.getId());
@ -239,20 +241,42 @@ public class AlarmRecordsServiceImpl implements IAlarmRecordsService {
"true", "true",
2, TimeUnit.MINUTES // 例如:延迟5分钟,设置10分钟过期 2, TimeUnit.MINUTES // 例如:延迟5分钟,设置10分钟过期
); );
insertOrUpdateRecord(alarmRule, curValue, threshold1, alarmCodeService.selectAlarmCodeByAlarmType(alarmRule.getEventType()), alarmRecords, collectionParamsManage); insertOrUpdateRecord(alarmRule, curValue, threshold1, threshold2, alarmCodeService.selectAlarmCodeByAlarmType(alarmRule.getEventType()), alarmRecords, collectionParamsManage);
} }
} }
} }
return result.toString(); return result.toString();
} }
private void insertOrUpdateRecord(AlarmRules alarmRule, BigDecimal curValue, String threshold1, AlarmCode alarmCode, AlarmRecords alarmRecords, CollectionParamsManage collectionParamsManage) { private void insertOrUpdateRecord(AlarmRules alarmRule, BigDecimal curValue, String threshold1, String threshold2, AlarmCode alarmCode, AlarmRecords alarmRecords, CollectionParamsManage collectionParamsManage) {
boolean compare = BigDecimalUtils.compare(alarmRule.getCondition1(), curValue, new BigDecimal(threshold1)); boolean compare = BigDecimalUtils.compare(alarmRule.getCondition1(), curValue, new BigDecimal(threshold1));
if (compare) { if (compare) {
// 创建报警记录 handleAlarmRecord(alarmRule, alarmCode, curValue, threshold1, alarmRecords, collectionParamsManage, "#{setValue}", alarmRule.getCondition1() + threshold1);
}
boolean compare1 = BigDecimalUtils.compare(alarmRule.getCondition2(), curValue, new BigDecimal(threshold2));
if (compare1) {
handleAlarmRecord(alarmRule, alarmCode, curValue, threshold2, alarmRecords, collectionParamsManage, "#{setValue}", alarmRule.getCondition2() + threshold2);
}
}
/**
* 处理报警记录的公共方法
*
* @param alarmRule 报警规则
* @param alarmCode 报警代码
* @param curValue 当前值
* @param threshold 阈值
* @param alarmRecords 报警记录
* @param collectionParamsManage 采集参数管理
* @param placeholder 占位符
* @param setValue 设置值
*/
private void handleAlarmRecord(AlarmRules alarmRule, AlarmCode alarmCode, BigDecimal curValue, String threshold,
AlarmRecords alarmRecords, CollectionParamsManage collectionParamsManage,
String placeholder, String setValue) {
String content = alarmCode.getMsgContent(); String content = alarmCode.getMsgContent();
content = content.replace("#{curValue}", curValue.setScale(1, RoundingMode.HALF_UP).toString()); content = content.replace("#{curValue}", curValue.setScale(1, RoundingMode.HALF_UP).toString());
content = content.replace("#{setValue}", alarmRule.getCondition1() + threshold1); content = content.replace("#{setValue}", setValue);
alarmRecords.setContent(content); alarmRecords.setContent(content);
alarmRecords.setAlarmType(alarmRule.getAlarmType()); alarmRecords.setAlarmType(alarmRule.getAlarmType());
alarmRecords.setEventType(alarmRule.getEventType()); alarmRecords.setEventType(alarmRule.getEventType());
@ -276,4 +300,3 @@ public class AlarmRecordsServiceImpl implements IAlarmRecordsService {
} }
} }
} }
}

68
mh-system/src/main/java/com/mh/system/service/policy/impl/PolicyManageServiceImpl.java

@ -72,9 +72,41 @@ public class PolicyManageServiceImpl implements IPolicyManageService {
@Override @Override
public List<?> selectDDCTimeList(String systemType, String funPolicyType, String houseId) { public List<?> selectDDCTimeList(String systemType, String funPolicyType, String houseId) {
List<PolicyManage> policyManages = policyManageMapper.selectPolicyListByParams(systemType, funPolicyType, houseId); List<PolicyManage> policyManages = policyManageMapper.selectPolicyListByParams(systemType, funPolicyType, houseId);
// 定义星期顺序映射
Map<String, Integer> dayOfWeekOrder = new HashMap<>();
dayOfWeekOrder.put("星期一", 1);
dayOfWeekOrder.put("星期二", 2);
dayOfWeekOrder.put("星期三", 3);
dayOfWeekOrder.put("星期四", 4);
dayOfWeekOrder.put("星期五", 5);
dayOfWeekOrder.put("星期六", 6);
dayOfWeekOrder.put("星期日", 7);
Map<String, List<PolicyManage>> listMap = policyManages.stream() Map<String, List<PolicyManage>> listMap = policyManages.stream()
// 先排序(例如按 policyType) // 按照星期顺序排序,同时考虑星期几后面的数字
// .sorted(Comparator.comparing(PolicyManage::getPolicyType)) .sorted((policy1, policy2) -> {
String name1 = policy1.getPolicyName();
String name2 = policy2.getPolicyName();
// 提取星期几部分和数字部分
String day1 = extractDayOfWeek(name1);
String day2 = extractDayOfWeek(name2);
int dayOrder1 = dayOfWeekOrder.getOrDefault(day1, Integer.MAX_VALUE);
int dayOrder2 = dayOfWeekOrder.getOrDefault(day2, Integer.MAX_VALUE);
// 先按星期排序
int dayCompare = Integer.compare(dayOrder1, dayOrder2);
if (dayCompare != 0) {
return dayCompare;
}
// 如果是同一天,再按数字排序
int num1 = extractNumber(name1);
int num2 = extractNumber(name2);
return Integer.compare(num1, num2);
})
// 处理每个PolicyManage对象的curValue字段 // 处理每个PolicyManage对象的curValue字段
.peek(policy -> { .peek(policy -> {
policy.setCurValue(BigDecimal.valueOf(policy.getCurValue().intValue())); // 除以1000并保留整数 policy.setCurValue(BigDecimal.valueOf(policy.getCurValue().intValue())); // 除以1000并保留整数
@ -98,6 +130,38 @@ public class PolicyManageServiceImpl implements IPolicyManageService {
return result; return result;
} }
/**
* 从policyName中提取星期几部分
* @param policyName 策略名称
* @return 星期几部分
*/
private String extractDayOfWeek(String policyName) {
if (policyName.startsWith("星期一")) return "星期一";
if (policyName.startsWith("星期二")) return "星期二";
if (policyName.startsWith("星期三")) return "星期三";
if (policyName.startsWith("星期四")) return "星期四";
if (policyName.startsWith("星期五")) return "星期五";
if (policyName.startsWith("星期六")) return "星期六";
if (policyName.startsWith("星期日")) return "星期日";
return policyName; // 默认返回原名称
}
/**
* 从policyName中提取数字部分
* @param policyName 策略名称
* @return 数字部分如果没有则返回0
*/
private int extractNumber(String policyName) {
// 使用正则表达式提取数字
java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("\\d+$");
java.util.regex.Matcher matcher = pattern.matcher(policyName);
if (matcher.find()) {
return Integer.parseInt(matcher.group());
}
return 0; // 没有数字则返回0
}
@Override @Override
public List<?> selectPolicyList(String systemType, String funPolicyType) { public List<?> selectPolicyList(String systemType, String funPolicyType) {
// QueryWrapper<PolicyManage> queryWrapper = new QueryWrapper<>(); // QueryWrapper<PolicyManage> queryWrapper = new QueryWrapper<>();

Loading…
Cancel
Save