Files
cmautobuy/docs/task/115-修复PDD页面和规格面板误超时.md
T
2026-08-10 18:39:49 +08:00

68 lines
3.7 KiB
Markdown

# 115 修复慢速前台查询导致 PDD 页面和规格面板误超时
- 工单号:#115
- 类型:缺陷
- 父级大工单:#1
- 所属 MVP / 版本:MVP 后续 / PDD 页面识别与采购安全
- 状态:已完成,待用户验收
- 日期:2026-08-10
- Gitea 工单:<http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/115>
## 背景与目标
真机的 `app_current()` 一次耗时约 10.688 秒,并把已经显示 PDD 的页面错误报告为
系统设置。采购规格面板等待上限为 10 秒,旧实现每轮读取控件树后再查询前台包名,
导致规格面板已经打开仍报 `PURCHASE_PANEL_TIMEOUT`。采集和采购的商品页等待也有
相同的慢调用风险。本任务改为优先使用最新控件树,保留安全超时和错误分类。
## 最终方案
- 采集和采购只在设备连接时读取一次前台状态,商品页轮询不再每轮调用
`app_current()`;连接时确认的 PDD 包名只作为提示,控件树中的 PDD 节点仍是
焦点误报设备的主要依据。
- 采购规格面板轮询完全使用最新控件树,必须同时识别提交前页面和“增加数量”控件
才允许继续选择规格。
- 单次控件树读取跨过截止时间时,仍先分析刚返回的结果;真正未打开面板才安全超时。
- 采购 Adapter 记住当前任务最后一次控件树。面板超时诊断记录页面类型、总读取次数、
面板阶段读取次数,并把脱敏 XML 保存到 `data/artifacts/purchase/<goods_id>/`。
- XML 中商品、账号、收货等文字统一替换为“[已脱敏]”,只保留页面判断所需标志。
- 未修改 Admin API、SQLite、`pdd_data`、任务状态、规格价格规则和不可逆安全门禁。
## 改了哪些
- `client/src/pdd_collect_service.py`:商品页轮询移除重复前台查询。
- `client/src/pdd_u2_purchase_adapter.py`:修复商品页和规格面板等待,增加脱敏诊断。
- `client/test/test_pdd_collect_service.py`:覆盖慢速错误焦点和首页受控重开。
- `client/test/test_pdd_u2_purchase_adapter.py`:覆盖慢查询、面板成功、真实超时及脱敏文件。
- `docs/client/06-quality-security.md`:明确商品页和规格面板轮询规则。
## 验收结果
| 验收标准 | 结果 |
|---|---|
| 11 秒慢速前台查询不再耗尽规格面板超时 | 通过 |
| 焦点误报设置页时仍按 PDD 控件树识别 | 通过 |
| 采购规格面板轮询不再调用 `app_current()` | 通过 |
| 采集和采购商品页受控重开不被慢查询耗尽 | 通过 |
| 真正未打开面板仍安全失败且不选择规格 | 通过 |
| 超时包含页面类型、读取次数和脱敏 XML | 通过 |
| 登录、验证码、风控、网络和外部应用分类保持 | 通过(全量回归) |
| 真实下单安全边界未扩大 | 通过 |
## 测试
- 执行的命令:
- `C:/Python310/python.exe -m unittest discover -s test -p "test_pdd_collect_service.py"`
- `C:/Python310/python.exe -m unittest discover -s test -p "test_pdd_u2_purchase_adapter.py"`
- `C:/Python310/python.exe -m unittest discover -s test -p "test_purchase_task_service.py"`
- `C:/Python310/python.exe -m unittest discover -s test -p "test_*.py"`
- 设置 `QT_QPA_PLATFORM=offscreen` 后实例化 `src.ui_main.MainWindow`
- 结果:专项测试通过;Client 全量 330 个测试通过;离屏启动输出 `OK`。
- **没验证到的部分**:没有重新执行失败采购任务。真机只读取当前控件树,约 860 ms
正确分类为 `order_confirmation`;未点击规格、未点击最终提交、未下单、未付款。
## 相关提交
- `24f4ad1` fix: 记录规格面板误超时诊断 (#115)
- `8942385` fix: 采集商品页轮询避开慢速前台查询 (#115)