feat: 新增按状态批量删除链接功能

主要修改:
1. 在LinkController中新增按状态批量删除链接的接口,允许用户根据指定状态批量删除自己创建的链接。
2. 在LinkStatusService中实现批量删除逻辑,确保用户只能删除自己的链接,并进行状态验证。
3. 更新LinkTaskMapper和对应的XML文件,增加查询和删除链接任务的相关方法。

技术细节:
- 通过新增的批量删除功能,提升了用户对链接的管理能力,确保操作的安全性和有效性,同时优化了数据库操作的灵活性。
This commit is contained in:
zyh
2025-08-28 12:41:44 +08:00
parent 080c55059a
commit 0801394999
7 changed files with 455 additions and 0 deletions

View File

@@ -0,0 +1,140 @@
# 按狀態批量刪除鏈接接口說明
## 功能概述
新增了一個按鏈接狀態批量刪除鏈接的接口,允許用戶根據指定的狀態列表批量刪除自己的鏈接。
## 接口詳情
### 請求路徑
`POST /api/link/batch-delete-by-status`
### 請求參數
```json
{
"statusList": ["EXPIRED", "REFUNDED"],
"confirmDelete": true
}
```
#### 參數說明
- `statusList`: 要刪除的鏈接狀態列表,支持的狀態值:
- `NEW`: 新建
- `USING`: 使用中
- `LOGGED_IN`: 已登錄
- `COMPLETED`: 已完成
- `REFUNDED`: 已退款
- `EXPIRED`: 已過期
- `confirmDelete`: 是否確認刪除操作,必須設置為 `true` 才能執行刪除
#### 驗證規則
- 狀態列表不能為空
- 單次最多指定10個狀態
- 必須確認刪除操作(`confirmDelete = true`
- 只能刪除用戶自己創建的鏈接
### 響應格式
```json
{
"successCount": 15,
"failedCount": 0,
"totalCount": 15,
"successCodeNos": ["ABC123", "DEF456", "..."],
"failedCodeNos": [],
"failedReasons": [],
"allSuccess": true
}
```
#### 響應字段說明
- `successCount`: 成功刪除的數量
- `failedCount`: 刪除失敗的數量
- `totalCount`: 總數量
- `successCodeNos`: 成功刪除的鏈接編號列表
- `failedCodeNos`: 刪除失敗的鏈接編號列表
- `failedReasons`: 刪除失敗的原因列表
- `allSuccess`: 是否全部成功
## 實現細節
### 新增文件
1. `BatchDeleteByStatusRequest.java` - 請求DTO
2. `test_batch_delete_by_status.http` - 接口測試文件
3. `docs/按狀態批量刪除鏈接接口說明.md` - 接口說明文檔
### 修改文件
1. `LinkTaskMapper.java` - 添加數據庫查詢方法
2. `LinkTaskMapper.xml` - 添加SQL映射
3. `LinkStatusService.java` - 添加業務邏輯方法
4. `LinkController.java` - 添加控制器接口
### 數據庫操作
- `findByStatusListAndAgentId`: 查詢指定狀態和用戶的鏈接列表
- `countByStatusListAndAgentId`: 統計指定狀態和用戶的鏈接數量
- `batchDeleteByStatusListAndAgentId`: 批量刪除指定狀態和用戶的鏈接
## 安全考慮
### 權限控制
- 用戶只能刪除自己創建的鏈接
- 通過JWT token進行用戶身份驗證
- 通過 `agentId` 過濾確保數據隔離
### 操作確認
- 必須設置 `confirmDelete = true` 才能執行刪除操作
- 避免誤操作導致的數據丟失
### 參數驗證
- 驗證狀態值的有效性
- 限制單次操作的狀態數量最多10個
- 參數非空驗證
## 使用示例
### 1. 刪除過期鏈接
```http
POST /api/link/batch-delete-by-status
Authorization: Bearer {token}
Content-Type: application/json
{
"statusList": ["EXPIRED"],
"confirmDelete": true
}
```
### 2. 清理已退款和已過期的鏈接
```http
POST /api/link/batch-delete-by-status
Authorization: Bearer {token}
Content-Type: application/json
{
"statusList": ["EXPIRED", "REFUNDED"],
"confirmDelete": true
}
```
## 錯誤處理
### 常見錯誤
- `用戶未認證` - JWT token無效或過期
- `必須確認刪除操作` - confirmDelete不為true
- `要删除的状态列表不能为空` - statusList為空
- `无效的状态值` - 狀態值不在允許範圍內
- `单次最多只能指定10个状态` - 狀態數量超過限制
### 響應狀態碼
- `200` - 操作成功
- `400` - 請求參數錯誤
- `401` - 用戶未認證
- `500` - 服務器內部錯誤
## 日誌記錄
系統會記錄以下關鍵信息:
- 刪除操作的發起用戶
- 指定的狀態列表
- 實際刪除的鏈接數量
- 操作結果(成功/失敗)
- 失敗原因(如有)
這些日誌有助於問題排查和操作審計。