批量重新采集采购时实时刷新当前任务状态 #143

Closed
opened 2026-08-11 10:49:37 +08:00 by ila · 3 comments
Owner

基本信息

  • 类型:需求
  • 父级大工单:#1
  • 所属 MVP / 版本:#2
  • 阶段:PDD 批量人工执行

要解决什么

点击“重新采集”或“重新采购”并确认后,任务列表不能及时显示当前真正开始执行的任务状态。用户无法从表格判断哪一条正在操作 Android 设备。

做什么 / 不做什么

  • 做:
    • 批量命令确认后立即刷新一次任务列表,并在底部显示加入队列数量。
    • 每一条任务真正开始时,先由 Repository 将数据库状态写为 running,再通过 Worker 信号通知主线程刷新列表。
    • 表格根据任务类型把 running 显示为“采集中”或“采购中”。
    • 每条任务完成、失败、取消或跳过后刷新列表,再处理下一条。
    • 尚未开始的排队任务保持原数据库状态。
  • 不做:
    • 不新增 SQLite 任务状态。
    • 不修改 Admin 接口、上报字段或 Admin 状态。
    • 不改变采集、采购、核单、不可逆门禁和串行执行逻辑。
    • 不把排队中的全部任务提前标记为执行中。

怎么做

  • 修改 client/src/pdd_ui_event.py:固定设备 Worker 在当前任务成功进入运行状态后发出带稳定任务编号的进度信号;主线程收到后刷新任务列表并更新底部状态。完成结果仍按现有信号刷新。
  • 修改 client/src/pdd_ui.py 或任务行转换逻辑:仅在界面展示层根据 task_type + running 映射为“采集中”或“采购中”,数据库继续保存统一的 running。
  • 必要时在 client/src/collect_task_service.py、client/src/purchase_task_service.py 的现有启动边界增加回调,但不得在数据库事务成功前通知界面。
  • 更新 client/test/test_pdd_ui_event.py、相关 UI/Repository 测试和 docs/client/05-ui-specification.md。
  • QWidget 只在主线程刷新;Worker 只发信号,不直接访问界面。

验收标准

  • 确认重新采集或重新采购后,任务列表立即刷新一次并显示实际入队数量。
  • 当前采集任务在数据库成功进入 running 后,表格显示“采集中”。
  • 当前采购任务在数据库成功进入 running 后,表格显示“采购中”。
  • 尚未开始的队列任务不提前显示为采集中或采购中。
  • 当前任务结束后列表刷新为最终状态,下一条真正开始后才显示运行状态。
  • 启动失败、设备断开、取消和安全门禁阻止时不会留下错误的运行中显示。
  • 不新增数据库状态,不修改 Admin 接口及不可逆采购安全规则。
  • Client 自动测试和 PyQt5 离屏冒烟测试通过。

怎么验证

从 client/ 目录执行:

$env:QT_QPA_PLATFORM="offscreen"
C:/Python310/python.exe -m unittest discover -v -s test -p "test_*.py"
Remove-Item Env:QT_QPA_PLATFORM

真机验证:

  1. 勾选至少两条采集任务,确认只有当前一条显示“采集中”。
  2. 当前任务结束后,确认下一条才变为“采集中”。
  3. 使用符合采购安全门禁的演练或受控任务验证“采购中”;不得自动付款。
  4. 在任务开始前断开设备,确认列表没有遗留“采集中/采购中”。

风险和回退

  • 风险:信号早于数据库提交会显示错误状态;必须在 Repository 启动事务成功后发出。
  • 风险:过度刷新可能造成界面抖动;只在批次确认、单条开始和单条结束三个边界刷新。
  • 风险:采购不可逆阶段不能因界面刷新或取消逻辑触发重新下单;保持现有门禁不变。
  • 回退:移除新增进度信号和展示映射即可,数据库与 Admin 无需迁移。
