🚀 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:
虾司令
2026-03-29 18:16:41 +08:00
commit 881144269c
38 changed files with 4967 additions and 0 deletions

366
docs/api_documentation.md Normal file
View File

@@ -0,0 +1,366 @@
# AI近视防控系统 - API文档
## 项目概述
AI近视防控系统是一套用于监测、分析和预防青少年近视发展的智能平台。通过眼动追踪、视力检测算法和智能训练内容帮助学校和家庭及时发现并干预近视发展。
## API基础信息
- **Base URL**: `https://api.myopia-prevention.com/v1`
- **协议**: HTTPS
- **数据格式**: JSON
- **字符编码**: UTF-8
## 认证方式
### JWT Token认证
所有需要认证的API接口都需要在请求头中添加JWT Token
```
Authorization: Bearer {token}
```
### 登录接口
```
POST /api/v1/auth/login
```
**请求参数**:
```json
{
"username": "用户名或手机号",
"password": "密码",
"device_id": "设备ID可选"
}
```
**响应示例**:
```json
{
"code": 0,
"message": "登录成功",
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"expires_at": "2026-03-29T10:00:00Z",
"user_id": 1,
"username": "admin",
"name": "管理员",
"role": "admin"
}
}
```
## API接口列表
### 1. 用户认证相关
#### 1.1 用户注册
```
POST /api/v1/auth/register
```
**请求参数**:
```json
{
"username": "用户名",
"password": "密码",
"name": "姓名",
"phone": "手机号",
"role": "角色(student/parent/teacher)"
}
```
#### 1.2 获取用户资料
```
GET /api/v1/auth/profile
```
#### 1.3 更新用户资料
```
PUT /api/v1/auth/profile
```
**请求参数**:
```json
{
"name": "姓名",
"phone": "手机号"
}
```
#### 1.4 修改密码
```
PUT /api/v1/auth/password
```
**请求参数**:
```json
{
"old_password": "旧密码",
"new_password": "新密码"
}
```
### 2. 检测服务相关
#### 2.1 发起检测
```
POST /api/v1/detections/start
```
**请求参数**:
```json
{
"class_id": 1,
"teacher_id": 1,
"student_count": 30,
"detection_type": "vision" // vision/fatigue/training
}
```
**响应示例**:
```json
{
"code": 0,
"message": "检测任务已创建",
"data": {
"task_id": "1",
"task_no": "task_20260328_123456_001",
"start_time": "2026-03-28T10:00:00Z"
}
}
```
#### 2.2 提交检测结果
```
POST /api/v1/detections/submit
```
**请求参数**:
```json
{
"student_id": 1,
"detection_id": "1",
"vision": {
"vision_left": 5.0,
"vision_right": 4.9,
"confidence": "high"
},
"eye_movement": {
"left_eye": {
"x": 120.5,
"y": 85.3,
"radius": 3.2,
"confidence": 0.95
},
"right_eye": {
"x": 140.2,
"y": 84.8,
"radius": 3.1,
"confidence": 0.93
},
"gaze_point": {
"x": 1920,
"y": 540,
"confidence": 0.9
},
"timestamp": 1711612800000
},
"response": {
"accuracy": 0.85,
"response_time": 2.5,
"errors": 2
},
"timestamp": 1711612800000,
"device_id": 1
}
```
#### 2.3 获取检测报告
```
GET /api/v1/detections/report/:detection_id/student/:student_id
```
#### 2.4 获取检测历史
```
GET /api/v1/detections/history
```
**查询参数**:
- `student_id`: 学生ID
- `class_id`: 班级ID
- `start_date`: 开始日期
- `end_date`: 结束日期
- `page`: 页码默认1
- `page_size`: 每页数量默认20
#### 2.5 获取班级统计
```
GET /api/v1/detections/class/:class_id/stats
```
**查询参数**:
- `start_date`: 开始日期
- `end_date`: 结束日期
**响应示例**:
```json
{
"code": 0,
"message": "获取成功",
"data": {
"class_id": 1,
"class_name": "一年级一班",
"total_students": 30,
"tested_students": 28,
"avg_vision_left": 4.9,
"avg_vision_right": 4.8,
"vision_decline_count": 2,
"avg_fatigue_score": 25.5,
"alert_count": 3,
"alert_distribution": {
"green": 20,
"yellow": 5,
"orange": 2,
"red": 1
},
"created_at": "2026-03-28T10:00:00Z"
}
}
```
### 3. 预警服务相关
#### 3.1 获取预警列表
```
GET /api/v1/alerts
```
**查询参数**:
- `student_id`: 学生ID
- `class_id`: 班级ID
- `level`: 预警级别
- `status`: 预警状态
- `page`: 页码
- `page_size`: 每页数量
#### 3.2 处理预警
```
POST /api/v1/alerts/:alert_id/handle
```
**请求参数**:
```json
{
"handle_remark": "处理备注"
}
```
### 4. 训练服务相关
#### 4.1 获取训练任务
```
GET /api/v1/training/tasks
```
**查询参数**:
- `student_id`: 学生ID
- `date`: 日期
#### 4.2 提交训练记录
```
POST /api/v1/training/records
```
**请求参数**:
```json
{
"student_id": 1,
"task_id": 1,
"score": 95,
"accuracy": 0.9,
"duration": 300,
"performance_metrics": {
"eye_movement_accuracy": 0.95,
"focus_time": 280
}
}
```
### 5. 设备服务相关
#### 5.1 设备注册
```
POST /api/v1/devices/register
```
**请求参数**:
```json
{
"device_no": "设备编号",
"device_name": "设备名称",
"device_type": "设备类型",
"school_id": 1,
"class_id": 1
}
```
## 错误码说明
| 错误码 | 说明 |
|--------|------|
| 0 | 成功 |
| 400 | 请求参数错误 |
| 401 | 未授权/认证失败 |
| 403 | 禁止访问/权限不足 |
| 404 | 资源不存在 |
| 500 | 服务器内部错误 |
## 数据模型
### 用户模型
- ID: 唯一标识符
- Username: 用户名
- Name: 姓名
- Phone: 手机号
- Role: 角色 (student/parent/teacher/admin)
- Status: 状态 (1:正常, 0:禁用)
### 学生模型
- ID: 唯一标识符
- StudentNo: 学号
- Name: 姓名
- Gender: 性别 (1:男, 2:女)
- BirthDate: 出生日期
- ClassID: 班级ID
- ParentID: 家长ID
### 检测模型
- ID: 唯一标识符
- TaskID: 检测任务ID
- StudentID: 学生ID
- DetectionTime: 检测时间
- VisionLeft: 左眼视力
- VisionRight: 右眼视力
- FatigueScore: 疲劳分数
- AlertLevel: 预警级别
### 预警模型
- ID: 唯一标识符
- StudentID: 学生ID
- DetectionID: 检测ID
- AlertLevel: 预警级别 (1:关注, 2:预警, 3:告警)
- AlertType: 预警类型
- Status: 状态 (0:未处理, 1:已通知, 2:已处理)
## 限流策略
- 普通用户: 100次/分钟
- 教师用户: 200次/分钟
- 设备接口: 500次/分钟
## 部署信息
- 环境: 生产环境
- 版本: v1.0.0
- 部署时间: 2026-03-28

