# 广场作品投诉功能实施总结 ## 概述 成功实现广场作品投诉功能,用户可以对违规作品进行投诉,管理员审核投诉并处理。 ## 功能特性 ### 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