允许等待重试的采集任务手动重新执行 #70

Closed
opened 2026-08-09 22:35:04 +08:00 by ila · 3 comments
Owner

基本信息

  • 类型:缺陷
  • 父级大工单:#1
  • 所属 MVP / 版本:#2 Client 可运行任务闭环(MVP)
  • 阶段:PDD 采集任务状态与人工恢复

要解决什么

采集任务遇到可恢复错误后会进入 retry_wait,但当前自动获取随后停止,也没有倒计时调度。任务可以长时间保持“等待重试”,同时“重新执行”入口又拒绝该状态,导致界面给出即将自动重试的印象,却没有直接恢复入口。

做什么 / 不做什么

  • 做:允许没有未发送 Outbox 的 retry_wait 采集任务通过“重新执行”立即重采;自动获取因可恢复采集失败停止时,底部状态明确显示“重试已暂停”,提示可选择任务重新执行或重新启动获取任务。
  • 不做:不实现自动倒计时、不增加 next_retry_at、最大重试次数或数据库迁移;不改变 Admin 接口;不允许采购任务重新执行;不放宽忙碌和未发送 Outbox 校验。

怎么做

  • client/src/task_repository.py:把 retry_wait 加入人工重新采集允许状态,继续事务校验任务类型和未发送 Outbox。
  • client/src/pdd_ui_event.py:收到采集失败结果后读取该任务最终本地状态;若为 retry_wait,用稳定状态区和警告信息说明重试已暂停及恢复方法,随后安全停止自动获取。
  • 更新 Repository 和事件层测试,覆盖等待重试可手动执行、未发送失败事件仍被阻止、暂停提示和其他失败状态不误判。
  • 同步 Client 数据模型与界面基线;局部状态反馈调整不制作 HTML 原型。

验收标准

  • retry_wait 采集任务在 Outbox 已发送后可以点击“重新执行”。
  • 重新执行仍只处理选中的任务,并创建新的 attempt_id 和执行记录。
  • retry_wait 仍有未发送 Outbox 时继续阻止重新执行,并提示先完成提交。
  • 自动获取因可恢复采集错误停止时,底部显示“重试已暂停”,并提示“重新执行”或重新启动获取任务。
  • failed、manual_review 等状态继续使用原有反馈,不误显示为等待重试。
  • 不增加自动倒计时,不修改数据库和 Admin 接口,不触发采购流程。

怎么验证

从 client/ 执行:

C:/Python310/python.exe -m unittest discover -s test -p test_task_repository.py -v
C:/Python310/python.exe -m unittest discover -s test -p test_pdd_ui_event.py -v
C:/Python310/python.exe -m unittest discover -s test -v
C:/Python310/python.exe -m py_compile src/task_repository.py src/pdd_ui_event.py

手动验证:选择一条 retry_wait 且失败事件已提交的采集任务,点击“重新执行”并确认;不得使用采购任务验收。

风险和回退

  • 人工重新采集仍经过自动获取忙碌检查和 Outbox 检查,避免同一任务并发或遗漏失败提交。
  • 采购任务始终被拦截,不涉及真实下单。
  • 可按本工单提交回退,不涉及数据库迁移或接口兼容。
## 基本信息 - 类型:缺陷 - 父级大工单:#1 - 所属 MVP / 版本:#2 Client 可运行任务闭环(MVP) - 阶段:PDD 采集任务状态与人工恢复 ## 要解决什么 采集任务遇到可恢复错误后会进入 `retry_wait`,但当前自动获取随后停止,也没有倒计时调度。任务可以长时间保持“等待重试”,同时“重新执行”入口又拒绝该状态,导致界面给出即将自动重试的印象,却没有直接恢复入口。 ## 做什么 / 不做什么 - 做:允许没有未发送 Outbox 的 `retry_wait` 采集任务通过“重新执行”立即重采;自动获取因可恢复采集失败停止时,底部状态明确显示“重试已暂停”,提示可选择任务重新执行或重新启动获取任务。 - 不做:不实现自动倒计时、不增加 `next_retry_at`、最大重试次数或数据库迁移;不改变 Admin 接口;不允许采购任务重新执行;不放宽忙碌和未发送 Outbox 校验。 ## 怎么做 - `client/src/task_repository.py`:把 `retry_wait` 加入人工重新采集允许状态,继续事务校验任务类型和未发送 Outbox。 - `client/src/pdd_ui_event.py`:收到采集失败结果后读取该任务最终本地状态;若为 `retry_wait`,用稳定状态区和警告信息说明重试已暂停及恢复方法,随后安全停止自动获取。 - 更新 Repository 和事件层测试,覆盖等待重试可手动执行、未发送失败事件仍被阻止、暂停提示和其他失败状态不误判。 - 同步 Client 数据模型与界面基线;局部状态反馈调整不制作 HTML 原型。 ## 验收标准 - [ ] `retry_wait` 采集任务在 Outbox 已发送后可以点击“重新执行”。 - [ ] 重新执行仍只处理选中的任务,并创建新的 `attempt_id` 和执行记录。 - [ ] `retry_wait` 仍有未发送 Outbox 时继续阻止重新执行,并提示先完成提交。 - [ ] 自动获取因可恢复采集错误停止时,底部显示“重试已暂停”,并提示“重新执行”或重新启动获取任务。 - [ ] `failed`、`manual_review` 等状态继续使用原有反馈,不误显示为等待重试。 - [ ] 不增加自动倒计时,不修改数据库和 Admin 接口,不触发采购流程。 ## 怎么验证 从 `client/` 执行: ```powershell C:/Python310/python.exe -m unittest discover -s test -p test_task_repository.py -v C:/Python310/python.exe -m unittest discover -s test -p test_pdd_ui_event.py -v C:/Python310/python.exe -m unittest discover -s test -v C:/Python310/python.exe -m py_compile src/task_repository.py src/pdd_ui_event.py ``` 手动验证:选择一条 `retry_wait` 且失败事件已提交的采集任务,点击“重新执行”并确认;不得使用采购任务验收。 ## 风险和回退 - 人工重新采集仍经过自动获取忙碌检查和 Outbox 检查,避免同一任务并发或遗漏失败提交。 - 采购任务始终被拦截,不涉及真实下单。 - 可按本工单提交回退,不涉及数据库迁移或接口兼容。
Author
Owner

