Files
pig-farm-controller/internal/infra/models/alarm.go

53 lines
2.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package models
import (
"time"
"gorm.io/gorm"
)
// ActiveAlarm 活跃告警
// 活跃告警会被更新(如确认状态),因此保留 gorm.Model 以包含所有标准字段。
type ActiveAlarm struct {
gorm.Model
FarmID uint `gorm:"not null;comment:猪场ID" json:"farm_id,omitempty"`
DeviceID uint `gorm:"not null;comment:设备ID" json:"device_id,omitempty"`
AlarmType string `gorm:"comment:告警类型" json:"alarm_type,omitempty"`
AlarmLevel SeverityLevel `gorm:"comment:告警级别" json:"alarm_level,omitempty"`
AlarmContent string `gorm:"comment:告警内容描述" json:"alarm_content,omitempty"`
TriggerTime time.Time `gorm:"not null;comment:告警触发时间" json:"trigger_time"`
IsAcknowledged bool `gorm:"default:false;comment:是否已确认" json:"is_acknowledged,omitempty"`
AcknowledgedBy string `gorm:"comment:确认人" json:"acknowledged_by,omitempty"`
// 使用指针类型 *time.Time 来表示可为空的确认时间
AcknowledgedTime *time.Time `gorm:"comment:确认时间" json:"acknowledged_time,omitempty"`
}
// TableName 指定 ActiveAlarm 结构体对应的数据库表名
func (ActiveAlarm) TableName() string {
return "active_alarms"
}
// HistoricalAlarm 历史告警
// 历史告警是不可变归档数据,我们移除 gorm.Model并手动定义字段。
// ID 和 CreatedAt 共同构成联合主键,以满足 TimescaleDB 超表的要求。
type HistoricalAlarm struct {
// 手动定义主键ID 仍然自增
ID uint `gorm:"primaryKey;autoIncrement;comment:主键ID" json:"id,omitempty"`
FarmID uint `gorm:"not null;comment:猪场ID" json:"farm_id,omitempty"`
DeviceID uint `gorm:"not null;comment:设备ID" json:"device_id,omitempty"`
AlarmType string `gorm:"comment:告警类型" json:"alarm_type,omitempty"`
AlarmLevel SeverityLevel `gorm:"comment:告警级别" json:"alarm_level,omitempty"`
AlarmContent string `gorm:"comment:告警内容描述" json:"alarm_content,omitempty"`
TriggerTime time.Time `gorm:"not null;comment:告警触发时间" json:"trigger_time"`
ResolveTime time.Time `gorm:"not null;comment:告警解决时间" json:"resolve_time"`
ResolveMethod string `gorm:"comment:告警解决方式" json:"resolve_method,omitempty"`
ResolvedBy string `gorm:"comment:告警解决人" json:"resolved_by,omitempty"`
// 将 CreatedAt 作为联合主键的一部分,用于 TimescaleDB 分区
CreatedAt time.Time `gorm:"primaryKey;comment:创建时间" json:"created_at"`
}
// TableName 指定 HistoricalAlarm 结构体对应的数据库表名
func (HistoricalAlarm) TableName() string {
return "historical_alarms"
}