105
docs/test_credentials.md Normal file
View File

@@ -0,0 +1,105 @@
# AI近视防控系统 - 测试账号文档
## 测试环境账号信息
### 管理员账号
- **用户名**: `admin`
- **密码**: `Admin123!@#`
- **角色**: admin
- **手机号**: `13800138000`
- **权限**: 访问所有API端点
### 老师账号
- **用户名**: `teacher`
- **密码**: `Teacher123!@#`
- **角色**: teacher
- **手机号**: `13800138001`
- **权限**:
- 发起检测任务
- 查看班级统计
- 管理学生信息
- 查看预警信息
### 学生账号
- **用户名**: `student`
- **密码**: `Student123!@#`
- **角色**: student
- **手机号**: `13800138002`
- **权限**:
- 提交检测结果
- 查看个人报告
- 完成训练任务
### 家长账号
- **用户名**: `parent`
- **密码**: `Parent123!@#`
- **角色**: parent
- **手机号**: `13800138003`
- **权限**:
- 查看子女检测报告
- 接收预警通知
- 查看训练建议
## API使用示例
### 1. 用户登录
```bash
curl -X POST http://localhost:8080/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{
"username": "admin",
"password": "Admin123!@#"
}'
```
### 2. 获取用户资料(需要认证)
```bash
curl -X GET http://localhost:8080/api/v1/auth/profile \
-H "Authorization: Bearer YOUR_JWT_TOKEN_HERE"
```
### 3. 发起检测任务(仅老师/管理员)
```bash
curl -X POST http://localhost:8080/api/v1/detections/start \
-H "Authorization: Bearer TEACHER_JWT_TOKEN_HERE" \
-H "Content-Type: application/json" \
-d '{
"class_id": 1,
"teacher_id": 1,
"student_count": 30,
"detection_type": "vision"
}'
```
## 安全说明
1. **密码强度**所有测试账号密码均符合8位以上含大小写字母、数字、特殊字符的要求
2. **JWT Token**登录成功后会返回JWT Token有效期7天
3. **权限控制**系统已实现RBAC权限控制不同角色只能访问相应权限的API
4. **速率限制**登录失败5次后会被限制15分钟
## 测试场景建议
### 管理员测试场景
- 登录后查看系统管理界面
- 管理老师账号
- 查看全校统计报告
### 老师测试场景
- 登录后发起班级视力检测
- 查看班级统计报告
- 查看学生预警信息
### 学生测试场景
- 登录后查看个人视力报告
- 提交检测结果
- 完成训练任务
### 家长测试场景
- 登录后查看子女视力报告
- 接收预警通知
- 查看训练建议
---
**文档更新时间**: 2026-03-29
**账号状态**: 已激活