Files
cmautobuy/docs/task/170-任务失败后继续下一条.md
T
2026-08-11 18:22:07 +08:00

79 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# #170 Client:任务失败不自动重试并继续下一条
- 工单号:#170
- 类型:需求
- 父级:Epic #1、MVP #2
- 版本:Client 可运行任务闭环
- 状态:待验收
- 日期:2026-08-11
- Gitea:<http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/170>
## 背景与目标
旧流程把部分采集失败显示为“等待重试”,但实际上没有倒计时,还会停止整个自动
任务队列。采购人员难以判断任务是否失败,Admin 指派的后续任务也会被阻塞。本任务
改为每条任务自动执行一次,任务自身失败后记录原因并继续下一条。
## 最终方案
- 普通采集或采购错误保存为 `failed`,错误上报中的 `retryable` 固定为 `false`,
自动流程不再重试当前任务。
- 自动任务查询只选择 `claimed`,不再选择历史 `retry_wait`;旧记录保留并显示为
“采集失败”或“采购失败”。
- 服务结果明确区分 `task_failed` 和 `global_failed`。前者上报成功后安排下一轮;
后者停止自动获取。
- 设备断开、PDD 登录、验证码、风控、支付页、Admin/Outbox 阻塞和不可逆采购待
核单仍作为全局阻塞,不继续批量制造失败任务。
- 列表和详情根据任务类型显示“采集失败”或“采购失败”,详情继续展示错误码与
失败原因。
- 手动重新采集和重新采购入口保留;每次重新执行创建新的运行记录,采购仍永久
拒绝任何有不可逆历史的任务重新下单。
- 同步更新需求、数据模型和界面规范中的稳定行为说明。
## 改了哪些文件
- `client/src/collect_task_service.py`:普通采集错误改为单次失败,区分任务失败和
全局阻塞。
- `client/src/purchase_task_service.py`:普通采购错误保存为失败并继续队列,全局及
不可逆安全规则保持停止。
- `client/src/task_repository.py`:自动选择只读取 `claimed`,跳过失败和历史
`retry_wait`。
- `client/src/pdd_ui_event.py`、`client/src/task_detail_view.py`:显示任务类型对应的
失败状态,并只对任务自身失败安排下一轮。
- `client/test/` 相关测试:覆盖失败后下一条、禁止自动重试、全局阻塞、中文状态、
失败原因和采购取消。
- `docs/client/01-requirements.md`、`03-data-model.md`、`05-ui-specification.md`:同步
单次执行与失败队列规则。
## 验收结果
- [x] 新采集失败不再进入“等待重试”,列表显示“采集失败”。
- [x] 普通采购失败显示“采购失败”,详情保留具体错误原因。
- [x] 第一条任务自身失败且上报成功后,第二条本地任务可以继续执行。
- [x] 失败和历史 `retry_wait` 任务不会被自动选择。
- [x] 用户手动重新执行仍使用现有入口和安全预检。
- [x] 设备、登录、验证码、风控、Admin 和不可逆采购等全局问题仍停止队列。
- [x] 未修改 Admin 接口、数据库表结构、`pdd_data` 和采购不可逆门禁。
- [x] Client 全量测试和语法检查通过。
- [ ] 用户使用多个真实任务确认一条失败后会继续下一条。
## 测试
在 `client/` 目录执行:
```powershell
$env:QT_QPA_PLATFORM="offscreen"
C:/Python310/python.exe -m unittest discover -s test -p "test_*.py"
C:/Python310/python.exe -m py_compile src/collect_task_service.py src/purchase_task_service.py src/task_repository.py src/pdd_ui_event.py src/task_detail_view.py
Remove-Item Env:QT_QPA_PLATFORM
```
结果:Client 完整 429 项测试通过,语法检查通过。
**没验证到的部分**:未连接真实 Admin 连续领取多条任务;未连接 Android 真机;未
执行真实采购、下单或付款。
## 相关提交
- `8b8a542` 任务失败后继续执行下一条。