# 每日词汇系统

相关源文件：

- [](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/controller/DailyWordController.java)
- [](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/mapper/UserDailyArticleMapper.java)
- [](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/mapper/UserDailyWordMapper.java)
- [](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/model/entity/DailyWord.java)
- [](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/model/vo/DailyWordVO.java)
- [](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/DailyWordService.java)
- [](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/DailyWordThumbService.java)
- [](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/impl/CourseServiceImpl.java)
- [](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/impl/DailyArticleServiceImpl.java)
- [](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/impl/DailyWordServiceImpl.java)
- [](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/resources/mapper/DailyWordMapper.xml)
- [](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/resources/mapper/UserDailyArticleMapper.xml)
- [](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/resources/mapper/UserDailyWordMapper.xml)

## 1. 目的与范围

每日词汇系统为 SmartClass 学习平台内的词汇管理、传递和用户互动跟踪提供了功能。该子系统是更大规模的每日学习系统的一部分（参见 [每日学习系统](https://deepwiki.com/Ubanillx/smartclass-backend/3-daily-learning-system)），专注于词汇获取。有关相关每日学习内容的信息，请参见 [每日文章](https://deepwiki.com/Ubanillx/smartclass-backend/3.1-daily-articles)。

来源：[src/main/java/com/ubanillx/smartclass/service/DailyWordService.java1-90](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/DailyWordService.java#L1-L90)

## 2. 系统概述

每日词汇系统使管理员能够创建带有丰富元数据（发音、例句、翻译）的词汇，这些词汇可以按计划推送给用户。用户可以通过学习、点赞和收藏这些词汇进行互动。该系统还跟踪用户的学习进度和掌握程度。

来源：[src/main/java/com/ubanillx/smartclass/controller/DailyWordController.java1-220](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/controller/DailyWordController.java#L1-L220) [src/main/java/com/ubanillx/smartclass/service/impl/DailyWordServiceImpl.java1-183](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/impl/DailyWordServiceImpl.java#L1-L183) [src/main/java/com/ubanillx/smartclass/mapper/UserDailyWordMapper.java1-44](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/mapper/UserDailyWordMapper.java#L1-L44)

## 3. 数据模型

### 3.1 核心实体

每日词汇系统围绕两个主要实体构建：

来源：[src/main/java/com/ubanillx/smartclass/model/entity/DailyWord.java1-101](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/model/entity/DailyWord.java#L1-L101) [src/main/resources/mapper/UserDailyWordMapper.xml1-51](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/resources/mapper/UserDailyWordMapper.xml#L1-L51)

### 3.2 每日词汇属性

系统中的每个词汇都有以下关键属性：

| 属性 | 描述 |
| --- | --- |
| word | 实际词汇 |
| pronunciation | 音标发音指南 |
| audioUrl | 发音音频文件的 URL |
| translation | 翻译或定义 |
| example | 使用该词的例句 |
| exampleTranslation | 例句的翻译 |
| difficulty | 难度等级 (1=简单, 2=中等, 3=困难) |
| category | 主题分类（例如“商务”、“旅行”） |
| notes | 其他备注或解释 |
| publishDate | 向用户发布该词的日期 |

来源：[src/main/java/com/ubanillx/smartclass/model/vo/DailyWordVO.java1-79](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/model/vo/DailyWordVO.java#L1-L79)

## 4. 关键组件

### 4.1 服务层

`DailyWordService` 接口定义了管理词汇的核心操作：

实现 (`DailyWordServiceImpl`) 提供了几个关键功能：

1. **词汇管理**
    
    - 创建带验证的新词汇
    - 构建用于过滤词汇的查询条件
2. **词汇检索**
    
    - 按特定日期获取词汇
    - 获取随机词汇（可选难度过滤）
    - 从最新批次中获取一个随机词汇
3. **用户互动跟踪**
    
    - 增加/减少点赞计数

来源：[src/main/java/com/ubanillx/smartclass/service/DailyWordService.java1-90](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/DailyWordService.java#L1-L90) [src/main/java/com/ubanillx/smartclass/service/impl/DailyWordServiceImpl.java1-183](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/impl/DailyWordServiceImpl.java#L1-L183)

### 4.2 控制器层

`DailyWordController` 公开了与词汇交互的 REST 端点：

| 端点 | 方法 | 描述 | 访问权限 |
| --- | --- | --- | --- |
| `/dailyWord/add` | POST | 创建新词汇 | 仅限管理员 |
| `/dailyWord/delete` | POST | 删除词汇 | 仅限管理员 |
| `/dailyWord/update` | POST | 更新词汇 | 仅限管理员 |
| `/dailyWord/get/vo` | GET | 通过 ID 获取词汇 | 所有用户 |
| `/dailyWord/list/page` | POST | 分页列出词汇 | 仅限管理员 |
| `/dailyWord/list/page/vo` | POST | 分页列出词汇（VO 格式） | 所有用户 |
| `/dailyWord/date` | GET | 按特定日期获取词汇 | 所有用户 |
| `/dailyWord/today` | GET | 从最新批次中获取一个随机词汇 | 所有用户 |
| `/dailyWord/random` | GET | 获取随机词汇（可选难度过滤） | 所有用户 |

来源：[src/main/java/com/ubanillx/smartclass/controller/DailyWordController.java34-220](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/controller/DailyWordController.java#L34-L220)

### 4.3 用户互动

系统通过 `UserDailyWord` 实体跟踪用户与词汇的互动，记录以下信息：

- 学习状态 (`isStudied`, `studyTime`)
- 点赞状态 (`isLiked`, `likeTime`)
- 收藏状态 (`isCollected`, `collectTime`)
- 用户笔记 (`noteContent`, `noteTime`)
- 掌握程度 (`masteryLevel`)

`DailyWordThumbService` 特别处理用户对词汇的点赞/取消点赞，增加或减少全局点赞计数。

来源：[src/main/java/com/ubanillx/smartclass/service/DailyWordThumbService.java1-38](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/DailyWordThumbService.java#L1-L38) [src/main/resources/mapper/UserDailyWordMapper.xml1-51](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/resources/mapper/UserDailyWordMapper.xml#L1-L51)

## 5. 核心工作流程

### 5.1 词汇创建与发布

"数据库""DailyWordService""DailyWordController"管理员"数据库""DailyWordService""DailyWordController"管理员POST /dailyWord/add (词汇数据)addDailyWord(dailyWord, 管理员ID)验证词汇数据save(dailyWord)成功返回词汇ID返回成功响应

此流程允许管理员将新词汇添加到系统中。服务会在保存前验证必填字段，如词汇文本和翻译。

来源：[src/main/java/com/ubanillx/smartclass/controller/DailyWordController.java54-67](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/controller/DailyWordController.java#L54-L67) [src/main/java/com/ubanillx/smartclass/service/impl/DailyWordServiceImpl.java38-58](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/impl/DailyWordServiceImpl.java#L38-L58)

### 5.2 用户词汇检索

"数据库""DailyWordService""DailyWordController"用户"数据库""DailyWordService""DailyWordController"用户alt[获取今日词汇][按日期获取词汇][获取随机词汇]GET /dailyWord/todaygetRandomLatestWord()查询最新词汇返回最新词汇列表随机选择一个词汇返回选中的词汇返回词汇数据GET /dailyWord/date?date=YYYY-MM-DDgetDailyWordByDate(date)按发布日期查询词汇返回匹配的词汇返回词汇列表返回词汇数据GET /dailyWord/random?difficulty=2getRandomDailyWord(difficulty)按 RAND() 排序查询返回随机词汇返回词汇数据返回词汇数据

系统为用户提供多种方式访问词汇，包括：

- 获取最新批次中的随机今日词汇
- 获取特定日期发布的词汇
- 获取完全随机的词汇（可选难度过滤）

来源：[src/main/java/com/ubanillx/smartclass/controller/DailyWordController.java184-219](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/controller/DailyWordController.java#L184-L219) [src/main/java/com/ubanillx/smartclass/service/impl/DailyWordServiceImpl.java61-137](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/impl/DailyWordServiceImpl.java#L61-L137) [src/main/java/com/ubanillx/smartclass/service/impl/DailyWordServiceImpl.java163-182](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/impl/DailyWordServiceImpl.java#L163-L182)

### 5.3 用户互动跟踪

系统通过 `UserDailyWord` 实体跟踪用户如何与词汇进行互动。关键互动包括：

1. **学习**：记录用户是否已学习某个词及学习时间
2. **点赞**：跟踪用户对词汇的点赞
3. **收藏**：允许用户保存词汇以供以后复习
4. **记笔记**：使用户能够添加自己的笔记
5. **掌握程度**：记录用户对每个词的掌握水平

`UserDailyWordMapper` 提供了专门的查询方法来检索用户喜欢或收藏的词汇：

"数据库""UserDailyWordMapper""UserService"用户"数据库""UserDailyWordMapper""UserService"用户连接 daily_word 和 user_daily_word请求收藏的词汇listFavourWordByPage(userId)执行 SQL JOIN 查询返回收藏的词汇返回词汇列表显示收藏的词汇

来源：[src/main/resources/mapper/UserDailyWordMapper.xml30-50](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/resources/mapper/UserDailyWordMapper.xml#L30-L50) [src/main/java/com/ubanillx/smartclass/mapper/UserDailyWordMapper.java28-42](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/mapper/UserDailyWordMapper.java#L28-L42)

## 6. 集成点

每日词汇系统与其他 SmartClass 平台部分集成：

1. **用户系统**：利用用户认证和资料
2. **每日学习系统**：作为更广泛日常学习内容模型的一部分
3. **成就系统**：可能将词汇掌握与用户成就连接（提供的文件中未显示实现）

来源：[src/main/java/com/ubanillx/smartclass/controller/DailyWordController.java1-220](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/controller/DailyWordController.java#L1-L220)

## 7. 技术实现细节

### 7.1 数据库查询

系统使用 MyBatis 进行数据库操作。关键 SQL 操作包括：

1. **基于日期的查询** 使用 `DATE_FORMAT` 来按发布日期检索词汇：
    
    ```
    -- getDailyWordByDate 方法示例
    DATE_FORMAT(publishDate, '%Y-%m-%d') = {dateString}
    ```
    
2. **随机选择** 使用 MySQL 的 `RAND()` 函数：
    
    ```
    -- getRandomDailyWord 方法示例
    ORDER BY RAND() LIMIT 1
    ```
    
3. **连接查询** 用于用户互动：
    
    ```
    -- UserDailyWordMapper.xml 中 listFavourWordByPage 示例
    SELECT w.* FROM daily_word w
    JOIN user_daily_word udw ON w.id = udw.wordId
    WHERE udw.userId = #{favourUserId} AND udw.isCollected = 1
    ```
    

来源：[src/main/java/com/ubanillx/smartclass/service/impl/DailyWordServiceImpl.java61-72](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/impl/DailyWordServiceImpl.java#L61-L72) [src/main/java/com/ubanillx/smartclass/service/impl/DailyWordServiceImpl.java126-137](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/impl/DailyWordServiceImpl.java#L126-L137) [src/main/resources/mapper/UserDailyWordMapper.xml30-39](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/resources/mapper/UserDailyWordMapper.xml#L30-L39)

### 7.2 查询参数和过滤

系统通过 `getQueryWrapper` 方法支持灵活的查询，允许按以下条件过滤：

- 词汇文本
- 翻译
- 难度级别
- 分类
- 发布日期范围
- 管理员 ID
- 创建时间

这种方法在整个应用程序中提供了一种一致的方式来构建数据库查询。

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

## 8. 总结

每日词汇系统为 SmartClass 平台内的词汇学习提供了一个全面的解决方案。它允许管理员管理带有丰富元数据的词汇库，同时为用户提供多种方式访问、互动并跟踪他们的学习进度。该系统与整个平台集成，作为日常学习课程的一部分，提供无缝的学习体验。