目标策划:保存规则
This commit is contained in:
parent
4eb6562caa
commit
4ef4152ee9
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -14,4 +14,6 @@ import java.util.List;
|
||||
public interface RuleService extends IService<Rule> {
|
||||
|
||||
List<Rule> getRulesByTarget(JSONObject params);
|
||||
|
||||
void saveRule(JSONObject params);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -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个周期的开始结束日期
|
||||
*
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理函数方法
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user