docs: 归档任务 #170

This commit is contained in:
chengma
2026-08-11 18:22:07 +08:00
parent 8b8a542cc5
commit 88d59e46f4
@@ -0,0 +1,78 @@
# #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` 任务失败后继续执行下一条。