sxwz2.0/.trae/documents/development_plan.md
wangzhiwei 5f5c0759ce feat(notification): 实现通知功能,支持角色层级发送和课程群发
1. 修改 SysNotification 实体,新增 senderId, senderName, targetType 字段

2. 新增 SendNotificationRequest 请求DTO

3. 扩展通知类型至6种(新增用户通知、课程通知)

4. 实现角色层级权限控制,支持多级管理员通知下级

5. 支持老师群发课程通知给学生

6. 新增批量发送接口和权限配置
2026-05-15 16:57:07 +08:00

22 KiB
Raw Permalink Blame History

实训平台客户端后端开发计划

一、需求分析

根据《实训平台客户端完整需求文档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 注意事项

  1. 权限校验所有API查询严格校验token与对应用户ID
  2. 数据排序:所有数据获取接口默认按日期最新排序
  3. 操作留痕:课程/作业/考试/考勤/充值操作全量日志留存≥1年
  4. 流程不可逆:院校绑定、注册登录、作业考试发布流程严格按文档执行
  5. 异常处理:统一错误提示语,返回标准化错误信息

文档版本: V1.0
创建时间: 2026-04-30
创建人: 系统生成