diff --git a/docs/task/170-任务失败后继续下一条.md b/docs/task/170-任务失败后继续下一条.md new file mode 100644 index 0000000..87f29e1 --- /dev/null +++ b/docs/task/170-任务失败后继续下一条.md @@ -0,0 +1,78 @@ +# #170 Client:任务失败不自动重试并继续下一条 + +- 工单号:#170 +- 类型:需求 +- 父级:Epic #1、MVP #2 +- 版本:Client 可运行任务闭环 +- 状态:待验收 +- 日期:2026-08-11 +- Gitea: + +## 背景与目标 + +旧流程把部分采集失败显示为“等待重试”,但实际上没有倒计时,还会停止整个自动 +任务队列。采购人员难以判断任务是否失败,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` 任务失败后继续执行下一条。