docs: 归档任务 #9

This commit is contained in:
chengma
2026-08-06 16:32:14 +08:00
parent 583e441e17
commit 0d38eedee1
@@ -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