# 在线学习系统实施计划 ## 项目架构设计 ### 系统架构 ``` ┌─────────────────┐ ┌─────────────────┐ │ 管理后台 │ │ 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+)