[Claude Workbench] Initial commit - preserving existing code
This commit is contained in:
417
广场审核与排序优化完成总结.md
Normal file
417
广场审核与排序优化完成总结.md
Normal file
@@ -0,0 +1,417 @@
|
||||
# 广场审核与排序优化完成总结
|
||||
|
||||
## ✅ 已完成功能
|
||||
|
||||
### 一、智能排序算法优化
|
||||
|
||||
#### 1. 时间衰减热度算法(已实现)
|
||||
|
||||
**核心公式**:
|
||||
```
|
||||
热度分 = (10 × 点赞数 + 1 × 浏览数) / (发布小时数 + 2)^1.5
|
||||
```
|
||||
|
||||
**支持的排序方式**:
|
||||
- `latest` - 最新排序(按发布时间倒序)
|
||||
- `hot` - 热门排序(时间衰减热度算法)
|
||||
- `quality` - 高质量排序(按点赞率)
|
||||
|
||||
**实现位置**:
|
||||
- `PlazaWorkMapper.java` - findPublicWorksList() 方法
|
||||
|
||||
**SQL实现**:
|
||||
```sql
|
||||
SELECT pw.*, u.nickname, u.avatar_url,
|
||||
CASE
|
||||
WHEN sortBy = 'hot' THEN
|
||||
(10 * pw.like_count + 1 * pw.view_count) /
|
||||
POW(TIMESTAMPDIFF(HOUR, pw.create_time, NOW()) + 2, 1.5)
|
||||
WHEN sortBy = 'quality' THEN
|
||||
CASE WHEN pw.view_count > 0 THEN (pw.like_count * 100.0 / pw.view_count) ELSE 0 END
|
||||
ELSE
|
||||
UNIX_TIMESTAMP(pw.create_time)
|
||||
END as score
|
||||
FROM plaza_work pw
|
||||
LEFT JOIN user u ON pw.user_id = u.id
|
||||
WHERE pw.status = 'published' AND pw.audit_status = 'approved'
|
||||
ORDER BY score DESC
|
||||
```
|
||||
|
||||
**优势**:
|
||||
- ✅ 新作品有机会获得曝光(时间加权)
|
||||
- ✅ 优质内容能长期保持高位(点赞加权)
|
||||
- ✅ 避免老作品独霸榜单
|
||||
- ✅ 符合用户"看新鲜热辣内容"的心理
|
||||
|
||||
---
|
||||
|
||||
### 二、完整审核系统
|
||||
|
||||
#### 1. 基础审核功能(6个API)
|
||||
|
||||
| 接口 | 方法 | 路径 | 功能 |
|
||||
|------|------|------|------|
|
||||
| 查询待审核列表 | GET | `/admin/plaza/audit/pending` | 分页查询待审核作品 |
|
||||
| 查询待审核详情 | GET | `/admin/plaza/audit/pending/{workNo}` | 查看单个作品详情 |
|
||||
| 审核作品 | POST | `/admin/plaza/audit/audit` | 通过或拒绝作品 |
|
||||
| 批量审核 | POST | `/admin/plaza/audit/batch-audit` | 批量处理多个作品 |
|
||||
| 审核统计 | GET | `/admin/plaza/audit/stats` | 获取审核数据统计 |
|
||||
| 审核历史 | GET | `/admin/plaza/audit/history` | 查询历史记录 |
|
||||
|
||||
#### 2. 增强审核功能(4个新API)
|
||||
|
||||
| 接口 | 方法 | 路径 | 功能 |
|
||||
|------|------|------|------|
|
||||
| **撤销审核** | POST | `/admin/plaza/audit/revoke` | 将已审核作品重新设为待审核 |
|
||||
| **快捷审核** | POST | `/admin/plaza/audit/quick-approve` | 一键通过最早的N个待审核作品 |
|
||||
| **详细审核信息** | GET | `/admin/plaza/audit/detail/{workNo}` | 含历史记录、作者统计的完整信息 |
|
||||
| **审核员统计** | GET | `/admin/plaza/audit/admin-stats` | 统计审核员工作量和效率 |
|
||||
|
||||
---
|
||||
|
||||
### 三、审核流程设计
|
||||
|
||||
```
|
||||
用户发布作品
|
||||
↓
|
||||
设置 audit_status = 'pending'
|
||||
↓
|
||||
管理员查看待审核列表
|
||||
↓
|
||||
审核决策
|
||||
├─ 通过 → audit_status = 'approved' → 在广场显示
|
||||
├─ 拒绝 → audit_status = 'rejected' → 不显示,记录原因
|
||||
└─ 撤销 → audit_status = 'pending' → 重新审核
|
||||
```
|
||||
|
||||
**审核日志记录**:
|
||||
- 每次审核操作都会记录到 `plaza_work_audit_log` 表
|
||||
- 包含:审核人、审核时间、审核结果、审核备注
|
||||
- 支持查询完整的审核历史轨迹
|
||||
|
||||
---
|
||||
|
||||
### 四、数据库变更
|
||||
|
||||
#### 1. plaza_work 表新增字段
|
||||
|
||||
| 字段 | 类型 | 默认值 | 说明 |
|
||||
|------|------|--------|------|
|
||||
| `audit_status` | VARCHAR(20) | `pending` | 审核状态 |
|
||||
| `audit_admin_id` | BIGINT | NULL | 审核管理员ID |
|
||||
| `audit_time` | DATETIME | NULL | 审核时间 |
|
||||
| `audit_remark` | TEXT | NULL | 审核备注 |
|
||||
|
||||
#### 2. plaza_work_audit_log 表(新建)
|
||||
|
||||
审核记录表,记录所有审核操作历史:
|
||||
```sql
|
||||
CREATE TABLE plaza_work_audit_log (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
work_no VARCHAR(64) NOT NULL,
|
||||
work_id BIGINT NOT NULL,
|
||||
audit_status VARCHAR(20) NOT NULL,
|
||||
audit_admin_id BIGINT NOT NULL,
|
||||
audit_admin_name VARCHAR(100),
|
||||
audit_remark TEXT,
|
||||
audit_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
INDEX idx_work_no (work_no),
|
||||
INDEX idx_admin_id (audit_admin_id)
|
||||
);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 五、核心业务逻辑
|
||||
|
||||
#### 1. 发布作品逻辑
|
||||
```java
|
||||
// PlazaServiceImpl.publishWork()
|
||||
work.setStatus("published");
|
||||
work.setAuditStatus("pending"); // 默认待审核
|
||||
plazaWorkMapper.insert(work);
|
||||
```
|
||||
|
||||
#### 2. 查询广场作品逻辑
|
||||
```sql
|
||||
-- 只显示审核通过的作品
|
||||
WHERE pw.status = 'published'
|
||||
AND pw.audit_status = 'approved' -- 关键过滤
|
||||
AND pw.is_public = 1
|
||||
AND pw.is_deleted = 0
|
||||
```
|
||||
|
||||
#### 3. 审核作品逻辑
|
||||
```java
|
||||
// AdminPlazaAuditServiceImpl.auditWork()
|
||||
1. 更新作品审核状态
|
||||
2. 记录审核管理员信息
|
||||
3. 保存审核时间和备注
|
||||
4. 插入审核日志到 audit_log 表
|
||||
```
|
||||
|
||||
#### 4. 撤销审核逻辑(新增)
|
||||
```java
|
||||
// AdminPlazaAuditServiceImpl.revokeAudit()
|
||||
1. 检查作品是否已审核
|
||||
2. 重置 audit_status = 'pending'
|
||||
3. 清空 audit_admin_id 和 audit_time
|
||||
4. 记录撤销原因和操作人
|
||||
5. 插入 'revoked' 类型的审核日志
|
||||
```
|
||||
|
||||
#### 5. 快捷审核逻辑(新增)
|
||||
```java
|
||||
// AdminPlazaAuditServiceImpl.quickApprove()
|
||||
1. 查询最早的N个待审核作品
|
||||
2. 批量更新为 approved 状态
|
||||
3. 为每个作品记录审核日志
|
||||
4. 返回成功数量
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 六、新增统计功能
|
||||
|
||||
#### 1. 审核基础统计
|
||||
```java
|
||||
{
|
||||
"pendingCount": 50, // 待审核数量
|
||||
"todayApprovedCount": 120, // 今日通过数
|
||||
"todayRejectedCount": 8, // 今日拒绝数
|
||||
"totalAuditedCount": 5000 // 累计审核数
|
||||
}
|
||||
```
|
||||
|
||||
#### 2. 审核员工作量统计(新增)
|
||||
```java
|
||||
{
|
||||
"adminId": 1,
|
||||
"adminName": "管理员张三",
|
||||
"totalAudited": 500, // 总审核数
|
||||
"approvedCount": 450, // 通过数
|
||||
"rejectedCount": 50, // 拒绝数
|
||||
"approvalRate": 90.0, // 通过率 90%
|
||||
"avgAuditTimeMinutes": 15.5, // 平均审核时长(分钟)
|
||||
"busiestDate": "2025-10-28", // 最忙碌日期
|
||||
"busiestDateCount": 120 // 最忙日审核数
|
||||
}
|
||||
```
|
||||
|
||||
#### 3. 作者统计(新增)
|
||||
```java
|
||||
{
|
||||
"authorApprovalRate": 85.5, // 作者历史通过率
|
||||
"authorTotalWorks": 20 // 作者累计作品数
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 七、API调用示例
|
||||
|
||||
#### 1. 快捷审核(批量通过前10个)
|
||||
```bash
|
||||
curl -X POST "http://localhost:8081/admin/plaza/audit/quick-approve?count=10" \
|
||||
-H "Authorization: Bearer ADMIN_TOKEN"
|
||||
```
|
||||
|
||||
#### 2. 撤销审核
|
||||
```bash
|
||||
curl -X POST "http://localhost:8081/admin/plaza/audit/revoke" \
|
||||
-H "Authorization: Bearer ADMIN_TOKEN" \
|
||||
-d "workNo=WORK-xxx&reason=误操作,需要重新审核"
|
||||
```
|
||||
|
||||
#### 3. 查询作品详细审核信息
|
||||
```bash
|
||||
curl "http://localhost:8081/admin/plaza/audit/detail/WORK-xxx" \
|
||||
-H "Authorization: Bearer ADMIN_TOKEN"
|
||||
```
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"data": {
|
||||
"workInfo": {
|
||||
"workNo": "WORK-xxx",
|
||||
"title": "美丽的风景",
|
||||
"author": {
|
||||
"userId": 123,
|
||||
"username": "user123"
|
||||
}
|
||||
},
|
||||
"auditStatus": "approved",
|
||||
"auditTime": "2025-10-28T10:30:00",
|
||||
"auditAdminName": "管理员张三",
|
||||
"auditHistory": [
|
||||
{
|
||||
"auditStatus": "approved",
|
||||
"auditTime": "2025-10-28T10:30:00",
|
||||
"auditAdminName": "管理员张三",
|
||||
"auditRemark": "内容优质"
|
||||
}
|
||||
],
|
||||
"authorApprovalRate": 85.5,
|
||||
"authorTotalWorks": 20
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 4. 查询审核员工作量
|
||||
```bash
|
||||
curl "http://localhost:8081/admin/plaza/audit/admin-stats?startTime=2025-10-01&endTime=2025-10-31" \
|
||||
-H "Authorization: Bearer ADMIN_TOKEN"
|
||||
```
|
||||
|
||||
#### 5. 使用不同排序查询广场
|
||||
```bash
|
||||
# 最新排序
|
||||
GET /user/plaza/works?sortBy=latest
|
||||
|
||||
# 热门排序(时间衰减算法)
|
||||
GET /user/plaza/works?sortBy=hot
|
||||
|
||||
# 高质量排序(按点赞率)
|
||||
GET /user/plaza/works?sortBy=quality
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 八、技术实现亮点
|
||||
|
||||
#### 1. 时间衰减算法
|
||||
- 使用 `POW()` 函数实现指数衰减
|
||||
- 平衡新鲜度和质量的权重
|
||||
- 避免"马太效应"
|
||||
|
||||
#### 2. 审核日志追溯
|
||||
- 完整记录所有审核操作
|
||||
- 支持审核撤销和重审
|
||||
- 便于问题排查和数据分析
|
||||
|
||||
#### 3. 管理员效率统计
|
||||
- 自动计算平均审核时长
|
||||
- 识别最忙碌的审核时间
|
||||
- 便于管理员绩效考核
|
||||
|
||||
#### 4. 作者信用评分
|
||||
- 统计作者历史通过率
|
||||
- 辅助审核决策(高信用作者可快审)
|
||||
- 为未来信用体系打基础
|
||||
|
||||
---
|
||||
|
||||
### 九、文件清单
|
||||
|
||||
#### 数据库脚本
|
||||
- ✅ `V11__add_plaza_audit_feature.sql` - 审核功能数据库变更
|
||||
|
||||
#### 实体类
|
||||
- ✅ `PlazaWork.java` - 新增审核字段
|
||||
- ✅ `PlazaWorkAuditLog.java` - 审核记录实体
|
||||
|
||||
#### DTO
|
||||
- ✅ `AdminPlazaAuditDto.java` - 新增2个DTO:
|
||||
- `WorkAuditDetailResponse` - 详细审核信息
|
||||
- `AdminWorkloadStatsResponse` - 审核员统计
|
||||
|
||||
#### Mapper
|
||||
- ✅ `PlazaWorkMapper.java` - 优化排序算法,新增作者统计
|
||||
- ✅ `PlazaWorkAuditLogMapper.java` - 新增统计查询方法
|
||||
|
||||
#### Service
|
||||
- ✅ `AdminPlazaAuditService.java` - 新增4个方法
|
||||
- ✅ `AdminPlazaAuditServiceImpl.java` - 实现新增方法
|
||||
|
||||
#### Controller
|
||||
- ✅ `AdminPlazaAuditController.java` - 新增4个API端点
|
||||
|
||||
#### Util
|
||||
- ✅ `SecurityUtil.java` - 新增 `getUsername()` 方法
|
||||
|
||||
#### 文档
|
||||
- ✅ `广场作品排序推荐算法说明.md` - 排序算法详解
|
||||
- ✅ `广场审核功能说明.md` - 审核功能完整说明
|
||||
|
||||
---
|
||||
|
||||
### 十、部署检查清单
|
||||
|
||||
#### 1. 数据库更新
|
||||
```bash
|
||||
# 执行审核功能SQL脚本
|
||||
mysql -u root -p 1818ai < src/main/resources/db/migration/V11__add_plaza_audit_feature.sql
|
||||
```
|
||||
|
||||
#### 2. 验证字段
|
||||
```sql
|
||||
-- 检查 plaza_work 表
|
||||
DESC plaza_work; -- 应包含 audit_status, audit_admin_id, audit_time, audit_remark
|
||||
|
||||
-- 检查 plaza_work_audit_log 表
|
||||
DESC plaza_work_audit_log; -- 应存在此表
|
||||
```
|
||||
|
||||
#### 3. 测试API
|
||||
- ✅ 发布作品后,默认为 pending 状态
|
||||
- ✅ 广场列表只显示 approved 的作品
|
||||
- ✅ 管理员可以查看待审核列表
|
||||
- ✅ 审核操作记录到日志表
|
||||
- ✅ 排序算法正确计算热度分
|
||||
|
||||
---
|
||||
|
||||
### 十一、性能优化建议
|
||||
|
||||
#### 1. 索引优化
|
||||
```sql
|
||||
-- 审核状态索引(已在脚本中)
|
||||
CREATE INDEX idx_audit_status ON plaza_work(audit_status);
|
||||
|
||||
-- 复合索引优化查询
|
||||
CREATE INDEX idx_status_audit ON plaza_work(status, audit_status, is_public);
|
||||
```
|
||||
|
||||
#### 2. 缓存策略
|
||||
- 广场作品列表可以缓存10分钟
|
||||
- 热度分计算可以异步更新
|
||||
- 审核统计数据可以缓存5分钟
|
||||
|
||||
#### 3. 分页优化
|
||||
- 使用游标分页代替offset(大数据量时)
|
||||
- 限制最大页数,避免深分页
|
||||
|
||||
---
|
||||
|
||||
### 十二、后续优化方向
|
||||
|
||||
#### 短期(1-2周)
|
||||
- 🔄 AI辅助审核(敏感词检测)
|
||||
- 🔄 审核规则配置化
|
||||
- 🔄 审核任务分配系统
|
||||
|
||||
#### 中期(1个月)
|
||||
- ⏳ 个性化推荐算法
|
||||
- ⏳ 用户举报功能
|
||||
- ⏳ 审核优先级队列
|
||||
|
||||
#### 长期(2-3个月)
|
||||
- ⏳ 机器学习推荐模型
|
||||
- ⏳ 内容质量评分体系
|
||||
- ⏳ A/B测试不同排序算法
|
||||
|
||||
---
|
||||
|
||||
## 🎉 总结
|
||||
|
||||
✅ **排序优化**:实现时间衰减热度算法 + 质量排序
|
||||
✅ **审核系统**:10个完整的审核API(基础6个 + 增强4个)
|
||||
✅ **统计分析**:审核员工作量统计 + 作者信用评分
|
||||
✅ **日志追溯**:完整的审核历史记录
|
||||
✅ **代码质量**:清晰的注释 + 完善的异常处理
|
||||
|
||||
**所有功能已100%实现,可立即上线使用!** 🚀
|
||||
|
||||
|
||||
Reference in New Issue
Block a user