实施进度

已完成代码与文档更新,准备提交:

  • retry_wait 采集任务在上次 Outbox 已成功发送后,允许人工“重新执行”;仍保持采购任务、执行中任务和未发送结果不可重跑。
  • 自动获取因可恢复错误停止时,界面持续显示“重试已暂停”,明确提示可重新执行当前任务或重新启动获取任务;本次不增加虚假的倒计时。
  • 永久提交失败的 Outbox 会显示 Admin 的具体拒绝原因,避免只提示“不能重新执行”。
  • 已同步 Client 数据模型和界面规范。

现场只读检查发现,当前两条 retry_wait 任务的 task_failure Outbox 均已被 Admin 永久拒绝,原因是“任务不存在”。因此它们仍会被安全门禁阻止重新采集;即使本地再次采集,Admin 也没有可接收和覆盖的对应任务。应由 Admin 重新创建/派发任务后再执行,不能静默绕过该门禁。

验证结果:

  • python -m unittest discover -s test -q:187 项通过。
  • py_compile:通过。
  • PyQt5 离屏创建 MainWindow:通过。
  • 尚未用真机实际触发等待重试后的重新采集。
## 实施进度 已完成代码与文档更新,准备提交: - `retry_wait` 采集任务在上次 Outbox 已成功发送后,允许人工“重新执行”;仍保持采购任务、执行中任务和未发送结果不可重跑。 - 自动获取因可恢复错误停止时,界面持续显示“重试已暂停”,明确提示可重新执行当前任务或重新启动获取任务;本次不增加虚假的倒计时。 - 永久提交失败的 Outbox 会显示 Admin 的具体拒绝原因,避免只提示“不能重新执行”。 - 已同步 Client 数据模型和界面规范。 现场只读检查发现,当前两条 `retry_wait` 任务的 `task_failure` Outbox 均已被 Admin 永久拒绝,原因是“任务不存在”。因此它们仍会被安全门禁阻止重新采集;即使本地再次采集,Admin 也没有可接收和覆盖的对应任务。应由 Admin 重新创建/派发任务后再执行,不能静默绕过该门禁。 验证结果: - `python -m unittest discover -s test -q`:187 项通过。 - `py_compile`:通过。 - PyQt5 离屏创建 `MainWindow`:通过。 - 尚未用真机实际触发等待重试后的重新采集。
Author
Owner

实施完成,待用户验收

实现与归档已提交:

  • 实现提交:a6c573a(允许等待重试任务手动重新执行)
  • 归档提交:610e9e3
  • 归档文档:docs/task/70-等待重试任务手动重新执行.md

验证:Client 全量 187 项测试通过,py_compile 通过,PyQt5 离屏启动 MainWindow 通过。

未验证:尚未用真机创建一条 Admin 仍然存在、Outbox 已发送成功的 retry_wait 任务,并从可见界面完成重新采集。当前数据库中的两条现场任务均被 Admin 以“任务不存在”拒绝,按安全规则不会绕过该状态重新提交。

工单保持开启,等待用户验收。

## 实施完成,待用户验收 实现与归档已提交: - 实现提交:`a6c573a`(允许等待重试任务手动重新执行) - 归档提交:`610e9e3` - 归档文档:`docs/task/70-等待重试任务手动重新执行.md` 验证:Client 全量 187 项测试通过,`py_compile` 通过,PyQt5 离屏启动 `MainWindow` 通过。 未验证:尚未用真机创建一条 Admin 仍然存在、Outbox 已发送成功的 `retry_wait` 任务,并从可见界面完成重新采集。当前数据库中的两条现场任务均被 Admin 以“任务不存在”拒绝,按安全规则不会绕过该状态重新提交。 工单保持开启,等待用户验收。
Author
Owner

用户已于 2026-08-11 明确验收通过。

  • 本地归档状态已更新为“已完成,用户验收通过”
  • 验收记录提交:eca9289
  • 本工单按项目流程关闭
用户已于 2026-08-11 明确验收通过。 - 本地归档状态已更新为“已完成,用户验收通过” - 验收记录提交:`eca9289` - 本工单按项目流程关闭
ila closed this issue 2026-08-11 10:58:10 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#70