fix(android): 修复订单详情核单误判支付页且不滑动 #192

Open
opened 2026-09-01 17:04:41 +08:00 by ila · 1 comment
Owner

原始需求摘要

来源:用户于 2026-09-01 反馈,最新代码执行采购任务 CG-54 后,订单详情页未向下查找订单编号和下单时间,任务进入等待人工核对;用户确认修改 Android Agent,并指示“建工单,做”。

当前事实与根因

  • CG-54 已越过创建订单不可逆边界,服务端收到 PURCHASE_ORDER_PAYMENT_REPEATED,订单编号和下单时间为空;保持等待人工核对且禁止自动重试是正确安全行为。
  • Android PurchaseLiveAutomation.readOrderResult 同时用支付 Activity 和文案“立即支付”判断支付页。首次从真实支付页返回后,订单详情页的“立即支付”会被再次误判为支付页,核单提前停止。
  • 当前通用向上滑动分支要求首屏已经出现订单上下文标识;若订单编号/下单时间在折叠区域下方,则永远无法通过滑动发现。

目标

修复 Android Agent 的订单结果只读核对:正确区分真实支付页与订单详情页的待付款/立即支付状态,并在已确认订单详情上下文中执行有界向上滑动,读取订单编号与下单时间。

非目标与安全边界

  • 不修改 Admin、服务端接口、数据库和任务状态机。
  • 不重试 CG-54,不创建任何正式订单。
  • 不点击“立即支付”“去支付”或任何付款入口,永久禁止支付。
  • 不使用 OCR/VLM,不保存控件树或整屏截图。
  • 仍以失败关闭处理未知页面、支付页重复、证据冲突及核单超时。

前置依赖与并行性

  • 依赖现有采购任务规则快照、任务租约和本地互斥不变。
  • 仅影响 Android 交付单元,可与服务端/Admin 无关工作并行;不得与同时修改 PurchaseLiveAutomation 的任务并行合并。

实施方案(用户已确认)

  1. 将真实支付页识别与订单详情页支付按钮文案解耦:已知 PDD 支付 Activity 才触发一次返回;订单详情页中的“立即支付/待付款”仅作为未付款结果证据。
  2. 使用包名、已知页面 Activity/订单详情强证据限定核单上下文;在未取得完整订单证据时允许有限次数向上滑动。
  3. 滑动前后始终不点击支付相关节点;若返回后仍处于真实支付 Activity,则继续返回稳定错误并停止。
  4. 补充真实回归场景:支付页返回 → 订单详情首屏仅见待付款/立即支付 → 滑动后出现订单编号与下单时间。

设计证据

恢复既有 Android 自动化行为的非 UI Bug;不新增页面、组件、交互或 Admin 界面,不需要原型。以现有采购安全规则和自动化测试作为设计证据。

验收标准

  • 从已知支付 Activity 返回订单详情后,不因详情页“立即支付”再次报 PURCHASE_ORDER_PAYMENT_REPEATED。
  • 订单号/下单时间未在首屏但订单详情上下文可信时,Agent 执行有界向上滑动并可读取完整证据。
  • 真正支付 Activity 返回后再次出现时仍明确失败,不继续滑动或点击。
  • PDD 首页、未知页等非订单上下文不得滑动。
  • 现有禁止支付、价格保护、任务租约、本地互斥和结果证据约束不变。

验证计划

  • 运行 PurchaseLiveAutomationTest 相关单元测试。
  • 运行 Android 受影响范围验证;若环境限制无法完成真机采购验证,明确记录。
  • 只做离线 FakeDriver/自动化测试,不创建订单、不支付。

风险

订单核对发生在不可逆创建订单之后;误识别可能导致重复创建或误触支付。实现必须只读、有限滑动、fail-closed,且不得把支付文案配置为点击目标。

文档影响

预计无长期文档影响:不改变接口、数据结构、状态、配置、业务安全边界或操作方式,仅修复现有核单实现与既定规则的偏差。完成时根据实际差异复核。

工具回退说明

当前会话未提供可调用的 Gitea MCP;环境令牌也已失效,因此按项目规则回退 Gitea API,并使用 Git 已配置的安全凭据创建和回写工单。凭据不写入工单、代码或日志。

