设备数据模型core/repositories/models/devices本文说明接入设备流媒体源、RTMP、ONVIF、GB28181、EHOME 等core/repositories/models/devices包中的职责、与项目各层的对接方式以及字段含义与 API/库形态对应关系。项目源码地址https://github.com/openskeye/go-vss姊妹篇7.2 通道数据模型channels、7.0 组织部门数据模型departments与本文depIds对应。1. 在项目中承担的作用该模型描述平台接入设备的核心实体数据落在表sk-devices通过统一 ORM 接入db 服务。设备deviceUniqueId在表内唯一是通道表sk-channels的外键语义关联字段。设备上还维护接入协议、信令/流媒体参数、订阅位、媒体服务器列表、通道过滤规则、部门归属等支撑注册、保活、拉流、统计与后台管理。层级作用数据层core/app/sev/db/internal/svc/init_database.go对devices.Devices执行AutoMigrateServiceContext注入DevicesModel。RPC / db 服务core/app/sev/db/internal/logic/deviceservice/下device_*系列逻辑列表、创建、更新、删除、Upsert、在线状态、按协议聚合统计等操作DevicesModel与devices.Item。HTTP / backendcore/app/sev/backend/internal/handler/device/items/device/item等及handler/videos/devices录像相关设备列表等经 RPC 访问 db 服务。与其它模型Channels通过deviceUniqueId归属本设备depIds为部门id数组库内 JSON 字符串与组织机构表对应channelFilters存放通道类型/业务过滤串如国标目录中某类节点的编码前缀与variables.ChannelFilters说明配套使用。设备是通道的父级接入实体协议与连接参数在设备上配置具体监控点位与目录行在通道表展开。2. 表与字段数据库列 ↔ Go ↔ JSON实体Devices映射表sk-devicesTableName()返回值。字段含义说明id主键自增。name设备名称展示与检索。label自定义标签varchar。accessProtocol接入协议14流媒体源、RTMP、ONVIF、GB28181与variables.AccessProtocols一致。deviceUniqueId设备业务唯一 IDCHAR(70)唯一索引通道表引用此字段。originalDeviceUniqueId平台原始设备 ID对接侧原始编码。state启用状态0未启用1启用。online在线状态0不在线1在线。expire注册到期时间秒级时间戳。sourceType来源0主动注册1后台添加。address接入地址如UDP://ip:port。mediaTransMode流媒体传输模式UDP 被动 / TCP 被动 / TCP 主动与MediaTransModeMaps对应。username/password设备登录凭据敏感字段接口层需按安全规范处理。streamUrl码流接入 URL流媒体源等类型使用。channelCount通道数量smsIP推流目标流媒体 IP空则用全局/本地流媒体配置。clusterServerId集群服务器 ID预留。manufacturerId厂商字典 id关联厂商表。modelVersion型号与版本文本描述。subscription订阅开关位CHAR(4)四位0/1依次表示目录 / 报警 / 位置 / PTZConvToItem解析为Item.SubSubscription结构体。msIds媒体服务器 id 列表库内 JSON 数组字符串Item.MSIds为[]uint64。channelFilters通道过滤列表库内 JSON 字符串数组Item.ChannelFilters为[]string如国标Catalog 中某类编码前缀见ChannelFilters映射说明。depIds部门 id 集合库内 JSON 数组字符串Item.DepIds为[]uint64。bitstreamIndex码流索引与BitstreamIndexes等映射配合用于取主/子码流参数。offlineAt下线时间毫秒时间戳。onlineAt上线时间毫秒时间戳。keepaliveAt心跳时间毫秒时间戳。registerAt最后注册时间毫秒时间戳。createdAt/updatedAt创建 / 更新时间毫秒时间戳Correction/CorrectionMap维护。onvifManualOperationStateONVIF 是否手动录入gorm:-不落库仅请求/响应过程使用。3.Item与Devices的字段对应Item在data.go中定义内嵌*Devices标量字段的 JSON 与Devices一致含subscription字符串字段的直接序列化同时Sub为解析后的布尔子项。SubSubscription结构体由Devices.ConvSubscription(subscription)从四位字符串解析JSON 字段名为sub。MSIdsAPI 为[]uint64落库为msIdsJSON 字符串。ChannelFiltersAPI 为[]string落库为channelFiltersJSON 字符串。DepIdsAPI 为[]uint64落库为depIdsJSON 字符串。UseDBCachejson:-。更新场景下CheckMap校验列名属于variables.Columns并对msIds、depIds、channelFilters做类型校验与 JSON 字符串化。subscription在Columns中可按字符串整体更新若要同时暴露结构化sub需业务层约定是否只读解析或双写。4. 列名常量variables.go常量数据库列ColumnIDidColumnNamenameColumnLabellabelColumnAccessProtocolaccessProtocolColumnBitstreamIndexbitstreamIndexColumnDeviceUniqueIddeviceUniqueIdColumnOriginalDeviceUniqueIdoriginalDeviceUniqueIdColumnStatestateColumnOnlineonlineColumnExpireexpireColumnAddressaddressColumnMediaTransModemediaTransModeColumnUsernameusernameColumnPasswordpasswordColumnStreamUrlstreamUrlColumnChannelCountchannelCountColumnSmsIPsmsIPColumnClusterServerIdclusterServerIdColumnManufacturerIdmanufacturerIdColumnModelVersionmodelVersionColumnSubscriptionsubscriptionColumnSourceTypesourceTypeColumnMSIdsmsIdsColumnChannelFilterschannelFiltersColumnDepIdsdepIdsColumnOfflineAtofflineAtColumnOnlineAtonlineAtColumnRegisterAtregisterAtColumnKeepaliveAtkeepaliveAtColumnCreatedAtcreatedAtColumnUpdatedAtupdatedAtPrimaryId为id。另有AccessProtocols、MediaTransModeMaps、BitstreamIndexes、ChannelFilters等常量映射表服务于协议展示、信令与过滤含义说明不是表列名。5. 行为与联调注意点缓存Devices.UseCache()开启内存缓存前缀为表名约 60 秒排障时注意缓存滞后。唯一性deviceUniqueId为设备侧全局业务主键通道、流媒体路由、统计等多处依赖该字符串。Item.TransportProtocol()由mediaTransMode、bitstreamIndex推导 UDP/TCP 主动被动等播放/建联参数供设备服务与拉流逻辑使用。与通道联动删除设备时通常批量删除其下通道channelFilters与国标目录类型过滤、通道删除条件通道包中的DeleteWithChannelFilters在同一业务域内配合使用。部门proc等逻辑可能根据通道depIds批量回写设备depIds联调部门权限时需设备与通道两侧数据一起看。6. 相关代码路径模型包core/repositories/models/devices/DB 迁移与模型注入core/app/sev/db/internal/svc/init_database.go、service_context.go设备 RPC 逻辑core/app/sev/db/internal/logic/deviceservice/device_*.goHTTP 处理器core/app/sev/backend/internal/handler/device/items/、handler/videos/devices/在线与流媒体辅助core/app/sev/db/internal/logic/deviceservice/online_state_logic.go、rtsp_stream_groups_logic.go、media_servers_with_channel_ids_logic.go与通道、部门同步core/app/sev/db/internal/svc/proc.go