guoyu/log/总体计划.md

622 lines
20 KiB
Markdown
Raw Normal View History

2025-11-14 17:34:32 +08:00
# 在线学习系统实施计划
## 项目架构设计
### 系统架构
```
┌─────────────────┐ ┌─────────────────┐
│ 管理后台 │ │ UniApp客户端 │
│ (Vue Web) │ │ (Vue) │
└────────┬────────┘ └────────┬────────┘
│ │
│ HTTP/WebSocket │
└───────────┬───────────────┘
┌───────────▼───────────┐
│ Java后端服务 │
│ (Spring Boot) │
└───────────┬───────────┘
┌───────────▼───────────┐
│ MySQL数据库 │
└───────────────────────┘
```
### 技术选型
#### 前端UniApp
- **框架**UniApp + Vue 3
- **UI组件库**uView UI 或 uni-ui
- **状态管理**Vuex 或 Pinia
- **网络请求**uni.request 封装
- **文件上传**uni.uploadFile
- **屏幕截图**使用canvas或plus API实现
- **视频播放**video组件支持进度跟踪
- **图表库**echarts-for-uniapp用于成绩统计图表
- **平台支持**iOS 12+、Android 8.0+
- **横屏支持**:强制横屏或横竖屏自适应
#### 后端Java
- **框架**Spring Boot 2.7+ 或 3.x
- **安全框架**Spring Security简化版仅账号密码
- **ORM框架**MyBatis-Plus
- **文件存储**:本地文件系统(局域网部署)
- **WebSocket**Spring WebSocket用于实时监控
- **权限控制**基于角色的权限控制RBAC
- **文件处理**
- PDF处理Apache PDFBox用于PDF生成和打印
- Excel处理EasyExcel用于数据导入导出
- 视频处理FFmpeg视频转码在保证清晰度的情况下压缩文件大小
- **图表生成**JFreeChart 或 ECharts Java用于后端图表生成
#### 数据库
- **版本**MySQL 5.7+ 或 8.0+
- **字符集**utf8mb4
#### 语音评测服务
- **候选方案**
1. 科大讯飞语音评测(价格中等,准确率高)
2. 百度语音识别(价格较低)
3. 腾讯云语音识别(价格中等)
4. 阿里云语音识别(价格中等)
- **选择原则**:根据实际使用量和价格选择
## 功能模块划分
### 后端模块
1. **用户认证模块**auth
- 登录、登出
- 权限验证
- Token管理
2. **用户管理模块**user
- 管理员管理
- 学员管理
- 角色权限管理
3. **班级管理模块**class
- 班级CRUD
- 学员分配
- 班级查询
4. **课件管理模块**courseware
- 课件上传
- 课件分类
- 课件查询
- 文件存储管理
5. **课程管理模块**course
- 课程创建
- 课程发布
- 课程分配
- 学习进度跟踪
6. **学习监控模块**monitor
- 屏幕截图接收
- 实时监控
- 历史记录查询
7. **语音评测模块**voice
- 语音上传
- 语音评测接口调用
- 评测结果存储
8. **考试模块**exam
- 题库管理
- 试卷生成
- 考试发布
- 自动评分
- 成绩统计
9. **成绩管理模块**score
- 成绩查询
- 成绩统计
- 成绩单生成PDF
10. **数据导入导出模块**import-export
- Excel导入
- 数据导出
- 模板下载
### 前端模块UniApp
1. **登录模块**
- 学员登录
- 自动登录Token保存
2. **课程学习模块**
- 课程列表(显示分配的课程)
- 课件查看:
- 图文课件PDF、图片、文档在线查看
- 视频课件:视频播放,支持横屏全屏
- **学习进度跟踪**
- 视频播放进度实时上报每5-10秒
- 记录学习开始和结束时间
- 记录视频播放位置
- 累计学习时长和次数
- 学习记录本地缓存
3. **语音练习模块**
- 课文显示
- 语音录制使用uni.getRecorderManager
- 语音上传
- 评测结果展示
- 评测历史记录
4. **考试模块**
- 考试列表(显示分配的考试)
- 答题界面:
- 单选题、多选题、判断题、填空题
- 答题进度显示
- 考试倒计时
- 考试提交
- 成绩查看
- 重考功能(如果允许)
5. **个人中心模块**
- 个人信息
- 学习记录查看
- 学习进度查看(视频播放进度、学习次数、观看时长)
- 成绩查询
- 语音评测记录
6. **屏幕监控模块**
- 定时截图每30秒或可配置
- 截图上传到服务器
- 后台运行(保活机制)
### 管理后台模块Vue Web
1. **仪表盘**
- 数据统计(管理员和教师分别显示)
- 快捷操作
- 权限控制显示
2. **用户管理**(仅管理员)
- 学员管理
- 教师管理
- 管理员管理
- 角色权限分配
3. **班级管理**
- 班级列表(教师只能看到自己管理的班级)
- 学员分配
- 教师分配(仅管理员)
4. **课件管理**
- 课件上传(需选择学科分类)
- 课件列表
- **学科分类管理**(仅管理员)
- 课件删除和编辑
5. **课程管理**
- 课程创建
- 课程发布(分配给学员/班级)
- **学习进度查看**(视频播放进度、学习次数、观看时长)
- 学习监控(实时画面和历史记录)
6. **考试管理**
- 题库管理
- 试卷管理
- 考试发布
- **考试规则设置**(教师可设置,管理员可限制重考)
- 重考限制设置(仅管理员)
7. **成绩管理**
- 成绩查询(教师只能查看自己班级)
- **成绩统计图表**(柱状图、折线图、饼图等)
- 成绩单打印PDF导出
- 成绩分析
## 数据库设计(初步规划)
### 核心表结构
#### 1. 用户表sys_user
- id: 主键
- username: 用户名(唯一)
- password: 密码(加密存储)
- real_name: 真实姓名
- role: 角色admin/teacher/student
- status: 状态0:禁用 1:启用)
- create_time: 创建时间
- update_time: 更新时间
#### 2. 学科分类表subject
- id: 主键
- subject_name: 学科名称(如:语文、数学、英语等)
- subject_code: 学科编码
- sort_order: 排序
- status: 状态
- create_time: 创建时间
#### 3. 班级表class
- id: 主键
- class_name: 班级名称
- class_code: 班级编号
- teacher_id: 班主任ID教师用户ID
- description: 班级描述
- status: 状态
- create_time: 创建时间
- update_time: 更新时间
#### 4. 学员班级关联表student_class
- id: 主键
- student_id: 学员ID
- class_id: 班级ID
- join_time: 加入时间
- status: 状态
#### 5. 课件表courseware
- id: 主键
- title: 课件标题
- type: 课件类型text/video/image/document
- file_path: 文件路径
- file_size: 文件大小(字节)
- file_name: 原始文件名
- subject_id: 学科分类ID外键关联subject表
- upload_user_id: 上传人ID
- description: 课件描述
- duration: 视频时长(秒,仅视频类型)
- create_time: 创建时间
- update_time: 更新时间
#### 6. 课程表course
- id: 主键
- course_name: 课程名称
- courseware_id: 课件ID外键关联courseware表
- description: 课程描述
- start_time: 开始时间
- end_time: 结束时间
- create_user_id: 创建人ID
- status: 状态
- create_time: 创建时间
- update_time: 更新时间
#### 7. 课程分配表course_assignment
- id: 主键
- course_id: 课程ID外键关联course表
- student_id: 学员ID可为空表示分配给班级
- class_id: 班级ID可为空表示分配给个人
- assign_time: 分配时间
- assign_user_id: 分配人ID
- status: 状态0:未开始 1:进行中 2:已结束)
- create_time: 创建时间
#### 8. 学习记录表learning_record
- id: 主键
- student_id: 学员ID外键关联sys_user表
- course_id: 课程ID外键关联course表
- progress: 学习进度百分比0-100
- total_duration: 总学习时长(秒,累计)
- learn_count: 学习次数(累计)
- video_progress: 视频播放进度(秒,仅视频类型)
- video_total_duration: 视频总时长(秒,仅视频类型)
- last_learn_time: 最后学习时间
- last_video_position: 最后视频播放位置(秒)
- create_time: 创建时间
- update_time: 更新时间
#### 8.1 学习详情记录表learning_detail
- id: 主键
- learning_record_id: 学习记录ID外键关联learning_record表
- student_id: 学员ID
- course_id: 课程ID
- start_time: 本次学习开始时间
- end_time: 本次学习结束时间
- duration: 本次学习时长(秒)
- video_start_position: 视频开始位置(秒)
- video_end_position: 视频结束位置(秒)
- create_time: 创建时间
#### 9. 学习监控表monitor_record
- id: 主键
- student_id: 学员ID外键关联sys_user表
- course_id: 课程ID外键关联course表可为空
- screenshot_path: 截图路径
- monitor_time: 监控时间
- device_info: 设备信息JSON格式
- ip_address: IP地址
- create_time: 创建时间
#### 10. 语音评测表voice_evaluation
- id: 主键
- student_id: 学员ID外键关联sys_user表
- course_id: 课程ID外键关联course表
- content: 评测内容(课文或文字)
- audio_path: 音频文件路径
- score: 评分(总分)
- accuracy: 准确度0-100
- fluency: 流畅度0-100
- completeness: 完整度0-100
- result_detail: 评测详情JSON格式包含详细评测结果
- create_time: 创建时间
#### 11. 题库表question_bank
- id: 主键
- question_type: 题型single:单选题 multiple:多选题 judge:判断题 fill:填空题)
- question_content: 题目内容
- options: 选项JSON格式["选项A","选项B","选项C","选项D"]
- correct_answer: 正确答案JSON格式多选题和填空题为数组
- score: 分值
- difficulty: 难度1:简单 2:中等 3:困难)
- subject_id: 学科分类ID外键关联subject表
- category: 分类标签
- create_user_id: 创建人ID
- create_time: 创建时间
- update_time: 更新时间
#### 12. 试卷表exam_paper
- id: 主键
- paper_name: 试卷名称
- question_ids: 题目ID列表JSON格式数组
- total_score: 总分
- duration: 考试时长(分钟)
- create_user_id: 创建人ID
- create_time: 创建时间
- update_time: 更新时间
#### 13. 考试表exam
- id: 主键
- exam_name: 考试名称
- paper_id: 试卷ID外键关联exam_paper表
- start_time: 开始时间
- end_time: 结束时间
- duration: 考试时长(分钟,可为空,表示不限制)
- class_id: 班级ID可为空表示分配给个人
- student_id: 学员ID可为空表示分配给班级
- allow_retake: 是否允许重考0:不允许 1:允许,管理员可设置)
- max_retake_times: 最大重考次数(如果允许重考)
- create_user_id: 创建人ID
- status: 状态0:未开始 1:进行中 2:已结束)
- create_time: 创建时间
- update_time: 更新时间
#### 14. 考试记录表exam_record
- id: 主键
- exam_id: 考试ID外键关联exam表
- student_id: 学员ID外键关联sys_user表
- paper_id: 试卷ID外键关联exam_paper表
- answers: 答案JSON格式存储题目ID和答案的映射
- score: 得分
- start_time: 开始时间
- submit_time: 提交时间
- duration: 考试用时(秒)
- status: 状态doing:进行中 completed:已完成)
- retake_count: 重考次数(第几次参加该考试)
- create_time: 创建时间
- update_time: 更新时间
## 开发阶段规划
### 第一阶段基础架构搭建预计1-2周
**目标**:搭建项目基础框架,完成核心功能的基础部分
#### 后端任务
- [x] 创建Spring Boot项目
- [x] 配置数据库连接
- [x] 创建数据库表结构(包含所有核心表)
- [x] 实现用户认证模块登录、Token、权限验证
- [x] 实现基于角色的权限控制RBAC
- [x] 实现基础CRUD接口用户管理、学科分类
- [x] 配置文件上传功能
- [x] 配置跨域和WebSocket跨域已配置WebSocket待实现
- [x] 实现数据权限过滤(教师只能看到自己班级的数据)
#### 前端任务UniApp
- [x] 创建UniApp项目基础结构
- [x] 配置项目结构
- [x] 实现登录页面
- [x] 封装网络请求包含Token管理
- [x] 实现基础路由
- [x] 配置横屏支持
- [x] 实现权限控制(路由守卫)
#### 管理后台任务
- [x] 创建Vue项目基础结构
- [x] 配置路由和状态管理
- [x] 实现登录页面
- [x] 实现基础布局(菜单、权限控制)
- [x] 实现权限控制(路由守卫、菜单权限)
- [x] 集成图表库ECharts
### 第二阶段核心功能开发预计3-4周
**目标**:完成核心业务功能
#### 2.1 用户和班级管理
- [ ] 用户管理(管理员、教师、学员)
- [ ] 学员信息管理CRUD
- [ ] 学员信息批量导入Excel/CSV
- [ ] 班级管理CRUD
- [ ] 学员班级分配
- [ ] 教师班级分配(管理员分配教师管理班级)
- [ ] 权限控制实现(教师只能管理自己的班级)
#### 2.2 课件管理
- [ ] 学科分类管理(管理员)
- [ ] 课件上传功能(需选择学科分类)
- [ ] 课件列表查询(按学科分类、权限过滤)
- [ ] 课件删除功能
- [ ] 视频文件处理FFmpeg转码压缩文件大小
#### 2.3 课程管理
- [ ] 课程创建
- [ ] 课程发布(分配给学员/班级)
- [ ] App端课程列表
- [ ] 课件查看(图文/视频播放)
- [ ] **学习进度跟踪**
- 视频播放进度上报接口
- 学习记录存储(学习次数、观看时长)
- 学习详情记录
- 学习进度查询接口
- [ ] 后台学习进度查看(管理员和教师)
#### 2.4 学习监控
- [ ] App端截图功能
- [ ] 截图上传接口
- [ ] 后台监控查看
- [ ] 历史记录查询
### 第三阶段语音和考试功能预计2-3周
**目标**:完成语音评测和考试模块
#### 3.1 语音评测
- [ ] 调研并选择语音服务商
- [ ] 集成语音评测API
- [ ] 实现语音录制功能
- [ ] 实现评测结果展示
- [ ] 评测记录存储
#### 3.2 考试模块
- [ ] 题库管理题目CRUD按学科分类
- [ ] 试卷生成功能
- [ ] 考试发布功能(分配给学员/班级)
- [ ] 考试规则设置(教师可设置时长、时间等)
- [ ] 重考限制设置(管理员可设置是否允许重考)
- [ ] App端考试界面
- [ ] 自动评分功能
- [ ] 成绩统计(按班级、按学员等)
### 第四阶段成绩管理和优化预计1-2周
**目标**:完成成绩管理和系统优化
#### 4.1 成绩管理
- [ ] 成绩查询功能(权限控制:教师只能查看自己班级)
- [ ] 成绩统计功能
- [ ] **成绩统计图表**(柱状图、折线图、饼图等)
- [ ] 成绩单生成PDF
- [ ] 成绩打印功能
- [ ] 成绩导出功能
#### 4.2 系统优化
- [ ] 性能优化
- [ ] 界面优化
- [ ] 错误处理完善
- [ ] 日志记录
### 第五阶段测试和部署预计1周
**目标**:系统测试和部署准备
#### 5.1 测试
- [ ] 功能测试
- [ ] 兼容性测试
- [ ] 性能测试
- [ ] 安全测试
#### 5.2 部署
- [ ] 部署文档编写
- [ ] 数据库初始化脚本
- [ ] 部署环境配置
- [ ] 上线准备
## 技术难点和解决方案
### 1. 屏幕截图上传
**难点**UniApp如何实现屏幕截图并上传
**解决方案**
- 使用uni.canvasToTempFilePath将页面转为图片
- 或使用plus.screen.capture需5+App环境
- 定时上传截图到服务器
### 2. 视频播放
**难点**UniApp视频播放兼容性
**解决方案**
- 使用video组件
- 支持多种视频格式
- 处理横屏播放
### 3. 语音评测
**难点**:选择合适的语音服务并集成
**解决方案**
- 对比各服务商价格和功能
- 封装统一的语音评测接口
- 支持后续切换服务商
### 4. 文件存储
**难点**:局域网部署的文件存储
**解决方案**
- 使用本地文件系统存储
- 配置静态资源访问
- 考虑文件大小限制
### 5. 实时监控
**难点**:实时查看学生学习画面
**解决方案**
- 使用WebSocket推送最新截图
- 或使用轮询方式获取最新截图
- 考虑性能优化
## 下一步行动
1. **确认需求**:与用户确认需求文档是否完整准确
2. **技术选型确认**:确认技术栈选择
3. **数据库设计**:详细设计数据库表结构
4. **接口设计**:设计前后端接口规范
5. **开始开发**:按照开发阶段逐步实施
## 权限控制设计
### 角色权限矩阵
| 功能模块 | 管理员 | 教师 | 学员 |
|---------|--------|------|------|
| 用户管理 | ✅ 全部 | ❌ | ❌ |
| 教师管理 | ✅ 全部 | ❌ | ❌ |
| 学科分类管理 | ✅ 全部 | ❌ | ❌ |
| 班级管理 | ✅ 全部 | ✅ 仅自己管理的班级 | ❌ |
| 学员管理 | ✅ 全部 | ✅ 仅自己班级的学员 | ❌ |
| 课件管理 | ✅ 全部 | ✅ 上传和管理 | ❌ |
| 课程管理 | ✅ 全部 | ✅ 创建和发布 | ✅ 查看和学习 |
| 学习监控 | ✅ 全部 | ✅ 仅自己班级 | ❌ |
| 学习进度查看 | ✅ 全部 | ✅ 仅自己班级 | ✅ 仅自己 |
| 考试管理 | ✅ 全部 | ✅ 创建和发布 | ✅ 参加考试 |
| 考试规则设置 | ✅ 全部(可限制重考) | ✅ 设置规则 | ❌ |
| 成绩查看 | ✅ 全部 | ✅ 仅自己班级 | ✅ 仅自己 |
| 成绩统计 | ✅ 全部 | ✅ 仅自己班级 | ❌ |
### 数据权限控制
- **教师数据隔离**:教师只能查看和管理自己负责的班级相关数据
- **学员数据隔离**:学员只能查看自己的学习记录和成绩
- **管理员全局权限**:管理员可以查看和管理所有数据
## 视频处理策略
### 视频压缩和优化
- **目标**:在保证清晰度的情况下,文件大小尽量最小
- **方案**
1. 使用FFmpeg进行视频转码
2. 视频编码H.264(兼容性好)
3. 音频编码AAC
4. 分辨率根据原始视频自动适配最大不超过1080p
5. 码率:动态码率,平衡清晰度和文件大小
6. 格式统一转换为MP4格式
### 视频播放进度跟踪
- **跟踪方式**
1. 前端定时上报播放进度每5-10秒
2. 视频暂停/播放/结束事件上报
3. 后端记录每次学习的详细记录
4. 计算总学习时长和播放进度百分比
## 图表展示需求
### 成绩统计图表类型
1. **柱状图**:各班级/学员成绩对比
2. **折线图**:成绩趋势分析(时间维度)
3. **饼图**:成绩分布(优秀、良好、及格、不及格)
4. **雷达图**:多维度成绩分析
5. **表格**:详细成绩数据表格
### 图表展示位置
- **管理后台**:成绩管理页面、仪表盘
- **图表库**前端使用ECharts后端生成使用JFreeChart或ECharts Java
## 已确认事项
**用户角色**:区分管理员和教师,教师只能管理自己的班级,管理员管理所有
**课程分类**:按学科分类,学科分类由管理员管理
**学习进度**:视频播放进度实时跟踪,记录学习次数和观看时间,管理员和教师都可查看
**考试规则**:教师可以自定义,管理员可以限制是否重考
**成绩统计**:需要图表展示(柱状图、折线图、饼图等)
**文件大小**:暂无限制,在保证清晰度的情况下文件大小尽量最小
**设备兼容性**同时兼容iOS和Android兼容主流系统iOS 12+、Android 8.0+