# 每日文章系统

相关源文件：

- [](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/controller/DailyArticleController.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/service/DailyArticleService.java)
- [](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/DailyArticleThumbService.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/UserDailyArticleMapper.xml)
- [](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/resources/mapper/UserDailyWordMapper.xml)

本文档详细介绍了 SmartClass 后端中的每日文章系统，该系统定期向用户提供教育性阅读内容。管理员可以创建和管理文章，用户则可以阅读、点赞和收藏这些文章作为学习的一部分。有关每日词汇的信息，请参见[每日词汇](https://deepwiki.com/Ubanillx/smartclass-backend/3.2-daily-vocabulary)。

## 系统概述

每日文章系统实现了一种内容传递机制，向用户提供教育性文章。文章按类别划分、打标签并设置难度等级以满足不同的学习需求。

来源：[src/main/java/com/ubanillx/smartclass/controller/DailyArticleController.java](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/controller/DailyArticleController.java) [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/DailyArticleServiceImpl.java) [src/main/java/com/ubanillx/smartclass/service/DailyArticleThumbService.java](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/DailyArticleThumbService.java)

## 数据模型

每日文章功能基于两个主要实体构建：

来源：[src/main/resources/mapper/UserDailyArticleMapper.xml](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/resources/mapper/UserDailyArticleMapper.xml) [src/main/java/com/ubanillx/smartclass/mapper/UserDailyArticleMapper.java](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/mapper/UserDailyArticleMapper.java)

## 服务实现

`DailyArticleService` 接口及其实现提供了管理和检索文章的核心功能。

### 关键方法

| 方法 | 描述 |
| --- | --- |
| `addDailyArticle` | 创建新文章，若未提供摘要则自动生成 |
| `getDailyArticleByDate` | 获取特定日期发布的内容 |
| `increaseViewCount` | 当文章被阅读时增加查看计数器 |
| `increaseLikeCount` / `decreaseLikeCount` | 管理文章的点赞计数 |
| `getRecommendArticles` | 根据分类和难度获取热门文章 |
| `getRandomLatestArticle` | 从最新文章中随机获取一篇以增加多样性 |

来源：[src/main/java/com/ubanillx/smartclass/service/DailyArticleService.java](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/DailyArticleService.java) [src/main/java/com/ubanillx/smartclass/service/impl/DailyArticleServiceImpl.java38-66](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/impl/DailyArticleServiceImpl.java#L38-L66) [src/main/java/com/ubanillx/smartclass/service/impl/DailyArticleServiceImpl147-178](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/service/impl/DailyArticleServiceImpl.java#L147-L178)

### 文章推荐逻辑

服务实现了两种向用户推荐文章的方法：

1. **分类与难度基础**：`getRecommendArticles` 方法通过分类和难度级别过滤文章，然后根据流行度（查看和点赞计数）对它们进行排序。
    
2. **随机最新选择**：`getRandomLatestArticle` 方法从最近发布的10篇文章中随机选择一篇，既保持了多样性又保证了内容的新鲜感。
    

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

## API 端点

`DailyArticleController` 公开了以下 REST 端点：

### 管理员端点

需要管理员权限的端点：

| 端点 | 方法 | 描述 | 认证 |
| --- | --- | --- | --- |
| `/dailyArticle/add` | POST | 创建新文章 | 仅限管理员 |
| `/dailyArticle/delete` | POST | 删除文章 | 仅限管理员 |
| `/dailyArticle/update` | POST | 更新文章 | 仅限管理员 |
| `/dailyArticle/list/page` | POST | 带分页的文章列表 | 仅限管理员 |

### 用户端点

所有已认证用户可用的端点：

| 端点 | 方法 | 描述 |
| --- | --- | --- |
| `/dailyArticle/get/vo` | GET | 通过 ID 获取文章并增加查看计数 |
| `/dailyArticle/date` | GET | 通过特定日期获取文章 |
| `/dailyArticle/today` | GET | 获取随机最近文章作为“今日文章” |
| `/dailyArticle/recommend` | GET | 按分类/难度获取推荐文章 |
| `/dailyArticle/list/page/vo` | POST | 带 VO 转换的分页文章列表 |

来源：[src/main/java/com/ubanillx/smartclass/controller/DailyArticleController.java45-67](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/controller/DailyArticleController.java#L45-L67) [src/main/java/com/ubanillx/smartclass/controller/DailyArticleController.java115-134](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/controller/DailyArticleController.java#L115-L134) [src/main/java/com/ubanillx/smartclass/controller/DailyArticleController.java187-227](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/controller/DailyArticleController.java#L187-L227)

## 交互工作流

以下序列图说明了用户如何与每日文章进行交互：

数据库 DailyArticleThumbService DailyArticleService DailyArticleController 用户 数据库 DailyArticleThumbService DailyArticleService DailyArticleController 用户 GET /dailyArticle/get/vo?id=123 getById(123) 查询 daily_article 表 返回文章实体 increaseViewCount(123) 更新 viewCount = viewCount + 1 getDailyArticleVO(article) 返回 DailyArticleVO 包含增加查看计数的文章数据 GET /dailyArticle/today getRandomLatestArticle() 查询最新的10篇文章 返回文章列表 随机选择一篇文章 increaseViewCount(randomId) 返回选中的文章 今日文章 GET /dailyArticle/recommend?category=science&difficulty=2 getRecommendArticles("science", 2, 10) 查询按分类/难度匹配的文章 按 viewCount 和 likeCount 排序 返回匹配文章 返回推荐文章 推荐文章列表

来源：[src/main/java/com/ubanillx/smartclass/controller/DailyArticleController.java115-134](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/controller/DailyArticleController.java#L115-L134) [src/main/java/com/ubanillx/smartclass/controller/DailyArticleController.java201-210](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/controller/DailyArticleController.java#L201-L210) [src/main/java/com/ubanillx/smartclass/controller/DailyArticleController.java220-227](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/controller/DailyArticleController.java#L220-L227)

## 文章管理功能

### 自动摘要生成

在添加新文章时，如果没有提供摘要，系统会自动通过取内容的前100个字符来生成摘要：

```java
if (StringUtils.isBlank(dailyArticle.getSummary())) {
    // 如果摘要为空，自动提取内容预览
    String content = dailyArticle.getContent();
    int summaryLength = Math.min(content.length(), 100);
    dailyArticle.setSummary(content.substring(0, summaryLength));
}
```

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

### 基于日期的检索

在按日期检索文章时，系统忽略时间部分以确保返回特定当天发布的所有文章：

```java
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String dateString = sdf.format(date);
QueryWrapper<DailyArticle> queryWrapper = new QueryWrapper<>();
// 使用 SQL DATE_FORMAT 只比较日期部分
queryWrapper.apply("DATE_FORMAT(publishDate, '%Y-%m-%d') = {0}", dateString);
```

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

## 用户互动跟踪

系统通过 `UserDailyArticle` 实体跟踪用户与文章的互动：

1. **阅读状态**：记录用户是否已阅读某篇文章及阅读时间
2. **点赞**：跟踪用户点赞并管理文章的点赞计数
3. **收藏**：用户可将文章保存到收藏夹以便日后参考
4. **评论**：用户可对已读文章添加评论

`UserDailyArticleMapper` 提供了专门的查询方法，用于检索用户喜欢或收藏的文章：

```xml
<!-- 查询特定用户点赞的文章 -->
<select id="listThumbArticleByPage">
    select a.*
    from daily_article a
    join user_daily_article uda on a.id = uda.articleId
    where uda.userId = #{thumbUserId}
    and uda.isLiked = 1
    and a.isDelete = 0
</select>
```

来源：[src/main/resources/mapper/UserDailyArticleMapper.xml40-49](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/resources/mapper/UserDailyArticleMapper.xml#L40-L49) [src/main/java/com/ubanillx/smartclass/mapper/UserDailyArticleMapper.java32-43](https://github.com/Ubanillx/smartclass-backend/blob/0873c502/src/main/java/com/ubanillx/smartclass/mapper/UserDailyArticleMapper.java#L32-L43)

## 相关系统

每日文章系统是更大规模的每日学习系统的一部分，该系统还包括每日词汇。这两个系统在内容传递、用户互动跟踪和推荐逻辑方面具有相似的模式。

有关每日词汇的更多信息，请参见 [每日词汇](https://deepwiki.com/Ubanillx/smartclass-backend/3.2-daily-vocabulary)。

有关用户如何管理其偏好和与学习内容互动的信息，请参见 [用户偏好和互动](https://deepwiki.com/Ubanillx/smartclass-backend/4.2-user-preferences-and-interactions)。