# 122 修复只读核单前台误判并合并订单详情多视口字段 - 类型:缺陷 - 父级大工单:#1 - 所属 MVP / 版本:MVP 后续真实采购核单 - 状态:已完成,用户验收通过 - 日期:2026-08-10 - Gitea 工单: ## 背景与目标 真实采购进入待付款订单详情后,部分设备会让 `app_current()` 错误返回 系统设置包名。同时,商品、规格、数量和金额位于订单详情上半屏,订单号和 下单时间位于下半屏。旧代码因此会中断核单,或只得到字段不完整的候选。 本任务让核单优先使用可靠控件树判断 PDD 前台,并在确认页面只有一个订单 上下文时合并相邻视口证据。最终候选仍必须通过原有严格匹配。 ## 最终方案 - 控件树内至少有 3 个 PDD 包节点时,直接认定 PDD 在前台;证据不足时才调用 `app_current()` 兜底。 - 页面只有一组“去支付”操作且至多一个订单号时,才允许累积订单详情字段。 - 每次向下滚动后合并商品编号、规格、数量、金额、订单号、下单时间和付款状态。 - 订单号或其他关键字段冲突时立即放弃跨视口合并,保留原有人工核对结果。 - 不改变最终严格匹配,不点击支付或取消订单,也不提供重新下单入口。 原工单给出的定向测试命令把 `client/test` 当作 Python 包,但该目录没有 `__init__.py`。实际验证改用 `unittest discover`,测试范围不变。 ## 改了哪些 - `client/src/pdd_u2_purchase_reconcile_adapter.py`:增加控件树前台判断、单订单 详情识别、部分证据解析和无冲突合并。 - `client/test/test_pdd_u2_purchase_reconcile_adapter.py`:增加多视口合并、错误 前台结果和多订单防误合并测试。 ## 验收结果 | 验收标准 | 结果 | |---|---| | 可靠 PDD 控件树不受错误 `app_current()` 影响 | 通过 | | 同一订单上下屏字段能合并为完整候选 | 通过 | | 合并结果继续执行现有严格匹配 | 通过 | | 多订单或关键字段冲突时不跨订单合并 | 通过 | | 不包含支付、取消订单或再次下单操作 | 通过 | | Client 自动化测试通过 | 通过,349 项 | ## 测试 - 执行的命令: - `C:/Python310/python.exe -m unittest discover -s test -p test_pdd_u2_purchase_reconcile_adapter.py -v` - `C:/Python310/python.exe -m unittest discover -s test -p test_purchase_recovery.py -v` - `C:/Python310/python.exe -m unittest discover -s test -v` - `git diff --check` - 结果:定向测试分别通过 6 项和 8 项;完整 Client 测试 349 项全部通过; 差异检查通过。 - **没验证到的部分**:没有用真实 Android 设备重新执行自动核单。当前旧任务已经 进入 `reconcile_manual_review`,按安全状态机不会因本次升级自动重试;未修改其 数据库状态,也未点击支付、取消订单或再次下单。 ## 相关提交 - `a8f8e73` fix: 合并只读核单多视口证据 (#122)