DeleteDeviceThresholdAlarm
DeleteAreaThresholdAlarm
This commit is contained in:
@@ -32,12 +32,17 @@ type ThresholdAlarmService interface {
|
||||
UpdateDeviceThresholdAlarm(ctx context.Context, taskID int, req *dto.UpdateDeviceThresholdAlarmDTO) error
|
||||
// GetDeviceThresholdAlarm 根据ID获取一个设备阈值告警任务。
|
||||
GetDeviceThresholdAlarm(ctx context.Context, taskID int) (*dto.DeviceThresholdAlarmDTO, error)
|
||||
// DeleteDeviceThresholdAlarm 删除一个设备阈值告警。
|
||||
DeleteDeviceThresholdAlarm(ctx context.Context, taskID int, req *dto.DeleteDeviceThresholdAlarmDTO) error
|
||||
|
||||
// CreateAreaThresholdAlarm 创建一个区域阈值告警。
|
||||
CreateAreaThresholdAlarm(ctx context.Context, req *dto.CreateAreaThresholdAlarmDTO) error
|
||||
// UpdateAreaThresholdAlarm 更新一个区域阈值告警。
|
||||
UpdateAreaThresholdAlarm(ctx context.Context, taskID int, req *dto.UpdateAreaThresholdAlarmDTO) error
|
||||
// GetAreaThresholdAlarm 根据ID获取一个区域阈值告警任务。
|
||||
GetAreaThresholdAlarm(ctx context.Context, taskID int) (*dto.AreaThresholdAlarmDTO, error)
|
||||
// DeleteAreaThresholdAlarm 实现了删除一个区域阈值告警的逻辑。
|
||||
DeleteAreaThresholdAlarm(ctx context.Context, taskID int) error
|
||||
}
|
||||
|
||||
// thresholdAlarmService 是 ThresholdAlarmService 接口的具体实现。
|
||||
@@ -48,6 +53,7 @@ type thresholdAlarmService struct {
|
||||
|
||||
alarmRepo repository.AlarmRepository
|
||||
planRepo repository.PlanRepository
|
||||
areaRepo repository.AreaControllerRepository
|
||||
deviceRepo repository.DeviceRepository
|
||||
}
|
||||
|
||||
@@ -57,6 +63,7 @@ func NewThresholdAlarmService(ctx context.Context,
|
||||
planService plan.Service,
|
||||
alarmRepo repository.AlarmRepository,
|
||||
planRepo repository.PlanRepository,
|
||||
areaRepo repository.AreaControllerRepository,
|
||||
deviceRepo repository.DeviceRepository,
|
||||
) ThresholdAlarmService {
|
||||
return &thresholdAlarmService{
|
||||
@@ -65,6 +72,7 @@ func NewThresholdAlarmService(ctx context.Context,
|
||||
planService: planService,
|
||||
alarmRepo: alarmRepo,
|
||||
planRepo: planRepo,
|
||||
areaRepo: areaRepo,
|
||||
deviceRepo: deviceRepo,
|
||||
}
|
||||
}
|
||||
@@ -291,6 +299,77 @@ func (s *thresholdAlarmService) GetDeviceThresholdAlarm(ctx context.Context, tas
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
// DeleteDeviceThresholdAlarm 实现了删除一个设备阈值告警的逻辑。
|
||||
func (s *thresholdAlarmService) DeleteDeviceThresholdAlarm(ctx context.Context, taskID int, req *dto.DeleteDeviceThresholdAlarmDTO) error {
|
||||
serviceCtx, logger := logs.Trace(ctx, s.ctx, "DeleteDeviceThresholdAlarm")
|
||||
|
||||
// 获取待删除任务并校验
|
||||
deleteTask, err := s.planRepo.FindTaskByID(serviceCtx, taskID)
|
||||
if err != nil {
|
||||
return fmt.Errorf("获取任务失败: %w", err)
|
||||
}
|
||||
if deleteTask.Type != models.TaskTypeDeviceThresholdCheck {
|
||||
return fmt.Errorf("任务 %d 不是一个设备阈值检查任务", taskID)
|
||||
}
|
||||
var deviceParams task.DeviceThresholdCheckParams
|
||||
if err := deleteTask.ParseParameters(&deviceParams); err != nil {
|
||||
return fmt.Errorf("任务 %d: 解析参数失败: %w", taskID, err)
|
||||
}
|
||||
|
||||
// 获得任务对应设备对应区域主控
|
||||
device, err := s.deviceRepo.FindByID(serviceCtx, deviceParams.DeviceID)
|
||||
if err != nil {
|
||||
return fmt.Errorf("获取设备 %d 失败: %w", deviceParams.DeviceID, err)
|
||||
}
|
||||
area, err := s.areaRepo.FindByID(serviceCtx, device.AreaControllerID)
|
||||
if err != nil {
|
||||
return fmt.Errorf("获取区域 %d 失败: %w", device.AreaControllerID, err)
|
||||
}
|
||||
|
||||
// 获取健康检查计划任务列表
|
||||
plan, err := s.planRepo.GetSystemPlanByName(serviceCtx, models.PlanNamePeriodicSystemHealthCheck)
|
||||
if err != nil {
|
||||
return fmt.Errorf("获取系统健康检查计划失败: %w", err)
|
||||
}
|
||||
if plan == nil {
|
||||
logger.Panicf("系统计划 %v 不存在", models.PlanNamePeriodicSystemHealthCheck)
|
||||
}
|
||||
|
||||
taskIndexToDelete := -1
|
||||
for i, t := range plan.Tasks {
|
||||
if t.ID == taskID {
|
||||
taskIndexToDelete = i
|
||||
}
|
||||
if t.Type == models.TaskTypeAreaCollectorThresholdCheck {
|
||||
var areaParams task.AreaThresholdCheckParams
|
||||
if err := t.ParseParameters(&areaParams); err != nil {
|
||||
return fmt.Errorf("任务 %d: 解析参数失败: %w", t.ID, err)
|
||||
}
|
||||
if areaParams.AreaControllerID == area.ID && areaParams.SensorType == deviceParams.SensorType {
|
||||
for ia, e := range areaParams.ExcludeDeviceIDs {
|
||||
if e == deviceParams.DeviceID {
|
||||
areaParams.ExcludeDeviceIDs = append(areaParams.ExcludeDeviceIDs[:ia], areaParams.ExcludeDeviceIDs[ia+1:]...)
|
||||
continue
|
||||
}
|
||||
}
|
||||
err = plan.Tasks[i].SaveParameters(areaParams)
|
||||
if err != nil {
|
||||
return fmt.Errorf("任务 %d: 保存参数失败: %w", t.ID, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if taskIndexToDelete == -1 {
|
||||
return fmt.Errorf("任务 %d 在系统计划中未找到", taskID)
|
||||
}
|
||||
plan.Tasks = append(plan.Tasks[:taskIndexToDelete], plan.Tasks[taskIndexToDelete+1:]...)
|
||||
|
||||
plan.ReorderSteps()
|
||||
_, err = s.planService.UpdatePlan(serviceCtx, plan, models.PlanTypeSystem)
|
||||
return err
|
||||
}
|
||||
|
||||
// CreateAreaThresholdAlarm 实现了创建一个区域阈值告警的逻辑。
|
||||
func (s *thresholdAlarmService) CreateAreaThresholdAlarm(ctx context.Context, req *dto.CreateAreaThresholdAlarmDTO) error {
|
||||
serviceCtx, logger := logs.Trace(ctx, s.ctx, "CreateAreaThresholdAlarm")
|
||||
@@ -442,3 +521,37 @@ func (s *thresholdAlarmService) GetAreaThresholdAlarm(ctx context.Context, taskI
|
||||
}
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
// DeleteAreaThresholdAlarm 实现了删除一个区域阈值告警的逻辑。
|
||||
func (s *thresholdAlarmService) DeleteAreaThresholdAlarm(ctx context.Context, taskID int) error {
|
||||
serviceCtx, logger := logs.Trace(ctx, s.ctx, "DeleteAreaThresholdAlarm")
|
||||
|
||||
// 获取健康检查计划任务列表
|
||||
plan, err := s.planRepo.GetSystemPlanByName(serviceCtx, models.PlanNamePeriodicSystemHealthCheck)
|
||||
if err != nil {
|
||||
return fmt.Errorf("获取系统健康检查计划失败: %w", err)
|
||||
}
|
||||
if plan == nil {
|
||||
logger.Panicf("系统计划 %v 不存在", models.PlanNamePeriodicSystemHealthCheck)
|
||||
}
|
||||
|
||||
// 找到这个任务并删掉
|
||||
deleteTaskNum := -1
|
||||
for i, t := range plan.Tasks {
|
||||
if t.Type != models.TaskTypeAreaCollectorThresholdCheck {
|
||||
continue
|
||||
}
|
||||
if t.ID != taskID {
|
||||
continue
|
||||
}
|
||||
deleteTaskNum = i
|
||||
}
|
||||
|
||||
if deleteTaskNum == -1 {
|
||||
return fmt.Errorf("任务 %d: 不存在或类型不匹配", taskID)
|
||||
}
|
||||
plan.Tasks = append(plan.Tasks[:deleteTaskNum], plan.Tasks[deleteTaskNum+1:]...)
|
||||
plan.ReorderSteps()
|
||||
_, err = s.planService.UpdatePlan(serviceCtx, plan, models.PlanTypeSystem)
|
||||
return err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user