## 基本信息 - 类型:需求 - 父级大工单:#1 - 所属 MVP / 版本:#2 - 阶段:PDD 批量人工执行 ## 要解决什么 点击“重新采集”或“重新采购”并确认后,任务列表不能及时显示当前真正开始执行的任务状态。用户无法从表格判断哪一条正在操作 Android 设备。 ## 做什么 / 不做什么 - 做: - 批量命令确认后立即刷新一次任务列表,并在底部显示加入队列数量。 - 每一条任务真正开始时,先由 Repository 将数据库状态写为 `running`,再通过 Worker 信号通知主线程刷新列表。 - 表格根据任务类型把 `running` 显示为“采集中”或“采购中”。 - 每条任务完成、失败、取消或跳过后刷新列表,再处理下一条。 - 尚未开始的排队任务保持原数据库状态。 - 不做: - 不新增 SQLite 任务状态。 - 不修改 Admin 接口、上报字段或 Admin 状态。 - 不改变采集、采购、核单、不可逆门禁和串行执行逻辑。 - 不把排队中的全部任务提前标记为执行中。 ## 怎么做 - 修改 `client/src/pdd_ui_event.py`:固定设备 Worker 在当前任务成功进入运行状态后发出带稳定任务编号的进度信号;主线程收到后刷新任务列表并更新底部状态。完成结果仍按现有信号刷新。 - 修改 `client/src/pdd_ui.py` 或任务行转换逻辑:仅在界面展示层根据 `task_type + running` 映射为“采集中”或“采购中”,数据库继续保存统一的 `running`。 - 必要时在 `client/src/collect_task_service.py`、`client/src/purchase_task_service.py` 的现有启动边界增加回调,但不得在数据库事务成功前通知界面。 - 更新 `client/test/test_pdd_ui_event.py`、相关 UI/Repository 测试和 `docs/client/05-ui-specification.md`。 - QWidget 只在主线程刷新;Worker 只发信号,不直接访问界面。 ## 验收标准 - [x] 确认重新采集或重新采购后,任务列表立即刷新一次并显示实际入队数量。 - [x] 当前采集任务在数据库成功进入 `running` 后,表格显示“采集中”。 - [x] 当前采购任务在数据库成功进入 `running` 后,表格显示“采购中”。 - [x] 尚未开始的队列任务不提前显示为采集中或采购中。 - [x] 当前任务结束后列表刷新为最终状态,下一条真正开始后才显示运行状态。 - [x] 启动失败、设备断开、取消和安全门禁阻止时不会留下错误的运行中显示。 - [x] 不新增数据库状态,不修改 Admin 接口及不可逆采购安全规则。 - [x] Client 自动测试和 PyQt5 离屏冒烟测试通过。 ## 怎么验证 从 `client/` 目录执行: ```powershell $env:QT_QPA_PLATFORM="offscreen" C:/Python310/python.exe -m unittest discover -v -s test -p "test_*.py" Remove-Item Env:QT_QPA_PLATFORM ``` 真机验证: 1. 勾选至少两条采集任务,确认只有当前一条显示“采集中”。 2. 当前任务结束后,确认下一条才变为“采集中”。 3. 使用符合采购安全门禁的演练或受控任务验证“采购中”;不得自动付款。 4. 在任务开始前断开设备,确认列表没有遗留“采集中/采购中”。 ## 风险和回退 - 风险:信号早于数据库提交会显示错误状态;必须在 Repository 启动事务成功后发出。 - 风险:过度刷新可能造成界面抖动;只在批次确认、单条开始和单条结束三个边界刷新。 - 风险:采购不可逆阶段不能因界面刷新或取消逻辑触发重新下单;保持现有门禁不变。 - 回退:移除新增进度信号和展示映射即可,数据库与 Admin 无需迁移。
Author
Owner

实施完成,待用户验收

  • 批量确认后立即刷新列表,并显示已加入队列数量;
  • 采集/采购服务只在数据库成功进入 running 后触发开始回调;
  • Worker 通过 Qt 信号把当前任务和队列进度交给主线程刷新;
  • 运行中采集、采购分别显示“采集中”“采购中”;排队任务保持原状态;
  • 每条完成、失败、跳过或取消后继续刷新;未改变不可逆采购的“只核单、绝不重下”规则。

测试:test_collect_task_service.py、test_purchase_task_service.py、test_pdd_ui_event.py,共 69 项通过。

提交:6553ae9
归档:docs/task/143-批量重新采集采购时实时刷新当前任务状态.md
归档提交:7c74dda

未验证:真机多任务队列和人工中途停止。当前状态:待验收,工单保持开启。

## 实施完成,待用户验收 - 批量确认后立即刷新列表,并显示已加入队列数量; - 采集/采购服务只在数据库成功进入 `running` 后触发开始回调; - Worker 通过 Qt 信号把当前任务和队列进度交给主线程刷新; - 运行中采集、采购分别显示“采集中”“采购中”;排队任务保持原状态; - 每条完成、失败、跳过或取消后继续刷新;未改变不可逆采购的“只核单、绝不重下”规则。 测试:`test_collect_task_service.py`、`test_purchase_task_service.py`、`test_pdd_ui_event.py`,共 69 项通过。 提交:`6553ae9` 归档:`docs/task/143-批量重新采集采购时实时刷新当前任务状态.md` 归档提交:`7c74dda` 未验证:真机多任务队列和人工中途停止。当前状态:待验收,工单保持开启。
Author
Owner

补充回归记录:完成 Client 全量测试,377 项全部通过。归档回归记录提交:eca6068。

补充回归记录:完成 Client 全量测试,377 项全部通过。归档回归记录提交:`eca6068`。
Author
Owner

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

  • 本地归档状态已更新为“已完成”
  • 验收记录提交:cc595c1
  • 工单现关闭
用户已于 2026-08-11 确认验收通过。 - 本地归档状态已更新为“已完成” - 验收记录提交:`cc595c1` - 工单现关闭
ila closed this issue 2026-08-11 11:25:03 +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#143