226 lines
5.9 KiB
Markdown
226 lines
5.9 KiB
Markdown
|
|
# 作品上热门功能实现说明
|
|||
|
|
|
|||
|
|
## 功能概述
|
|||
|
|
实现了最简单的"作品上热门"功能,管理员可以在后台设置/取消作品的热门状态,用户可以在App中查看热门作品列表。
|
|||
|
|
|
|||
|
|
## 实现方案
|
|||
|
|
采用**最简单方案**:管理员手动设置热门
|
|||
|
|
|
|||
|
|
### 核心特点
|
|||
|
|
- ✅ 只在后台管理端操作,不涉及用户端复杂交互
|
|||
|
|
- ✅ 不需要付费系统,不需要金币/积分
|
|||
|
|
- ✅ 不需要审核流程,管理员直接设置
|
|||
|
|
- ✅ 不需要定时任务,手动管理即可
|
|||
|
|
- ✅ 最小化数据库改动
|
|||
|
|
|
|||
|
|
## 已完成的工作
|
|||
|
|
|
|||
|
|
### 1. 数据库改动 ✅
|
|||
|
|
**文件:** `Zhibo/zhibo-h/sql/add_works_hot_fields.sql`
|
|||
|
|
|
|||
|
|
在 `works` 表添加了2个字段:
|
|||
|
|
- `is_hot` (tinyint): 是否热门,1-是 0-否
|
|||
|
|
- `hot_time` (datetime): 设置热门的时间
|
|||
|
|
|
|||
|
|
### 2. 后端Service层 ✅
|
|||
|
|
|
|||
|
|
#### WorksService接口
|
|||
|
|
**文件:** `Zhibo/zhibo-h/crmeb-service/src/main/java/com/zbkj/service/service/WorksService.java`
|
|||
|
|
|
|||
|
|
新增方法:
|
|||
|
|
```java
|
|||
|
|
// 设置/取消热门
|
|||
|
|
Boolean toggleHot(Long worksId, Boolean isHot);
|
|||
|
|
|
|||
|
|
// 获取热门作品列表
|
|||
|
|
CommonPage<WorksResponse> getHotWorks(Integer page, Integer pageSize, Integer userId);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### WorksServiceImpl实现
|
|||
|
|
**文件:** `Zhibo/zhibo-h/crmeb-service/src/main/java/com/zbkj/service/service/impl/WorksServiceImpl.java`
|
|||
|
|
|
|||
|
|
实现了:
|
|||
|
|
- `toggleHot()`: 设置/取消热门状态
|
|||
|
|
- `getHotWorks()`: 查询热门作品列表(按hot_time倒序)
|
|||
|
|
- `convertToResponse()`: 添加了热门字段的转换
|
|||
|
|
|
|||
|
|
### 3. 管理端Controller ✅
|
|||
|
|
**文件:** `Zhibo/zhibo-h/crmeb-admin/src/main/java/com/zbkj/admin/controller/WorksController.java`
|
|||
|
|
|
|||
|
|
新增接口:
|
|||
|
|
- `POST /api/admin/works/toggleHot` - 设置/取消热门
|
|||
|
|
- 参数:id (作品ID), isHot (true/false)
|
|||
|
|
- 返回:操作结果
|
|||
|
|
|
|||
|
|
- `GET /api/admin/works/hotList` - 获取热门作品列表
|
|||
|
|
- 参数:page, limit
|
|||
|
|
- 返回:热门作品分页列表
|
|||
|
|
|
|||
|
|
### 4. 用户端Controller ✅
|
|||
|
|
**文件:** `Zhibo/zhibo-h/crmeb-front/src/main/java/com/zbkj/front/controller/WorksController.java`
|
|||
|
|
|
|||
|
|
新增接口:
|
|||
|
|
- `GET /api/works/hot` - 获取热门作品列表(用户端)
|
|||
|
|
- 参数:page, pageSize
|
|||
|
|
- 返回:热门作品分页列表
|
|||
|
|
- 不需要登录即可访问
|
|||
|
|
|
|||
|
|
### 5. 实体类更新 ✅
|
|||
|
|
|
|||
|
|
#### Works实体
|
|||
|
|
**文件:** `Zhibo/zhibo-h/crmeb-common/src/main/java/com/zbkj/common/model/works/Works.java`
|
|||
|
|
|
|||
|
|
添加字段:
|
|||
|
|
- `isHot`: 是否热门
|
|||
|
|
- `hotTime`: 设置热门的时间
|
|||
|
|
|
|||
|
|
#### WorksResponse响应类
|
|||
|
|
**文件:** `Zhibo/zhibo-h/crmeb-common/src/main/java/com/zbkj/common/response/WorksResponse.java`
|
|||
|
|
|
|||
|
|
添加字段:
|
|||
|
|
- `isHot`: 是否热门
|
|||
|
|
- `hotTime`: 设置热门的时间
|
|||
|
|
|
|||
|
|
## API接口说明
|
|||
|
|
|
|||
|
|
### 管理端接口
|
|||
|
|
|
|||
|
|
#### 1. 设置/取消热门
|
|||
|
|
```
|
|||
|
|
POST /api/admin/works/toggleHot
|
|||
|
|
参数:
|
|||
|
|
- id: 作品ID (Long)
|
|||
|
|
- isHot: 是否热门 (Boolean, true=设置热门, false=取消热门)
|
|||
|
|
返回:
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"message": "设置热门成功" / "取消热门成功"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 2. 获取热门作品列表(管理端)
|
|||
|
|
```
|
|||
|
|
GET /api/admin/works/hotList
|
|||
|
|
参数:
|
|||
|
|
- page: 页码 (默认1)
|
|||
|
|
- limit: 每页数量 (默认20)
|
|||
|
|
返回:
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"data": {
|
|||
|
|
"list": [...],
|
|||
|
|
"total": 100,
|
|||
|
|
"page": 1,
|
|||
|
|
"limit": 20
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 用户端接口
|
|||
|
|
|
|||
|
|
#### 3. 获取热门作品列表(用户端)
|
|||
|
|
```
|
|||
|
|
GET /api/works/hot
|
|||
|
|
参数:
|
|||
|
|
- page: 页码 (默认1)
|
|||
|
|
- pageSize: 每页数量 (默认20)
|
|||
|
|
返回:
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"data": {
|
|||
|
|
"list": [...],
|
|||
|
|
"total": 100,
|
|||
|
|
"page": 1,
|
|||
|
|
"limit": 20
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 后续工作
|
|||
|
|
|
|||
|
|
### 待实现:
|
|||
|
|
|
|||
|
|
#### 1. 后台管理界面 (Vue Admin)
|
|||
|
|
需要在作品管理页面添加:
|
|||
|
|
- 作品列表中每一行添加"设置热门"/"取消热门"按钮
|
|||
|
|
- 热门作品用特殊样式标识(如红色高亮)
|
|||
|
|
- 可选:添加单独的"热门作品管理"页面
|
|||
|
|
|
|||
|
|
**文件位置:** `Zhibo/admin/src/views/content/works/list.vue`
|
|||
|
|
|
|||
|
|
#### 2. Android App界面
|
|||
|
|
需要实现:
|
|||
|
|
- 首页添加"热门"Tab
|
|||
|
|
- 调用 `GET /api/works/hot` 接口获取热门作品
|
|||
|
|
- 作品卡片显示热门标签(🔥热门)
|
|||
|
|
|
|||
|
|
**需要修改的文件:**
|
|||
|
|
- `android-app/app/src/main/java/com/example/livestreaming/MainActivity.java`
|
|||
|
|
- `android-app/app/src/main/java/com/example/livestreaming/net/ApiService.java`
|
|||
|
|
|
|||
|
|
## 使用流程
|
|||
|
|
|
|||
|
|
### 管理员操作流程:
|
|||
|
|
1. 登录后台管理系统
|
|||
|
|
2. 进入"作品管理"页面
|
|||
|
|
3. 找到想要设置为热门的作品
|
|||
|
|
4. 点击"设置热门"按钮
|
|||
|
|
5. 该作品立即成为热门作品
|
|||
|
|
|
|||
|
|
### 用户查看流程:
|
|||
|
|
1. 打开App
|
|||
|
|
2. 点击"热门"Tab
|
|||
|
|
3. 查看热门作品列表
|
|||
|
|
4. 热门作品按设置时间倒序排列(最新设置的在前面)
|
|||
|
|
|
|||
|
|
## 数据库执行
|
|||
|
|
|
|||
|
|
在部署前需要执行SQL文件:
|
|||
|
|
```bash
|
|||
|
|
mysql -u root -p crmeb < Zhibo/zhibo-h/sql/add_works_hot_fields.sql
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
或者手动执行:
|
|||
|
|
```sql
|
|||
|
|
USE `crmeb`;
|
|||
|
|
|
|||
|
|
ALTER TABLE `works`
|
|||
|
|
ADD COLUMN `is_hot` tinyint DEFAULT 0 COMMENT '是否热门:1-是 0-否' AFTER `status`,
|
|||
|
|
ADD COLUMN `hot_time` datetime DEFAULT NULL COMMENT '设置热门的时间' AFTER `is_hot`;
|
|||
|
|
|
|||
|
|
ALTER TABLE `works` ADD INDEX `idx_is_hot` (`is_hot`);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 测试建议
|
|||
|
|
|
|||
|
|
### 后端测试:
|
|||
|
|
1. 测试设置热门接口
|
|||
|
|
2. 测试取消热门接口
|
|||
|
|
3. 测试获取热门列表接口
|
|||
|
|
4. 验证热门作品排序是否正确
|
|||
|
|
|
|||
|
|
### 前端测试:
|
|||
|
|
1. 测试后台管理界面的热门设置功能
|
|||
|
|
2. 测试App热门Tab的显示
|
|||
|
|
3. 测试热门标签的显示
|
|||
|
|
|
|||
|
|
## 扩展建议
|
|||
|
|
|
|||
|
|
如果以后需要更复杂的功能,可以在此基础上扩展:
|
|||
|
|
- 添加热门时长限制(加个 `hot_end_time` 字段)
|
|||
|
|
- 添加自动热门算法(定时任务计算热度)
|
|||
|
|
- 添加用户付费推广(加个 `works_hot` 表记录推广记录)
|
|||
|
|
- 添加热门位置排序(加个 `hot_order` 字段)
|
|||
|
|
|
|||
|
|
## 注意事项
|
|||
|
|
|
|||
|
|
1. 后端代码已完成并编译通过 ✅
|
|||
|
|
2. 数据库SQL文件已创建 ✅
|
|||
|
|
3. 前端界面(Vue Admin + Android App)需要继续实现
|
|||
|
|
4. 部署前记得执行数据库迁移脚本
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**创建时间:** 2026-01-08
|
|||
|
|
**状态:** 后端完成,前端待实现
|