Files
cmautobuy/docs/task/124-等待微信返回后只读核单.md
T

69 lines
3.4 KiB
Markdown
Raw Normal View History

2026-08-10 19:59:28 +08:00
# 124 等待微信中间页返回并准确报告只读核单失败
- 类型:缺陷
- 父级大工单:#1
- 所属 MVP / 版本:MVP 后续真实采购核单
- 状态:已完成,用户验收通过
2026-08-10 19:59:28 +08:00
- 日期: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.py`
- `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`
- 结果:语法检查通过;定向测试分别通过 11 项和 8 项;完整 Client 测试
354 项全部通过;差异检查通过。
- **没验证到的部分**:没有创建新的真实订单验证微信中间页自动返回。已有任务
`PUR-85b9af23ba5d50a1` 已进入人工核对状态,本任务没有重置它、重新核单、支付、
取消订单或再次下单。
## 相关提交
- `4999aa7` fix: 等待微信返回后再只读核单 (#124)