# 课程管理系统

## 相关源文件

- [.gitignore](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/.gitignore)
- [create_table.sql](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/sql/create_table.sql)
- [MyBatisPlusConfig.java](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/config/MyBatisPlusConfig.java)
- [CodeGenerator.java](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/generate/CodeGenerator.java)
- [UserDailyArticleMapper.java](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/mapper/UserDailyArticleMapper.java)
- [UserDailyWordMapper.java](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/mapper/UserDailyWordMapper.java)
- [TeacherAddRequest.java](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/model/dto/teacher/TeacherAddRequest.java)
- [TeacherQueryRequest.java](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/model/dto/teacher/TeacherUpdateRequest.java)
- [CourseServiceImpl.java](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/impl/CourseServiceImpl.java)
- [DailyArticleServiceImpl.java](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/impl/DailyArticleServiceImpl.java)
- [DailyWordServiceImpl.java](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/impl/DailyWordServiceImpl.java)
- [PostFavourMapper.xml](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/resources/mapper/PostFavourMapper.xml)
- [PostMapper.xml](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/resources/mapper/PostMapper.xml)
- [PostThumbMapper.xml](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/resources/mapper/PostThumbMapper.xml)
- [UserDailyArticleMapper.xml](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/resources/mapper/UserDailyArticleMapper.xml)
- [UserDailyWordMapper.xml](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/resources/mapper/UserDailyWordMapper.xml)
- [UserMapper.xml](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/resources/mapper/UserMapper.xml)

## 目的和范围

本文档描述了 SmartClass 平台内的课程管理系统。该系统提供创建、组织、分发和跟踪教育课程的功能，包括课程内容组织、注册管理、进度跟踪以及与其他平台组件的交互。

