5.1 KiB
5.1 KiB
任务暂停功能实现计划
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 数据库模型扩展
// 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
// 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 任务执行器改进
// 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 前端暂停按钮功能
<!-- 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. 预期效果
- 暂停功能:用户可以通过暂停按钮暂停正在执行的任务
- 恢复功能:用户可以恢复被暂停的任务
- 状态反馈:界面会显示当前任务的暂停状态
- 持久化:任务暂停状态会被持久化保存
- 队列管理:支持暂停/恢复整个任务队列
4. 测试计划
-
功能测试:
- 验证暂停按钮能正常触发暂停操作
- 验证恢复按钮能正常恢复任务
- 验证暂停状态能正确显示
-
边界测试:
- 测试同时暂停多个任务
- 测试应用重启后暂停状态是否保持
- 测试暂停状态下的任务进度更新
-
性能测试:
- 测试大量任务时的暂停/恢复响应时间
- 验证暂停状态下的系统资源占用
5. 风险评估
- 任务中断风险:任务执行过程中中断可能导致数据不一致
- 性能影响:频繁检查暂停状态可能影响性能
- 并发冲突:多个任务同时暂停/恢复可能导致冲突
- 持久化失败:断电等异常情况可能导致暂停状态丢失
6. 解决方案
- 任务中断处理:实现事务机制,确保任务中断时数据一致性
- 性能优化:合理设置暂停状态检查频率,避免频繁查询数据库
- 并发控制:使用锁机制确保任务状态更新的原子性
- 持久化保障:使用事务确保暂停状态能可靠保存
7. 代码规范
- 遵循项目现有的代码风格和命名规范
- 确保类型安全,使用TypeScript严格模式
- 添加必要的注释和文档
- 编写单元测试确保功能正确性
8. 交付标准
- 所有暂停功能按优先级实现完成
- 代码通过TypeScript类型检查
- 没有语法错误和运行时错误
- 功能测试通过
- 代码符合项目的质量标准
9. 后续优化
- 添加任务暂停的原因记录
- 实现自动恢复功能
- 支持基于时间的暂停计划
- 添加暂停状态的日志记录
- 优化暂停状态的查询性能
现在我将按照这个计划开始实现任务暂停功能,首先检查数据库模型。