5.7 KiB
5.7 KiB
广场作品投诉功能实施总结
概述
成功实现广场作品投诉功能,用户可以对违规作品进行投诉,管理员审核投诉并处理。
功能特性
1. 投诉类型
支持6种投诉类型:
political- 政治敏感pornographic- 色情低俗violent- 暴力血腥dangerous- 危险行为uncomfortable- 引人不适other- 其他
2. 投诉限制机制
- 每日投诉限制:每个用户每天最多投诉10次
- 防重复投诉:同一用户不能重复投诉同一作品
- 防自投诉:不能投诉自己发布的作品
- 自动重置:每日0点自动重置投诉计数
3. 投诉状态
pending- 待审核approved- 投诉成立rejected- 投诉不成立
4. 管理员审核
- 投诉成立:下架作品(修改审核状态为
rejected,状态改为hidden) - 投诉不成立:驳回投诉
- 处理备注:必须填写审核备注说明处理原因
数据库设计
1. plaza_work_report(投诉表)
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(投诉限制表)
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
请求体:
{
"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
请求体:
{
"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方法支持审核状态修改
业务流程
用户投诉流程
- 用户选择作品并填写投诉信息
- 系统检查投诉限制(每日10次)
- 系统检查是否重复投诉
- 系统检查是否投诉自己的作品
- 创建投诉记录,状态为
pending - 更新用户投诉计数
管理员审核流程
- 管理员查看待审核投诉列表
- 管理员查看投诉详情(包含作品信息)
- 管理员审核投诉:
- 投诉成立:更新投诉状态为
approved,下架作品(修改作品审核状态为rejected,状态改为hidden) - 投诉不成立:更新投诉状态为
rejected
- 投诉成立:更新投诉状态为
- 记录审核管理员信息和备注
部署步骤
-
执行数据库脚本
source V12__add_plaza_work_report.sql; -
部署代码
- 部署所有新增和修改的文件
- 重启应用服务
-
验证功能
- 测试用户提交投诉
- 测试投诉限制机制
- 测试管理员审核投诉
- 测试投诉成立后作品下架
注意事项
- 投诉限制:每日最多10次,跨天自动重置
- 防重复投诉:同一用户对同一作品只能投诉一次
- 防自投诉:不能投诉自己发布的作品
- 作品下架:投诉成立时,作品审核状态改为
rejected,状态改为hidden - 审核备注:管理员审核时必须填写处理备注
完成时间
2025-11-14