docs: 归档任务 #45

This commit is contained in:
chengma
2026-08-09 11:12:51 +08:00
parent 512ccf34d6
commit 7fb137f685
@@ -0,0 +1,56 @@
# 45 让获取任务按钮支持持续自动运行和安全停止
- 类型:需求
- 父级大工单:#1
- 所属 MVP / 版本:#2 / MVP
- 状态:已实现,待验收
- 日期:2026-08-09
- Gitea 工单:<http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/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)