报警记录数据模型(core/repositories/models/alarms)
本文说明 国标/平台报警落库记录 core/repositories/models/alarms 包中的职责、与项目各层的对接方式,以及字段含义与枚举对应关系。
1. 在项目中承担的作用
该模型描述 单条报警事件 在业务库中的持久化形态:数据落在表 sk-alarms。alarmMethod / alarmType / eventType 与国标 XML 中的报警分类对应;deviceUniqueId 在实现上多指向 上报方设备 ID(与 VSS AlarmLogic 中通道、From 对齐逻辑一致,详见报警文档 §6)。列表、删除、创建走 DeviceService RPC,由管理端查询与运维清理。
| 层级 | 作用 |
|---|---|
| 数据层 | core/app/sev/db/internal/svc/init_database.go 对 alarms.Alarms 执行 AutoMigrate;ServiceContext 注入 AlarmsModel。 |
| RPC / db 服务 | core/app/sev/db/internal/logic/deviceservice/alarm_*.go:alarm_list_logic、alarm_delete_logic、alarm_create_logic 等。 |
| HTTP / backend | core/app/sev/backend/internal/handler/device/alarms(如 /device/alarm/list、删除等)。 |
| 信令 / 写库 | VSS core/app/sev/vss/internal/logic/gbs_sip/alarm.go 解析 SIP MESSAGE 后映射 alarms.AlarmType_* 等常量并 Device.AlarmCreate RPC 落库。 |
| 级联转发 | 同文件中结合 CascadeRecords 与通道 CascadeChannelUniqueId 判断是否向上级平台转发(与 7.4 平台级联数据模型 中的 relations 匹配)。 |
2. 表与字段:数据库列 ↔ Go ↔ JSON
实体 Alarms 映射表 sk-alarms(TableName() 返回值)。
| 字段 | 含义 | 说明 |
|---|---|---|
id | 主键 | 自增。 |
deviceUniqueId | 设备侧关联 ID | CHAR(70),与报警流水线中设备/通道解析结果对应;列表可按此筛选。 |
alarmMethod | 报警方式 | uint,与 AlarmMethods(电话 / 设备 / 短信 / GPS / 视频 / 设备故障 / 其他)一致。 |
alarmPriority | 报警级别 | uint,与 AlarmPriorities(一至四级警情)一致。 |
alarmDescription | 报警描述 | 文本摘要。 |
longitude | 经度 | 字符串存储(注意与 channels 表浮点经纬度不同)。 |
latitude | 纬度 | 字符串存储。 |
alarmType | 报警类型 | uint,与 AlarmTypes 中 AlarmType_1~AlarmType_19 约定一致(视频丢失、智能分析类、存储故障等,详见 variables.go)。 |
eventType | 类型扩展参数 | uint,与 EventTypes(如进入/离开区域)等扩展语义一致。 |
snapshot | 快照 | URL 或路径。 |
video | 关联录像 | URL 或路径。 |
createdAt | 报警时间 | 毫秒时间戳;仅插入时在 Correction 中写入。 |
3. Item 与 Alarms 的字段对应
Item 在 data.go 中定义:
- 内嵌
*Alarms:JSON 与Alarms一致,无额外 API 专用切片字段。 UseDBCache:json:"-"。
更新场景下,CheckMap 校验 key 属于 variables.Columns;不对各字段做 JSON 再序列化(与带 depIds 类模型不同)。
4. 列名常量(variables.go)
| 常量 | 数据库列 |
|---|---|
ColumnID | id |
ColumnDeviceUniqueId | deviceUniqueId |
ColumnAlarmMethod | alarmMethod |
ColumnAlarmPriority | alarmPriority |
ColumnAlarmDescription | alarmDescription |
ColumnLongitude | longitude |
ColumnLatitude | latitude |
ColumnAlarmType | alarmType |
ColumnEventType | eventType |
ColumnSnapshot | snapshot |
ColumnVideo | video |
ColumnCreatedAt | createdAt |
PrimaryId 为 "id"。
5. 行为与联调注意点
- 枚举:
alarmType与国标 AlarmMethod + Info.AlarmType 组合在 VSS 侧映射为单一AlarmType_*常量,联调应对照3.1文档中的表格与alarm.go分支。 - 无缓存:查询列表为直连 DB(仍受连接池与 DB 层逻辑影响)。
- 经纬度类型:本条记录为 字符串;地图打点若需浮点,需在业务层解析。
7. 相关代码路径
- 模型包:
core/repositories/models/alarms/ - DB 迁移与模型注入:
core/app/sev/db/internal/svc/init_database.go、service_context.go - 报警 RPC:
core/app/sev/db/internal/logic/deviceservice/alarm_*.go - HTTP:
core/app/sev/backend/internal/handler/device/alarms/ - 国标上报与类型映射:
core/app/sev/vss/internal/logic/gbs_sip/alarm.go