领取任务后立即刷新列表并调整任务栏布局 #107

Closed
opened 2026-08-10 17:00:53 +08:00 by ila · 5 comments
Owner

基本信息

  • 类型:缺陷
  • 父级大工单:#1
  • 所属 MVP / 版本:#2
  • 阶段:PDD 任务列表交互完善

要解决什么

点击“自动获取”后,Client 从 Admin 领取并写入一条新任务时,任务表格不会立即出现该记录,要等整次采集或采购执行结束后才刷新。

复现步骤:

  1. 启动 Client,进入“PDD 任务”页。
  2. 点击自动获取按钮并成功领取一条任务。
  3. 观察任务已经进入手机执行流程,但表格没有及时显示新任务。
  4. 等执行结束或手工刷新后,记录才出现。

当前 ClaimTaskWorker 已定义并连接 taskSaved 信号,但委托给 TaskDispatcher 后没有在任务写入 SQLite 的时刻发出该信号,只会在整轮执行结束后发出 outcome。

同时调整同一区域的低风险界面文案和宽度:按钮改名为“自动获取”,关键词输入框缩短。

做什么 / 不做什么

  • 做:
    • 新任务成功写入 SQLite 后立即通过线程安全信号通知界面刷新。
    • 任务执行结束后继续刷新最终状态。
    • 自动获取按钮停止状态统一显示“自动获取”,同步无障碍名称;运行时仍显示“停止自动获取”。
    • 关键词输入框最大宽度由 480 调整为 240,最小宽度约 150,并继续通过 Qt 布局自适应。
  • 不做:
    • 不改变自动获取的轮询、停止、退避和任务执行顺序。
    • 不修改 Admin 接口、任务状态机、数据库结构或 PDD 自动化。
    • 不处理本地任务删除;由独立工单实现。

怎么做

  • 在 client/src/task_dispatcher.py 为“新任务已持久化”提供明确的轻量通知边界,只在新领取任务成功落库后触发。
  • 在 client/src/pdd_ui_event.py 由 Worker 把该通知转换为现有 taskSaved Qt 信号,主线程复用 _on_claimed_task_saved() 和 _reload() 刷新列表;后台线程不直接访问 QWidget。
  • 在 client/src/pdd_ui.py 同步调整按钮初始文案、停止状态文案、无障碍名称及关键词框尺寸约束。
  • 更新或补充 client/test 中 Dispatcher、事件层和页面布局测试。
  • 现有工作区可能包含用户修改,实施时只改本工单范围并保留无关改动。

验收标准

  • 新任务成功写入 SQLite 后,无需等待手机自动化结束即可出现在当前无筛选任务列表中。
  • 新任务不符合当前筛选条件时不会错误显示;清除筛选后可以看到。
  • 执行结束后任务行状态能更新为数据库中的最终状态。
  • 停止状态按钮显示“自动获取”,运行状态仍提供“停止自动获取”入口,相关无障碍名称语义一致。
  • 关键词框最大宽度为原来的 50%(240),窄窗口仍可操作且不会挤掉搜索和刷新按钮。
  • 不改变 Admin 请求数量、自动调度顺序和任务状态机。
  • 相关自动化测试及 Client 全量测试通过。

怎么验证

从 client/ 执行:

C:/Python310/python.exe -m pytest test/test_task_dispatcher.py test/test_pdd_ui_event.py test/test_pdd_ui.py -q
C:/Python310/python.exe -m pytest test -q
C:/Python310/python.exe -m py_compile src/task_dispatcher.py src/pdd_ui_event.py src/pdd_ui.py

离屏界面冒烟:

$env:QT_QPA_PLATFORM="offscreen"
C:/Python310/python.exe -c "from src.ui_main import MainWindow; from PyQt5.QtWidgets import QApplication; app=QApplication([]); w=MainWindow(); print('OK'); app.quit()"
Remove-Item Env:QT_QPA_PLATFORM

需要真机验证领取后、自动化结束前表格已经刷新;不得以自动付款作为测试内容。

