等待微信中间页返回并准确报告只读核单失败 #124

Closed
opened 2026-08-10 19:54:22 +08:00 by ila · 4 comments
Owner

基本信息

  • 类型:缺陷
  • 父级大工单:#1
  • 所属 MVP / 版本:MVP 后续真实采购核单
  • 阶段:不可逆下单后的只读订单核对

要解决什么

真实下单后可能先进入微信登录/支付中间页,约 20 秒后才返回 PDD 待付款页。当前 Client 在固定等待 5 秒后启动核单;核单适配器执行 app_start(PDD) 或只读返回后只等待约 0.4 秒,若控件树仍处于过渡状态便立即报“没有找到唯一入口”。

任务 PUR-85b9af23ba5d50a1 的只读诊断证明:订单提交时间为 19:48:54,核单约 19:49:22 失败,实际错误为 RECONCILE_ORDER_ENTRY_NOT_FOUND、候选数为 0;订单并未进入时间窗口匹配阶段,但界面错误提示成“未找到符合时间范围的订单”。手机稳定后控件树明确包含 PDD、“待付款”和“去支付”。

做什么 / 不做什么

  • 做:微信等外部中间页返回 PDD 后,在限定时间内轮询等待只读订单页稳定。
  • 做:app_start(PDD) 或只读返回后的过渡控件树不立即失败,直到���面稳定、遇到明确阻断页、取消或超时。
  • 做:读取异常与“成功扫描但无候选”分开分类,界面显示真实读取原因。
  • 做:增加过渡页、超时、取消和错误提示测试。
  • 不做:不增加付款、取消订单、重新下单或绕过登录/风控行为。
  • 不做:不自动重置已经进入 reconcile_manual_review 的旧任务;手动只读重新核单另建任务讨论。
  • 不做:不修改数据库结构和 Admin 接口。

怎么做

  • 修改 client/src/pdd_u2_purchase_reconcile_adapter.py:把打开待付款页改为有截止时间的状态轮询;可靠控件树优先;外部/过渡页面只执行允许的启动 PDD、一次返回、等待和读取;未知页面在截止时间前继续等待。
  • 修改 client/src/purchase_reconcile_service.py:读取异常按 unknown 保存和展示具体错误,不再误归类成 not_found。
  • 修改 client/test/test_pdd_u2_purchase_reconcile_adapter.py 和 client/test/test_purchase_recovery.py:覆盖延迟稳定、超时、取消及真实错误提示。
  • 保持 #122 的多视口严格匹配和所有采购安全门禁不变。

验收标准

  • 微信/支付中间页返回后,Client 最多等待 30 秒让 PDD 待付款页稳定。
  • app_start(PDD) 或只读返回后遇到短暂空白/过渡树时不会立即失败。
  • 稳定出现唯一待付款订单详情或订单列表后继续现有只读扫描。
  • 超时、取消、登录/验证码/风控仍安全停止,且不产生支付、取消订单或重新下单操作。
  • 读取失败显示真实原因,不再提示“未找到符合时间范围的订单”。
  • Client 自动化测试通过。

怎么验证

从 client/ 目录执行:

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

真机验证:仅观察一次已经发生不可逆动作后的微信中间页到 PDD 待付款页返回过程;不支付、不取消订单、不重新下单。

风险和回退

风险:等待过长会延迟人工提示;重复返回可能退出订单页。采用 30 秒硬截止时间,返回动作最多一次,循环中只读取和等待。超时仍进入人工核对且绝不重新下单。回退本工单提交后恢复原有快速失败行为,不改任务历史记录。

