# 实训平台客户端后端开发计划 ## 一、需求分析 根据《实训平台客户端完整需求文档(V2.0)》,需要实现以下核心模块: | 模块 | 功能点 | 状态 | | :--- | :--- | :--- | | **注册登录** | 手机号验证码注册、账号密码注册、微信扫码登录、自动注册 | 部分实现 | | **通知中心** | 通知列表、详情查看、单条/全部已读 | 未实现 | | **充值中心** | 充值套餐、套餐支付、自定义充值 | 已实现(沿用account/accountTransaction/paymentOrder表) | | **教学管理** | 课程管理、作业管理、考试管理、考勤管理 | 未实现 | | **优秀作品** | 作品展示、点赞互动 | 未实现 | | **个人中心** | 个人信息、消费记录、订单记录、密码修改、手机号修改 | 部分实现 | ## 二、技术架构 ### 2.1 技术栈 - **语言**: Java 17 - **框架**: Spring Boot 3.2.2 - **数据库**: MySQL - **ORM**: MyBatis - **缓存**: Redis + Redisson - **认证**: Sa-Token - **支付**: 微信支付 SDK、支付宝 SDK - **文档**: SpringDoc OpenAPI ### 2.2 代码结构 ``` src/main/java/com/kexue/skills/ ├── annotation/ # 自定义注解 ├── aspect/ # AOP切面 ├── common/ # 通用工具类 ├── config/ # 配置类 ├── controller/ # 控制器 ├── entity/ # 实体类 │ ├── base/ # 基础实体 │ ├── dto/ # 数据传输对象 │ ├── request/ # 请求对象 │ └── response/ # 响应对象 ├── exception/ # 异常处理 ├── interceptor/ # 拦截器 ├── mapper/ # MyBatis映射器 ├── service/ # 业务服务 │ └── impl/ # 服务实现 └── SkillsApp.java # 启动类 ``` ## 三、开发计划 ### 阶段一:数据库表设计与初始化(预计1天) **任务1.1:设计并创建教学管理相关表** - `edu_course` - 课程表 - `edu_course_student` - 课程学生关联表 - `edu_homework` - 作业表 - `edu_homework_submit` - 作业提交表 - `edu_exam` - 考试表 - `edu_exam_paper` - 考试答卷表 - `edu_attendance` - 考勤表 - `edu_attendance_record` - 考勤记录表 **任务1.2:设计并创建通知表** - `sys_notification` - 通知表 - `sys_notification_read` - 通知已读记录表 **任务1.3:设计并创建优秀作品表** - `edu_excellent_work` - 优秀作品表 - `edu_work_like` - 作品点赞表 **任务1.4:扩展用户表字段** - 添加院校相关字段:school_id, college_id, major_id, grade, class_name - 添加角色字段:role_type (1-学生, 2-老师) - 添加账户状态字段:account_status (1-可学用户, 2-试用用户, 3-学校用户, 4-冻结用户) - 添加激活码相关字段:activation_code, binding_status ### 阶段二:用户体系模块开发(预计2天) **任务2.1:完善注册功能** - 添加学校/学院/专业/年级/班级选择接口 - 实现手机号验证码注册 - 实现账号密码注册 - 支持默认角色为学生 **任务2.2:完善登录功能** - 实现微信扫码登录(绑定wxid) - 实现手机号密码登录 - 完善自动注册逻辑 **任务2.3:院校绑定功能** - 实现身份信息填写接口 - 实现院校预校验接口 - 实现激活码绑定接口 **任务2.4:个人中心功能** - 个人信息查看与修改 - 密码修改(含找回密码) - 绑定手机号修改 ### 阶段三:通知模块开发(预计1天) **任务3.1:通知管理接口** - 获取通知列表(按时间倒序) - 查看通知详情(自动标记已读) - 单条通知已读 - 全部通知已读 ### 阶段四:教学管理模块开发(预计4天) **任务4.1:课程管理** - 老师端:创建课程、管理课程、课程学生管理、导出成绩 - 学生端:查看课程、查看课程内容 **任务4.2:作业管理** - 老师端:作业草稿管理、发布作业、作业批改、优秀标记、删除作业 - 学生端:查看作业、提交作业、修改作业、重做退回作业 **任务4.3:考试管理** - 老师端:考试草稿管理、发布考试、阅卷管理、补考管理、删除考试 - 学生端:查看考试、参加考试、参加补考 **任务4.4:考勤管理** - 老师端:发起签到(二维码/手动点名)、管理签到记录、修改考勤状态 - 学生端:扫码签到、查看考勤记录 ### 阶段五:优秀作品模块开发(预计1天) **任务5.1:优秀作品展示** - 获取优秀作品列表 - 作品点赞(每个作品仅可点赞1次) ### 阶段六:统一异常处理与安全加固(预计1天) **任务6.1:统一异常处理** - 实现统一错误提示语 - 完善全局异常处理器 **任务6.2:安全加固** - 权限双重校验 - 数据隔离机制 - 操作日志留存 ## 四、接口清单 ### 4.1 用户体系接口 | API路径 | 方法 | 功能描述 | | :--- | :--- | :--- | | `/api/register/phone` | POST | 手机号验证码注册 | | `/api/register/password` | POST | 账号密码注册 | | `/api/login/wechat` | POST | 微信扫码登录 | | `/api/login/phone` | POST | 手机号验证码登录 | | `/api/login/password` | POST | 账号密码登录 | | `/api/binding/school/check` | POST | 院校预校验 | | `/api/binding/activation` | POST | 激活码绑定 | | `/api/user/info` | GET | 获取个人信息 | | `/api/user/info` | PUT | 修改个人信息 | | `/api/user/password` | PUT | 修改密码 | | `/api/user/phone` | PUT | 修改绑定手机号 | ### 4.2 通知接口 | API路径 | 方法 | 功能描述 | | :--- | :--- | :--- | | `/api/notification/list` | GET | 获取通知列表 | | `/api/notification/detail/{id}` | GET | 查看通知详情 | | `/api/notification/read/{id}` | PUT | 标记单条已读 | | `/api/notification/read/all` | PUT | 标记全部已读 | ### 4.3 课程管理接口 | API路径 | 方法 | 功能描述 | | :--- | :--- | :--- | | `/api/course/list` | GET | 获取课程列表 | | `/api/course/create` | POST | 创建课程 | | `/api/course/update` | PUT | 修改课程信息 | | `/api/course/delete/{id}` | DELETE | 删除课程 | | `/api/course/students/{courseId}` | GET | 获取课程学生列表 | | `/api/course/addStudents` | POST | 批量添加学生 | | `/api/course/removeStudent` | DELETE | 踢出学生 | | `/api/course/exportScore/{courseId}` | GET | 导出成绩 | ### 4.5 作业管理接口 | API路径 | 方法 | 功能描述 | | :--- | :--- | :--- | | `/api/homework/list/{courseId}` | GET | 获取作业列表 | | `/api/homework/create` | POST | 创建作业草稿 | | `/api/homework/update` | PUT | 修改作业草稿 | | `/api/homework/delete/{id}` | DELETE | 删除作业 | | `/api/homework/publish` | PUT | 发布作业 | | `/api/homework/submit` | POST | 提交作业 | | `/api/homework/correct` | PUT | 批改作业 | | `/api/homework/excellent/{id}` | PUT | 标记优秀 | | `/api/homework/return` | PUT | 退回作业 | ### 4.6 考试管理接口 | API路径 | 方法 | 功能描述 | | :--- | :--- | :--- | | `/api/exam/list/{courseId}` | GET | 获取考试列表 | | `/api/exam/create` | POST | 创建考试草稿 | | `/api/exam/update` | PUT | 修改考试草稿 | | `/api/exam/delete/{id}` | DELETE | 删除考试 | | `/api/exam/publish` | PUT | 发布考试 | | `/api/exam/take/{examId}` | POST | 参加考试 | | `/api/exam/correct` | PUT | 阅卷打分 | | `/api/exam/makeup` | POST | 创建补考 | ### 4.7 考勤管理接口 | API路径 | 方法 | 功能描述 | | :--- | :--- | :--- | | `/api/attendance/start` | POST | 发起签到 | | `/api/attendance/list/{courseId}` | GET | 获取签到记录列表 | | `/api/attendance/detail/{id}` | GET | 查看签到详情 | | `/api/attendance/sign` | POST | 扫码签到 | | `/api/attendance/status` | PUT | 修改考勤状态 | | `/api/attendance/myList` | GET | 个人考勤记录 | ### 4.8 优秀作品接口 | API路径 | 方法 | 功能描述 | | :--- | :--- | :--- | | `/api/excellent/list` | GET | 获取优秀作品列表 | | `/api/excellent/like/{workId}` | POST | 点赞作品 | ## 五、数据库表设计 ### 5.1 用户表扩展字段 ```sql -- sys_user 表新增字段(仅添加通用字段,角色专属字段移至扩展表) ALTER TABLE `sys_user` ADD COLUMN `account_status` TINYINT(1) DEFAULT '1' COMMENT '账户状态:1-可学用户,2-试用用户,3-学校用户,4-冻结用户', ADD COLUMN `wxid` VARCHAR(100) DEFAULT NULL COMMENT '微信ID'; ``` ### 5.2 用户角色关联表 ```sql CREATE TABLE `sys_user_role` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `user_id` BIGINT(20) NOT NULL COMMENT '用户ID', `role_code` VARCHAR(50) NOT NULL COMMENT '角色编码:student-学生,teacher-老师,admin-管理员', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_user_role` (`user_id`, `role_code`), KEY `idx_user_id` (`user_id`), KEY `idx_role_code` (`role_code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户角色关联表'; ``` ### 5.3 学生扩展表 ```sql CREATE TABLE `edu_student` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `user_id` BIGINT(20) NOT NULL COMMENT '用户ID(关联sys_user)', `school_id` BIGINT(20) NOT NULL COMMENT '学校ID', `college_id` BIGINT(20) DEFAULT NULL COMMENT '学院ID', `major_id` BIGINT(20) DEFAULT NULL COMMENT '专业ID', `grade` VARCHAR(20) DEFAULT NULL COMMENT '年级', `class_name` VARCHAR(50) DEFAULT NULL COMMENT '班级', `student_no` VARCHAR(50) DEFAULT NULL COMMENT '学号', `real_name` VARCHAR(50) DEFAULT NULL COMMENT '真实姓名', `activation_code` VARCHAR(50) DEFAULT NULL COMMENT '激活码', `binding_status` TINYINT(1) DEFAULT '0' COMMENT '绑定状态:0-未绑定,1-已绑定', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_user_id` (`user_id`), KEY `idx_school_id` (`school_id`), KEY `idx_college_id` (`college_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学生扩展表'; ``` ### 5.4 教师扩展表 ```sql CREATE TABLE `edu_teacher` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `user_id` BIGINT(20) NOT NULL COMMENT '用户ID(关联sys_user)', `school_id` BIGINT(20) NOT NULL COMMENT '学校ID', `college_id` BIGINT(20) DEFAULT NULL COMMENT '学院ID', `real_name` VARCHAR(50) DEFAULT NULL COMMENT '真实姓名', `teacher_no` VARCHAR(50) DEFAULT NULL COMMENT '教师编号', `title` VARCHAR(50) DEFAULT NULL COMMENT '职称', `activation_code` VARCHAR(50) DEFAULT NULL COMMENT '激活码', `binding_status` TINYINT(1) DEFAULT '0' COMMENT '绑定状态:0-未绑定,1-已绑定', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_user_id` (`user_id`), KEY `idx_school_id` (`school_id`), KEY `idx_college_id` (`college_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='教师扩展表'; ``` ### 5.5 通知表 ```sql CREATE TABLE `sys_notification` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `school_id` BIGINT(20) NOT NULL COMMENT '学校ID(数据隔离)', `user_id` BIGINT(20) NOT NULL COMMENT '用户ID', `title` VARCHAR(100) NOT NULL COMMENT '通知标题', `content` TEXT NOT NULL COMMENT '通知内容', `type` TINYINT(1) DEFAULT '1' COMMENT '通知类型:1-系统通知,2-作业通知,3-考试通知,4-考勤通知', `is_read` TINYINT(1) DEFAULT '0' COMMENT '是否已读:0-未读,1-已读', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), KEY `idx_school_id` (`school_id`), KEY `idx_user_id` (`user_id`), KEY `idx_is_read` (`is_read`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='通知表'; ``` ### 5.6 课程表 ```sql CREATE TABLE `edu_course` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `school_id` BIGINT(20) NOT NULL COMMENT '学校ID(数据隔离)', `name` VARCHAR(100) NOT NULL COMMENT '课程名称', `cover` VARCHAR(255) DEFAULT NULL COMMENT '课程封面', `description` TEXT DEFAULT NULL COMMENT '课程简介', `class_time` VARCHAR(100) DEFAULT NULL COMMENT '上课时间', `teaching_method` TINYINT(1) DEFAULT '1' COMMENT '授课方式:1-线上,2-线下,3-混合', `teacher_id` BIGINT(20) NOT NULL COMMENT '创建老师ID', `status` TINYINT(1) DEFAULT '1' COMMENT '课程状态:1-进行中,2-已结课', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_school_id` (`school_id`), KEY `idx_teacher_id` (`teacher_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='课程表'; ``` ### 5.7 课程学生关联表 ```sql CREATE TABLE `edu_course_student` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `school_id` BIGINT(20) NOT NULL COMMENT '学校ID(数据隔离)', `course_id` BIGINT(20) NOT NULL COMMENT '课程ID', `student_id` BIGINT(20) NOT NULL COMMENT '学生ID', `join_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '加入时间', `is_kicked` TINYINT(1) DEFAULT '0' COMMENT '是否被踢出:0-正常,1-已踢出', PRIMARY KEY (`id`), UNIQUE KEY `uk_course_student` (`course_id`, `student_id`), KEY `idx_school_id` (`school_id`), KEY `idx_course_id` (`course_id`), KEY `idx_student_id` (`student_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='课程学生关联表'; ``` ### 5.8 作业表 ```sql CREATE TABLE `edu_homework` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `school_id` BIGINT(20) NOT NULL COMMENT '学校ID(数据隔离)', `course_id` BIGINT(20) NOT NULL COMMENT '课程ID', `name` VARCHAR(100) NOT NULL COMMENT '作业名称', `requirement` TEXT DEFAULT NULL COMMENT '作业要求', `questions` TEXT NOT NULL COMMENT '题目JSON', `allow_late` TINYINT(1) DEFAULT '0' COMMENT '是否允许迟交', `start_time` DATETIME NOT NULL COMMENT '开始时间', `end_time` DATETIME NOT NULL COMMENT '截止时间', `status` TINYINT(1) DEFAULT '1' COMMENT '状态:1-草稿,2-已发布', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_school_id` (`school_id`), KEY `idx_course_id` (`course_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='作业表'; ``` ### 5.9 作业提交表 ```sql CREATE TABLE `edu_homework_submit` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `school_id` BIGINT(20) NOT NULL COMMENT '学校ID(数据隔离)', `homework_id` BIGINT(20) NOT NULL COMMENT '作业ID', `student_id` BIGINT(20) NOT NULL COMMENT '学生ID', `answers` TEXT NOT NULL COMMENT '答案JSON', `submit_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '提交时间', `is_late` TINYINT(1) DEFAULT '0' COMMENT '是否迟交', `status` TINYINT(1) DEFAULT '1' COMMENT '状态:1-待批改,2-已批改,3-已退回', `score` DECIMAL(5,2) DEFAULT NULL COMMENT '分数', `comment` TEXT DEFAULT NULL COMMENT '评语', `is_excellent` TINYINT(1) DEFAULT '0' COMMENT '是否优秀', `redo_end_time` DATETIME DEFAULT NULL COMMENT '重做截止时间', `redo_count` INT(11) DEFAULT '0' COMMENT '重做次数', PRIMARY KEY (`id`), KEY `idx_school_id` (`school_id`), KEY `idx_homework_id` (`homework_id`), KEY `idx_student_id` (`student_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='作业提交表'; ``` ### 5.10 考试表 ```sql CREATE TABLE `edu_exam` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `school_id` BIGINT(20) NOT NULL COMMENT '学校ID(数据隔离)', `course_id` BIGINT(20) NOT NULL COMMENT '课程ID', `name` VARCHAR(100) NOT NULL COMMENT '考试名称', `requirement` TEXT DEFAULT NULL COMMENT '考试要求', `questions` TEXT NOT NULL COMMENT '考卷JSON', `duration` INT(11) NOT NULL COMMENT '考试时长(分钟)', `start_time` DATETIME NOT NULL COMMENT '开始时间', `end_time` DATETIME NOT NULL COMMENT '截止时间', `status` TINYINT(1) DEFAULT '1' COMMENT '状态:1-草稿,2-已发布,3-已结束', `is_makeup` TINYINT(1) DEFAULT '0' COMMENT '是否补考', `parent_exam_id` BIGINT(20) DEFAULT NULL COMMENT '关联主考ID', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_school_id` (`school_id`), KEY `idx_course_id` (`course_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考试表'; ``` ### 5.11 考试答卷表 ```sql CREATE TABLE `edu_exam_paper` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `school_id` BIGINT(20) NOT NULL COMMENT '学校ID(数据隔离)', `exam_id` BIGINT(20) NOT NULL COMMENT '考试ID', `student_id` BIGINT(20) NOT NULL COMMENT '学生ID', `answers` TEXT NOT NULL COMMENT '答案JSON', `submit_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '提交时间', `status` TINYINT(1) DEFAULT '1' COMMENT '状态:1-待阅卷,2-已阅卷', `score` DECIMAL(5,2) DEFAULT NULL COMMENT '分数', `comment` TEXT DEFAULT NULL COMMENT '评语', PRIMARY KEY (`id`), UNIQUE KEY `uk_exam_student` (`exam_id`, `student_id`), KEY `idx_school_id` (`school_id`), KEY `idx_exam_id` (`exam_id`), KEY `idx_student_id` (`student_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考试答卷表'; ``` ### 5.12 考勤表 ```sql CREATE TABLE `edu_attendance` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `school_id` BIGINT(20) NOT NULL COMMENT '学校ID(数据隔离)', `course_id` BIGINT(20) NOT NULL COMMENT '课程ID', `name` VARCHAR(100) DEFAULT NULL COMMENT '签到名称(按时间自动生成)', `start_time` DATETIME NOT NULL COMMENT '开始时间', `duration` INT(11) DEFAULT '15' COMMENT '签到时长(分钟)', `type` TINYINT(1) DEFAULT '1' COMMENT '签到类型:1-二维码签到,2-手动点名', `status` TINYINT(1) DEFAULT '1' COMMENT '状态:1-进行中,2-已结束', `qr_code` VARCHAR(255) DEFAULT NULL COMMENT '二维码内容', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), KEY `idx_school_id` (`school_id`), KEY `idx_course_id` (`course_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考勤表'; ``` ### 5.13 考勤记录表 ```sql CREATE TABLE `edu_attendance_record` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `school_id` BIGINT(20) NOT NULL COMMENT '学校ID(数据隔离)', `attendance_id` BIGINT(20) NOT NULL COMMENT '考勤ID', `student_id` BIGINT(20) NOT NULL COMMENT '学生ID', `status` TINYINT(1) DEFAULT '1' COMMENT '考勤状态:1-出勤,2-迟到,3-缺勤,4-请假', `sign_time` DATETIME DEFAULT NULL COMMENT '签到时间', `remark` VARCHAR(255) DEFAULT NULL COMMENT '备注(手动点名时填写)', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_attendance_student` (`attendance_id`, `student_id`), KEY `idx_school_id` (`school_id`), KEY `idx_attendance_id` (`attendance_id`), KEY `idx_student_id` (`student_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考勤记录表'; ``` ### 5.14 优秀作品表 ```sql CREATE TABLE `edu_excellent_work` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `school_id` BIGINT(20) NOT NULL COMMENT '学校ID(数据隔离)', `work_type` TINYINT(1) NOT NULL COMMENT '作品类型:1-作业,2-考试', `work_id` BIGINT(20) NOT NULL COMMENT '关联作业/考试ID', `submit_id` BIGINT(20) NOT NULL COMMENT '关联提交ID', `student_id` BIGINT(20) NOT NULL COMMENT '学生ID', `score` DECIMAL(5,2) DEFAULT NULL COMMENT '分数', `comment` TEXT DEFAULT NULL COMMENT '评语', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '标记时间', PRIMARY KEY (`id`), KEY `idx_school_id` (`school_id`), KEY `idx_work_type_work_id` (`work_type`, `work_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='优秀作品表'; ``` ### 5.15 作品点赞表 ```sql CREATE TABLE `edu_work_like` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `school_id` BIGINT(20) NOT NULL COMMENT '学校ID(数据隔离)', `work_id` BIGINT(20) NOT NULL COMMENT '优秀作品ID', `user_id` BIGINT(20) NOT NULL COMMENT '点赞用户ID', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '点赞时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_work_user` (`work_id`, `user_id`), KEY `idx_school_id` (`school_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='作品点赞表'; ``` ## 六、开发进度安排 | 阶段 | 任务 | 预计天数 | 负责人 | | :--- | :--- | :--- | :--- | | 第一阶段 | 数据库表设计与初始化 | 1 | 开发人员 | | 第二阶段 | 用户体系模块开发 | 2 | 开发人员 | | 第三阶段 | 通知模块开发 | 1 | 开发人员 | | 第四阶段 | 教学管理模块开发 | 4 | 开发人员 | | 第五阶段 | 优秀作品模块开发 | 1 | 开发人员 | | 第六阶段 | 统一异常处理与安全加固 | 1 | 开发人员 | | **总计** | | **10天** | | ## 七、风险与注意事项 ### 7.1 风险识别 | 风险 | 描述 | 应对措施 | | :--- | :--- | :--- | | 数据权限安全 | 用户可能越权访问其他用户数据 | 前端展示+后端接口双重校验,token验证 | | 并发问题 | 高并发场景下的数据一致性问题 | 使用Redis分布式锁,数据库事务 | | 支付安全 | 支付回调可能被篡改 | 验证签名,使用安全的回调地址 | | 接口幂等性 | 重复提交导致数据重复 | 使用防重复提交注解,唯一业务ID | ### 7.2 注意事项 1. **权限校验**:所有API查询严格校验token与对应用户ID 2. **数据排序**:所有数据获取接口默认按日期最新排序 3. **操作留痕**:课程/作业/考试/考勤/充值操作全量日志留存≥1年 4. **流程不可逆**:院校绑定、注册登录、作业考试发布流程严格按文档执行 5. **异常处理**:统一错误提示语,返回标准化错误信息 --- **文档版本**: V1.0 **创建时间**: 2026-04-30 **创建人**: 系统生成