## 基本信息 - 类型:缺陷 - 父级大工单:#1 - 所属 MVP / 版本:#2 - 阶段:PDD 任务列表交互完善 ## 要解决什么 点击“自动获取”后,Client 从 Admin 领取并写入一条新任务时,任务表格不会立即出现该记录,要等整次采集或采购执行结束后才刷新。 复现步骤: 1. 启动 Client,进入“PDD 任务”页。 2. 点击自动获取按钮并成功领取一条任务。 3. 观察任务已经进入手机执行流程,但表格没有及时显示新任务。 4. 等执行结束或手工刷新后,记录才出现。 当前 `ClaimTaskWorker` 已定义并连接 `taskSaved` 信号,但委托给 `TaskDispatcher` 后没有在任务写入 SQLite 的时刻发出该信号,只会在整轮执行结束后发出 `outcome`。 同时调整同一区域的低风险界面文案和宽度:按钮改名为“自动获取”,关键词输入框缩短。 ## 做什么 / 不做什么 - 做: - 新任务成功写入 SQLite 后立即通过线程安全信号通知界面刷新。 - 任务执行结束后继续刷新最终状态。 - 自动获取按钮停止状态统一显示“自动获取”,同步无障碍名称;运行时仍显示“停止自动获取”。 - 关键词输入框最大宽度由 480 调整为 240,最小宽度约 150,并继续通过 Qt 布局自适应。 - 不做: - 不改变自动获取的轮询、停止、退避和任务执行顺序。 - 不修改 Admin 接口、任务状态机、数据库结构或 PDD 自动化。 - 不处理本地任务删除;由独立工单实现。 ## 怎么做 - 在 `client/src/task_dispatcher.py` 为“新任务已持久化”提供明确的轻量通知边界,只在新领取任务成功落库后触发。 - 在 `client/src/pdd_ui_event.py` 由 Worker 把该通知转换为现有 `taskSaved` Qt 信号,主线程复用 `_on_claimed_task_saved()` 和 `_reload()` 刷新列表;后台线程不直接访问 QWidget。 - 在 `client/src/pdd_ui.py` 同步调整按钮初始文案、停止状态文案、无障碍名称及关键词框尺寸约束。 - 更新或补充 `client/test` 中 Dispatcher、事件层和页面布局测试。 - 现有工作区可能包含用户修改,实施时只改本工单范围并保留无关改动。 ## 验收标准 - [x] 新任务成功写入 SQLite 后,无需等待手机自动化结束即可出现在当前无筛选任务列表中。 - [x] 新任务不符合当前筛选条件时不会错误显示;清除筛选后可以看到。 - [x] 执行结束后任务行状态能更新为数据库中的最终状态。 - [x] 停止状态按钮显示“自动获取”,运行状态仍提供“停止自动获取”入口,相关无障碍名称语义一致。 - [x] 关键词框最大宽度为原来的 50%(240),窄窗口仍可操作且不会挤掉搜索和刷新按钮。 - [x] 不改变 Admin 请求数量、自动调度顺序和任务状态机。 - [x] 相关自动化测试及 Client 全量测试通过。 ## 怎么验证 从 `client/` 执行: ```powershell C:/Python310/python.exe -m pytest test/test_task_dispatcher.py test/test_pdd_ui_event.py test/test_pdd_ui.py -q C:/Python310/python.exe -m pytest test -q C:/Python310/python.exe -m py_compile src/task_dispatcher.py src/pdd_ui_event.py src/pdd_ui.py ``` 离屏界面冒烟: ```powershell $env:QT_QPA_PLATFORM="offscreen" C:/Python310/python.exe -c "from src.ui_main import MainWindow; from PyQt5.QtWidgets import QApplication; app=QApplication([]); w=MainWindow(); print('OK'); app.quit()" Remove-Item Env:QT_QPA_PLATFORM ``` 需要真机验证领取后、自动化结束前表格已经刷新;不得以自动付款作为测试内容。
Author
Owner

开始实施。已确认当前根因:ClaimTaskWorker 虽连接了 taskSaved,但 TaskDispatcher 在新任务写入 SQLite 后没有发出中间通知,界面只能等整轮手机执行结束的 outcome 才刷新。将按工单方案增加“落库完成”回调,经 Qt 信号回到主线程刷新;同时统一“自动获取”文案并把关键词框最大宽度调整为 240。现有工作区有用户未提交修改,实施会原样保留无关内容。

