From 610e9e3749c750745fe2cadf970aec202214f3ee Mon Sep 17 00:00:00 2001 From: chengma Date: Sun, 9 Aug 2026 22:48:51 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E5=BD=92=E6=A1=A3=E4=BB=BB=E5=8A=A1=20?= =?UTF-8?q?#70?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/task/70-等待重试任务手动重新执行.md | 65 ++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 docs/task/70-等待重试任务手动重新执行.md diff --git a/docs/task/70-等待重试任务手动重新执行.md b/docs/task/70-等待重试任务手动重新执行.md new file mode 100644 index 0000000..9bc4abe --- /dev/null +++ b/docs/task/70-等待重试任务手动重新执行.md @@ -0,0 +1,65 @@ +# 70 允许等待重试的采集任务手动重新执行 + +- 类型:缺陷 +- 父级大工单:#1 +- 所属 MVP / 版本:#2 Client 可运行任务闭环(MVP) +- 状态:已完成,待用户验收 +- 日期:2026-08-09 +- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/70 + +## 背景与目标 + +采集任务进入“等待重试”后没有倒计时,自动获取流程也已经停止。用户等待十多分钟 +仍不会看到状态变化,同时“重新执行”又拒绝该状态。本任务允许符合安全条件的 +等待重试任务人工重新采集,并明确提示任务当前不会自动倒计时。 + +## 最终方案 + +- 采集任务处于 `retry_wait` 时,可以进入人工重新执行校验。 +- 上次结果 Outbox 已成功发送后,重新执行会创建新的执行记录;不重新领取任务。 +- 仍有未发送或永久提交失败的 Outbox 时继续阻止重采,避免本地状态和 Admin 状态分叉。 +- 永久提交失败时显示 Admin 返回的具体原因,方便判断应先处理什么。 +- 可恢复采集错误导致自动获取停止时,底部状态和持久警告显示“重试已暂停”,提示 + 用户选择该任务点击“重新执行”,或重新启动获取任务。 +- 本任务不增加倒计时和 `next_retry_at`,不修改数据库结构或 Admin 接口,也不允许 + 采购任务重新执行。 + +现场只读检查发现,当前两条等待重试任务的 `task_failure` Outbox 都被 Admin 以 +“任务不存在”永久拒绝。这两条任务仍会被安全门禁阻止重采,因为重新采集后的结果 +也没有 Admin 任务可以接收;应由 Admin 重新创建或派发任务后再执行。 + +## 改了哪些文件 + +- `client/src/task_repository.py`:允许安全的等待重试采集任务重新执行,并细化 Outbox 错误。 +- `client/src/pdd_ui_event.py`:增加“重试已暂停”的稳定状态和持久提示。 +- `client/test/test_task_repository.py`:覆盖等待重试和永久失败 Outbox 的校验。 +- `client/test/test_pdd_ui_event.py`:覆盖暂停提示及普通失败任务分支。 +- `docs/client/03-data-model.md`:说明等待重试的人工恢复方式和无倒计时现状。 +- `docs/client/05-ui-specification.md`:更新重新执行范围和暂停反馈规则。 + +## 验收结果 + +| 验收标准 | 结果 | +|---|---| +| 等待重试的采集任务可进入人工重新执行 | 通过 | +| 未发送 Outbox 时继续阻止重新执行 | 通过 | +| 永久失败 Outbox 显示 Admin 的具体拒绝原因 | 通过 | +| 每次重新执行创建新的任务执行记录 | 通过 | +| 自动获取停止后明确显示“重试已暂停”和恢复方式 | 通过 | +| 普通失败任务不错误显示为等待重试 | 通过 | +| 采购任务和执行中的任务仍不可重新执行 | 通过 | + +## 测试 + +- 执行的命令: + - `C:/Python310/python.exe -m unittest discover -s test -q` + - `C:/Python310/python.exe -m py_compile src/task_repository.py src/pdd_ui_event.py` + - 设置 `QT_QPA_PLATFORM=offscreen` 后创建并关闭 `MainWindow` +- 结果:Client 全量 187 项测试通过;语法检查通过;离屏冒烟输出 + `MAIN_WINDOW_OK`。 +- **未验证到的部分**:尚未用真机制造新的等待重试任务,并在可见 Client 界面完成 + 一次人工重新采集;当前现场任务因 Admin 返回“任务不存在”不能用于该验收。 + +## 相关提交 + +- `a6c573a` 允许等待重试任务手动重新执行