目标策划:保存规则

This commit is contained in:
huangge1199 2025-08-12 14:31:24 +08:00
parent 4eb6562caa
commit 4ef4152ee9
6 changed files with 172 additions and 22 deletions

View File

@ -36,4 +36,11 @@ public class RuleController {
return R.ok(ruleList);
}
@Operation(summary = "保存规则")
@PostMapping("/saveRule")
public R<?> saveRule(@RequestBody JSONObject params) {
ruleService.saveRule(params);
return R.ok();
}
}

View File

@ -14,4 +14,6 @@ import java.util.List;
public interface RuleService extends IService<Rule> {
List<Rule> getRulesByTarget(JSONObject params);
void saveRule(JSONObject params);
}

View File

@ -77,4 +77,14 @@ public interface UtilService {
* @return map
*/
Map<String, String[]> getCurrentCycleData(Date date);
/**
* 获取周期
*
* @param target 指标
* @return 周期
*/
String getCycle(Target target);
void dealMonitor(Rule rule, String type);
}

View File

@ -4,13 +4,18 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import iet.ustb.sf.domain.Rule;
import iet.ustb.sf.domain.Target;
import iet.ustb.sf.exception.ErrorCode;
import iet.ustb.sf.exception.ThrowUtils;
import iet.ustb.sf.mapper.TargetMapper;
import iet.ustb.sf.service.RuleService;
import iet.ustb.sf.mapper.RuleMapper;
import iet.ustb.sf.service.UtilService;
import iet.ustb.sf.util.CheckUtils;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.*;
/**
* @author hyy
@ -24,12 +29,62 @@ public class RuleServiceImpl extends ServiceImpl<RuleMapper, Rule>
@Resource
private RuleMapper ruleMapper;
@Resource
private TargetMapper targetMapper;
@Resource
private UtilService utilService;
@Override
public List<Rule> getRulesByTarget(JSONObject params) {
String targetId = params.getString("id");
CheckUtils.checkEmpty(targetId, "指标ID");
return ruleMapper.selectList(new QueryWrapper<Rule>().eq("target_id", targetId));
}
@Override
public void saveRule(JSONObject params) {
Rule rule1 = JSONObject.parseObject(params.toJSONString(), Rule.class);
ThrowUtils.throwIf(rule1 == null, ErrorCode.PARAMS_ERROR);
CheckUtils.checkEmpty(rule1.getTargetId(), "指标ID");
CheckUtils.checkEmpty(rule1.getName(), "规则名称");
Rule nameCheckRule = ruleMapper.selectOne(new QueryWrapper<Rule>().eq("name", rule1.getName()));
ThrowUtils.throwIf(
nameCheckRule != null && !nameCheckRule.getId().equals(rule1.getId()),
ErrorCode.PARAMS_ERROR,
"规则名称不能重复!"
);
CheckUtils.checkEmpty(rule1.getOp(), "报警逻辑");
CheckUtils.checkEmpty(String.valueOf(rule1.getTarget()), "目标值");
ThrowUtils.throwIf(
rule1.getWarnLevel() < 1 || rule1.getWarnLevel() > 3,
ErrorCode.PARAMS_ERROR,
"报警等级传入有误!"
);
Target target = targetMapper.selectById(rule1.getTargetId());
ThrowUtils.throwIf(target == null, ErrorCode.PARAMS_ERROR, "指标不存在!");
QueryWrapper<Rule> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("target_id", rule1.getTargetId());
queryWrapper.eq("warn_level", rule1.getWarnLevel());
Rule levelCheckRule = ruleMapper.selectOne(queryWrapper);
ThrowUtils.throwIf(
levelCheckRule != null && !levelCheckRule.getId().equals(rule1.getId()),
ErrorCode.OPERATION_ERROR,
"该指标已经存在指定报警等级的规则,无法继续操作!!"
);
Date now = new Date();
if (rule1.getCreateTime() == null) {
rule1.setId(UUID.randomUUID().toString());
rule1.setCreateTime(now);
String cycle = utilService.getCycle(target);
cycle = "product".equals(cycle) ? "month" : cycle;
rule1.setCycle(cycle);
rule1.setUnit(target.getUnit());
}
utilService.dealMonitor(rule1, "save");
rule1.setUpdateTime(now);
ruleMapper.insertOrUpdate(rule1);
}
}

View File

@ -210,7 +210,7 @@ public class TargetDataServiceImpl extends ServiceImpl<TargetDataMapper, TargetD
.orElse("-"));
map.put("xData", xData);
map.put("data", data);
map.put("cycle", getCycle(target));
map.put("cycle", utilService.getCycle(target));
map.put("oriData", oriData);
return map;
}
@ -368,26 +368,6 @@ public class TargetDataServiceImpl extends ServiceImpl<TargetDataMapper, TargetD
return compareDate;
}
/**
* 获取周期
*
* @param target 指标
* @return 周期
*/
private String getCycle(Target target) {
String cycle = "";
if (Arrays.asList("yesterday", "nearlyWeek", "nearlyMonth").contains(target.getCycle())) {
cycle = "day";
} else if (Arrays.asList("week", "lastWeek").contains(target.getCycle())) {
cycle = "week";
} else if (Arrays.asList("month", "lastMonth").contains(target.getCycle())) {
cycle = "month";
} else if (Arrays.asList("product", "lastProduct").contains(target.getCycle())) {
cycle = "product";
}
return cycle;
}
/**
* 获取前n个周期的开始结束日期
*

View File

@ -1,10 +1,14 @@
package iet.ustb.sf.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.toolkit.SqlRunner;
import iet.ustb.sf.domain.*;
import iet.ustb.sf.exception.ErrorCode;
import iet.ustb.sf.exception.MyException;
import iet.ustb.sf.exception.ThrowUtils;
import iet.ustb.sf.mapper.MonitorMapper;
import iet.ustb.sf.mapper.RuleMapper;
import iet.ustb.sf.mapper.TargetDataMapper;
import iet.ustb.sf.mapper.TargetMapper;
import iet.ustb.sf.service.UtilService;
import jakarta.annotation.Resource;
@ -19,6 +23,7 @@ import java.util.*;
import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
/**
* UtilServiceImpl
@ -32,6 +37,15 @@ public class UtilServiceImpl implements UtilService {
@Resource
private TargetMapper targetMapper;
@Resource
private MonitorMapper monitorMapper;
@Resource
private RuleMapper ruleMapper;
@Resource
private TargetDataMapper targetDataMapper;
@Override
public String[] getCurrentCycleDataByCycle(Date date, String cycle) {
Calendar calendar = Calendar.getInstance();
@ -149,6 +163,7 @@ public class UtilServiceImpl implements UtilService {
return new String[]{xShow, showCycle, setDate, start, end};
}
@Override
public String getYearWeek(LocalDate date) {
WeekFields wf = WeekFields.ISO;
@ -305,6 +320,87 @@ public class UtilServiceImpl implements UtilService {
return map;
}
/**
* 获取周期
*
* @param target 指标
* @return 周期
*/
@Override
public String getCycle(Target target) {
String cycle = "";
if (Arrays.asList("yesterday", "nearlyWeek", "nearlyMonth").contains(target.getCycle())) {
cycle = "day";
} else if (Arrays.asList("week", "lastWeek").contains(target.getCycle())) {
cycle = "week";
} else if (Arrays.asList("month", "lastMonth").contains(target.getCycle())) {
cycle = "month";
} else if (Arrays.asList("product", "lastProduct").contains(target.getCycle())) {
cycle = "product";
}
return cycle;
}
@Override
public void dealMonitor(Rule rule, String type) {
String targetId = rule.getTargetId();
Target target = targetMapper.selectById(targetId);
monitorMapper.delete(new QueryWrapper<Monitor>().eq("rule_id", rule.getId()));
QueryWrapper<Monitor> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("target_id", targetId);
queryWrapper.eq("warn_level", "998");
monitorMapper.delete(queryWrapper);
queryWrapper = new QueryWrapper<>();
queryWrapper.eq("target_id", targetId);
queryWrapper.ne("warn_level", "999");
List<Monitor> monitorList = monitorMapper.selectList(queryWrapper);
Map<String, Monitor> map = monitorList.stream().collect(Collectors.toMap(Monitor::getXShow, vo -> vo));
List<Rule> ruleList = ruleMapper.selectList(new QueryWrapper<Rule>().eq("target_id", targetId));
if ("delete".equals(type) && ruleList.isEmpty()) {
return;
}
Rule addRule = "delete".equals(type) ? ruleList.get(0) : rule;
for (Rule rule1 : ruleList) {
if (!rule1.getId().equals(rule.getId()) && rule1.getWarnLevel() < addRule.getWarnLevel()) {
addRule = rule1;
}
}
List<TargetData> targetDataList = targetDataMapper.selectList(
new QueryWrapper<TargetData>().eq("target_id", targetId)
);
List<Monitor> saveMonitorList = new ArrayList<>();
for (TargetData targetData : targetDataList) {
Monitor tmp = map.get(targetData.getXShow());
if (tmp == null) {
if ("delete".equals(type)) {
Monitor monitor = getInitMonitor(targetData, target, addRule);
monitor.setWarnLevel(998);
saveMonitorList.add(monitor);
} else {
if (isWarn(rule, target, targetData)) {
saveMonitorList.add(getInitMonitor(targetData, target, rule));
} else {
Monitor monitor = getInitMonitor(targetData, target, addRule);
monitor.setWarnLevel(998);
saveMonitorList.add(monitor);
}
}
} else {
if ("save".equals(type)) {
if (isWarn(rule, target, targetData)) {
saveMonitorList.add(getInitMonitor(targetData, target, rule));
}
}
}
}
monitorMapper.insert(saveMonitorList);
}
/**
* 处理函数方法
*