Files
cmautobuy/docs/task/63-采集任务重新执行入口.md
T

3.1 KiB
Raw Blame History

63 为选中的采集任务增加重新执行入口

  • 类型:需求
  • 父级大工单:#1
  • 所属 MVP / 版本:#2 Client 可运行任务闭环(MVP)
  • 状态:已完成,用户验收通过
  • 日期:2026-08-09
  • Gitea 工单:#63

背景与目标

任务列表原来只能查看和刷新。采集结果需要复核或补全时,操作人员没有安全、 可追踪的重新采集入口。本任务增加单条采集任务重新执行能力,同时禁止从该入口 重新执行采购任务。

最终方案

  • 在刷新按钮右侧增加“重新执行”,没有选中行时禁用。
  • 点击后校验任务类型、任务状态、Outbox、自动获取状态和设备设置,再显示明确的 “重新采集”确认弹窗。
  • 只允许重新采集已结束的采集任务;采购、活动状态和未发送结果均拦截。
  • 后台线程按 remote_task_id 执行指定任务,不领取新任务,也不先处理其他任务。
  • 新采集生成新的 attempt_id 和幂等键。pdd_tasks.pdd_data 保存最新结果并按 原接口提交 Admin;新增 task_runs.result_data 保存每次成功结果,避免历史丢失。
  • SQLite 使用 v2 追加迁移,旧数据库原有任务和执行记录不变。

改了哪些

  • client/src/pdd_ui.py:增加重新执行按钮、信号、选择状态和运行中禁用状态。
  • client/src/pdd_ui_event.py:增加确认、校验、指定任务 Worker 和中文结果提示。
  • client/src/collect_task_service.py:增加只执行指定本地任务的入口。
  • client/src/task_repository.py:增加重新采集事务校验和状态准备,并保存每次结果。
  • client/src/db_schema.py、client/src/task_models.py:增加数据库 v2 和执行结果字段。
  • client/test/:补充迁移、Repository、服务和界面事件测试。
  • docs/client/03-data-model.md、docs/client/05-ui-specification.md:同步稳定规则。

验收结果

验收标准 结果
刷新右侧显示重新执行,没有选中项时不可用 通过
明确确认后只重新采集选中的终态采集任务 通过
采购、活动状态、未发送 Outbox 和忙碌状态被拦截 通过
新执行使用新的尝试编号和幂等键 通过
当前结果更新,旧成功结果保存在执行记录 通过
手机自动化与网络提交不阻塞 Qt 主线程 通过
不触发采购和真实下单 通过

测试

  • 执行的命令:
    • C:/Python310/python.exe -m unittest discover -s test -v
    • C:/Python310/python.exe -m py_compile src/pdd_ui.py src/pdd_ui_event.py src/task_repository.py src/collect_task_service.py src/db_schema.py
    • 设置 QT_QPA_PLATFORM=offscreen 后创建并关闭 MainWindow
  • 结果:182 项单元测试全部通过;语法检查通过;离屏冒烟输出 OK。
  • 没验证到的部分:没有连接真机执行重新采集,也没有在真实 Admin 数据上验证当前结果覆盖;采购任务未做真机测试,避免触发采购行为。

相关提交

  • eda3661 增加采集任务重新执行入口