开始实施。已确认当前根因:`ClaimTaskWorker` 虽连接了 `taskSaved`,但 `TaskDispatcher` 在新任务写入 SQLite 后没有发出中间通知,界面只能等整轮手机执行结束的 `outcome` 才刷新。将按工单方案增加“落库完成”回调,经 Qt 信号回到主线程刷新;同时统一“自动获取”文案并把关键词框最大宽度调整为 240。现有工作区有用户未提交修改,实施会原样保留无关内容。
Author
Owner

实现与自动化验证已完成,准备提交:

  • TaskDispatcher 在新领取任务成功写入 SQLite 并可重新读到后,立即调用轻量 task_saved(task_id) 通知;重复任务不误报。
  • ClaimTaskWorker 将通知转换为现有 taskSaved Qt 信号,主线程立即按当前筛选条件刷新,手机执行完成后仍保留最终状态刷新。
  • 停止状态文案统一为“自动获取”,运行时仍为“停止自动获取”;无障碍名称随状态同步。
  • 关键词框尺寸调整为 150~240,并继续使用布局自适应。
  • 同步更新 Client 架构和界面基线文档。

验证结果:专项测试 53 项通过;Client 全量测试 294 项通过;离屏主窗口冒烟输出 OK;语法检查和 git diff --check 通过。尚未进行真机领取时序和 100%~200% DPI 人工视觉验收。

实现与自动化验证已完成,准备提交: - `TaskDispatcher` 在新领取任务成功写入 SQLite 并可重新读到后,立即调用轻量 `task_saved(task_id)` 通知;重复任务不误报。 - `ClaimTaskWorker` 将通知转换为现有 `taskSaved` Qt 信号,主线程立即按当前筛选条件刷新,手机执行完成后仍保留最终状态刷新。 - 停止状态文案统一为“自动获取”,运行时仍为“停止自动获取”;无障碍名称随状态同步。 - 关键词框尺寸调整为 150~240,并继续使用布局自适应。 - 同步更新 Client 架构和界面基线文档。 验证结果:专项测试 53 项通过;Client 全量测试 294 项通过;离屏主窗口冒烟输出 `OK`;语法检查和 `git diff --check` 通过。尚未进行真机领取时序和 100%~200% DPI 人工视觉验收。
Author
Owner

实现提交已创建:39686d7(fix: 领取任务后立即刷新列表 (#107))。提交只包含 #107 的代码、测试和基线文档同步;工作区原有的页面标题隐藏、主窗口及其他未跟踪文件均未纳入提交。工单进入待用户验收状态,真机领取时序和实际 DPI 视觉检查仍需人工验收。

实现提交已创建:`39686d7`(`fix: 领取任务后立即刷新列表 (#107)`)。提交只包含 #107 的代码、测试和基线文档同步;工作区原有的页面标题隐藏、主窗口及其他未跟踪文件均未纳入提交。工单进入待用户验收状态,真机领取时序和实际 DPI 视觉检查仍需人工验收。
Author
Owner

本地归档已完成:docs/task/107-领取任务后立即刷新列表并调整任务栏布局.md,归档提交 9d227b4(docs: 归档任务 #107)。

当前状态:代码与自动化验证完成,等待用户真机和界面验收。#1、#2 的 #107 清单暂不勾选,工单暂不关闭;验收通过后再同步父工单并关闭。

本地归档已完成:`docs/task/107-领取任务后立即刷新列表并调整任务栏布局.md`,归档提交 `9d227b4`(`docs: 归档任务 #107`)。 当前状态:代码与自动化验证完成,等待用户真机和界面验收。#1、#2 的 #107 清单暂不勾选,工单暂不关闭;验收通过后再同步父工单并关闭。
Author
Owner

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

  • 本地归档状态已更新为“已完成,用户验收通过”
  • 验收记录提交:eca9289
  • 本工单按项目流程关闭
用户已于 2026-08-11 明确验收通过。 - 本地归档状态已更新为“已完成,用户验收通过” - 验收记录提交:`eca9289` - 本工单按项目流程关闭
ila closed this issue 2026-08-11 10:58:25 +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#107