## 原始需求摘要 来源:用户于 2026-09-01 反馈,最新代码执行采购任务 CG-54 后,订单详情页未向下查找订单编号和下单时间,任务进入等待人工核对;用户确认修改 Android Agent,并指示“建工单,做”。 ## 当前事实与根因 - CG-54 已越过创建订单不可逆边界,服务端收到 `PURCHASE_ORDER_PAYMENT_REPEATED`,订单编号和下单时间为空;保持等待人工核对且禁止自动重试是正确安全行为。 - Android `PurchaseLiveAutomation.readOrderResult` 同时用支付 Activity 和文案“立即支付”判断支付页。首次从真实支付页返回后,订单详情页的“立即支付”会被再次误判为支付页,核单提前停止。 - 当前通用向上滑动分支要求首屏已经出现订单上下文标识;若订单编号/下单时间在折叠区域下方,则永远无法通过滑动发现。 ## 目标 修复 Android Agent 的订单结果只读核对:正确区分真实支付页与订单详情页的待付款/立即支付状态,并在已确认订单详情上下文中执行有界向上滑动,读取订单编号与下单时间。 ## 非目标与安全边界 - 不修改 Admin、服务端接口、数据库和任务状态机。 - 不重试 CG-54,不创建任何正式订单。 - 不点击“立即支付”“去支付”或任何付款入口,永久禁止支付。 - 不使用 OCR/VLM,不保存控件树或整屏截图。 - 仍以失败关闭处理未知页面、支付页重复、证据冲突及核单超时。 ## 前置依赖与并行性 - 依赖现有采购任务规则快照、任务租约和本地互斥不变。 - 仅影响 Android 交付单元,可与服务端/Admin 无关工作并行;不得与同时修改 `PurchaseLiveAutomation` 的任务并行合并。 ## 实施方案(用户已确认) 1. 将真实支付页识别与订单详情页支付按钮文案解耦:已知 PDD 支付 Activity 才触发一次返回;订单详情页中的“立即支付/待付款”仅作为未付款结果证据。 2. 使用包名、已知页面 Activity/订单详情强证据限定核单上下文;在未取得完整订单证据时允许有限次数向上滑动。 3. 滑动前后始终不点击支付相关节点;若返回后仍处于真实支付 Activity,则继续返回稳定错误并停止。 4. 补充真实回归场景:支付页返回 → 订单详情首屏仅见待付款/立即支付 → 滑动后出现订单编号与下单时间。 ## 设计证据 恢复既有 Android 自动化行为的非 UI Bug;不新增页面、组件、交互或 Admin 界面,不需要原型。以现有采购安全规则和自动化测试作为设计证据。 ## 验收标准 - 从已知支付 Activity 返回订单详情后,不因详情页“立即支付”再次报 `PURCHASE_ORDER_PAYMENT_REPEATED`。 - 订单号/下单时间未在首屏但订单详情上下文可信时,Agent 执行有界向上滑动并可读取完整证据。 - 真正支付 Activity 返回后再次出现时仍明确失败,不继续滑动或点击。 - PDD 首页、未知页等非订单上下文不得滑动。 - 现有禁止支付、价格保护、任务租约、本地互斥和结果证据约束不变。 ## 验证计划 - 运行 `PurchaseLiveAutomationTest` 相关单元测试。 - 运行 Android 受影响范围验证;若环境限制无法完成真机采购验证,明确记录。 - 只做离线 FakeDriver/自动化测试,不创建订单、不支付。 ## 风险 订单核对发生在不可逆创建订单之后;误识别可能导致重复创建或误触支付。实现必须只读、有限滑动、fail-closed,且不得把支付文案配置为点击目标。 ## 文档影响 预计无长期文档影响:不改变接口、数据结构、状态、配置、业务安全边界或操作方式,仅修复现有核单实现与既定规则的偏差。完成时根据实际差异复核。 ## 工具回退说明 当前会话未提供可调用的 Gitea MCP;环境令牌也已失效,因此按项目规则回退 Gitea API,并使用 Git 已配置的安全凭据创建和回写工单。凭据不写入工单、代码或日志。
Author
Owner

