# 广场作品投诉功能实施总结

## 概述
成功实现广场作品投诉功能，用户可以对违规作品进行投诉，管理员审核投诉并处理。

## 功能特性

### 1. 投诉类型
支持6种投诉类型：
- `political` - 政治敏感
- `pornographic` - 色情低俗
- `violent` - 暴力血腥
- `dangerous` - 危险行为
- `uncomfortable` - 引人不适
- `other` - 其他

### 2. 投诉限制机制
- **每日投诉限制**：每个用户每天最多投诉10次
- **防重复投诉**：同一用户不能重复投诉同一作品
- **防自投诉**：不能投诉自己发布的作品
- **自动重置**：每日0点自动重置投诉计数

### 3. 投诉状态
- `pending` - 待审核
- `approved` - 投诉成立
- `rejected` - 投诉不成立

### 4. 管理员审核
- **投诉成立**：下架作品（修改审核状态为 `rejected`，状态改为 `hidden`）
- **投诉不成立**：驳回投诉
- **处理备注**：必须填写审核备注说明处理原因

## 数据库设计

### 1. plaza_work_report（投诉表）
```sql
CREATE TABLE `plaza_work_report` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `report_no` VARCHAR(50) NOT NULL COMMENT '投诉编号',
  `work_id` BIGINT NOT NULL COMMENT '被投诉的作品ID',
  `work_no` VARCHAR(50) NOT NULL COMMENT '被投诉的作品编号',
  `reporter_id` BIGINT NOT NULL COMMENT '投诉人用户ID',
  `report_type` VARCHAR(20) NOT NULL COMMENT '投诉类型',
  `report_reason` TEXT COMMENT '投诉原因描述',
  `report_status` VARCHAR(20) DEFAULT 'pending' COMMENT '投诉状态',
  `audit_admin_id` BIGINT COMMENT '审核管理员ID',
  `audit_admin_name` VARCHAR(100) COMMENT '审核管理员名称',
  `audit_remark` TEXT COMMENT '审核备注',
  `audit_time` DATETIME COMMENT '审核时间',
  `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
  `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `is_deleted` TINYINT(1) DEFAULT 0,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_report_no` (`report_no`),
  KEY `idx_work_id` (`work_id`),
  KEY `idx_reporter_id` (`reporter_id`),
  KEY `idx_report_status` (`report_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```

### 2. plaza_work_report_limit（投诉限制表）
```sql
CREATE TABLE `plaza_work_report_limit` (
  `id` BIGINT NOT NULL AUTO_INCREMENT,
  `user_id` BIGINT NOT NULL,
  `report_count` INT DEFAULT 0 COMMENT '今日投诉次数',
  `last_report_time` DATETIME COMMENT '最后投诉时间',
  `reset_date` DATE NOT NULL COMMENT '重置日期',
  `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
  `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```

## API 接口

### 用户端接口

#### 1. 提交投诉
```
POST /user/plaza/reports/submit
```
**请求体：**
```json
{
  "workNo": "WORK-20251026-001",
  "reportType": "pornographic",
  "reportReason": "该作品包含不当内容"
}
```

#### 2. 查询我的投诉列表
```
GET /user/plaza/reports/my?page=1&size=10
```

### 管理员端接口

#### 1. 查询投诉列表
```
GET /admin/plaza/reports/list?page=1&size=20&reportStatus=pending&reportType=pornographic&workNo=WORK-xxx&reporterId=123
```

#### 2. 审核投诉
```
POST /admin/plaza/reports/audit
```
**请求体：**
```json
{
  "reportNo": "REPORT-20251114-001",
  "auditResult": "approved",
  "auditRemark": "经审核，该作品确实存在违规内容，已下架处理"
}
```

#### 3. 获取待审核投诉数量
```
GET /admin/plaza/reports/pending/count
```

## 代码文件清单

### 数据库
- ✅ `V12__add_plaza_work_report.sql` - 创建投诉表和限制表

### 实体类
- ✅ `PlazaWorkReport.java` - 投诉实体类
- ✅ `PlazaWorkReportLimit.java` - 投诉限制实体类

### DTO
- ✅ `PlazaWorkReportDto.java` - 投诉相关DTO

### Mapper
- ✅ `PlazaWorkReportMapper.java` - 投诉Mapper接口
- ✅ `PlazaWorkReportLimitMapper.java` - 投诉限制Mapper接口

### Service
- ✅ `PlazaWorkReportService.java` - 投诉服务接口
- ✅ `PlazaWorkReportServiceImpl.java` - 投诉服务实现

### Controller
- ✅ `PlazaWorkReportController.java` - 用户端投诉控制器
- ✅ `AdminPlazaWorkReportController.java` - 管理员端投诉控制器

### 修改文件
- ✅ `PlazaWorkMapper.java` - 更新update方法支持审核状态修改

## 业务流程

### 用户投诉流程
1. 用户选择作品并填写投诉信息
2. 系统检查投诉限制（每日10次）
3. 系统检查是否重复投诉
4. 系统检查是否投诉自己的作品
5. 创建投诉记录，状态为 `pending`
6. 更新用户投诉计数

### 管理员审核流程
1. 管理员查看待审核投诉列表
2. 管理员查看投诉详情（包含作品信息）
3. 管理员审核投诉：
   - **投诉成立**：更新投诉状态为 `approved`，下架作品（修改作品审核状态为 `rejected`，状态改为 `hidden`）
   - **投诉不成立**：更新投诉状态为 `rejected`
4. 记录审核管理员信息和备注

## 部署步骤

1. **执行数据库脚本**
   ```sql
   source V12__add_plaza_work_report.sql;
   ```

2. **部署代码**
   - 部署所有新增和修改的文件
   - 重启应用服务

3. **验证功能**
   - 测试用户提交投诉
   - 测试投诉限制机制
   - 测试管理员审核投诉
   - 测试投诉成立后作品下架

## 注意事项

1. **投诉限制**：每日最多10次，跨天自动重置
2. **防重复投诉**：同一用户对同一作品只能投诉一次
3. **防自投诉**：不能投诉自己发布的作品
4. **作品下架**：投诉成立时，作品审核状态改为 `rejected`，状态改为 `hidden`
5. **审核备注**：管理员审核时必须填写处理备注

## 完成时间
2025-11-14

