🚀 AI 近视防控系统 - 生产环境上线版本 v1.0
✅ 已完成功能: - 后端 Go 服务 (认证/授权/检测) - JWT 认证 + RBAC 权限控制 - 登录速率限制 (5 次失败锁定 15 分钟) - 密码强度校验 - 敏感数据脱敏 - Vue3 管理后台 - 路由守卫 - 删除二次确认 📦 部署配置: - Docker Compose 生产环境配置 - MySQL/Redis/MongoDB 数据库 - Nginx 前端服务 - 强密码安全配置 ⚠️ P2 待办 (下次迭代): - 学生/检测/预警等业务模块实现 - 错误处理统一化 - 缓存策略优化 - 日志分级 📍 生产环境: - 服务器:192.168.15.222 - 管理后台:http://192.168.15.222:8081 - API 服务:http://192.168.15.222:8080 2026-03-29 上线部署完成
This commit is contained in:
182
db/models/device.go
Normal file
182
db/models/device.go
Normal file
@@ -0,0 +1,182 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
// Device 设备模型
|
||||
type Device struct {
|
||||
ID uint `gorm:"primaryKey" json:"id"`
|
||||
DeviceNo string `gorm:"type:varchar(64);uniqueIndex" json:"device_no"`
|
||||
DeviceName string `gorm:"type:varchar(128)" json:"device_name"`
|
||||
DeviceType string `gorm:"type:varchar(32)" json:"device_type"` // terminal, camera, edge_box, gateway
|
||||
SchoolID *uint `json:"school_id"`
|
||||
School *School `gorm:"foreignKey:SchoolID" json:"school"`
|
||||
ClassID *uint `json:"class_id"`
|
||||
Class *Class `gorm:"foreignKey:ClassID" json:"class"`
|
||||
IPAddress string `gorm:"type:varchar(45)" json:"ip_address"`
|
||||
MacAddress string `gorm:"type:varchar(32)" json:"mac_address"`
|
||||
Status int `json:"status"` // 0:离线, 1:在线, 2:故障, 3:维护中
|
||||
LastHeartbeat *time.Time `json:"last_heartbeat"`
|
||||
FirmwareVersion string `gorm:"type:varchar(32)" json:"firmware_version"`
|
||||
ConfigVersion int `json:"config_version"`
|
||||
Attributes JSONMap `gorm:"type:json" json:"attributes"` // 设备属性
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
|
||||
// 关联的设备日志
|
||||
DeviceLogs []DeviceLog `gorm:"foreignKey:DeviceID" json:"device_logs"`
|
||||
}
|
||||
|
||||
// DeviceConfig 设备配置模型
|
||||
type DeviceConfig struct {
|
||||
ID uint `gorm:"primaryKey" json:"id"`
|
||||
DeviceID uint `json:"device_id"`
|
||||
Device Device `gorm:"foreignKey:DeviceID" json:"device"`
|
||||
Settings JSONMap `gorm:"type:json" json:"settings"` // 配置项
|
||||
Version int `json:"version"` // 配置版本
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
}
|
||||
|
||||
// DeviceLog 设备日志模型
|
||||
type DeviceLog struct {
|
||||
ID uint `gorm:"primaryKey" json:"id"`
|
||||
DeviceID uint `json:"device_id"`
|
||||
Device Device `gorm:"foreignKey:DeviceID" json:"device"`
|
||||
LogType string `gorm:"type:varchar(32)" json:"log_type"` // status, command, error
|
||||
Content JSONMap `gorm:"type:json" json:"content"` // 日志内容
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
}
|
||||
|
||||
// DeviceStatusInfo 设备状态信息模型
|
||||
type DeviceStatusInfo struct {
|
||||
ID uint `gorm:"primaryKey" json:"id"`
|
||||
DeviceID uint `json:"device_id"`
|
||||
Device Device `gorm:"foreignKey:DeviceID" json:"device"`
|
||||
Status int `json:"status"` // 0:离线, 1:在线, 2:故障, 3:维护中
|
||||
CPUUsage float64 `json:"cpu_usage"`
|
||||
MemoryUsage float64 `json:"memory_usage"`
|
||||
DiskUsage float64 `json:"disk_usage"`
|
||||
NetworkStatus string `gorm:"type:varchar(32)" json:"network_status"`
|
||||
CameraStatus string `gorm:"type:varchar(32)" json:"camera_status"`
|
||||
Temperature float64 `json:"temperature"`
|
||||
FirmwareVersion string `gorm:"type:varchar(32)" json:"firmware_version"`
|
||||
HealthInfo JSONMap `gorm:"type:json" json:"health_info"` // 健康信息
|
||||
ReportedAt time.Time `json:"reported_at"`
|
||||
}
|
||||
|
||||
// DeviceCommand 设备指令模型
|
||||
type DeviceCommand struct {
|
||||
ID uint `gorm:"primaryKey" json:"id"`
|
||||
DeviceID uint `json:"device_id"`
|
||||
Device Device `gorm:"foreignKey:DeviceID" json:"device"`
|
||||
CommandType string `gorm:"type:varchar(64)" json:"command_type"`
|
||||
Params JSONMap `gorm:"type:json" json:"params"` // 参数
|
||||
Timeout int `json:"timeout"` // 超时时间
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
ExecutedAt *time.Time `json:"executed_at"`
|
||||
ExecutionResult string `gorm:"type:text" json:"execution_result"` // 执行结果
|
||||
Status int `json:"status"` // 0:待执行, 1:执行中, 2:成功, 3:失败
|
||||
}
|
||||
|
||||
// DeviceMessage 设备消息模型
|
||||
type DeviceMessage struct {
|
||||
ID uint `gorm:"primaryKey" json:"id"`
|
||||
DeviceID uint `json:"device_id"`
|
||||
Device Device `gorm:"foreignKey:DeviceID" json:"device"`
|
||||
MessageType string `gorm:"type:varchar(32)" json:"message_type"` // detection.data, device.status, device.command
|
||||
Header JSONMap `gorm:"type:json" json:"header"` // 消息头
|
||||
Payload JSONMap `gorm:"type:json" json:"payload"` // 消息体
|
||||
Signature string `gorm:"type:varchar(255)" json:"signature"` // 签名
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
}
|
||||
|
||||
// DeviceHeartbeat 设备心跳模型
|
||||
type DeviceHeartbeat struct {
|
||||
ID uint `gorm:"primaryKey" json:"id"`
|
||||
DeviceID uint `json:"device_id"`
|
||||
Device Device `gorm:"foreignKey:DeviceID" json:"device"`
|
||||
IPAddress string `gorm:"type:varchar(45)" json:"ip_address"`
|
||||
LastSeen time.Time `json:"last_seen"`
|
||||
Status int `json:"status"` // 0:离线, 1:在线
|
||||
}
|
||||
|
||||
// DeviceGroup 设备分组模型
|
||||
type DeviceGroup struct {
|
||||
ID uint `gorm:"primaryKey" json:"id"`
|
||||
Name string `gorm:"type:varchar(128)" json:"name"`
|
||||
Type string `gorm:"type:varchar(32)" json:"type"` // classroom, school, campus
|
||||
EntityID uint `json:"entity_id"` // 关联的学校或班级ID
|
||||
Entity string `gorm:"type:varchar(32)" json:"entity"` // school, class
|
||||
Description string `gorm:"type:text" json:"description"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
|
||||
// 关联的设备
|
||||
Devices []Device `gorm:"many2many:device_group_relations;" json:"devices"`
|
||||
}
|
||||
|
||||
// DeviceGroupRelation 设备与分组关联模型
|
||||
type DeviceGroupRelation struct {
|
||||
ID uint `gorm:"primaryKey" json:"id"`
|
||||
DeviceID uint `json:"device_id"`
|
||||
GroupID uint `json:"group_id"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
}
|
||||
|
||||
// DeviceMaintenance 设备维护模型
|
||||
type DeviceMaintenance struct {
|
||||
ID uint `gorm:"primaryKey" json:"id"`
|
||||
DeviceID uint `json:"device_id"`
|
||||
Device Device `gorm:"foreignKey:DeviceID" json:"device"`
|
||||
Type string `gorm:"type:varchar(32)" json:"type"` // repair, upgrade, calibration
|
||||
Description string `gorm:"type:text" json:"description"`
|
||||
StartedAt time.Time `json:"started_at"`
|
||||
EndedAt *time.Time `json:"ended_at"`
|
||||
Status int `json:"status"` // 0:待处理, 1:进行中, 2:已完成, 3:已取消
|
||||
Technician string `gorm:"type:varchar(64)" json:"technician"`
|
||||
Notes string `gorm:"type:text" json:"notes"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
}
|
||||
|
||||
// DeviceType 设备类型枚举
|
||||
const (
|
||||
DeviceTypeTerminal = "terminal" // 终端设备(触摸屏一体机)
|
||||
DeviceTypeCamera = "camera" // 摄像头
|
||||
DeviceTypeEdgeBox = "edge_box" // 边缘计算盒子
|
||||
DeviceTypeGateway = "gateway" // 网关设备
|
||||
)
|
||||
|
||||
// DeviceStatus 设备状态枚举
|
||||
const (
|
||||
DeviceStatusOffline = 0 // 离线
|
||||
DeviceStatusOnline = 1 // 在线
|
||||
DeviceStatusFault = 2 // 故障
|
||||
DeviceStatusMaintenance = 3 // 维护中
|
||||
)
|
||||
|
||||
// DeviceMessageType 设备消息类型枚举
|
||||
const (
|
||||
DeviceMessageTypeStatus = "device.status" // 设备状态
|
||||
DeviceMessageTypeCommand = "device.command" // 控制指令
|
||||
DeviceMessageTypeDetection = "detection.data" // 检测数据
|
||||
DeviceMessageTypeAlert = "alert" // 预警事件
|
||||
DeviceMessageTypeConfig = "config" // 配置更新
|
||||
DeviceMessageTypeHeartbeat = "heartbeat" // 心跳上报
|
||||
)
|
||||
|
||||
// DeviceCommandStatus 指令状态枚举
|
||||
const (
|
||||
DeviceCommandStatusPending = 0 // 待执行
|
||||
DeviceCommandStatusExecuting = 1 // 执行中
|
||||
DeviceCommandStatusSuccess = 2 // 成功
|
||||
DeviceCommandStatusFailed = 3 // 失败
|
||||
)
|
||||
|
||||
// DeviceMaintenanceType 维护类型枚举
|
||||
const (
|
||||
DeviceMaintenanceTypeRepair = "repair" // 维修
|
||||
DeviceMaintenanceTypeUpgrade = "upgrade" // 升级
|
||||
DeviceMaintenanceTypeCalibration = "calibration" // 校准
|
||||
)
|
||||
Reference in New Issue
Block a user