1. 修改 SysNotification 实体,新增 senderId, senderName, targetType 字段 2. 新增 SendNotificationRequest 请求DTO 3. 扩展通知类型至6种(新增用户通知、课程通知) 4. 实现角色层级权限控制,支持多级管理员通知下级 5. 支持老师群发课程通知给学生 6. 新增批量发送接口和权限配置
22 KiB
22 KiB
实训平台客户端后端开发计划
一、需求分析
根据《实训平台客户端完整需求文档(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 用户表扩展字段
-- 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 用户角色关联表
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 学生扩展表
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 教师扩展表
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 通知表
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 课程表
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 课程学生关联表
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 作业表
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 作业提交表
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 考试表
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 考试答卷表
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 考勤表
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 考勤记录表
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 优秀作品表
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 作品点赞表
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 注意事项
- 权限校验:所有API查询严格校验token与对应用户ID
- 数据排序:所有数据获取接口默认按日期最新排序
- 操作留痕:课程/作业/考试/考勤/充值操作全量日志留存≥1年
- 流程不可逆:院校绑定、注册登录、作业考试发布流程严格按文档执行
- 异常处理:统一错误提示语,返回标准化错误信息
文档版本: V1.0
创建时间: 2026-04-30
创建人: 系统生成