1
T-219
ila edited this page 2026-08-07 16:36:36 +08:00
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

同步来源:docs/tasks/T-219.md · commit afc651f75a3a


id: T-219 title: Admin 待付款提醒与端到端验收 phase: 2 deps:

  • T-218 status: DONE created: 2026-07-28 context_ref: a77d8be work_branch: null write_paths:
  • docs/tasks/T-219.md
  • docs/00-ai-start-here.md
  • docs/02-requirements.md
  • docs/04-architecture.md
  • docs/06-tasks.md
  • docs/07-user-stories.md
  • docs/08-interaction-checklist.md
  • docs/api.md
  • docs/current-state.md
  • docs/routes.md
  • backend-api/internal/domain/**
  • backend-api/internal/repository/sqlite/**
  • backend-api/internal/transport/httpapi/**
  • backend-api/internal/transport/webui/**
  • android-buyer/app/src/main/**
  • android-buyer/app/src/test/**

问题 / 背景

T-218 已把唯一对账成功的待付款订单保存到 order_submissions,但 Admin 任务详情尚未 读取这张表;成功任务仍沿用旧文案“验证完成,未提交订单”。采购员因此无法从后台 区分“未提交”“提交后正在对账”“需要人工对账”和“已有待付款订单”。

本任务把 T-215 至 T-218 的结果收敛到一个可核对的 Admin 终点,并在 Roubao 端显示 同一结果。提醒只要求人员打开拼多多订单列表复核并付款,不提供支付跳转、自动付款或 任何支付凭证处理。

关联需求与交互

  • FR-22:一个授权最多创建一个订单,未知结果禁止重提。
  • FR-23:唯一回读后 Admin 展示待付款提醒,付款由人员完成。
  • US-010 / IX-011:展示订单号、下单时间、SKU、数量、金额和证据。

冻结合约

详情读取与鉴权

  1. TaskDetail 在原任务、execution、report 和 authorization 之外读取该任务全部 order_submissions,按 fenced_at ASC, id ASC 稳定排序;不存在时返回空数组。
  2. repository 必须同时限定 task creator subject,不能先按 submission ID 读取再由 handler 判断。Admin JSON 与 SSR 页面继续使用现有 ADMIN session/bearer 鉴权。
  3. GET /api/v1/tasks/{task_id} 新增 order_submissions。每项包含围栏状态、预期 标题/SKU/数量/单价/总额、围栏时间;仅 RECONCILED 包含订单号、平台下单时间、 PENDING_PAYMENT 和对账 evidence 引用。
  4. 响应使用 Cache-Control: no-store。订单号不能进入 URL、页面标题、日志、事件 message、VLM 请求、埋点或截图文件名;404/403 不泄露订单是否存在。

Admin 状态与提醒

  1. FENCED 显示“订单提交结果正在对账,禁止重复提交”,不显示成功或付款提醒。
  2. MANUAL_REVIEW 显示“需要人工核对订单,仍禁止重复提交”,同时显示稳定中文理由; 不提供“重试提交”操作。
  3. RECONCILED 在任务详情标题之后、原始要求之前显示醒目的 “待人工确认付款”状态区,并展示完整订单号、平台下单时间、待付款状态、已授权 商品标题、SKU、数量、单价、总额和受控对账截图。
  4. 旧的 SUCCEEDED -> 验证完成,未提交订单 只适用于没有 reconciled submission 且 execution_outcome.order_submitted=false 的历史流程;有 reconciled submission 时不得出现该文案。
  5. 提醒文案固定为“请采购员打开拼多多订单列表,核对商品、规格、数量和金额后人工 付款”。页面不提供付款按钮、深链、二维码、自动跳转或可执行的订单操作。
  6. 状态不能只靠颜色;订单字段用 dl,平台时间使用带 RFC3339 datetime 的 time 元素,截图有可访问替代文本。360 px、390 px 和 1440 px 宽度不横向溢出。

Roubao 终态

  1. 本地 RECONCILED 使用 Keystore-backed submission 展示订单号、平台下单时间、 待付款状态和核验总额,并提示“请到拼多多订单列表人工确认付款”。
  2. MANUAL_REVIEW 继续显示原因并明确禁止重新提交;App 不增加付款按钮或自动打开 支付页。
  3. 订单号只在已有鉴权会话和当前加密任务状态中展示;清理任务时随 submission 一起 清除。

端到端验收

  1. 自动化 fixture 覆盖 Admin create -> device claim/start -> candidates -> Admin authorize -> command ACK -> dry-run READY -> submission FENCED -> RECONCILED -> Admin API/Web reminder,并断言同一 authorization 只有一个 submission。
  2. 同一 fixture 验证 FENCED、MANUAL_REVIEW 和 RECONCILED 三种 SSR 文案, RECONCILED 不再显示“未提交订单”,所有页面都没有支付表单或付款链接。
  3. Playwright 在桌面和两种手机宽度检查真实 SSR 页面:无脚本错误、横向溢出或文字/ 控件重叠,对账截图请求成功且受 ADMIN session 保护。
  4. 生产真机没有受控收货地址时继续沿用 T-218 的 fail-closed 结果,不为制造演示订单 添加地址或跨过“立即支付/先用后付”边界;端到端成功态使用隔离测试数据库。

数据与 API

  • 不新增 migration;复用 v11 order_submissions 和 reconciliation_evidence_asset_id。
  • domain.TaskDetail.OrderSubmissions []OrderSubmission 是读取模型。
  • Admin GET /api/v1/tasks/{task_id} 增加 order_submissions 数组。
  • SSR Task 增加只读 OrderSubmissions,证据 URL 使用现有 task/execution-scoped 鉴权资源路由;不建立以订单号为参数的新路由。

验收要点

  • repository 按任务和 Admin subject 读取稳定排序的 submission,空值不报错。
  • Admin API 仅鉴权返回对账字段且 no-store,订单号不进 URL/日志。
  • SSR 正确区分 FENCED、MANUAL_REVIEW、RECONCILED 和历史未下单 SUCCEEDED。
  • RECONCILED 展示订单号、时间、SKU、数量、金额、截图及人工付款提醒。
  • Web/App 均没有付款按钮、重试提交或自动支付动作。
  • Go test/race/vet、Android test/Debug/Release、根验证与响应式 Playwright 通过。
  • 最小跨端 fixture 证明唯一 submission 和 Admin 提醒闭环。

边界

  • 不修改 T-218 单次提交和对账状态机,不创建第二个订单。
  • 不读取支付结果,不把任务自动改成“已付款/采购完成”。
  • 不实现付款跳转、支付方式选择、自动付款、验证码或风控绕过。
  • 不因生产真机缺少安全地址而伪造成功态。

执行记录

  • 2026-07-28:T-218 实现提交 a77d8be 后领取。冻结 Admin 三态展示、鉴权订单字段、 历史成功文案兼容、Roubao 终态提醒和隔离数据库端到端验收。
  • 2026-07-28:文档合约提交为 c2ec98d。TaskDetail、Admin API 和 SSR 已读取 submission;管理详情区分 FENCED、MANUAL_REVIEW、RECONCILED,唯一对账后 展示完整订单号、平台时间、授权快照、受控证据和人工付款提醒。Roubao 同步展示 对账终态,未增加付款或重复提交动作。
  • 2026-07-28:设备到 Admin 的自动化 fixture 已覆盖创建、领取、候选、授权、命令 确认、dry-run、围栏、唯一对账和提醒,断言每个授权只有一个 submission。真实 SSR 使用隔离数据库在 1440x900、390x844、360x800 验证,无脚本错误、横向溢出或付款 操作,证据请求成功;生产数据库未修改,未创建真实拼多多订单。
  • 2026-07-28:go test ./...、go test -race ./...、go vet ./...、Android Debug/Release 单元测试与构建、根 init.ps1 全部通过。Debug APK 1.4.16 (21) 已覆盖安装到 PKG110,并恢复、确认肉包无障碍服务。