Files
cmautobuy/docs/task/9-pdd任务列表接入-sqlite-repository.md
T
2026-08-06 16:32:14 +08:00

3.4 KiB

9 PDD 任务列表接入 SQLite Repository

  • 类型:需求
  • 父级大工单:#1
  • 所属 MVP / 版本:#2 / MVP
  • 状态:已实现,待验收
  • 日期:2026-08-06
  • Gitea 工单:#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 通过
离屏测试、语法和差异检查通过 通过

测试

  • 执行的命令:

    $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