feat: 实现报警规则引擎和报警管理中心功能
- 新增 AlertRule 实体类,支持阈值配置和条件判断 - 新增 AlertManagement 实体类,实现报警生命周期管理 - 新增 AlertRuleMapper 和 AlertManagementMapper 接口 - 新增 AlertRuleService 和 AlertManagementService 业务逻辑 - 实现报警规则 CRUD 操作和验证 - 实现报警确认、解决、分派等管理功能 - 新增 AlertRuleController 和 AlertManagementController REST API - 支持按参数、设备、区域查询报警规则 - 实现报警统计功能 Issue #67: [报警] 报警规则引擎 + 报警管理中心
This commit is contained in:
+170
@@ -0,0 +1,170 @@
|
|||||||
|
package com.water.production.controller;
|
||||||
|
|
||||||
|
import com.water.production.entity.AlertManagement;
|
||||||
|
import com.water.production.service.AlertManagementService;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/api/alert-management")
|
||||||
|
@CrossOrigin(origins = "*")
|
||||||
|
public class AlertManagementController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AlertManagementService alertManagementService;
|
||||||
|
|
||||||
|
// 获取所有报警
|
||||||
|
@GetMapping
|
||||||
|
public ResponseEntity<List<AlertManagement>> getAllAlerts() {
|
||||||
|
try {
|
||||||
|
List<AlertManagement> alerts = alertManagementService.getAllAlerts();
|
||||||
|
return ResponseEntity.ok(alerts);
|
||||||
|
} catch (Exception e) {
|
||||||
|
return ResponseEntity.internalServerError().build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 根据ID获取报警
|
||||||
|
@GetMapping("/{id}")
|
||||||
|
public ResponseEntity<AlertManagement> getAlertById(@PathVariable Long id) {
|
||||||
|
try {
|
||||||
|
AlertManagement alert = alertManagementService.getAlertById(id);
|
||||||
|
return ResponseEntity.ok(alert);
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
return ResponseEntity.badRequest().build();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return ResponseEntity.notFound().build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 根据报警规则ID获取相关报警
|
||||||
|
@GetMapping("/rule/{alertRuleId}")
|
||||||
|
public ResponseEntity<List<AlertManagement>> getAlertsByRuleId(@PathVariable Long alertRuleId) {
|
||||||
|
try {
|
||||||
|
List<AlertManagement> alerts = alertManagementService.getAlertsByRuleId(alertRuleId);
|
||||||
|
return ResponseEntity.ok(alerts);
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
return ResponseEntity.badRequest().build();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return ResponseEntity.internalServerError().build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 根据状态获取报警
|
||||||
|
@GetMapping("/status/{status}")
|
||||||
|
public ResponseEntity<List<AlertManagement>> getAlertsByStatus(@PathVariable String status) {
|
||||||
|
try {
|
||||||
|
List<AlertManagement> alerts = alertManagementService.getAlertsByStatus(status);
|
||||||
|
return ResponseEntity.ok(alerts);
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
return ResponseEntity.badRequest().build();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return ResponseEntity.internalServerError().build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 根据严重程度获取报警
|
||||||
|
@GetMapping("/severity/{severity}")
|
||||||
|
public ResponseEntity<List<AlertManagement>> getAlertsBySeverity(@PathVariable String severity) {
|
||||||
|
try {
|
||||||
|
List<AlertManagement> alerts = alertManagementService.getAlertsBySeverity(severity);
|
||||||
|
return ResponseEntity.ok(alerts);
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
return ResponseEntity.badRequest().build();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return ResponseEntity.internalServerError().build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建报警
|
||||||
|
@PostMapping
|
||||||
|
public ResponseEntity<AlertManagement> createAlert(@RequestBody AlertManagement alert) {
|
||||||
|
try {
|
||||||
|
AlertManagement created = alertManagementService.createAlert(alert);
|
||||||
|
return ResponseEntity.ok(created);
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
return ResponseEntity.badRequest().build();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return ResponseEntity.internalServerError().build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新报警
|
||||||
|
@PutMapping("/{id}")
|
||||||
|
public ResponseEntity<AlertManagement> updateAlert(@PathVariable Long id, @RequestBody AlertManagement alert) {
|
||||||
|
try {
|
||||||
|
alert.setId(id);
|
||||||
|
AlertManagement updated = alertManagementService.updateAlert(alert);
|
||||||
|
return ResponseEntity.ok(updated);
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
return ResponseEntity.badRequest().build();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return ResponseEntity.internalServerError().build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 确认报警
|
||||||
|
@PutMapping("/{id}/confirm")
|
||||||
|
public ResponseEntity<Void> confirmAlert(@PathVariable Long id, @RequestParam String assigneeId) {
|
||||||
|
try {
|
||||||
|
boolean success = alertManagementService.confirmAlert(id, assigneeId);
|
||||||
|
if (success) {
|
||||||
|
return ResponseEntity.noContent().build();
|
||||||
|
} else {
|
||||||
|
return ResponseEntity.notFound().build();
|
||||||
|
}
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
return ResponseEntity.badRequest().build();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return ResponseEntity.internalServerError().build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 解决报警
|
||||||
|
@PutMapping("/{id}/resolve")
|
||||||
|
public ResponseEntity<Void> resolveAlert(@PathVariable Long id) {
|
||||||
|
try {
|
||||||
|
boolean success = alertManagementService.resolveAlert(id);
|
||||||
|
if (success) {
|
||||||
|
return ResponseEntity.noContent().build();
|
||||||
|
} else {
|
||||||
|
return ResponseEntity.notFound().build();
|
||||||
|
}
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
return ResponseEntity.badRequest().build();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return ResponseEntity.internalServerError().build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 分派任务
|
||||||
|
@PutMapping("/{id}/dispatch")
|
||||||
|
public ResponseEntity<Void> dispatchTask(@PathVariable Long id, @RequestParam Long taskId) {
|
||||||
|
try {
|
||||||
|
boolean success = alertManagementService.dispatchTask(id, taskId);
|
||||||
|
if (success) {
|
||||||
|
return ResponseEntity.noContent().build();
|
||||||
|
} else {
|
||||||
|
return ResponseEntity.notFound().build();
|
||||||
|
}
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
return ResponseEntity.badRequest().build();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return ResponseEntity.internalServerError().build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 生成报警统计
|
||||||
|
@GetMapping("/statistics")
|
||||||
|
public ResponseEntity<AlertManagementService.AlertStatistics> generateStatistics() {
|
||||||
|
try {
|
||||||
|
AlertManagementService.AlertStatistics statistics = alertManagementService.generateStatistics();
|
||||||
|
return ResponseEntity.ok(statistics);
|
||||||
|
} catch (Exception e) {
|
||||||
|
return ResponseEntity.internalServerError().build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,163 @@
|
|||||||
|
package com.water.production.controller;
|
||||||
|
|
||||||
|
import com.water.production.entity.AlertRule;
|
||||||
|
import com.water.production.service.AlertRuleService;
|
||||||
|
import com.water.production.service.AlertManagementService;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/api/alert-rules")
|
||||||
|
@CrossOrigin(origins = "*")
|
||||||
|
public class AlertRuleController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AlertRuleService alertRuleService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AlertManagementService alertManagementService;
|
||||||
|
|
||||||
|
// 获取所有报警规则
|
||||||
|
@GetMapping
|
||||||
|
public ResponseEntity<List<AlertRule>> getAllAlertRules() {
|
||||||
|
try {
|
||||||
|
List<AlertRule> rules = alertRuleService.getAllAlertRules();
|
||||||
|
return ResponseEntity.ok(rules);
|
||||||
|
} catch (Exception e) {
|
||||||
|
return ResponseEntity.internalServerError().build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 根据ID获取报警规则
|
||||||
|
@GetMapping("/{id}")
|
||||||
|
public ResponseEntity<AlertRule> getAlertRuleById(@PathVariable Long id) {
|
||||||
|
try {
|
||||||
|
AlertRule rule = alertRuleService.getAlertRuleById(id);
|
||||||
|
return ResponseEntity.ok(rule);
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
return ResponseEntity.badRequest().build();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return ResponseEntity.notFound().build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 根据参数获取报警规则
|
||||||
|
@GetMapping("/parameter/{parameter}")
|
||||||
|
public ResponseEntity<List<AlertRule>> getAlertRulesByParameter(@PathVariable String parameter) {
|
||||||
|
try {
|
||||||
|
List<AlertRule> rules = alertRuleService.getAlertRulesByParameter(parameter);
|
||||||
|
return ResponseEntity.ok(rules);
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
return ResponseEntity.badRequest().build();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return ResponseEntity.internalServerError().build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 根据设备获取报警规则
|
||||||
|
@GetMapping("/equipment/{equipmentId}")
|
||||||
|
public ResponseEntity<List<AlertRule>> getAlertRulesByEquipment(@PathVariable String equipmentId) {
|
||||||
|
try {
|
||||||
|
List<AlertRule> rules = alertRuleService.getAlertRulesByEquipment(equipmentId);
|
||||||
|
return ResponseEntity.ok(rules);
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
return ResponseEntity.badRequest().build();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return ResponseEntity.internalServerError().build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 根据区域获取报警规则
|
||||||
|
@GetMapping("/area/{area}")
|
||||||
|
public ResponseEntity<List<AlertRule>> getAlertRulesByArea(@PathVariable String area) {
|
||||||
|
try {
|
||||||
|
List<AlertRule> rules = alertRuleService.getAlertRulesByArea(area);
|
||||||
|
return ResponseEntity.ok(rules);
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
return ResponseEntity.badRequest().build();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return ResponseEntity.internalServerError().build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建报警规则
|
||||||
|
@PostMapping
|
||||||
|
public ResponseEntity<AlertRule> createAlertRule(@RequestBody AlertRule alertRule) {
|
||||||
|
try {
|
||||||
|
AlertRule created = alertRuleService.createAlertRule(alertRule);
|
||||||
|
return ResponseEntity.ok(created);
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
return ResponseEntity.badRequest().build();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return ResponseEntity.internalServerError().build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新报警规则
|
||||||
|
@PutMapping("/{id}")
|
||||||
|
public ResponseEntity<AlertRule> updateAlertRule(@PathVariable Long id, @RequestBody AlertRule alertRule) {
|
||||||
|
try {
|
||||||
|
alertRule.setId(id);
|
||||||
|
AlertRule updated = alertRuleService.updateAlertRule(alertRule);
|
||||||
|
return ResponseEntity.ok(updated);
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
return ResponseEntity.badRequest().build();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return ResponseEntity.internalServerError().build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除报警规则
|
||||||
|
@DeleteMapping("/{id}")
|
||||||
|
public ResponseEntity<Void> deleteAlertRule(@PathVariable Long id) {
|
||||||
|
try {
|
||||||
|
boolean success = alertRuleService.deleteAlertRule(id);
|
||||||
|
if (success) {
|
||||||
|
return ResponseEntity.noContent().build();
|
||||||
|
} else {
|
||||||
|
return ResponseEntity.notFound().build();
|
||||||
|
}
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
return ResponseEntity.badRequest().build();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return ResponseEntity.internalServerError().build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 启用报警规则
|
||||||
|
@PutMapping("/{id}/enable")
|
||||||
|
public ResponseEntity<Void> enableAlertRule(@PathVariable Long id) {
|
||||||
|
try {
|
||||||
|
boolean success = alertRuleService.enableAlertRule(id);
|
||||||
|
if (success) {
|
||||||
|
return ResponseEntity.noContent().build();
|
||||||
|
} else {
|
||||||
|
return ResponseEntity.notFound().build();
|
||||||
|
}
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
return ResponseEntity.badRequest().build();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return ResponseEntity.internalServerError().build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 禁用报警规则
|
||||||
|
@PutMapping("/{id}/disable")
|
||||||
|
public ResponseEntity<Void> disableAlertRule(@PathVariable Long id) {
|
||||||
|
try {
|
||||||
|
boolean success = alertRuleService.disableAlertRule(id);
|
||||||
|
if (success) {
|
||||||
|
return ResponseEntity.noContent().build();
|
||||||
|
} else {
|
||||||
|
return ResponseEntity.notFound().build();
|
||||||
|
}
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
return ResponseEntity.badRequest().build();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return ResponseEntity.internalServerError().build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
package com.water.production.entity;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class AlertManagement {
|
||||||
|
private Long id;
|
||||||
|
private Long alertRuleId;
|
||||||
|
private String title;
|
||||||
|
private String content;
|
||||||
|
private String severity;
|
||||||
|
private String status;
|
||||||
|
private String targetId;
|
||||||
|
private String targetType;
|
||||||
|
private String assigneeId;
|
||||||
|
private String assigneeName;
|
||||||
|
private LocalDateTime alertTime;
|
||||||
|
private LocalDateTime confirmTime;
|
||||||
|
private LocalDateTime resolveTime;
|
||||||
|
private String acknowledgmentStatus;
|
||||||
|
private String dispatchStatus;
|
||||||
|
private Long dispatchedTaskId;
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
private LocalDateTime updateTime;
|
||||||
|
private String createBy;
|
||||||
|
private String updateBy;
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
package com.water.production.entity;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class AlertRule {
|
||||||
|
private Long id;
|
||||||
|
private String name;
|
||||||
|
private String parameter;
|
||||||
|
private Double minValue;
|
||||||
|
private Double maxValue;
|
||||||
|
private Double warningValue;
|
||||||
|
private Double criticalValue;
|
||||||
|
private String conditionType;
|
||||||
|
private Integer severityLevel;
|
||||||
|
private Integer duplicateInterval;
|
||||||
|
private Integer status;
|
||||||
|
private String targetEquipmentId;
|
||||||
|
private String targetArea;
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
private LocalDateTime updateTime;
|
||||||
|
private String createBy;
|
||||||
|
private String updateBy;
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package com.water.production.entity;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class Equipment {
|
||||||
|
private Long id;
|
||||||
|
private String name;
|
||||||
|
private String type;
|
||||||
|
private String model;
|
||||||
|
private String location;
|
||||||
|
private String status;
|
||||||
|
private String description;
|
||||||
|
private LocalDateTime installTime;
|
||||||
|
private LocalDateTime lastMaintenanceTime;
|
||||||
|
private LocalDateTime nextMaintenanceTime;
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
private LocalDateTime updateTime;
|
||||||
|
private String createBy;
|
||||||
|
private String updateBy;
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package com.water.production.entity;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class Notification {
|
||||||
|
private Long id;
|
||||||
|
private String title;
|
||||||
|
private String content;
|
||||||
|
private String type;
|
||||||
|
private String level;
|
||||||
|
private String target;
|
||||||
|
private String channels;
|
||||||
|
private Integer status;
|
||||||
|
private LocalDateTime publishTime;
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
private LocalDateTime updateTime;
|
||||||
|
private String createBy;
|
||||||
|
private String updateBy;
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package com.water.production.entity;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class Threshold {
|
||||||
|
private Long id;
|
||||||
|
private String name;
|
||||||
|
private String parameter;
|
||||||
|
private Double minValue;
|
||||||
|
private Double maxValue;
|
||||||
|
private Double warningValue;
|
||||||
|
private Double criticalValue;
|
||||||
|
private String unit;
|
||||||
|
private String description;
|
||||||
|
private Integer status;
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
private LocalDateTime updateTime;
|
||||||
|
private String createBy;
|
||||||
|
private String updateBy;
|
||||||
|
}
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
package com.water.production.mapper;
|
||||||
|
|
||||||
|
import com.water.production.entity.AlertManagement;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface AlertManagementMapper {
|
||||||
|
// 查询所有报警管理
|
||||||
|
List<AlertManagement> findAll();
|
||||||
|
|
||||||
|
// 根据ID查询报警管理
|
||||||
|
AlertManagement findById(@Param("id") Long id);
|
||||||
|
|
||||||
|
// 根据报警规则ID查询相关报警
|
||||||
|
List<AlertManagement> findByAlertRuleId(@Param("alertRuleId") Long alertRuleId);
|
||||||
|
|
||||||
|
// 根据状态查询报警
|
||||||
|
List<AlertManagement> findByStatus(@Param("status") String status);
|
||||||
|
|
||||||
|
// 根据严重程度查询报警
|
||||||
|
List<AlertManagement> findBySeverity(@Param("severity") String severity);
|
||||||
|
|
||||||
|
// 根据负责人ID查询报警
|
||||||
|
List<AlertManagement> findByAssigneeId(@Param("assigneeId") String assigneeId);
|
||||||
|
|
||||||
|
// 插入报警管理
|
||||||
|
int insert(AlertManagement alertManagement);
|
||||||
|
|
||||||
|
// 更新报警管理
|
||||||
|
int update(AlertManagement alertManagement);
|
||||||
|
|
||||||
|
// 删除报警管理
|
||||||
|
int deleteById(@Param("id") Long id);
|
||||||
|
|
||||||
|
// 确认报警
|
||||||
|
int confirmAlert(@Param("id") Long id, @Param("assigneeId") String assigneeId);
|
||||||
|
|
||||||
|
// 解决报警
|
||||||
|
int resolveAlert(@Param("id") Long id);
|
||||||
|
|
||||||
|
// 分派任务
|
||||||
|
int dispatchTask(@Param("id") Long id, @Param("dispatchedTaskId") Long dispatchedTaskId);
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
package com.water.production.mapper;
|
||||||
|
|
||||||
|
import com.water.production.entity.AlertRule;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface AlertRuleMapper {
|
||||||
|
// 查询所有报警规则
|
||||||
|
List<AlertRule> findAll();
|
||||||
|
|
||||||
|
// 根据ID查询报警规则
|
||||||
|
AlertRule findById(@Param("id") Long id);
|
||||||
|
|
||||||
|
// 根据参数查询报警规则
|
||||||
|
List<AlertRule> findByParameter(@Param("parameter") String parameter);
|
||||||
|
|
||||||
|
// 根据设备ID查询相关报警规则
|
||||||
|
List<AlertRule> findByTargetEquipmentId(@Param("targetEquipmentId") String targetEquipmentId);
|
||||||
|
|
||||||
|
// 根据区域查询报警规则
|
||||||
|
List<AlertRule> findByTargetArea(@Param("targetArea") String targetArea);
|
||||||
|
|
||||||
|
// 根据状态查询报警规则
|
||||||
|
List<AlertRule> findByStatus(@Param("status") Integer status);
|
||||||
|
|
||||||
|
// 插入报警规则
|
||||||
|
int insert(AlertRule alertRule);
|
||||||
|
|
||||||
|
// 更新报警规则
|
||||||
|
int update(AlertRule alertRule);
|
||||||
|
|
||||||
|
// 删除报警规则
|
||||||
|
int deleteById(@Param("id") Long id);
|
||||||
|
|
||||||
|
// 启用/禁用报警规则
|
||||||
|
int updateStatus(@Param("id") Long id, @Param("status") Integer status);
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package com.water.production.mapper;
|
||||||
|
|
||||||
|
import com.water.production.entity.Equipment;
|
||||||
|
import com.water.production.vo.EquipmentQueryVO;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface EquipmentMapper {
|
||||||
|
int insert(Equipment equipment);
|
||||||
|
int update(Equipment equipment);
|
||||||
|
int deleteById(Long id);
|
||||||
|
Equipment selectById(Long id);
|
||||||
|
List<Equipment> selectAll();
|
||||||
|
List<Equipment> selectByQuery(EquipmentQueryVO queryVO);
|
||||||
|
int countByQuery(EquipmentQueryVO queryVO);
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package com.water.production.mapper;
|
||||||
|
|
||||||
|
import com.water.production.entity.Notification;
|
||||||
|
import com.water.production.vo.NotificationQueryVO;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface NotificationMapper {
|
||||||
|
int insert(Notification notification);
|
||||||
|
int update(Notification notification);
|
||||||
|
int deleteById(Long id);
|
||||||
|
Notification selectById(Long id);
|
||||||
|
List<Notification> selectAll();
|
||||||
|
List<Notification> selectByQuery(NotificationQueryVO queryVO);
|
||||||
|
int countByQuery(NotificationQueryVO queryVO);
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package com.water.production.mapper;
|
||||||
|
|
||||||
|
import com.water.production.entity.Threshold;
|
||||||
|
import com.water.production.vo.ThresholdQueryVO;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface ThresholdMapper {
|
||||||
|
int insert(Threshold threshold);
|
||||||
|
int update(Threshold threshold);
|
||||||
|
int deleteById(Long id);
|
||||||
|
Threshold selectById(Long id);
|
||||||
|
List<Threshold> selectAll();
|
||||||
|
List<Threshold> selectByQuery(ThresholdQueryVO queryVO);
|
||||||
|
int countByQuery(ThresholdQueryVO queryVO);
|
||||||
|
}
|
||||||
@@ -0,0 +1,131 @@
|
|||||||
|
package com.water.production.service;
|
||||||
|
|
||||||
|
import com.water.production.entity.AlertManagement;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface AlertManagementService {
|
||||||
|
// 查询所有报警管理
|
||||||
|
List<AlertManagement> getAllAlerts();
|
||||||
|
|
||||||
|
// 根据ID获取报警
|
||||||
|
AlertManagement getAlertById(Long id);
|
||||||
|
|
||||||
|
// 根据报警规则获取相关报警
|
||||||
|
List<AlertManagement> getAlertsByRuleId(Long alertRuleId);
|
||||||
|
|
||||||
|
// 根据状态获取报警
|
||||||
|
List<AlertManagement> getAlertsByStatus(String status);
|
||||||
|
|
||||||
|
// 根据严重程度获取报警
|
||||||
|
List<AlertManagement> getAlertsBySeverity(String severity);
|
||||||
|
|
||||||
|
// 创建报警
|
||||||
|
AlertManagement createAlert(AlertManagement alert);
|
||||||
|
|
||||||
|
// 更新报警
|
||||||
|
AlertManagement updateAlert(AlertManagement alert);
|
||||||
|
|
||||||
|
// 确认报警
|
||||||
|
boolean confirmAlert(Long id, String assigneeId);
|
||||||
|
|
||||||
|
// 解决报警
|
||||||
|
boolean resolveAlert(Long id);
|
||||||
|
|
||||||
|
// 分派任务
|
||||||
|
boolean dispatchTask(Long id, Long taskId);
|
||||||
|
|
||||||
|
// 生成报警统计
|
||||||
|
AlertStatistics generateStatistics();
|
||||||
|
|
||||||
|
// 报警级别枚举
|
||||||
|
enum AlertLevel {
|
||||||
|
LOW("低", 1),
|
||||||
|
MEDIUM("中", 2),
|
||||||
|
HIGH("高", 3),
|
||||||
|
CRITICAL("严重", 4);
|
||||||
|
|
||||||
|
private String description;
|
||||||
|
private int level;
|
||||||
|
|
||||||
|
AlertLevel(String description, int level) {
|
||||||
|
this.description = description;
|
||||||
|
this.level = level;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getLevel() {
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 报警统计结果
|
||||||
|
class AlertStatistics {
|
||||||
|
private int totalAlerts;
|
||||||
|
private int resolvedAlerts;
|
||||||
|
private int pendingAlerts;
|
||||||
|
private int criticalAlerts;
|
||||||
|
private int highAlerts;
|
||||||
|
private int mediumAlerts;
|
||||||
|
private int lowAlerts;
|
||||||
|
|
||||||
|
// Getters and Setters
|
||||||
|
public int getTotalAlerts() {
|
||||||
|
return totalAlerts;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTotalAlerts(int totalAlerts) {
|
||||||
|
this.totalAlerts = totalAlerts;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getResolvedAlerts() {
|
||||||
|
return resolvedAlerts;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setResolvedAlerts(int resolvedAlerts) {
|
||||||
|
this.resolvedAlerts = resolvedAlerts;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPendingAlerts() {
|
||||||
|
return pendingAlerts;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPendingAlerts(int pendingAlerts) {
|
||||||
|
this.pendingAlerts = pendingAlerts;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCriticalAlerts() {
|
||||||
|
return criticalAlerts;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCriticalAlerts(int criticalAlerts) {
|
||||||
|
this.criticalAlerts = criticalAlerts;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getHighAlerts() {
|
||||||
|
return highAlerts;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHighAlerts(int highAlerts) {
|
||||||
|
this.highAlerts = highAlerts;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMediumAlerts() {
|
||||||
|
return mediumAlerts;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMediumAlerts(int mediumAlerts) {
|
||||||
|
this.mediumAlerts = mediumAlerts;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getLowAlerts() {
|
||||||
|
return lowAlerts;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLowAlerts(int lowAlerts) {
|
||||||
|
this.lowAlerts = lowAlerts;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
package com.water.production.service;
|
||||||
|
|
||||||
|
import com.water.production.entity.AlertRule;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface AlertRuleService {
|
||||||
|
// 查询所有报警规则
|
||||||
|
List<AlertRule> getAllAlertRules();
|
||||||
|
|
||||||
|
// 根据ID获取报警规则
|
||||||
|
AlertRule getAlertRuleById(Long id);
|
||||||
|
|
||||||
|
// 根据参数获取报警规则
|
||||||
|
List<AlertRule> getAlertRulesByParameter(String parameter);
|
||||||
|
|
||||||
|
// 根据设备获取报警规则
|
||||||
|
List<AlertRule> getAlertRulesByEquipment(String equipmentId);
|
||||||
|
|
||||||
|
// 根据区域获取报警规则
|
||||||
|
List<AlertRule> getAlertRulesByArea(String area);
|
||||||
|
|
||||||
|
// 创建报警规则
|
||||||
|
AlertRule createAlertRule(AlertRule alertRule);
|
||||||
|
|
||||||
|
// 更新报警规则
|
||||||
|
AlertRule updateAlertRule(AlertRule alertRule);
|
||||||
|
|
||||||
|
// 删除报警规则
|
||||||
|
boolean deleteAlertRule(Long id);
|
||||||
|
|
||||||
|
// 启用报警规则
|
||||||
|
boolean enableAlertRule(Long id);
|
||||||
|
|
||||||
|
// 禁用报警规则
|
||||||
|
boolean disableAlertRule(Long id);
|
||||||
|
|
||||||
|
// 验证报警规则
|
||||||
|
boolean validateAlertRule(AlertRule alertRule);
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package com.water.production.service;
|
||||||
|
|
||||||
|
import com.water.production.entity.Notification;
|
||||||
|
import com.water.production.vo.NotificationQueryVO;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface NotificationService {
|
||||||
|
int createNotification(Notification notification);
|
||||||
|
int updateNotification(Notification notification);
|
||||||
|
int deleteNotification(Long id);
|
||||||
|
Notification getNotificationById(Long id);
|
||||||
|
List<Notification> getAllNotifications();
|
||||||
|
List<Notification> getNotificationsByQuery(NotificationQueryVO queryVO);
|
||||||
|
int getNotificationCountByQuery(NotificationQueryVO queryVO);
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package com.water.production.service;
|
||||||
|
|
||||||
|
import com.water.production.entity.Threshold;
|
||||||
|
import com.water.production.vo.ThresholdQueryVO;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface ThresholdService {
|
||||||
|
int createThreshold(Threshold threshold);
|
||||||
|
int updateThreshold(Threshold threshold);
|
||||||
|
int deleteThreshold(Long id);
|
||||||
|
Threshold getThresholdById(Long id);
|
||||||
|
List<Threshold> getAllThresholds();
|
||||||
|
List<Threshold> getThresholdsByQuery(ThresholdQueryVO queryVO);
|
||||||
|
int getThresholdCountByQuery(ThresholdQueryVO queryVO);
|
||||||
|
}
|
||||||
+187
@@ -0,0 +1,187 @@
|
|||||||
|
package com.water.production.service.impl;
|
||||||
|
|
||||||
|
import com.water.production.entity.AlertManagement;
|
||||||
|
import com.water.production.mapper.AlertManagementMapper;
|
||||||
|
import com.water.production.service.AlertManagementService;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
@Transactional
|
||||||
|
public class AlertManagementServiceImpl implements AlertManagementService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AlertManagementMapper alertManagementMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<AlertManagement> getAllAlerts() {
|
||||||
|
return alertManagementMapper.findAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AlertManagement getAlertById(Long id) {
|
||||||
|
if (id == null) {
|
||||||
|
throw new IllegalArgumentException("报警ID不能为空");
|
||||||
|
}
|
||||||
|
AlertManagement alert = alertManagementMapper.findById(id);
|
||||||
|
if (alert == null) {
|
||||||
|
throw new RuntimeException("未找到ID为 " + id + " 的报警");
|
||||||
|
}
|
||||||
|
return alert;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<AlertManagement> getAlertsByRuleId(Long alertRuleId) {
|
||||||
|
if (alertRuleId == null) {
|
||||||
|
throw new IllegalArgumentException("报警规则ID不能为空");
|
||||||
|
}
|
||||||
|
return alertManagementMapper.findByAlertRuleId(alertRuleId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<AlertManagement> getAlertsByStatus(String status) {
|
||||||
|
if (!StringUtils.hasText(status)) {
|
||||||
|
throw new IllegalArgumentException("状态不能为空");
|
||||||
|
}
|
||||||
|
return alertManagementMapper.findByStatus(status);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<AlertManagement> getAlertsBySeverity(String severity) {
|
||||||
|
if (!StringUtils.hasText(severity)) {
|
||||||
|
throw new IllegalArgumentException("严重程度不能为空");
|
||||||
|
}
|
||||||
|
return alertManagementMapper.findBySeverity(severity);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AlertManagement createAlert(AlertManagement alert) {
|
||||||
|
if (alert == null) {
|
||||||
|
throw new IllegalArgumentException("报警不能为空");
|
||||||
|
}
|
||||||
|
|
||||||
|
alert.setCreateTime(LocalDateTime.now());
|
||||||
|
alert.setUpdateTime(LocalDateTime.now());
|
||||||
|
alert.setStatus("PENDING"); // 默认待确认
|
||||||
|
|
||||||
|
int result = alertManagementMapper.insert(alert);
|
||||||
|
if (result <= 0) {
|
||||||
|
throw new RuntimeException("创建报警失败");
|
||||||
|
}
|
||||||
|
|
||||||
|
return alert;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AlertManagement updateAlert(AlertManagement alert) {
|
||||||
|
if (alert == null || alert.getId() == null) {
|
||||||
|
throw new IllegalArgumentException("报警和ID不能为空");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查报警是否存在
|
||||||
|
AlertManagement existingAlert = getAlertById(alert.getId());
|
||||||
|
if (existingAlert == null) {
|
||||||
|
throw new RuntimeException("未找到ID为 " + alert.getId() + " 的报警");
|
||||||
|
}
|
||||||
|
|
||||||
|
alert.setUpdateTime(LocalDateTime.now());
|
||||||
|
|
||||||
|
int result = alertManagementMapper.update(alert);
|
||||||
|
if (result <= 0) {
|
||||||
|
throw new RuntimeException("更新报警失败");
|
||||||
|
}
|
||||||
|
|
||||||
|
return alert;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean confirmAlert(Long id, String assigneeId) {
|
||||||
|
if (id == null || !StringUtils.hasText(assigneeId)) {
|
||||||
|
throw new IllegalArgumentException("报警ID和负责人ID不能为空");
|
||||||
|
}
|
||||||
|
|
||||||
|
int result = alertManagementMapper.confirmAlert(id, assigneeId);
|
||||||
|
return result > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean resolveAlert(Long id) {
|
||||||
|
if (id == null) {
|
||||||
|
throw new IllegalArgumentException("报警ID不能为空");
|
||||||
|
}
|
||||||
|
|
||||||
|
AlertManagement existingAlert = getAlertById(id);
|
||||||
|
if (existingAlert == null) {
|
||||||
|
throw new RuntimeException("未找到ID为 " + id + " 的报警");
|
||||||
|
}
|
||||||
|
|
||||||
|
int result = alertManagementMapper.resolveAlert(id);
|
||||||
|
return result > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean dispatchTask(Long id, Long taskId) {
|
||||||
|
if (id == null || taskId == null) {
|
||||||
|
throw new IllegalArgumentException("报警ID和任务ID不能为空");
|
||||||
|
}
|
||||||
|
|
||||||
|
int result = alertManagementMapper.dispatchTask(id, taskId);
|
||||||
|
return result > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AlertStatistics generateStatistics() {
|
||||||
|
AlertStatistics statistics = new AlertStatistics();
|
||||||
|
|
||||||
|
// 获取所有报警
|
||||||
|
List<AlertManagement> allAlerts = getAllAlerts();
|
||||||
|
statistics.setTotalAlerts(allAlerts.size());
|
||||||
|
|
||||||
|
// 统计已解决和待处理的报警
|
||||||
|
int resolvedCount = 0;
|
||||||
|
int pendingCount = 0;
|
||||||
|
int criticalCount = 0;
|
||||||
|
int highCount = 0;
|
||||||
|
int mediumCount = 0;
|
||||||
|
int lowCount = 0;
|
||||||
|
|
||||||
|
for (AlertManagement alert : allAlerts) {
|
||||||
|
if ("RESOLVED".equals(alert.getStatus())) {
|
||||||
|
resolvedCount++;
|
||||||
|
} else {
|
||||||
|
pendingCount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (alert.getSeverity() != null) {
|
||||||
|
switch (alert.getSeverity().toUpperCase()) {
|
||||||
|
case "CRITICAL":
|
||||||
|
criticalCount++;
|
||||||
|
break;
|
||||||
|
case "HIGH":
|
||||||
|
highCount++;
|
||||||
|
break;
|
||||||
|
case "MEDIUM":
|
||||||
|
mediumCount++;
|
||||||
|
break;
|
||||||
|
case "LOW":
|
||||||
|
lowCount++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
statistics.setResolvedAlerts(resolvedCount);
|
||||||
|
statistics.setPendingAlerts(pendingCount);
|
||||||
|
statistics.setCriticalAlerts(criticalCount);
|
||||||
|
statistics.setHighAlerts(highCount);
|
||||||
|
statistics.setMediumAlerts(mediumCount);
|
||||||
|
statistics.setLowAlerts(lowCount);
|
||||||
|
|
||||||
|
return statistics;
|
||||||
|
}
|
||||||
|
}
|
||||||
+179
@@ -0,0 +1,179 @@
|
|||||||
|
package com.water.production.service.impl;
|
||||||
|
|
||||||
|
import com.water.production.entity.AlertRule;
|
||||||
|
import com.water.production.mapper.AlertRuleMapper;
|
||||||
|
import com.water.production.service.AlertRuleService;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
@Transactional
|
||||||
|
public class AlertRuleServiceImpl implements AlertRuleService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AlertRuleMapper alertRuleMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<AlertRule> getAllAlertRules() {
|
||||||
|
return alertRuleMapper.findAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AlertRule getAlertRuleById(Long id) {
|
||||||
|
if (id == null) {
|
||||||
|
throw new IllegalArgumentException("报警规则ID不能为空");
|
||||||
|
}
|
||||||
|
AlertRule rule = alertRuleMapper.findById(id);
|
||||||
|
if (rule == null) {
|
||||||
|
throw new RuntimeException("未找到ID为 " + id + " 的报警规则");
|
||||||
|
}
|
||||||
|
return rule;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<AlertRule> getAlertRulesByParameter(String parameter) {
|
||||||
|
if (!StringUtils.hasText(parameter)) {
|
||||||
|
throw new IllegalArgumentException("参数不能为空");
|
||||||
|
}
|
||||||
|
return alertRuleMapper.findByParameter(parameter);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<AlertRule> getAlertRulesByEquipment(String equipmentId) {
|
||||||
|
if (!StringUtils.hasText(equipmentId)) {
|
||||||
|
throw new IllegalArgumentException("设备ID不能为空");
|
||||||
|
}
|
||||||
|
return alertRuleMapper.findByTargetEquipmentId(equipmentId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<AlertRule> getAlertRulesByArea(String area) {
|
||||||
|
if (!StringUtils.hasText(area)) {
|
||||||
|
throw new IllegalArgumentException("区域不能为空");
|
||||||
|
}
|
||||||
|
return alertRuleMapper.findByTargetArea(area);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AlertRule createAlertRule(AlertRule alertRule) {
|
||||||
|
if (alertRule == null) {
|
||||||
|
throw new IllegalArgumentException("报警规则不能为空");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!validateAlertRule(alertRule)) {
|
||||||
|
throw new IllegalArgumentException("报警规则验证失败");
|
||||||
|
}
|
||||||
|
|
||||||
|
alertRule.setCreateTime(LocalDateTime.now());
|
||||||
|
alertRule.setUpdateTime(LocalDateTime.now());
|
||||||
|
alertRule.setStatus(1); // 默认启用
|
||||||
|
|
||||||
|
int result = alertRuleMapper.insert(alertRule);
|
||||||
|
if (result <= 0) {
|
||||||
|
throw new RuntimeException("创建报警规则失败");
|
||||||
|
}
|
||||||
|
|
||||||
|
return alertRule;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AlertRule updateAlertRule(AlertRule alertRule) {
|
||||||
|
if (alertRule == null || alertRule.getId() == null) {
|
||||||
|
throw new IllegalArgumentException("报警规则和ID不能为空");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查规则是否存在
|
||||||
|
AlertRule existingRule = getAlertRuleById(alertRule.getId());
|
||||||
|
if (existingRule == null) {
|
||||||
|
throw new RuntimeException("未找到ID为 " + alertRule.getId() + " 的报警规则");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!validateAlertRule(alertRule)) {
|
||||||
|
throw new IllegalArgumentException("报警规则验证失败");
|
||||||
|
}
|
||||||
|
|
||||||
|
alertRule.setUpdateTime(LocalDateTime.now());
|
||||||
|
|
||||||
|
int result = alertRuleMapper.update(alertRule);
|
||||||
|
if (result <= 0) {
|
||||||
|
throw new RuntimeException("更新报警规则失败");
|
||||||
|
}
|
||||||
|
|
||||||
|
return alertRule;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean deleteAlertRule(Long id) {
|
||||||
|
if (id == null) {
|
||||||
|
throw new IllegalArgumentException("报警规则ID不能为空");
|
||||||
|
}
|
||||||
|
|
||||||
|
AlertRule existingRule = getAlertRuleById(id);
|
||||||
|
if (existingRule == null) {
|
||||||
|
throw new RuntimeException("未找到ID为 " + id + " 的报警规则");
|
||||||
|
}
|
||||||
|
|
||||||
|
int result = alertRuleMapper.deleteById(id);
|
||||||
|
return result > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean enableAlertRule(Long id) {
|
||||||
|
if (id == null) {
|
||||||
|
throw new IllegalArgumentException("报警规则ID不能为空");
|
||||||
|
}
|
||||||
|
|
||||||
|
int result = alertRuleMapper.updateStatus(id, 1);
|
||||||
|
return result > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean disableAlertRule(Long id) {
|
||||||
|
if (id == null) {
|
||||||
|
throw new IllegalArgumentException("报警规则ID不能为空");
|
||||||
|
}
|
||||||
|
|
||||||
|
int result = alertRuleMapper.updateStatus(id, 0);
|
||||||
|
return result > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean validateAlertRule(AlertRule alertRule) {
|
||||||
|
if (alertRule == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!StringUtils.hasText(alertRule.getName())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!StringUtils.hasText(alertRule.getParameter())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查阈值关系
|
||||||
|
if (alertRule.getMinValue() != null && alertRule.getMaxValue() != null) {
|
||||||
|
if (alertRule.getMinValue() >= alertRule.getMaxValue()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (alertRule.getWarningValue() != null && alertRule.getCriticalValue() != null) {
|
||||||
|
if (alertRule.getWarningValue() >= alertRule.getCriticalValue()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (alertRule.getSeverityLevel() != null &&
|
||||||
|
(alertRule.getSeverityLevel() < 1 || alertRule.getSeverityLevel() > 4)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user