实施完成,待验收

实现

  • 支付页判断收紧为已知 PDD 支付 Activity;订单详情中的“立即支付”不再被误判成支付页。
  • 支付 Activity 仍只允许安全返回一次;真实支付 Activity 再次出现继续返回 PURCHASE_ORDER_PAYMENT_REPEATED,不滑动、不点击。
  • 在 PDD 页面出现待付款状态或订单字段后进入只读核单上下文;证据不完整时按固定采样间隔有限向上滑动,从折叠区域读取订单编号和下单时间。
  • PDD 首页、未知页面、微信及未授权应用仍不会触发核单滑动。
  • 未修改 Admin、服务端接口、数据库、任务状态机、价格保护、租约或互斥逻辑;未重试 CG-54,未创建订单,未执行支付。

验证

  • android\\gradlew.bat :app:testDebugUnitTest --tests "cn.ilapage.goauto.agent.PurchaseLiveAutomationTest":通过。
  • .\\scripts\\verify.ps1 -Component android:通过;Debug/Release 单元测试通过,Debug APK 构建成功。
  • git diff --check:通过。
  • 新增回归覆盖:支付页返回到折叠的待付款订单详情,滑动后取得订单号/下单时间;真实支付 Activity 重复出现时安全停止且零滑动、零支付点击。

提交与分支

  • commit:9eb28c225ceb62e5324741e5ebed0aa12723458d
  • branch:fix/192-order-result-scroll
  • 已推送:origin/fix/192-order-result-scroll

文档影响

无长期文档影响:本次仅修复 Android 既有只读核单实现与已确认安全规则的偏差,不改变接口、数据、状态、配置、业务规则或运维方式,因此跳过 Wiki 更新和镜像同步。

未验证项

未执行真机正式采购验收,因为该操作可能创建真实订单,属于不可逆高风险行为;需用户在安装包含本提交的新 Agent 后单独授权并人工验收。永久禁止支付。

当前保持工单打开,状态为待验收;未经用户明确验收不关闭。

## 实施完成,待验收 ### 实现 - 支付页判断收紧为已知 PDD 支付 Activity;订单详情中的“立即支付”不再被误判成支付页。 - 支付 Activity 仍只允许安全返回一次;真实支付 Activity 再次出现继续返回 `PURCHASE_ORDER_PAYMENT_REPEATED`,不滑动、不点击。 - 在 PDD 页面出现待付款状态或订单字段后进入只读核单上下文;证据不完整时按固定采样间隔有限向上滑动,从折叠区域读取订单编号和下单时间。 - PDD 首页、未知页面、微信及未授权应用仍不会触发核单滑动。 - 未修改 Admin、服务端接口、数据库、任务状态机、价格保护、租约或互斥逻辑;未重试 CG-54,未创建订单,未执行支付。 ### 验证 - `android\\gradlew.bat :app:testDebugUnitTest --tests "cn.ilapage.goauto.agent.PurchaseLiveAutomationTest"`:通过。 - `.\\scripts\\verify.ps1 -Component android`:通过;Debug/Release 单元测试通过,Debug APK 构建成功。 - `git diff --check`:通过。 - 新增回归覆盖:支付页返回到折叠的待付款订单详情,滑动后取得订单号/下单时间;真实支付 Activity 重复出现时安全停止且零滑动、零支付点击。 ### 提交与分支 - commit:`9eb28c225ceb62e5324741e5ebed0aa12723458d` - branch:`fix/192-order-result-scroll` - 已推送:`origin/fix/192-order-result-scroll` ### 文档影响 无长期文档影响:本次仅修复 Android 既有只读核单实现与已确认安全规则的偏差,不改变接口、数据、状态、配置、业务规则或运维方式,因此跳过 Wiki 更新和镜像同步。 ### 未验证项 未执行真机正式采购验收,因为该操作可能创建真实订单,属于不可逆高风险行为;需用户在安装包含本提交的新 Agent 后单独授权并人工验收。永久禁止支付。 当前保持工单打开,状态为待验收;未经用户明确验收不关闭。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#192