diff --git a/docs/task/124-等待微信返回后只读核单.md b/docs/task/124-等待微信返回后只读核单.md new file mode 100644 index 0000000..214586a --- /dev/null +++ b/docs/task/124-等待微信返回后只读核单.md @@ -0,0 +1,68 @@ +# 124 等待微信中间页返回并准确报告只读核单失败 + +- 类型:缺陷 +- 父级大工单:#1 +- 所属 MVP / 版本:MVP 后续真实采购核单 +- 状态:已完成,待用户验收 +- 日期:2026-08-10 +- Gitea 工单: + +## 背景与目标 + +真实下单后可能先进入微信登录/支付中间页,约 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)