Files
虾司令 881144269c 🚀 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 上线部署完成
2026-03-29 18:16:41 +08:00

182 lines
7.6 KiB
Go

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" // 校准
)