Files
read_book/.trae/documents/plan_20260124_172544.md
寒寒 455dd1f4cd feat(desktop): 实现一些功能
1. 实现任务暂停功能

2. 实现页面的国际化功能

3.优化项目的结构以及BUG

4. 优化系统架构

5. 实现一大堆的功能
2026-01-25 03:30:23 +08:00

5.1 KiB
Raw Blame History

任务暂停功能实现计划

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. 预期效果

  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. 优化暂停状态的查询性能

现在我将按照这个计划开始实现任务暂停功能,首先检查数据库模型。