first commit
This commit is contained in:
501
docs/admin-tool-config-api.md
Normal file
501
docs/admin-tool-config-api.md
Normal file
@@ -0,0 +1,501 @@
|
||||
# 工具配置管理(管理端)API 文档
|
||||
|
||||
## 概述
|
||||
|
||||
管理端工具配置API,用于管理工具配置和查看使用统计。
|
||||
|
||||
- **Base URL**: `/admin/tools`
|
||||
- **认证方式**: 需要管理员权限(`ROLE_ADMIN`)
|
||||
- **请求头**: `Authorization: Bearer {admin_jwt_token}`
|
||||
|
||||
---
|
||||
|
||||
## 一、工具配置管理
|
||||
|
||||
### 1.1 获取所有工具配置
|
||||
|
||||
获取所有工具配置列表。
|
||||
|
||||
**请求**
|
||||
```
|
||||
GET /admin/tools/configs
|
||||
```
|
||||
|
||||
**响应**
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"message": "success",
|
||||
"data": [
|
||||
{
|
||||
"id": 1,
|
||||
"toolCode": "douyin_user_videos",
|
||||
"toolName": "获取用户主页视频",
|
||||
"category": "douyin",
|
||||
"description": "根据sec_user_id获取用户发布的视频列表",
|
||||
"apiEndpoint": "/api/v1/douyin/app/v3/fetch_user_post_videos",
|
||||
"requestMethod": "GET",
|
||||
"pointsCost": 5,
|
||||
"isEnabled": 1,
|
||||
"sortOrder": 1,
|
||||
"createTime": "2026-01-02T10:00:00",
|
||||
"updateTime": "2026-01-02T10:00:00"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 1.2 获取工具配置详情
|
||||
|
||||
根据ID获取工具配置详情。
|
||||
|
||||
**请求**
|
||||
```
|
||||
GET /admin/tools/configs/{id}
|
||||
```
|
||||
|
||||
**路径参数**
|
||||
| 参数 | 类型 | 必填 | 说明 |
|
||||
|------|------|------|------|
|
||||
| id | Long | 是 | 工具ID |
|
||||
|
||||
**响应**
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"message": "success",
|
||||
"data": {
|
||||
"id": 1,
|
||||
"toolCode": "douyin_user_videos",
|
||||
"toolName": "获取用户主页视频",
|
||||
"category": "douyin",
|
||||
"description": "根据sec_user_id获取用户发布的视频列表",
|
||||
"apiEndpoint": "/api/v1/douyin/app/v3/fetch_user_post_videos",
|
||||
"requestMethod": "GET",
|
||||
"pointsCost": 5,
|
||||
"isEnabled": 1,
|
||||
"sortOrder": 1,
|
||||
"createTime": "2026-01-02T10:00:00",
|
||||
"updateTime": "2026-01-02T10:00:00"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 1.3 创建工具配置
|
||||
|
||||
创建新的工具配置。
|
||||
|
||||
**请求**
|
||||
```
|
||||
POST /admin/tools/configs
|
||||
Content-Type: application/json
|
||||
```
|
||||
|
||||
**请求体**
|
||||
```json
|
||||
{
|
||||
"toolCode": "douyin_user_videos",
|
||||
"toolName": "获取用户主页视频",
|
||||
"category": "douyin",
|
||||
"description": "根据sec_user_id获取用户发布的视频列表",
|
||||
"apiEndpoint": "/api/v1/douyin/app/v3/fetch_user_post_videos",
|
||||
"requestMethod": "GET",
|
||||
"pointsCost": 5,
|
||||
"isEnabled": 1,
|
||||
"sortOrder": 1
|
||||
}
|
||||
```
|
||||
|
||||
**请求体参数说明**
|
||||
| 参数 | 类型 | 必填 | 说明 |
|
||||
|------|------|------|------|
|
||||
| toolCode | String | 是 | 工具编码(唯一标识) |
|
||||
| toolName | String | 是 | 工具名称 |
|
||||
| category | String | 是 | 工具分类(douyin/xiaohongshu/wechat_mp) |
|
||||
| description | String | 否 | 工具描述 |
|
||||
| apiEndpoint | String | 是 | API端点路径 |
|
||||
| requestMethod | String | 否 | 请求方法(GET/POST),默认GET |
|
||||
| pointsCost | Integer | 否 | 积分消耗,默认1 |
|
||||
| isEnabled | Integer | 否 | 是否启用(0禁用/1启用),默认1 |
|
||||
| sortOrder | Integer | 否 | 排序顺序,默认0 |
|
||||
|
||||
**响应**
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"message": "创建成功",
|
||||
"data": {
|
||||
"id": 1,
|
||||
"toolCode": "douyin_user_videos",
|
||||
"toolName": "获取用户主页视频",
|
||||
"category": "douyin",
|
||||
"description": "根据sec_user_id获取用户发布的视频列表",
|
||||
"apiEndpoint": "/api/v1/douyin/app/v3/fetch_user_post_videos",
|
||||
"requestMethod": "GET",
|
||||
"pointsCost": 5,
|
||||
"isEnabled": 1,
|
||||
"sortOrder": 1,
|
||||
"createTime": "2026-01-02T10:00:00",
|
||||
"updateTime": "2026-01-02T10:00:00"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 1.4 更新工具配置
|
||||
|
||||
更新指定工具配置。
|
||||
|
||||
**请求**
|
||||
```
|
||||
PUT /admin/tools/configs/{id}
|
||||
Content-Type: application/json
|
||||
```
|
||||
|
||||
**路径参数**
|
||||
| 参数 | 类型 | 必填 | 说明 |
|
||||
|------|------|------|------|
|
||||
| id | Long | 是 | 工具ID |
|
||||
|
||||
**请求体**
|
||||
```json
|
||||
{
|
||||
"toolCode": "douyin_user_videos",
|
||||
"toolName": "获取用户主页视频",
|
||||
"category": "douyin",
|
||||
"description": "根据sec_user_id获取用户发布的视频列表",
|
||||
"apiEndpoint": "/api/v1/douyin/app/v3/fetch_user_post_videos",
|
||||
"requestMethod": "GET",
|
||||
"pointsCost": 10,
|
||||
"isEnabled": 1,
|
||||
"sortOrder": 1
|
||||
}
|
||||
```
|
||||
|
||||
**响应**
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"message": "更新成功",
|
||||
"data": {
|
||||
"id": 1,
|
||||
"toolCode": "douyin_user_videos",
|
||||
"toolName": "获取用户主页视频",
|
||||
"category": "douyin",
|
||||
"description": "根据sec_user_id获取用户发布的视频列表",
|
||||
"apiEndpoint": "/api/v1/douyin/app/v3/fetch_user_post_videos",
|
||||
"requestMethod": "GET",
|
||||
"pointsCost": 10,
|
||||
"isEnabled": 1,
|
||||
"sortOrder": 1,
|
||||
"createTime": "2026-01-02T10:00:00",
|
||||
"updateTime": "2026-01-02T11:00:00"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 1.5 更新积分消耗
|
||||
|
||||
单独更新工具的积分消耗配置。
|
||||
|
||||
**请求**
|
||||
```
|
||||
PATCH /admin/tools/configs/{id}/points-cost?pointsCost={pointsCost}
|
||||
```
|
||||
|
||||
**参数**
|
||||
| 参数 | 类型 | 必填 | 说明 |
|
||||
|------|------|------|------|
|
||||
| id | Long | 是 | 工具ID(路径参数) |
|
||||
| pointsCost | Integer | 是 | 积分消耗(查询参数) |
|
||||
|
||||
**响应**
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"message": "更新成功",
|
||||
"data": null
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 1.6 更新工具状态
|
||||
|
||||
启用或禁用工具。
|
||||
|
||||
**请求**
|
||||
```
|
||||
PATCH /admin/tools/configs/{id}/status?isEnabled={isEnabled}
|
||||
```
|
||||
|
||||
**参数**
|
||||
| 参数 | 类型 | 必填 | 说明 |
|
||||
|------|------|------|------|
|
||||
| id | Long | 是 | 工具ID(路径参数) |
|
||||
| isEnabled | Integer | 是 | 是否启用(0禁用/1启用)(查询参数) |
|
||||
|
||||
**响应**
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"message": "更新成功",
|
||||
"data": null
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 1.7 删除工具配置
|
||||
|
||||
删除指定工具配置(逻辑删除)。
|
||||
|
||||
**请求**
|
||||
```
|
||||
DELETE /admin/tools/configs/{id}
|
||||
```
|
||||
|
||||
**路径参数**
|
||||
| 参数 | 类型 | 必填 | 说明 |
|
||||
|------|------|------|------|
|
||||
| id | Long | 是 | 工具ID |
|
||||
|
||||
**响应**
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"message": "删除成功",
|
||||
"data": null
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 二、使用统计
|
||||
|
||||
### 2.1 获取统计概览
|
||||
|
||||
获取工具数量和今日调用统计。
|
||||
|
||||
**请求**
|
||||
```
|
||||
GET /admin/tools/stats/info
|
||||
```
|
||||
|
||||
**响应**
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"message": "success",
|
||||
"data": {
|
||||
"totalTools": 8,
|
||||
"enabledTools": 8,
|
||||
"todayCalls": 156,
|
||||
"todayPointsCost": 780
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**响应字段说明**
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| totalTools | Long | 工具总数 |
|
||||
| enabledTools | Long | 已启用工具数 |
|
||||
| todayCalls | Long | 今日调用次数 |
|
||||
| todayPointsCost | Long | 今日消耗积分 |
|
||||
|
||||
---
|
||||
|
||||
### 2.2 获取统计汇总
|
||||
|
||||
获取指定日期范围内的统计汇总。
|
||||
|
||||
**请求**
|
||||
```
|
||||
GET /admin/tools/stats/summary?startDate={startDate}&endDate={endDate}
|
||||
```
|
||||
|
||||
**查询参数**
|
||||
| 参数 | 类型 | 必填 | 说明 |
|
||||
|------|------|------|------|
|
||||
| startDate | String | 否 | 开始日期(yyyy-MM-dd),默认30天前 |
|
||||
| endDate | String | 否 | 结束日期(yyyy-MM-dd),默认今天 |
|
||||
|
||||
**响应**
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"message": "success",
|
||||
"data": {
|
||||
"totalCalls": 1560,
|
||||
"successCalls": 1500,
|
||||
"failedCalls": 60,
|
||||
"totalPointsCost": 7800,
|
||||
"uniqueUsers": null,
|
||||
"toolStats": [
|
||||
{
|
||||
"toolCode": "douyin_user_videos",
|
||||
"toolName": "获取用户主页视频",
|
||||
"category": null,
|
||||
"totalCalls": 500,
|
||||
"successCalls": 480,
|
||||
"totalPointsCost": 2500
|
||||
},
|
||||
{
|
||||
"toolCode": "xiaohongshu_search_notes",
|
||||
"toolName": "搜索笔记",
|
||||
"category": null,
|
||||
"totalCalls": 300,
|
||||
"successCalls": 290,
|
||||
"totalPointsCost": 1500
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**响应字段说明**
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| totalCalls | Long | 总调用次数 |
|
||||
| successCalls | Long | 成功次数 |
|
||||
| failedCalls | Long | 失败次数 |
|
||||
| totalPointsCost | Long | 总消耗积分 |
|
||||
| uniqueUsers | Long | 独立用户数 |
|
||||
| toolStats | Array | 按工具分类统计 |
|
||||
|
||||
---
|
||||
|
||||
### 2.3 获取每日统计
|
||||
|
||||
获取每日统计数据列表。
|
||||
|
||||
**请求**
|
||||
```
|
||||
GET /admin/tools/stats/daily?startDate={startDate}&endDate={endDate}&toolCode={toolCode}
|
||||
```
|
||||
|
||||
**查询参数**
|
||||
| 参数 | 类型 | 必填 | 说明 |
|
||||
|------|------|------|------|
|
||||
| startDate | String | 否 | 开始日期(yyyy-MM-dd),默认7天前 |
|
||||
| endDate | String | 否 | 结束日期(yyyy-MM-dd),默认今天 |
|
||||
| toolCode | String | 否 | 工具编码,用于筛选特定工具 |
|
||||
|
||||
**响应**
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"message": "success",
|
||||
"data": [
|
||||
{
|
||||
"statsDate": "2026-01-02",
|
||||
"toolCode": "douyin_user_videos",
|
||||
"toolName": "获取用户主页视频",
|
||||
"totalCalls": 100,
|
||||
"successCalls": 95,
|
||||
"failedCalls": 5,
|
||||
"totalPointsCost": 500,
|
||||
"uniqueUsers": 20
|
||||
},
|
||||
{
|
||||
"statsDate": "2026-01-01",
|
||||
"toolCode": "douyin_user_videos",
|
||||
"toolName": "获取用户主页视频",
|
||||
"totalCalls": 80,
|
||||
"successCalls": 78,
|
||||
"failedCalls": 2,
|
||||
"totalPointsCost": 400,
|
||||
"uniqueUsers": 15
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
**响应字段说明**
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| statsDate | String | 统计日期 |
|
||||
| toolCode | String | 工具编码 |
|
||||
| toolName | String | 工具名称 |
|
||||
| totalCalls | Integer | 调用总次数 |
|
||||
| successCalls | Integer | 成功次数 |
|
||||
| failedCalls | Integer | 失败次数 |
|
||||
| totalPointsCost | Integer | 消耗总积分 |
|
||||
| uniqueUsers | Integer | 独立用户数 |
|
||||
|
||||
---
|
||||
|
||||
### 2.4 刷新每日统计
|
||||
|
||||
手动刷新指定日期的统计数据。
|
||||
|
||||
**请求**
|
||||
```
|
||||
POST /admin/tools/stats/refresh?date={date}
|
||||
```
|
||||
|
||||
**查询参数**
|
||||
| 参数 | 类型 | 必填 | 说明 |
|
||||
|------|------|------|------|
|
||||
| date | String | 否 | 日期(yyyy-MM-dd),默认今天 |
|
||||
|
||||
**响应**
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"message": "刷新成功",
|
||||
"data": null
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 三、错误响应
|
||||
|
||||
所有接口在发生错误时返回统一格式:
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 500,
|
||||
"message": "错误描述信息",
|
||||
"data": null
|
||||
}
|
||||
```
|
||||
|
||||
**常见错误码**
|
||||
| 错误码 | 说明 |
|
||||
|--------|------|
|
||||
| 401 | 未认证或Token过期 |
|
||||
| 403 | 无权限(非管理员) |
|
||||
| 500 | 服务器内部错误 |
|
||||
|
||||
---
|
||||
|
||||
## 四、数据字典
|
||||
|
||||
### 工具分类(category)
|
||||
| 值 | 说明 |
|
||||
|------|------|
|
||||
| douyin | 抖音 |
|
||||
| xiaohongshu | 小红书 |
|
||||
| wechat_mp | 微信公众号 |
|
||||
|
||||
### 请求方法(requestMethod)
|
||||
| 值 | 说明 |
|
||||
|------|------|
|
||||
| GET | GET请求 |
|
||||
| POST | POST请求 |
|
||||
|
||||
### 启用状态(isEnabled)
|
||||
| 值 | 说明 |
|
||||
|------|------|
|
||||
| 0 | 禁用 |
|
||||
| 1 | 启用 |
|
||||
195
docs/plaza-work-report-feature-summary.md
Normal file
195
docs/plaza-work-report-feature-summary.md
Normal file
@@ -0,0 +1,195 @@
|
||||
# 广场作品投诉功能实施总结
|
||||
|
||||
## 概述
|
||||
成功实现广场作品投诉功能,用户可以对违规作品进行投诉,管理员审核投诉并处理。
|
||||
|
||||
## 功能特性
|
||||
|
||||
### 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
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
boolean isSora2Pro = isSora2ProModel(request.getModelName());
|
||||
|
||||
// 使用不同的接口
|
||||
String requestUrl = isSora2Pro ? apiUrl + "/api/sora2pro/submit" : apiUrl + "/api/sora2/submit";
|
||||
String requestUrl = isSora2Pro ? apiUrl + "/api/sora2pro/submit" : apiUrl + "/api/sora2-new/submit";
|
||||
|
||||
// sora2pro 不需要 size 参数
|
||||
if (!isSora2Pro) {
|
||||
@@ -128,7 +128,7 @@ if (!isSora2Pro) {
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **接口差异**: sora2pro 使用 `/api/sora2pro/submit`,而 sora2 使用 `/api/sora2/submit`
|
||||
1. **接口差异**: sora2pro 使用 `/api/sora2pro/submit`,而 sora2 使用 `/api/sora2-new/submit`
|
||||
2. **参数差异**: sora2pro 不需要 `size` 参数
|
||||
3. **时长限制**: 25秒只能生成标清,15秒支持高清和标清
|
||||
4. **查询接口**: sora2pro 和 sora2 共用 `/api/sora2/detail` 查询接口
|
||||
|
||||
234
docs/tool-service-api.md
Normal file
234
docs/tool-service-api.md
Normal file
@@ -0,0 +1,234 @@
|
||||
# 工具服务模块 API 文档
|
||||
|
||||
## 概述
|
||||
|
||||
工具服务模块提供第三方数据采集工具的调用功能,支持抖音、小红书、微信公众号等平台的数据获取。
|
||||
|
||||
## 认证方式
|
||||
|
||||
工具接口支持两种认证方式:
|
||||
|
||||
### 1. JWT Token(Web端)
|
||||
登录后自动使用,适合Web前端调用。
|
||||
|
||||
### 2. API Key(开发者)
|
||||
在请求头添加 `Authorization: Bearer {your_api_key}`,适合后端服务或脚本调用。
|
||||
|
||||
**获取API Key**:
|
||||
1. 登录系统
|
||||
2. 进入个人中心 -> API密钥管理
|
||||
3. 生成API密钥
|
||||
|
||||
**调用示例**:
|
||||
```bash
|
||||
curl -X POST "https://api.1818ai.com/user/tools/call/douyin_user_videos" \
|
||||
-H "Authorization: Bearer ak_1234567890abcdef1234567890abcdef" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"sec_user_id": "MS4wLjABAAAA...", "max_cursor": 0, "count": 20}'
|
||||
```
|
||||
|
||||
## 功能特性
|
||||
|
||||
1. **工具配置管理**:管理员可配置每个工具的积分消耗
|
||||
2. **积分扣除**:用户调用工具时自动扣除积分
|
||||
3. **调用记录**:完整记录每次工具调用
|
||||
4. **使用统计**:按天统计每个工具的使用次数
|
||||
|
||||
## 数据库表
|
||||
|
||||
### tool_config(工具配置表)
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| id | bigint | 主键 |
|
||||
| tool_code | varchar(64) | 工具编码(唯一) |
|
||||
| tool_name | varchar(128) | 工具名称 |
|
||||
| category | varchar(32) | 分类(douyin/xiaohongshu/wechat_mp) |
|
||||
| api_endpoint | varchar(256) | API端点路径 |
|
||||
| points_cost | int | 调用消耗积分 |
|
||||
| is_enabled | tinyint | 是否启用 |
|
||||
|
||||
### tool_usage_log(调用记录表)
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| id | bigint | 主键 |
|
||||
| usage_no | varchar(64) | 调用流水号 |
|
||||
| user_id | bigint | 用户ID |
|
||||
| tool_code | varchar(64) | 工具编码 |
|
||||
| points_cost | int | 消耗积分 |
|
||||
| status | varchar(20) | 状态(success/failed) |
|
||||
| create_time | datetime | 调用时间 |
|
||||
|
||||
### tool_usage_daily_stats(每日统计表)
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| stats_date | date | 统计日期 |
|
||||
| tool_code | varchar(64) | 工具编码 |
|
||||
| total_calls | int | 调用总次数 |
|
||||
| success_calls | int | 成功次数 |
|
||||
| total_points_cost | int | 消耗总积分 |
|
||||
|
||||
---
|
||||
|
||||
## 用户端 API
|
||||
|
||||
### 1. 获取工具列表
|
||||
```
|
||||
GET /user/tools/list
|
||||
```
|
||||
|
||||
**响应示例:**
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"message": "success",
|
||||
"data": [
|
||||
{
|
||||
"toolCode": "douyin_user_videos",
|
||||
"toolName": "获取用户主页视频",
|
||||
"category": "douyin",
|
||||
"description": "根据sec_user_id获取用户发布的视频列表",
|
||||
"pointsCost": 5
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### 2. 按分类获取工具
|
||||
```
|
||||
GET /user/tools/list/{category}
|
||||
```
|
||||
- category: douyin / xiaohongshu / wechat_mp
|
||||
|
||||
### 3. 调用工具
|
||||
```
|
||||
POST /user/tools/call/{toolCode}
|
||||
```
|
||||
|
||||
**请求示例(抖音获取用户视频):**
|
||||
```json
|
||||
{
|
||||
"sec_user_id": "MS4wLjABAAAAnxkX6qJBxkyBnNhE__dpuYxdNFzihx1UoxfoKKkAlO8",
|
||||
"max_cursor": 0,
|
||||
"count": 20
|
||||
}
|
||||
```
|
||||
|
||||
**响应示例:**
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"message": "success",
|
||||
"data": {
|
||||
"usageNo": "TU1735789012345ABCD1234",
|
||||
"pointsCost": 5,
|
||||
"remainingPoints": 95,
|
||||
"data": {
|
||||
"aweme_list": [...],
|
||||
"max_cursor": 1528366024000,
|
||||
"has_more": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 4. 获取调用记录
|
||||
```
|
||||
GET /user/tools/usage/logs?page=1&size=10&toolCode=douyin_user_videos
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 管理端 API
|
||||
|
||||
### 1. 获取所有工具配置
|
||||
```
|
||||
GET /admin/tools/configs
|
||||
```
|
||||
|
||||
### 2. 创建工具配置
|
||||
```
|
||||
POST /admin/tools/configs
|
||||
```
|
||||
|
||||
**请求示例:**
|
||||
```json
|
||||
{
|
||||
"toolCode": "douyin_user_videos",
|
||||
"toolName": "获取用户主页视频",
|
||||
"category": "douyin",
|
||||
"description": "根据sec_user_id获取用户发布的视频列表",
|
||||
"apiEndpoint": "/api/v1/douyin/app/v3/fetch_user_post_videos",
|
||||
"requestMethod": "GET",
|
||||
"pointsCost": 5,
|
||||
"isEnabled": 1,
|
||||
"sortOrder": 1
|
||||
}
|
||||
```
|
||||
|
||||
### 3. 更新积分消耗
|
||||
```
|
||||
PATCH /admin/tools/configs/{id}/points-cost?pointsCost=10
|
||||
```
|
||||
|
||||
### 4. 启用/禁用工具
|
||||
```
|
||||
PATCH /admin/tools/configs/{id}/status?isEnabled=0
|
||||
```
|
||||
|
||||
### 5. 获取统计概览
|
||||
```
|
||||
GET /admin/tools/stats/info
|
||||
```
|
||||
|
||||
**响应示例:**
|
||||
```json
|
||||
{
|
||||
"code": 200,
|
||||
"data": {
|
||||
"totalTools": 8,
|
||||
"enabledTools": 8,
|
||||
"todayCalls": 156,
|
||||
"todayPointsCost": 780
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 6. 获取统计汇总
|
||||
```
|
||||
GET /admin/tools/stats/summary?startDate=2026-01-01&endDate=2026-01-02
|
||||
```
|
||||
|
||||
### 7. 获取每日统计
|
||||
```
|
||||
GET /admin/tools/stats/daily?startDate=2026-01-01&endDate=2026-01-07&toolCode=douyin_user_videos
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 配置说明
|
||||
|
||||
### application.yml 配置
|
||||
```yaml
|
||||
tikhub:
|
||||
api:
|
||||
base-url: https://api.tikhub.io
|
||||
key: YOUR_TIKHUB_API_KEY
|
||||
```
|
||||
|
||||
### 初始化数据库
|
||||
执行 `src/main/resources/sql/tool_tables.sql` 创建表和初始数据。
|
||||
|
||||
---
|
||||
|
||||
## 预置工具列表
|
||||
|
||||
| 工具编码 | 名称 | 分类 | 积分 |
|
||||
|---------|------|------|------|
|
||||
| douyin_user_videos | 获取用户主页视频 | douyin | 5 |
|
||||
| douyin_video_by_share | 根据分享链接获取视频 | douyin | 3 |
|
||||
| xiaohongshu_user_notes | 获取用户笔记列表 | xiaohongshu | 5 |
|
||||
| xiaohongshu_search_notes | 搜索笔记 | xiaohongshu | 5 |
|
||||
| xiaohongshu_note_detail | 获取笔记详情 | xiaohongshu | 3 |
|
||||
| wechat_mp_article_list | 获取文章列表 | wechat_mp | 5 |
|
||||
| wechat_mp_article_json | 获取文章详情(JSON) | wechat_mp | 10 |
|
||||
| wechat_mp_article_html | 获取文章详情(HTML) | wechat_mp | 100 |
|
||||
Reference in New Issue
Block a user