实现设备阈值检查任务
This commit is contained in:
@@ -25,6 +25,21 @@ type ActiveAlarmListOptions struct {
|
||||
|
||||
// AlarmRepository 定义了对告警模型的数据库操作接口
|
||||
type AlarmRepository interface {
|
||||
// CreateActiveAlarm 创建一条新的活跃告警记录
|
||||
CreateActiveAlarm(ctx context.Context, alarm *models.ActiveAlarm) error
|
||||
|
||||
// IsAlarmActiveInUse 检查具有相同来源和告警代码的告警当前是否处于活跃表中
|
||||
IsAlarmActiveInUse(ctx context.Context, sourceType models.AlarmSourceType, sourceID uint, alarmCode models.AlarmCode) (bool, error)
|
||||
|
||||
// GetActiveAlarmByUniqueFieldsTx 在指定事务中根据唯一业务键获取一个活跃告警
|
||||
GetActiveAlarmByUniqueFieldsTx(ctx context.Context, tx *gorm.DB, sourceType models.AlarmSourceType, sourceID uint, alarmCode models.AlarmCode) (*models.ActiveAlarm, error)
|
||||
|
||||
// CreateHistoricalAlarmTx 在指定事务中创建一条历史告警记录
|
||||
CreateHistoricalAlarmTx(ctx context.Context, tx *gorm.DB, alarm *models.HistoricalAlarm) error
|
||||
|
||||
// DeleteActiveAlarmTx 在指定事务中根据主键 ID 删除一个活跃告警
|
||||
DeleteActiveAlarmTx(ctx context.Context, tx *gorm.DB, id uint) error
|
||||
|
||||
// ListActiveAlarms 支持分页和过滤的活跃告警列表查询。
|
||||
// 返回活跃告警列表、总记录数和错误。
|
||||
ListActiveAlarms(ctx context.Context, opts ActiveAlarmListOptions, page, pageSize int) ([]models.ActiveAlarm, int64, error)
|
||||
@@ -59,6 +74,48 @@ func NewGormAlarmRepository(ctx context.Context, db *gorm.DB) AlarmRepository {
|
||||
}
|
||||
}
|
||||
|
||||
// CreateActiveAlarm 创建一条新的活跃告警记录
|
||||
func (r *gormAlarmRepository) CreateActiveAlarm(ctx context.Context, alarm *models.ActiveAlarm) error {
|
||||
repoCtx := logs.AddFuncName(ctx, r.ctx, "CreateActiveAlarm")
|
||||
return r.db.WithContext(repoCtx).Create(alarm).Error
|
||||
}
|
||||
|
||||
// IsAlarmActive 检查具有相同来源和告警代码的告警当前是否处于活跃状态
|
||||
func (r *gormAlarmRepository) IsAlarmActiveInUse(ctx context.Context, sourceType models.AlarmSourceType, sourceID uint, alarmCode models.AlarmCode) (bool, error) {
|
||||
repoCtx := logs.AddFuncName(ctx, r.ctx, "IsAlarmActiveInUse")
|
||||
var count int64
|
||||
err := r.db.WithContext(repoCtx).Model(&models.ActiveAlarm{}).
|
||||
Where("source_type = ? AND source_id = ? AND alarm_code = ?", sourceType, sourceID, alarmCode).
|
||||
Count(&count).Error
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
return count > 0, nil
|
||||
}
|
||||
|
||||
// GetActiveAlarmByUniqueFieldsTx 在指定事务中根据唯一业务键获取一个活跃告警
|
||||
func (r *gormAlarmRepository) GetActiveAlarmByUniqueFieldsTx(ctx context.Context, tx *gorm.DB, sourceType models.AlarmSourceType, sourceID uint, alarmCode models.AlarmCode) (*models.ActiveAlarm, error) {
|
||||
repoCtx := logs.AddFuncName(ctx, r.ctx, "GetActiveAlarmByUniqueFieldsTx")
|
||||
var alarm models.ActiveAlarm
|
||||
err := tx.WithContext(repoCtx).
|
||||
Where("source_type = ? AND source_id = ? AND alarm_code = ?", sourceType, sourceID, alarmCode).
|
||||
First(&alarm).Error
|
||||
return &alarm, err
|
||||
}
|
||||
|
||||
// CreateHistoricalAlarmTx 在指定事务中创建一条历史告警记录
|
||||
func (r *gormAlarmRepository) CreateHistoricalAlarmTx(ctx context.Context, tx *gorm.DB, alarm *models.HistoricalAlarm) error {
|
||||
repoCtx := logs.AddFuncName(ctx, r.ctx, "CreateHistoricalAlarmTx")
|
||||
return tx.WithContext(repoCtx).Create(alarm).Error
|
||||
}
|
||||
|
||||
// DeleteActiveAlarmTx 在指定事务中根据主键 ID 删除一个活跃告警
|
||||
func (r *gormAlarmRepository) DeleteActiveAlarmTx(ctx context.Context, tx *gorm.DB, id uint) error {
|
||||
repoCtx := logs.AddFuncName(ctx, r.ctx, "DeleteActiveAlarmTx")
|
||||
// 使用 Unscoped() 确保执行物理删除,而不是软删除
|
||||
return tx.WithContext(repoCtx).Unscoped().Delete(&models.ActiveAlarm{}, id).Error
|
||||
}
|
||||
|
||||
// ListActiveAlarms 实现了分页和过滤查询活跃告警记录的功能
|
||||
func (r *gormAlarmRepository) ListActiveAlarms(ctx context.Context, opts ActiveAlarmListOptions, page, pageSize int) ([]models.ActiveAlarm, int64, error) {
|
||||
repoCtx := logs.AddFuncName(ctx, r.ctx, "ListActiveAlarms")
|
||||
|
||||
Reference in New Issue
Block a user