有关可在课程中使用的 AI 虚拟人系统的详细信息，请参见 [AI Avatar Chat System](https://deepwiki.com/Ubanillx/smartclass-backend/2-ai-avatar-chat-system)。

有关补充课程的日常学习内容的详细信息，请参见 [Daily Learning System](https://deepwiki.com/Ubanillx/smartclass-backend/3-daily-learning-system)。

来源：[sql/create_table.sql437-639](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/sql/create_table.sql#L437-L639)

## 数据模型

课程管理系统建立在一个结构化的数据模型之上，以分层方式组织教育内容。

### 课程数据结构

来源：[sql/create_table.sql437-639](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/sql/create_table.sql#L437-L639)

### 关键实体

| 实体 | 目的 | 关键属性 |
| --- | --- | --- |
| Course | 主课程实体 | 标题，描述，价格，难度，状态 |
| CourseCategory | 按主题组织课程 | 名称，父ID（用于层次结构） |
| Teacher | 课程讲师资料 | 姓名，专长，介绍 |
| CourseChapter | 课程主要划分 | 标题，排序（顺序） |
|CourseSection|实际学习单元|标题，视频链接，持续时间，是否免费|
|CourseMaterial|补充资源|标题，文件链接，文件大小，文件类型|
|UserCourse|注册记录|用户ID，课程ID，价格，支付方式，状态|
|UserCourseProgress|学习进度|进度，观看时长，是否完成|
|CourseReview|学生反馈|内容，评分，点赞数|
|CourseFavourite|课程收藏夹|用户ID，课程ID|

来源：[sql/create_table.sql437-639](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/sql/create_table.sql#L437-L639)

## 课程组织

SmartClass 平台上的课程遵循一个层次结构：

来源：[sql/create_table.sql508-564](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/sql/create_table.sql#L508-L564)

## 课程管理服务

`CourseService` 提供管理平台上课程的核心功能。它处理所有与课程相关的 CRUD 操作和业务逻辑。

来源：[src/main/java/com/ubanillx/smartclass/service/impl/CourseServiceImpl.java42-343](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/impl/CourseServiceImpl.java#L42-L343)

### 关键操作

#### 课程创建和验证

`CourseService` 在创建之前验证课程数据，以确保所有必填字段存在且有效。课程创建需要：

1. 标题（非空，最多80个字符）
2. 描述
3. 教师分配
4. 价格定义
5. 类别分配

验证后，课程会用默认值初始化：

- 学生人数 = 0
- 评分分数 = 0
- 评分人数 = 0

来源：[src/main/java/com/ubanillx/smartclass/service/impl/CourseServiceImpl.java48-96](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/impl/CourseServiceImpl.java#L48-L96)

#### 课程数据转换

该服务在数据库实体和视图对象（VO）之间进行转换，以为前端提供丰富的课程数据：

- `getCourseVO(Course)`：将单个课程转换为 CourseVO，包括教师信息
- `getCourseVO(List<Course>)`：批量转换，优化教师数据加载
- `getCourseVO(Course, User)`：带有用户特定数据的上下文转换

来源：[src/main/java/com/ubanillx/smartclass/service/impl/CourseServiceImpl.java99-219](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/impl/CourseServiceImpl.java#L99-L219)

## 课程注册和进度跟踪

系统通过 `user_course` 和 `user_course_progress` 表来跟踪用户的注册和课程进度。

数据库课程服务系统用户数据库课程服务系统注册课程处理注册创建 user_course 记录增加课程学生数量确认注册成功注册确认查看课程内容获取课程部分返回部分数据显示课程内容完成部分更新进度创建/更新 user_course_progress确认进度更新进度已确认

来源：[sql/create_table.sql567-605](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/sql/create_table.sql#L567-L605) [src/main/java/com/ubanillx/smartclass/service/impl/CourseServiceImpl.java296-306](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/impl/CourseServiceImpl.java#L296-L306)

### 注册管理

系统在 `user_course` 表中记录课程注册信息，存储以下内容：

- 用户和课程 ID
- 购买详情（价格，支付方式，时间）
- 注册状态（未付款，已付款，过期，退款）
- 过期时间（如适用）

当用户注册课程时，系统：

1. 在 `user_course` 中创建记录
2. 增加课程的学生数量
3. 初始化进度跟踪

来源：[sql/create_table.sql567-585](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/sql/create_table.sql#L567-L585) [src/main/java/com/ubanillx/smartclass/service/impl/CourseServiceImpl.java296-306](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/impl/CourseServiceImpl.java#L296-L306)

### 进度跟踪

用户通过课程内容的进度在章节级别通过 `user_course_progress` 表进行跟踪：

- 进度百分比（0-100%）
- 观看时长（秒）
- 最后视频位置
- 完成状态和时间

这使系统能够：

- 显示用户在课程中的进度
- 记住视频位置以便以后继续播放
- 计算整体课程完成情况

来源：[sql/create_table.sql588-605](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/sql/create_table.sql#L588-L605)

# 课程评分和评论系统

平台包含了一个全面的课程评分和评论系统。

来源：[sql/create_table.sql608-626](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/sql/create_table.sql#L608-L626) [src/main/java/com/ubanillx/smartclass/service/impl/CourseServiceImpl.java267-293](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/impl/CourseServiceImpl.java#L267-L293)

## 评论管理

课程评论存储在 `course_review` 表中，包括：

- 评分（1-5 分）
- 评论内容
- 点赞数和回复数
- 管理员回复
- 审核状态（待审核、已发布、被拒绝）

`CourseService` 提供了 `updateCourseRating` 方法，用于在提交新评论时重新计算和更新整体课程评分。

来源：[sql/create_table.sql608-626](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/sql/create_table.sql#L608-L626) [src/main/java/com/ubanillx/smartclass/service/impl/CourseServiceImpl.java267-293](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/impl/CourseServiceImpl.java#L267-L293)

## 课程发现

系统提供了几种方法帮助用户发现相关课程：

### 课程推荐

`CourseService` 中的 `getRecommendCourses` 方法基于以下因素提供个性化课程推荐：

- 类别偏好
- 难度等级
- 受欢迎程度（学生数量和评分）

```java
List<CourseVO> recommendedCourses = courseService.getRecommendCourses(
    categoryId,  // 可选类别过滤
    difficulty,  // 可选难度等级
    10,          // 要返回的课程数量
    currentUser  // 个性化用户上下文
);
```

来源：[src/main/java/com/ubanillx/smartclass/service/impl/CourseServiceImpl.java325-343](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/impl/CourseServiceImpl.java#L325-L343)

### 基于教师的发现

用户可以使用 `getCoursesByTeacher` 方法浏览特定教师的课程：

```java
List<CourseVO> teacherCourses = courseService.getCoursesByTeacher(
    teacherId,   // 按教师过滤
    currentUser  // 用户上下文
);
```

来源：[src/main/java/com/ubanillx/smartclass/service/impl/CourseServiceImpl.java308-322](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/impl/CourseServiceImpl.java#L308-L322)

### 高级搜索和过滤

`getQueryWrapper` 方法构建复杂的查询以进行课程搜索，并支持多种过滤条件：

- 标题（部分匹配）
- 课程类型（公开、付费、会员专属）
- 难度等级
- 类别
- 教师
- 价格范围
- 标签

来源：[src/main/java/com/ubanillx/smartclass/service/impl/CourseServiceImpl.java221-265](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/impl/CourseServiceImpl.java#L221-L265)

## 与其他系统的集成

课程管理系统与 SmartClass 平台的其他几个组件集成：

### 日常学习系统集成

课程可以通过日常学习内容（文章和单词）来补充，以强化学习概念。虽然日常学习系统是独立的，但课程可以将日常内容作为补充材料引用。

来源：[DailyArticleServiceImpl.java](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/impl/DailyArticleServiceImpl.java) [DailyWordServiceImpl.java](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/impl/DailyWordServiceImpl.java)

### 用户学习统计

课程完成情况有助于用户的学习统计数据和成就，这些数据记录在 `user_learning_stats` 表中。

来源：[sql/create_table.sql94-114](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/sql/create_table.sql#L94-L114)

### 学习记录

系统在 `user_learning_record` 表中维护详细的学习记录，其中包括：

- 记录类型（包括课程相关活动）
- 学习持续时间
- 获得的积分和经验值
- 测验正确率

来源：[sql/create_table.sql241-263](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/sql/create_table.sql#L241-L263)

## 技术实现细节

### 服务层实现

课程管理功能主要在 `CourseServiceImpl` 类中实现，该类扩展了 MyBatis-Plus 的 `ServiceImpl` 以提供数据访问操作。

关键技术方面包括：

- MyBatis-Plus 集成以进行数据库操作
- 注册和进度更新的事务管理
- 相关数据（教师、类别）的优化批量加载
- 实体与 VOs 之间的数据转换

来源：[src/main/java/com/ubanillx/smartclass/service/impl/CourseServiceImpl.java35-344](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/impl/CourseServiceImpl.java#L35-L344)

### 数据库模式优化

数据库模式包含多项优化措施：

- 在频繁查询的列上建立索引（courseId, userId, status）
- 唯一约束以防止重复注册和进度记录
- 排序列以高效排序章节和节
- 软删除机制（isDelete 标志）以保持数据完整性

来源：[sql/create_table.sql437-639](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/sql/create_table.sql#L437-L639)