From 0d38eedee1a85b525e94977a124bd26d60548c35 Mon Sep 17 00:00:00 2001 From: chengma Date: Thu, 6 Aug 2026 16:32:14 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E5=BD=92=E6=A1=A3=E4=BB=BB=E5=8A=A1=20?= =?UTF-8?q?#9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../9-pdd任务列表接入-sqlite-repository.md | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 docs/task/9-pdd任务列表接入-sqlite-repository.md diff --git a/docs/task/9-pdd任务列表接入-sqlite-repository.md b/docs/task/9-pdd任务列表接入-sqlite-repository.md new file mode 100644 index 0000000..66fd92f --- /dev/null +++ b/docs/task/9-pdd任务列表接入-sqlite-repository.md @@ -0,0 +1,70 @@ +# 9 PDD 任务列表接入 SQLite Repository + +- 类型:需求 +- 父级大工单:#1 +- 所属 MVP / 版本:#2 / MVP +- 状态:已实现,待验收 +- 日期:2026-08-06 +- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/9 + +## 背景与目标 + +PDD 任务表格原来只处理内存模拟数据,应用启动后不会读取 SQLite。本任务把页面的搜索、刷新和滚动加载信号连接到 `TaskRepository`,让本机已领取任务能够直接显示在表格中。 + +## 最终方案 + +- `PDDTaskPageEvent` 持有 `TaskRepository`,页面文件不写 SQL。 +- 主窗口创建并保存事件对象,页面创建后自动加载本地任务第一页。 +- 中文任务类型和状态在事件层转换为领域枚举,类型、状态和关键词通过 Repository 进行 AND 查询。 +- 搜索和刷新先清空旧结果,再按当前条件读取第一页。 +- 表格模型每页请求 50 条;滚动到底时通过 `canFetchMore/fetchMore` 请求下一页。 +- 列表继续使用 Repository 的 `updated_at DESC, id DESC` 稳定顺序。 +- 表格模型只保存 `TaskRow` 轻量字段,不保存 `admin_payload` 或 `pdd_data`。 +- 查询失败时停止继续分页,并在页面显示可理解的本地数据库错误信息。 +- 本工单没有连接 Admin、uiautomator2、Android 设备、任务详情或“获取任务”行为。 + +## 改了哪些 + +- `client/src/pdd_ui.py`:把内存模拟分页改为事件驱动的数据库分页,增加重载和追加页面接口。 +- `client/src/pdd_ui_event.py`:实现筛选转换、Repository 查询、摘要到表格行转换和错误处理。 +- `client/src/ui_main.py`:装配 PDD 页面事件对象并在启动时加载任务。 +- `client/test/test_pdd_ui_event.py`:增加分页、稳定排序、组合筛选、错误提示、轻量行和主窗口装配测试。 + +## 验收结果 + +| 验收标准 | 结果 | +|---|---| +| 主窗口启动后读取本地任务 | 通过 | +| 默认按 `updated_at DESC, id DESC` 显示 | 通过 | +| 每页最多 50 条,能继续加载且无重复 | 通过 | +| 类型、状态和关键词采用 AND | 通过 | +| 搜索和刷新仅访问本地 Repository | 通过 | +| 类型、状态、金额和空值映射正确 | 通过 | +| 查询失败显示可理解信息 | 通过 | +| 表格模型不保存完整 JSON | 通过 | +| 离屏测试、语法和差异检查通过 | 通过 | + +## 测试 + +- 执行的命令: + + ```powershell + $env:QT_QPA_PLATFORM="offscreen" + C:/Python310/python.exe -m unittest discover -s test -p "test_*.py" -v + C:/Python310/python.exe -m py_compile src/pdd_ui.py src/pdd_ui_event.py src/ui_main.py test/test_pdd_ui_event.py + Remove-Item Env:QT_QPA_PLATFORM + git diff --check + ``` + +- 结果:新增测试与已有测试合计 22 项全部通过,输出 `Ran 22 tests ... OK`;语法检查和差异检查通过。 +- 环境提示:离屏 Qt 输出本机 PyQt5 字体目录缺失警告,不影响测试结果;未修改依赖。 +- **没验证到的部分**:没有连接真实 Admin 或 Android 设备,没有执行 PDD 自动化和真实下单,也没有人工检查包含大量真实数据时的滚动手感。 + +## 遗留问题 + +- “获取任务”按钮仍未连接 Admin,下一阶段应先实现 Admin Mock/Gateway 契约。 +- 任务详情窗口尚未实现,后续按独立工单接入 `TaskRepository.get_task()`。 + +## 相关提交 + +- `583e441` PDD 任务列表接入 SQLite Repository