🚀 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:
366
docs/api_documentation.md
Normal file
366
docs/api_documentation.md
Normal 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
105
docs/test_credentials.md
Normal 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
|
||||
**账号状态**: 已激活
|
||||
Reference in New Issue
Block a user