# 任务队列系统

## 概述

任务队列系统用于管理用户的视频生成任务，实现以下功能：

- **任务限制**: 每个用户最多同时有3个待处理任务
- **定时检查**: 每2分钟自动检查一次任务状态
- **优先级管理**: 支持任务优先级排序
- **状态跟踪**: 完整的任务状态生命周期管理
- **自动清理**: 定期清理过期任务

## 系统架构

### 核心组件

1. **TaskQueue 实体类**: 任务队列数据模型
2. **TaskQueueRepository**: 数据访问层
3. **TaskQueueService**: 业务逻辑层
4. **TaskQueueScheduler**: 定时任务调度器
5. **TaskQueueApiController**: API控制器

### 任务状态

- `PENDING`: 等待处理
- `PROCESSING`: 正在处理
- `COMPLETED`: 已完成
- `FAILED`: 失败
- `CANCELLED`: 已取消
- `TIMEOUT`: 超时

## 使用方法

### 1. 添加任务到队列

```java
// 文生视频任务
taskQueueService.addTextToVideoTask(username, taskId);

// 图生视频任务
taskQueueService.addImageToVideoTask(username, taskId);
```

### 2. 获取用户任务队列

```java
List<TaskQueue> userTasks = taskQueueService.getUserTaskQueue(username);
```

### 3. 取消任务

```java
boolean cancelled = taskQueueService.cancelTask(taskId, username);
```

### 4. 获取统计信息

```java
long totalCount = taskQueueService.getUserTaskCount(username);
```

## API接口

### 获取用户任务队列
```
GET /api/task-queue/user-tasks
Authorization: Bearer <token>
```

### 取消任务
```
POST /api/task-queue/cancel/{taskId}
Authorization: Bearer <token>
```

### 获取队列统计
```
GET /api/task-queue/stats
Authorization: Bearer <token>
```

### 手动处理任务（管理员）
```
POST /api/task-queue/process-pending
Authorization: Bearer <token>
```

### 手动检查状态（管理员）
```
POST /api/task-queue/check-statuses
Authorization: Bearer <token>
```

## 定时任务

### 1. 处理待处理任务
- **频率**: 每30秒
- **功能**: 处理队列中的待处理任务，提交到外部API

### 2. 检查任务状态
- **频率**: 每2分钟
- **功能**: 检查正在处理的任务状态，更新任务状态

### 3. 清理过期任务
- **频率**: 每天凌晨2点
- **功能**: 清理超过7天的任务记录

### 4. 队列状态监控
- **频率**: 每5分钟
- **功能**: 记录队列运行状态

## 配置参数

### 任务限制
- 每个用户最多3个待处理任务
- 可通过修改 `MAX_TASKS_PER_USER` 常量调整

### 超时设置
- 默认最大检查次数：30次
- 检查间隔：2分钟
- 总超时时间：60分钟
- 可通过修改 `maxCheckCount` 字段调整

### 清理策略
- 过期时间：7天
- 可通过修改 `cleanupExpiredTasks` 方法调整

## 数据库表结构

```sql
CREATE TABLE task_queue (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(100) NOT NULL,
    task_id VARCHAR(50) NOT NULL UNIQUE,
    task_type ENUM('TEXT_TO_VIDEO', 'IMAGE_TO_VIDEO') NOT NULL,
    status ENUM('PENDING', 'PROCESSING', 'COMPLETED', 'FAILED', 'CANCELLED', 'TIMEOUT') NOT NULL DEFAULT 'PENDING',
    priority INT NOT NULL DEFAULT 0,
    real_task_id VARCHAR(100),
    last_check_time DATETIME,
    check_count INT NOT NULL DEFAULT 0,
    max_check_count INT NOT NULL DEFAULT 30,
    error_message TEXT,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    completed_at DATETIME
);
```

## 集成说明

### 现有服务修改

1. **TextToVideoService**: 
   - 移除了原有的异步处理逻辑
   - 改为添加任务到队列

2. **ImageToVideoService**:
   - 移除了原有的异步处理逻辑
   - 改为添加任务到队列

### 工作流程

1. 用户创建任务 → 保存到数据库 → 添加到队列
2. 定时任务处理队列 → 提交到外部API → 更新状态为PROCESSING
3. 定时任务检查状态 → 查询外部API → 更新任务状态
4. 任务完成/失败 → 更新原始任务状态 → 从队列中移除

## 监控和日志

### 关键日志
- 任务添加到队列
- 任务状态变更
- API调用结果
- 错误和异常

### 监控指标
- 队列中任务数量
- 各状态任务分布
- 处理成功率
- 平均处理时间

## 故障处理

### 常见问题

1. **任务卡在PROCESSING状态**
   - 检查外部API是否正常
   - 查看错误日志
   - 手动触发状态检查

2. **队列积压**
   - 检查外部API响应时间
   - 调整检查频率
   - 增加处理线程

3. **任务超时**
   - 检查网络连接
   - 调整超时设置
   - 优化API调用

### 恢复策略

1. **自动恢复**: 系统会自动重试失败的任务
2. **手动干预**: 通过API接口手动处理
3. **数据修复**: 清理异常状态的任务

## 性能优化

### 数据库优化
- 添加适当的索引
- 定期清理过期数据
- 使用分页查询

### 系统优化
- 异步处理任务
- 批量操作
- 缓存热点数据

## 扩展功能

### 未来可扩展的功能
1. **任务优先级**: 支持动态调整优先级
2. **负载均衡**: 多实例部署时的任务分配
3. **任务依赖**: 支持任务间的依赖关系
4. **通知系统**: 任务完成后的消息通知
5. **统计分析**: 详细的性能统计和分析


