# 广场作品排序推荐算法说明

## 📊 当前排序算法（简单版）

### 1. 最新排序 (latest)
```sql
ORDER BY pw.create_time DESC
```
- **逻辑**: 按发布时间倒序
- **优点**: 简单直接，新作品优先展示
- **缺点**: 忽略作品质量，优质老作品难以被发现

### 2. 热门排序 (hot)
```sql
ORDER BY pw.like_count DESC, pw.create_time DESC
```
- **逻辑**: 先按点赞数倒序，再按时间倒序
- **优点**: 高质量作品排前面
- **缺点**: 
  - 老作品积累点赞多，新作品难出头
  - 没有时间衰减，不符合"热度"概念
  - 只考虑点赞，忽略浏览、评论等互动

---

## 🚀 优化方案：智能推荐算法

### 方案一：时间衰减热度算法（推荐）

#### 热度公式
```
热度分 = (点赞权重 × 点赞数 + 浏览权重 × 浏览数) / (发布时间距今小时数 + 2)^衰减系数
```

**参数设置**:
- 点赞权重: 10
- 浏览权重: 1
- 衰减系数: 1.5
- 时间基数: 2 (避免除零，新作品有初始优势)

**示例计算**:
```
作品A: 100赞, 1000浏览, 发布24小时
热度 = (10×100 + 1×1000) / (24 + 2)^1.5 = 2000 / 132.3 ≈ 15.1

作品B: 50赞, 500浏览, 发布2小时
热度 = (10×50 + 1×500) / (2 + 2)^1.5 = 1000 / 8 = 125

作品B虽然数据少，但因为新鲜度高，热度分更高！
```

#### SQL实现
```sql
SELECT pw.*,
  (10 * pw.like_count + 1 * pw.view_count) / 
  POW(TIMESTAMPDIFF(HOUR, pw.create_time, NOW()) + 2, 1.5) as hot_score
FROM plaza_work pw
WHERE pw.status = 'published' AND pw.audit_status = 'approved'
ORDER BY hot_score DESC
```

### 方案二：威尔逊得分算法（适合评分系统）

如果未来加入评分功能，可使用威尔逊得分：

```
威尔逊下界 = (p + z²/2n - z × √(p(1-p)/n + z²/4n²)) / (1 + z²/n)

其中:
- p = 好评率 (点赞数 / (点赞数 + 踩数))
- n = 总投票数
- z = 置信度系数 (95%置信度时 z=1.96)
```

### 方案三：多维度评分算法

#### 综合评分公式
```
总分 = 质量分 × 40% + 热度分 × 30% + 新鲜度分 × 20% + 互动分 × 10%
```

**各维度计算**:

1. **质量分** (0-100):
   ```
   质量分 = MIN(点赞率 × 100, 100)
   点赞率 = 点赞数 / MAX(浏览数, 1)
   ```

2. **热度分** (0-100):
   ```
   热度分 = MIN((点赞数 × 10 + 浏览数) / 平台平均热度 × 50, 100)
   ```

3. **新鲜度分** (0-100):
   ```
   新鲜度分 = MAX(100 - 发布小时数 × 2, 0)
   ```

4. **互动分** (0-100):
   ```
   互动分 = MIN((点赞数 + 评论数 × 3) × 2, 100)
   ```

---

## 🎯 推荐的实施方案

### 第一阶段：实现时间衰减热度算法

修改 `PlazaWorkMapper.java`:

```java
@Select("<script>" +
        "SELECT pw.*, u.nickname, u.avatar_url, " +
        "  <choose>" +
        "    <when test='sortBy == \"hot\"'>" +
        "      (10 * pw.like_count + 1 * pw.view_count) / " +
        "      POW(TIMESTAMPDIFF(HOUR, pw.create_time, NOW()) + 2, 1.5) as score " +
        "    </when>" +
        "    <otherwise>" +
        "      UNIX_TIMESTAMP(pw.create_time) as score " +
        "    </otherwise>" +
        "  </choose>" +
        "FROM plaza_work pw " +
        "LEFT JOIN user u ON pw.user_id = u.id " +
        "WHERE pw.status = 'published' AND pw.audit_status = 'approved' " +
        "  AND pw.is_public = 1 AND pw.is_deleted = 0 " +
        "<if test='taskType != null and taskType != \"\"'>" +
        "  AND pw.task_type = #{taskType} " +
        "</if>" +
        "ORDER BY score DESC " +
        "LIMIT #{offset}, #{size}" +
        "</script>")
List<Map<String, Object>> findPublicWorksList(
        @Param("taskType") String taskType,
        @Param("sortBy") String sortBy,
        @Param("offset") int offset,
        @Param("size") int size
);
```

### 第二阶段：添加智能推荐排序

增加新的排序方式 `recommend`：

```java
// DTO中添加
public enum SortType {
    LATEST,      // 最新
    HOT,         // 热门（时间衰减）
    RECOMMEND,   // 智能推荐（多维度）
    QUALITY      // 高质量（点赞率）
}
```

### 第三阶段：个性化推荐

基于用户历史行为（浏览、点赞的作品类型）推荐相似作品：

1. 统计用户最喜欢的任务类型（task_type）
2. 统计用户最喜欢的模型（model_name）
3. 提取用户点赞作品的标签
4. 计算作品与用户偏好的匹配度

---

## 📝 实施建议

### 立即实施（基础优化）
✅ 实现时间衰减热度算法  
✅ 添加高质量排序（按点赞率）  
✅ 优化数据库索引  

### 短期计划（1-2周）
🔄 添加多维度评分算法  
🔄 实现推荐排序  
🔄 添加排序参数配置化  

### 长期计划（1-2个月）
⏳ 个性化推荐系统  
⏳ 机器学习推荐模型  
⏳ A/B测试不同算法效果  

---

## 🔧 审核接口补充说明

### 当前审核接口功能
1. ✅ 查询待审核列表
2. ✅ 单个审核
3. ✅ 批量审核
4. ✅ 审核统计
5. ✅ 审核历史

### 可能需要的补充接口

#### 1. 撤销审核（管理员误操作）
```java
POST /admin/plaza/audit/revoke
{
  "workNo": "WORK-xxx",
  "reason": "误操作，需要重新审核"
}
```

#### 2. 审核详情查询（含完整上下文）
```java
GET /admin/plaza/audit/detail/{workNo}
// 返回：作品信息 + 作者信息 + 历史审核记录
```

#### 3. 快捷审核（一键通过前N个）
```java
POST /admin/plaza/audit/quick-approve
{
  "count": 10,  // 通过最早的10个待审核作品
  "taskType": "text_to_image"  // 可选：指定类型
}
```

#### 4. 违规关键词检测（AI辅助审核）
```java
GET /admin/plaza/audit/keyword-check/{workNo}
// 返回：敏感词检测结果，辅助人工审核
```

#### 5. 审核员工作量统计
```java
GET /admin/plaza/audit/admin-stats?adminId=1&startTime=xxx&endTime=xxx
// 返回：某审核员的审核数量、通过率等
```

---

## 💡 是否需要补充以下功能？

请告诉我您需要：

1. **优化排序算法** - 实现时间衰减热度算法？
2. **补充审核接口** - 需要哪些额外的审核功能？
3. **个性化推荐** - 是否需要基于用户行为的推荐？
4. **违规检测** - 是否需要AI辅助审核（敏感词过滤）？

我可以立即为您实现！


