# 任务清理系统实现说明

## 功能概述

本系统实现了定期清理任务列表的功能，将成功的任务导出到专门的归档表中，失败的任务记录到清理日志后删除。

## 系统架构

### 1. 数据库表结构

#### 成功任务归档表 (`completed_tasks_archive`)
```sql
CREATE TABLE completed_tasks_archive (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    task_id VARCHAR(255) NOT NULL,
    username VARCHAR(255) NOT NULL,
    task_type VARCHAR(50) NOT NULL,
    prompt TEXT,
    aspect_ratio VARCHAR(20),
    duration INT,
    hd_mode BOOLEAN DEFAULT FALSE,
    result_url TEXT,
    real_task_id VARCHAR(255),
    progress INT DEFAULT 100,
    created_at TIMESTAMP NOT NULL,
    completed_at TIMESTAMP NOT NULL,
    archived_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    points_cost INT DEFAULT 0
);
```

#### 失败任务清理日志表 (`failed_tasks_cleanup_log`)
```sql
CREATE TABLE failed_tasks_cleanup_log (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    task_id VARCHAR(255) NOT NULL,
    username VARCHAR(255) NOT NULL,
    task_type VARCHAR(50) NOT NULL,
    error_message TEXT,
    created_at TIMESTAMP NOT NULL,
    failed_at TIMESTAMP NOT NULL,
    cleaned_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```

### 2. 核心组件

#### TaskCleanupService
- **功能**: 执行任务清理的核心服务
- **主要方法**:
  - `performFullCleanup()`: 执行完整清理
  - `cleanupTextToVideoTasks()`: 清理文生视频任务
  - `cleanupImageToVideoTasks()`: 清理图生视频任务
  - `cleanupTaskQueue()`: 清理任务队列
  - `cleanupExpiredArchives()`: 清理过期归档
  - `cleanupUserTasks()`: 清理指定用户任务

#### TaskQueueScheduler
- **功能**: 定时调度器
- **调度任务**:
  - 每天凌晨4点执行任务清理 (`@Scheduled(cron = "0 0 4 * * ?")`)

#### CleanupController
- **功能**: 提供手动清理的API接口
- **接口**:
  - `POST /api/cleanup/full-cleanup`: 执行完整清理
  - `POST /api/cleanup/user-tasks/{username}`: 清理指定用户任务
  - `GET /api/cleanup/cleanup-stats`: 获取清理统计信息

## 清理流程

### 1. 成功任务处理
1. 查找所有状态为 `COMPLETED` 的任务
2. 将任务信息导出到 `completed_tasks_archive` 表
3. 从原始任务表中删除记录

### 2. 失败任务处理
1. 查找所有状态为 `FAILED` 的任务
2. 将任务信息记录到 `failed_tasks_cleanup_log` 表
3. 从原始任务表中删除记录

### 3. 任务队列清理
1. 删除状态为 `COMPLETED` 和 `FAILED` 的任务队列记录

### 4. 过期归档清理
1. 删除超过保留期的归档记录和清理日志

## 配置参数

```properties
# 任务保留天数（默认30天）
task.cleanup.retention-days=30

# 归档保留天数（默认365天）
task.cleanup.archive-retention-days=365
```

## 使用方法

### 1. 自动清理
系统每天凌晨4点自动执行清理任务，无需人工干预。

### 2. 手动清理
```bash
# 执行完整清理
curl -X POST "http://localhost:8080/api/cleanup/full-cleanup"

# 清理指定用户任务
curl -X POST "http://localhost:8080/api/cleanup/user-tasks/admin"

# 获取清理统计信息
curl "http://localhost:8080/api/cleanup/cleanup-stats"
```

### 3. PowerShell测试脚本
```powershell
# 运行测试脚本
.\test-cleanup.ps1
```

## 监控和统计

### 清理统计信息
- 当前任务数量（按状态分类）
- 归档任务数量
- 清理日志数量
- 配置参数

### 日志记录
- 清理操作的详细日志
- 错误处理和异常记录
- 性能监控信息

## 安全考虑

1. **事务处理**: 所有清理操作都在事务中执行，确保数据一致性
2. **错误处理**: 完善的异常处理机制，避免清理过程中的数据丢失
3. **权限控制**: API接口需要适当的权限验证
4. **数据备份**: 建议在清理前进行数据备份

## 扩展功能

### 1. 自定义清理策略
- 支持按任务类型设置不同的保留期
- 支持按用户等级设置不同的清理策略

### 2. 清理报告
- 生成清理操作的详细报告
- 支持邮件通知清理结果

### 3. 数据导出
- 支持将归档数据导出为CSV或Excel格式
- 支持按时间范围导出数据

## 注意事项

1. **数据恢复**: 清理后的数据无法直接恢复，需要从归档表中查找
2. **性能影响**: 大量数据清理可能影响系统性能，建议在低峰期执行
3. **存储空间**: 归档表会占用额外的存储空间，需要定期清理过期数据
4. **备份策略**: 建议定期备份归档表数据

---
*文档生成时间: 2025-01-24*
*版本: 1.0*
