diff --git a/src/main/java/iet/ustb/sf/controller/RuleController.java b/src/main/java/iet/ustb/sf/controller/RuleController.java index a536e0d..936a482 100644 --- a/src/main/java/iet/ustb/sf/controller/RuleController.java +++ b/src/main/java/iet/ustb/sf/controller/RuleController.java @@ -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(); + } + } diff --git a/src/main/java/iet/ustb/sf/service/RuleService.java b/src/main/java/iet/ustb/sf/service/RuleService.java index cd765e9..fd6d4ba 100644 --- a/src/main/java/iet/ustb/sf/service/RuleService.java +++ b/src/main/java/iet/ustb/sf/service/RuleService.java @@ -14,4 +14,6 @@ import java.util.List; public interface RuleService extends IService { List getRulesByTarget(JSONObject params); + + void saveRule(JSONObject params); } diff --git a/src/main/java/iet/ustb/sf/service/UtilService.java b/src/main/java/iet/ustb/sf/service/UtilService.java index b1192bf..49dc376 100644 --- a/src/main/java/iet/ustb/sf/service/UtilService.java +++ b/src/main/java/iet/ustb/sf/service/UtilService.java @@ -77,4 +77,14 @@ public interface UtilService { * @return map */ Map getCurrentCycleData(Date date); + + /** + * 获取周期 + * + * @param target 指标 + * @return 周期 + */ + String getCycle(Target target); + + void dealMonitor(Rule rule, String type); } diff --git a/src/main/java/iet/ustb/sf/service/impl/RuleServiceImpl.java b/src/main/java/iet/ustb/sf/service/impl/RuleServiceImpl.java index 8817c6f..0f60b58 100644 --- a/src/main/java/iet/ustb/sf/service/impl/RuleServiceImpl.java +++ b/src/main/java/iet/ustb/sf/service/impl/RuleServiceImpl.java @@ -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 @Resource private RuleMapper ruleMapper; + @Resource + private TargetMapper targetMapper; + + @Resource + private UtilService utilService; + @Override public List getRulesByTarget(JSONObject params) { String targetId = params.getString("id"); CheckUtils.checkEmpty(targetId, "指标ID"); return ruleMapper.selectList(new QueryWrapper().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().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 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); + } } diff --git a/src/main/java/iet/ustb/sf/service/impl/TargetDataServiceImpl.java b/src/main/java/iet/ustb/sf/service/impl/TargetDataServiceImpl.java index 0dd6bb7..13bc014 100644 --- a/src/main/java/iet/ustb/sf/service/impl/TargetDataServiceImpl.java +++ b/src/main/java/iet/ustb/sf/service/impl/TargetDataServiceImpl.java @@ -210,7 +210,7 @@ public class TargetDataServiceImpl extends ServiceImpl().eq("rule_id", rule.getId())); + QueryWrapper 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 monitorList = monitorMapper.selectList(queryWrapper); + Map map = monitorList.stream().collect(Collectors.toMap(Monitor::getXShow, vo -> vo)); + + List ruleList = ruleMapper.selectList(new QueryWrapper().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 targetDataList = targetDataMapper.selectList( + new QueryWrapper().eq("target_id", targetId) + ); + + List 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); + } + /** * 处理函数方法 *