3.7 KiB
3.7 KiB
#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:同步 单次执行与失败队列规则。
验收结果
- 新采集失败不再进入“等待重试”,列表显示“采集失败”。
- 普通采购失败显示“采购失败”,详情保留具体错误原因。
- 第一条任务自身失败且上报成功后,第二条本地任务可以继续执行。
- 失败和历史
retry_wait任务不会被自动选择。 - 用户手动重新执行仍使用现有入口和安全预检。
- 设备、登录、验证码、风控、Admin 和不可逆采购等全局问题仍停止队列。
- 未修改 Admin 接口、数据库表结构、
pdd_data和采购不可逆门禁。 - Client 全量测试和语法检查通过。
- 用户使用多个真实任务确认一条失败后会继续下一条。
测试
在 client/ 目录执行:
$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任务失败后继续执行下一条。