Files
cmautobuy/docs/task/70-等待重试任务手动重新执行.md
T
2026-08-09 22:48:51 +08:00

66 lines
3.4 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.
# 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` 允许等待重试任务手动重新执行