Files
cmautobuy/docs/task/45-持续自动获取任务与安全停止.md
T
2026-08-09 11:12:51 +08:00

3.2 KiB

45 让获取任务按钮支持持续自动运行和安全停止

背景与目标

原来的“获取任务”按钮每次只处理一轮,用户需要反复点击。此次把原按钮改成“开始自动获取 / 停止自动获取”开关:启动后持续按顺序处理任务,停止时取消下一轮并等待当前任务安全结束。

最终方案

  • 每轮仍然只创建一个 ClaimTaskWorker,处理待提交结果、本地未完成任务或领取一条新任务。
  • 上一轮线程完全结束后,主线程使用单次 QTimer 安排下一轮,确保同一设备不会并发执行两条任务。
  • 成功后短暂等待再继续;暂无任务时等待 5 秒;Admin 临时错误按 5、10、20、30 秒退避,之后保持 30 秒。
  • 缺少配置、设备错误、需要人工处理和不可重试错误会停止自动获取,并保留明确的中文状态提示。
  • 再次点击按钮或关闭程序时停止定时器,并请求当前任务在安全点取消。
  • 未修改 Admin 接口、SQLite 表结构、pdd_data 结构和采购下单逻辑。

实际实现与建单方案一致。

改了哪些

  • client/src/pdd_ui_event.py:增加连续调度、退避重试、启动/停止状态和关闭清理。
  • client/test/test_pdd_ui_event.py:覆盖连续串行执行、手动停止、退避、配置错误和关闭清理。
  • docs/client/02-architecture.md:更新自动获取的线程与调度说明。
  • docs/client/05-ui-specification.md:更新按钮状态及持续运行规则。

验收结果

验收标准 结果
点击一次后持续处理多条任务,且同一时刻最多执行一轮 自动测试通过
再次点击后不再启动下一轮,当前轮安全结束 自动测试通过
暂无任务时等待 5 秒后继续 自动测试通过
Admin 可重试错误按 5/10/20/30 秒退避,成功后重置 自动测试通过
配置、人工处理等不可自动恢复的问题会停止并恢复按钮 自动测试通过
关闭程序后定时器不会再次领取任务 自动测试通过
不改变 Admin、数据库和采购安全边界 代码检查通过

测试

  • 执行的命令:
    • C:/Python310/python.exe -m py_compile src/pdd_ui_event.py test/test_pdd_ui_event.py
    • C:/Python310/python.exe -m unittest discover -s test -p "test_pdd_ui_event.py"
    • C:/Python310/python.exe -m unittest discover -s test -p "test_*.py"
    • git diff --check -- client/src/pdd_ui_event.py client/test/test_pdd_ui_event.py docs/client/02-architecture.md docs/client/05-ui-specification.md
  • 结果:语法检查通过;定向测试 19 项通过;Client 完整测试 176 项通过;差异格式检查通过。测试环境存在 Qt 字体目录警告,不影响测试结果。
  • 没验证到的部分:尚未连接真实 Admin 和 Android 设备连续执行多条采集任务;尚未通过真机验证采集中点击停止时的安全取消时机。未执行真实采购和下单。

相关提交

  • 5fd7198 feat: 支持持续自动获取任务 (#45)