3.4 KiB
3.4 KiB
124 等待微信中间页返回并准确报告只读核单失败
- 类型:缺陷
- 父级大工单:#1
- 所属 MVP / 版本:MVP 后续真实采购核单
- 状态:已完成,用户验收通过
- 日期:2026-08-10
- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/124
背景与目标
真实下单后可能先进入微信登录/支付中间页,约 20 秒后才返回 PDD 待付款页。 旧代码开始只读核单后只等待约 0.4 秒,页面仍处于过渡状态便报找不到订单 入口;读取失败又被错误显示成“未找到符合时间范围的订单”。
本任务让 Client 在安全截止时间内等待 PDD 待付款页稳定,并把读取失败与 成功扫描但没有候选订单分开报告。
最终方案
- 控件树能明确识别微信等外部业务包时,直接启动 PDD,不再调用可能阻塞的
app_current();控件树不明确时才使用该查询兜底。 - 启动 PDD、只读返回或白名单订单导航后,最多等待 30 秒并持续读取控件树。
- 过渡页面暂时没有唯一入口时继续等待;返回键和每个白名单导航入口最多操作一次。
- 页面稳定后继续使用 #122 的单订单多视口读取和严格字段匹配。
- 验证码、PDD 登录页、风控、用户停止和超时仍安全停止,不点击支付、取消订单, 也不重新下单。
- Adapter 读取异常保存为
unknown,界面显示具体读取原因;只有成功完成扫描且 没有候选时才显示“未找到符合条件的订单”。 - 已进入
reconcile_manual_review的旧任务不自动重置,手动只读重新核单不在本工单范围。
改了哪些
client/src/pdd_u2_purchase_reconcile_adapter.py:增加外部包识别、30 秒过渡 状态轮询、一次返回与导航保护、可测试时钟。client/src/purchase_reconcile_service.py:区分读取异常和空候选,并返回具体错误。client/test/test_pdd_u2_purchase_reconcile_adapter.py:覆盖微信返回、过渡页、 单次返回、超时、取消和安全阻断页面。client/test/test_purchase_recovery.py:验证读取失败归类和用户提示。
验收结果
| 验收标准 | 结果 |
|---|---|
| 微信中间页返回后最多等待 30 秒 | 通过 |
| 短暂空白或过渡控件树不立即失败 | 通过 |
| 页面稳定后继续现有只读订单扫描 | 通过 |
| 超时、取消、登录、验证和风控安全停止 | 通过 |
| 读取失败显示具体原因,不再误报时间范围 | 通过 |
| Client 自动化测试通过 | 通过,354 项 |
测试
- 执行的命令:
C:/Python310/python.exe -m py_compile src/pdd_u2_purchase_reconcile_adapter.py src/purchase_reconcile_service.pyC:/Python310/python.exe -m unittest discover -s test -p test_pdd_u2_purchase_reconcile_adapter.py -vC:/Python310/python.exe -m unittest discover -s test -p test_purchase_recovery.py -vC:/Python310/python.exe -m unittest discover -s test -vgit diff --check
- 结果:语法检查通过;定向测试分别通过 11 项和 8 项;完整 Client 测试 354 项全部通过;差异检查通过。
- 没验证到的部分:没有创建新的真实订单验证微信中间页自动返回。已有任务
PUR-85b9af23ba5d50a1已进入人工核对状态,本任务没有重置它、重新核单、支付、 取消订单或再次下单。
相关提交
4999aa7fix: 等待微信返回后再只读核单 (#124)