183 lines
5.1 KiB
Markdown
183 lines
5.1 KiB
Markdown
# 任务暂停功能实现计划
|
||
|
||
## 1. 实现顺序
|
||
|
||
按照Task.md中的优先级顺序,我将按以下步骤实现任务暂停功能:
|
||
|
||
### 1.1 数据库模型扩展 (PAUSE-001)
|
||
- 检查ReadingReflectionTaskBatch实体当前定义
|
||
- 添加isPaused和pausedAt字段
|
||
- 运行数据库迁移
|
||
|
||
### 1.2 实现暂停/恢复API (PAUSE-002)
|
||
- 在task.router.ts中添加pauseBatch和resumeBatch方法
|
||
- 实现暂停和恢复任务的业务逻辑
|
||
|
||
### 1.3 任务执行器改进 (PAUSE-003)
|
||
- 在TaskExecutor中添加任务状态检查
|
||
- 实现任务执行的中断和恢复机制
|
||
- 确保任务执行过程中能响应暂停命令
|
||
|
||
### 1.4 前端暂停按钮功能 (PAUSE-004)
|
||
- 为暂停按钮添加点击事件处理
|
||
- 实现暂停/恢复状态的切换逻辑
|
||
- 调用后端API实现暂停和恢复操作
|
||
|
||
### 1.5 暂停状态视觉反馈 (PAUSE-005)
|
||
- 添加暂停状态的视觉提示
|
||
- 实现按钮样式和文字的动态变化
|
||
- 显示暂停原因和预计恢复时间
|
||
|
||
### 1.6 任务队列管理 (PAUSE-006)
|
||
- 实现任务队列管理系统
|
||
- 支持暂停/恢复整个队列
|
||
- 处理队列中任务的状态管理
|
||
|
||
### 1.7 持久化暂停状态 (PAUSE-007)
|
||
- 确保暂停状态能持久化保存
|
||
- 应用重启后恢复暂停状态
|
||
- 处理断电等异常情况
|
||
|
||
## 2. 技术实现细节
|
||
|
||
### 2.1 数据库模型扩展
|
||
|
||
```typescript
|
||
// src/main/db/entities/ReadingReflectionTaskBatch.ts
|
||
@Entity('reading_reflection_task_batches')
|
||
export class ReadingReflectionTaskBatch {
|
||
// 现有字段...
|
||
|
||
@Column({ type: 'boolean', default: false })
|
||
isPaused!: boolean
|
||
|
||
@CreateDateColumn({ type: 'datetime', nullable: true })
|
||
pausedAt!: Date | null
|
||
}
|
||
```
|
||
|
||
### 2.2 实现暂停/恢复API
|
||
|
||
```typescript
|
||
// src/rpc/router/task.router.ts
|
||
export const taskRouter = router({
|
||
// 现有方法...
|
||
|
||
/**
|
||
* 暂停任务批次
|
||
*/
|
||
pauseBatch: publicProcedure
|
||
.input(z.object({ batchId: z.string() }))
|
||
.mutation(async ({ input }) => {
|
||
// 暂停任务逻辑
|
||
}),
|
||
|
||
/**
|
||
* 恢复任务批次
|
||
*/
|
||
resumeBatch: publicProcedure
|
||
.input(z.object({ batchId: z.string() }))
|
||
.mutation(async ({ input }) => {
|
||
// 恢复任务逻辑
|
||
})
|
||
})
|
||
```
|
||
|
||
### 2.3 任务执行器改进
|
||
|
||
```typescript
|
||
// src/main/manager/taskExecutor.ts
|
||
export class TaskExecutor {
|
||
// 现有方法...
|
||
|
||
private async checkPauseStatus(taskId: string): Promise<boolean> {
|
||
// 检查任务是否被暂停
|
||
}
|
||
|
||
private async executeSubTask(taskId: string, subTaskId: string, task: any, index: number, total: number): Promise<void> {
|
||
// 执行子任务,定期检查暂停状态
|
||
}
|
||
}
|
||
```
|
||
|
||
### 2.4 前端暂停按钮功能
|
||
|
||
```vue
|
||
<!-- src/renderer/src/pages/task/index.vue -->
|
||
<template>
|
||
<a-button
|
||
size="mini"
|
||
type="primary"
|
||
@click="handlePauseResume"
|
||
>
|
||
<template #icon>
|
||
<pause v-if="!isPaused" theme="outline" size="12" />
|
||
<play v-else theme="outline" size="12" />
|
||
</template>
|
||
{{ isPaused ? '恢复队列' : '暂停队列' }}
|
||
</a-button>
|
||
</template>
|
||
```
|
||
|
||
## 3. 预期效果
|
||
|
||
1. **暂停功能**:用户可以通过暂停按钮暂停正在执行的任务
|
||
2. **恢复功能**:用户可以恢复被暂停的任务
|
||
3. **状态反馈**:界面会显示当前任务的暂停状态
|
||
4. **持久化**:任务暂停状态会被持久化保存
|
||
5. **队列管理**:支持暂停/恢复整个任务队列
|
||
|
||
## 4. 测试计划
|
||
|
||
1. **功能测试**:
|
||
- 验证暂停按钮能正常触发暂停操作
|
||
- 验证恢复按钮能正常恢复任务
|
||
- 验证暂停状态能正确显示
|
||
|
||
2. **边界测试**:
|
||
- 测试同时暂停多个任务
|
||
- 测试应用重启后暂停状态是否保持
|
||
- 测试暂停状态下的任务进度更新
|
||
|
||
3. **性能测试**:
|
||
- 测试大量任务时的暂停/恢复响应时间
|
||
- 验证暂停状态下的系统资源占用
|
||
|
||
## 5. 风险评估
|
||
|
||
1. **任务中断风险**:任务执行过程中中断可能导致数据不一致
|
||
2. **性能影响**:频繁检查暂停状态可能影响性能
|
||
3. **并发冲突**:多个任务同时暂停/恢复可能导致冲突
|
||
4. **持久化失败**:断电等异常情况可能导致暂停状态丢失
|
||
|
||
## 6. 解决方案
|
||
|
||
1. **任务中断处理**:实现事务机制,确保任务中断时数据一致性
|
||
2. **性能优化**:合理设置暂停状态检查频率,避免频繁查询数据库
|
||
3. **并发控制**:使用锁机制确保任务状态更新的原子性
|
||
4. **持久化保障**:使用事务确保暂停状态能可靠保存
|
||
|
||
## 7. 代码规范
|
||
|
||
- 遵循项目现有的代码风格和命名规范
|
||
- 确保类型安全,使用TypeScript严格模式
|
||
- 添加必要的注释和文档
|
||
- 编写单元测试确保功能正确性
|
||
|
||
## 8. 交付标准
|
||
|
||
1. 所有暂停功能按优先级实现完成
|
||
2. 代码通过TypeScript类型检查
|
||
3. 没有语法错误和运行时错误
|
||
4. 功能测试通过
|
||
5. 代码符合项目的质量标准
|
||
|
||
## 9. 后续优化
|
||
|
||
1. 添加任务暂停的原因记录
|
||
2. 实现自动恢复功能
|
||
3. 支持基于时间的暂停计划
|
||
4. 添加暂停状态的日志记录
|
||
5. 优化暂停状态的查询性能
|
||
|
||
现在我将按照这个计划开始实现任务暂停功能,首先检查数据库模型。 |