## 基本信息 - 类型:缺陷 - 父级大工单:#1 - 所属 MVP / 版本:MVP 后续真实采购核单 - 阶段:不可逆下单后的只读订单核对 ## 要解决什么 真实下单后可能先进入微信登录/支付中间页,约 20 秒后才返回 PDD 待付款页。当前 Client 在固定等待 5 秒后启动核单;核单适配器执行 `app_start(PDD)` 或只读返回后只等待约 0.4 秒,若控件树仍处于过渡状态便立即报“没有找到唯一入口”。 任务 `PUR-85b9af23ba5d50a1` 的只读诊断证明:订单提交时间为 19:48:54,核单约 19:49:22 失败,实际错误为 `RECONCILE_ORDER_ENTRY_NOT_FOUND`、候选数为 0;订单并未进入时间窗口匹配阶段,但界面错误提示成“未找到符合时间范围的订单”。手机稳定后控件树明确包含 PDD、“待付款”和“去支付”。 ## 做什么 / 不做什么 - 做:微信等外部中间页返回 PDD 后,在限定时间内轮询等待只读订单页稳定。 - 做:`app_start(PDD)` 或只读返回后的过渡控件树不立即失败,直到���面稳定、遇到明确阻断页、取消或超时。 - 做:读取异常与“成功扫描但无候选”分开分类,界面显示真实读取原因。 - 做:增加过渡页、超时、取消和错误提示测试。 - 不做:不增加付款、取消订单、重新下单或绕过登录/风控行为。 - 不做:不自动重置已经进入 `reconcile_manual_review` 的旧任务;手动只读重新核单另建任务讨论。 - 不做:不修改数据库结构和 Admin 接口。 ## 怎么做 - 修改 `client/src/pdd_u2_purchase_reconcile_adapter.py`:把打开待付款页改为有截止时间的状态轮询;可靠控件树优先;外部/过渡页面只执行允许的启动 PDD、一次返回、等待和读取;未知页面在截止时间前继续等待。 - 修改 `client/src/purchase_reconcile_service.py`:读取异常按 `unknown` 保存和展示具体错误,不再误归类成 `not_found`。 - 修改 `client/test/test_pdd_u2_purchase_reconcile_adapter.py` 和 `client/test/test_purchase_recovery.py`:覆盖延迟稳定、超时、取消及真实错误提示。 - 保持 #122 的多视口严格匹配和所有采购安全门禁不变。 ## 验收标准 - [x] 微信/支付中间页返回后,Client 最多等待 30 秒让 PDD 待付款页稳定。 - [x] `app_start(PDD)` 或只读返回后遇到短暂空白/过渡树时不会立即失败。 - [x] 稳定出现唯一待付款订单详情或订单列表后继续现有只读扫描。 - [x] 超时、取消、登录/验证码/风控仍安全停止,且不产生支付、取消订单或重新下单操作。 - [x] 读取失败显示真实原因,不再提示“未找到符合时间范围的订单”。 - [x] Client 自动化测试通过。 ## 怎么验证 从 `client/` 目录执行: ```powershell 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 ``` 真机验证:仅观察一次已经发生不可逆动作后的微信中间页到 PDD 待付款页返回过程;不支付、不取消订单、不重新下单。 ## 风险和回退 风险:等待过长会延迟人工提示;重复返回可能退出订单页。采用 30 秒硬截止时间,返回动作最多一次,循环中只读取和等待。超时仍进入人工核对且绝不重新下单。回退本工单提交后恢复原有快速失败行为,不改任务历史记录。
Author
Owner

状态:进行中,代码与自动化验证已完成。

实现结果:

  • 明确的微信外部控件树直接启动 PDD,不再调用已知可能阻塞的 app_current();
  • PDD 启动、一次只读返回和导航后使用 30 秒截止时间轮询稳定页面;
  • 过渡页不再立即失败,返回键和各导航入口最多操作一次;
  • 验证码、登录、风控、取消和超时仍立即或按截止时间安全停止;
  • 读取异常保存为 unknown 并向界面返回具体原因,不再误报时间范围。

测试:核单适配器 11 项、采购恢复 8 项、Client 完整 354 项全部通过。准备提交实现。

状态:进行中,代码与自动化验证已完成。 实现结果: - 明确的微信外部控件树直接启动 PDD,不再调用已知可能阻塞的 `app_current()`; - PDD 启动、一次只读返回和导航后使用 30 秒截止时间轮询稳定页面; - 过渡页不再立即失败,返回键和各导航入口最多操作一次; - 验证码、登录、风控、取消和超时仍立即或按截止时间安全停止; - 读取异常保存为 unknown 并向界面返回具体原因,不再误报时间范围。 测试:核单适配器 11 项、采购恢复 8 项、Client 完整 354 项全部通过。准备提交实现。
Author
Owner

状态:待用户验收。

提交:

  • 4999aa7:等待微信中间页返回、过渡页轮询、一次返回/导航保护、读取失败准确分类。
  • 3554608:归档 docs/task/124-等待微信返回后只读核单.md。

验证:核单适配器 11 项、采购恢复 8 项、Client 完整 354 项全部通过,语法与差异检查通过。

未验证:没有再创建真实订单验证微信中间页返回。旧任务 PUR-85b9af23ba5d50a1 保持 reconcile_manual_review,未重置、未支付、未取消、未重新下单。

状态:待用户验收。 提交: - `4999aa7`:等待微信中间页返回、过渡页轮询、一次返回/导航保护、读取失败准确分类。 - `3554608`:归档 `docs/task/124-等待微信返回后只读核单.md`。 验证:核单适配器 11 项、采购恢复 8 项、Client 完整 354 项全部通过,语法与差异检查通过。 未验证:没有再创建真实订单验证微信中间页返回。旧任务 `PUR-85b9af23ba5d50a1` 保持 `reconcile_manual_review`,未重置、未支付、未取消、未重新下单。
Author
Owner

用户确认订单页只需要订单编号和下单时间;后续简化由 #126 实施,#124 的页面稳定等待和只读安全边界保持不变。

用户确认订单页只需要订单编号和下单时间;后续简化由 #126 实施,#124 的页面稳定等待和只读安全边界保持不变。
Author
Owner

用户已于 2026-08-11 明确验收通过。

  • 本地归档状态已更新为“已完成,用户验收通过”
  • 验收记录提交:eca9289
  • 本工单按项目流程关闭
用户已于 2026-08-11 明确验收通过。 - 本地归档状态已更新为“已完成,用户验收通过” - 验收记录提交:`eca9289` - 本工单按项目流程关闭
ila closed this issue 2026-08-11 10:58:36 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#124