T30 采购闭环数据关系与交互原型(先行 QuantUX 审核) #32

Closed
opened 2026-08-17 09:52:07 +08:00 by ila · 20 comments
Owner

基本信息

  • 类型:需求 / 高风险采购流程设计
  • 所属 Epic:待采购 MVP 建立后补充
  • 所属 MVP / 版本:PDD 自动采购 MVP(不属于当前采集 MVP)
  • 阶段:Stage A 已验收(2026-08-18 用户明确通过);采购代码实施按 #33~#39、#42 各自门禁推进

依赖与并行

  • 前置工单:#31(PDD 商品采购档案与规格 JSON 管理)
  • 是否允许与前置工单并行:仅原型设计允许;数据库、接口和业务代码不允许
  • 原因:采购任务依赖稳定的 PDD 商品档案和规格数据,但交互原型可提前验证业务流程

子项目影响

  • 预计影响:server / web / android / shared-docs
  • 是否跨子项目:是
  • 是否修改共享接口或契约:后续实施会修改;唯一事实来源为 docs/08-agent-api-contract.md
  • 本工单当前只交付 QuantUX 原型和评审结论,不修改生产代码

原始需求

  • 来源:用户对话
  • 提出时间:2026-08-17
  • 摘要:货运宝ERP货运单包含多个 Shopee 商品采购明细;系统需要关联 Shopee 商品与 PDD 商品,派发 Android 采购任务,在 PDD App 选择规格和数量、修改固定收货地址后创建订单但不支付,后续获取快递单号并自动回填货运宝ERP。

要解决什么

用采购人员能理解和操作的方式确定以下闭环,并先通过交互原型验证:

  1. syb_products、shopee_products、pdd_products和purchase_tasks之间的关系。
  2. Shopee 颜色尺码到 PDD 颜色尺码的人工映射。
  3. Android 创建订单但永不付款的执行边界。
  4. 使用采购任务编号修改 PDD 固定收货地址,尽量避免多个订单合并发货。
  5. 人工支付、重新采购、有效订单选择、快递单号采集和货运宝自动回填流程。
  6. 断网、重启及结果未知情况下防止重复创建订单。

已确认的数据关系

syb_products N ──> 1 shopee_products N ──> 1 pdd_products
      │
      └──────────> N purchase_tasks
  • 货运宝商品明细具有唯一来源 ID;若只在单个货运单内唯一,使用货运单号 + 来源商品ID作为唯一键。
  • 一条syb_products代表一个明确的 Shopee 商品、颜色、尺码和数量采购明细。
  • 同一货运单中,同一个 Shopee 商品可以有多条不同颜色尺码记录,并分别采购。
  • Shopee 商品 ID 全局唯一。
  • 一个 Shopee 商品当前只关联一个 PDD 商品;多个 Shopee 商品允许关联同一个 PDD 商品。
  • Shopee 与 PDD 规格名称不一致,映射由shopee_products维护;Agent不得猜测缺失映射。
  • 一个采购任务只采购一个明确规格;数量从1到N均放在同一个PDD订单,不自动拆单。
  • 一个syb_product允许因失败或人工重新采购产生多个purchase_tasks。

已确认的采购与订单规则

  • Android Agent可以选择规格、设置数量并点击创建订单。
  • Android Agent、规则和管理端均禁止支付;支付只能由采购人员在PDD中人工完成。
  • 服务端是最终事实来源;Agent本地使用 SQLite/Room 保存最小任务、订单和待上报信息,用于断网恢复及防重复下单。
  • 点击创建订单前先本地持久化order_submit_started;进入该状态后不得自动再次点击创建订单。
  • Agent重启后只能恢复确认或上报;无法确认是否已创建订单时进入order_result_unknown并交由人工处理。
  • 服务端结果提交以task_id + task_attempt_id保证幂等。
  • 一台设备同时只能执行一个任务;同一个PDD账号同时也只能执行一个采购任务。
  • 采购任务必须保存PDD账号、商品、URL、goods_id、规则、规格、数量和地址后缀快照。

收货地址后缀规则

PDD App中维护固定收货地址。每次创建订单前,Agent修改当前使用的详细地址:

后缀格式:_cg{采购任务自增ID}
示例:广东省广州市天园街道骏景花园骏晖轩1202_cg11

处理规则:

  1. 只删除地址末尾符合(?:-|_)cg\d+$的旧系统后缀。
  2. 禁止对全部-或_直接分割并取下标0,避免破坏1-1202等真实门牌号。
  3. 使用清理后的基础地址拼接_cg{task.id}。
  4. 保存后返回订单确认页,重新读取并确认:地址以当前后缀结尾,去掉后缀后的基础地址未变化。
  5. 地址修改、保存或复核失败时,任务以明确错误失败,禁止点击创建订单。
  6. 该后缀用于尽量避免合并发货;订单与任务的正式关联仍以PDD订单号为准。

重新采购与有效订单

  • 已成功采购的syb_product默认不能再次创建采购任务。
  • 管理员和采购人员均可执行一次性的“允许重新采购一次”,需要二次确认;创建任务后权限自动消耗,不做长期常开开关。
  • 明确在创建订单前失败时可以继续处理同一任务;order_submit_started或order_result_unknown必须先人工核查。
  • 重新采购不会删除旧任务和旧PDD订单。
  • 采购人员人工确认支付,并人工选择哪一个采购任务用于快递单号回填。
  • 允许后选的新订单覆盖货运宝ERP中之前回填的快递单号;覆盖必须来自采购人员的新选择,不能因新订单先发货而自动替换。
  • 快递单号成功回填货运宝ERP的采购任务才是当前有效任务,syb_products.effective_purchase_task_id指向它。

快递单号采集与回填

  • 快递单号属于PDD订单,保存在purchase_tasks,不作为syb_products的唯一事实字段。
  • 后续通过独立的PDD订单物流采集规则,以PDD订单号关联采购任务;默认认为PDD订单详情可读取订单号和快递单号,实施前必须真机验证。
  • 采购人员选定回填订单后,系统等待/获取快递单号并自动回填货运宝ERP。
  • 不同采购任务获得相同快递单号时仍允许保存和回填,由仓库负责检查,不阻断流程。
  • 自动回填必须幂等,并记录待回填、回填中、成功和失败状态;失败不得把任务标记为有效。

Stage A:先行 QuantUX 原型(本次唯一实施范围)

使用 QuantUX MCP 创建可点击原型,至少覆盖:

  1. 货运宝采购明细列表:货运单、Shopee订单、商品、目标颜色尺码、数量、匹配和采购状态。
  2. 采购明细详情:关联的 Shopee/PDD 商品、规格映射、历史采购任务和当前有效任务。
  3. Shopee商品关联PDD商品及颜色尺码映射页面。
  4. 创建采购任务确认页:PDD账号/设备、目标规格、映射规格、数量和地址后缀预览。
  5. 采购任务详情:执行状态、地址修改结果、PDD订单号、下单时间、人工支付确认。
  6. “允许重新采购一次”风险确认交互。
  7. 多个PDD订单的人工有效订单选择和允许覆盖提示。
  8. 快递单号采集、自动回填状态和最终有效结果。
  9. 明确展示“Agent只创建订单,永不支付”。

原型审核门禁

  • QuantUX MCP原型已创建并提供可访问链接
  • 已检查采购人员主流程、异常状态和危险操作确认
  • 用户明确回复“原型通过”(2026-08-18)
  • 原型通过前未修改数据库、服务端、Web、Android或共享API
  • 已拆分为 #33~#39、#42 实施单元,商品域由 #40、#41 承担;不在一个工单中直接实现全部采购闭环

本工单不做

  • 不实现自动支付、免密支付或支付状态自动识别。
  • 不在原型审核前实现任何采购代码、数据库迁移或接口。
  • 不使用OCR/VLM,不保存原始无障碍控件树或截图。
  • 不把PDD账号凭据、完整收货地址或其他个人数据写入代码、日志、工单和文档。
  • 不承诺地址后缀一定阻止PDD或卖家合并发货。
  • 不在当前采集MVP中混入采购功能。

文档影响

原型审核通过并拆分实施工单后,预计更新:

  • docs/00-project-profile.md
  • docs/02-architecture-and-code-map.md
  • docs/03-business-rules-and-glossary.md
  • docs/08-agent-api-contract.md
  • 采购状态机、数据模型和真机验证说明

Stage A验收标准

  • 原型能够从货运宝采购明细走到PDD订单、人工支付确认、有效订单选择、快递采集和自动回填结果。
  • 同一Shopee商品多规格明细、多个Shopee商品共用一个PDD商品的关系表达清楚。
  • 地址后缀固定为_cg{采购任务ID},并展示修改失败禁止创建订单。
  • 重新采购、覆盖回填和结果未知场景有清晰的人工决策入口。
  • 页面不提供任何自动支付入口。
  • 用户完成原型人工审核。2026-08-18 明确通过。

验证方式

  • 使用QuantUX MCP结构校验页面、控件与跳转。
  • 浏览器人工检查采购人员主流程、危险操作提示和异常状态。
  • 在工单中记录原型App ID、链接、页面清单和用户审核结论。
  • Stage A不进行真实PDD下单、支付或货运宝回填测试。

风险和回退

  • 修改PDD地址和创建订单属于高风险动作,后续每个实施单元必须独立建单并等待人工确认。
  • 地址中可能合法包含-,只能清理系统末尾标识,不能通用分割。
  • 同一PDD账号并发修改地址可能串单,后续实现必须增加账号级互斥。
  • 创建订单后断网可能导致结果未知,禁止自动重试下单。
  • 原型不通过时只修改或删除原型,不产生数据库和业务代码回退成本。
## 基本信息 - 类型:需求 / 高风险采购流程设计 - 所属 Epic:待采购 MVP 建立后补充 - 所属 MVP / 版本:PDD 自动采购 MVP(不属于当前采集 MVP) - 阶段:Stage A 已验收(2026-08-18 用户明确通过);采购代码实施按 #33~#39、#42 各自门禁推进 ## 依赖与并行 - 前置工单:#31(PDD 商品采购档案与规格 JSON 管理) - 是否允许与前置工单并行:仅原型设计允许;数据库、接口和业务代码不允许 - 原因:采购任务依赖稳定的 PDD 商品档案和规格数据,但交互原型可提前验证业务流程 ## 子项目影响 - 预计影响:server / web / android / shared-docs - 是否跨子项目:是 - 是否修改共享接口或契约:后续实施会修改;唯一事实来源为 `docs/08-agent-api-contract.md` - 本工单当前只交付 QuantUX 原型和评审结论,不修改生产代码 ## 原始需求 - 来源:用户对话 - 提出时间:2026-08-17 - 摘要:货运宝ERP货运单包含多个 Shopee 商品采购明细;系统需要关联 Shopee 商品与 PDD 商品,派发 Android 采购任务,在 PDD App 选择规格和数量、修改固定收货地址后创建订单但不支付,后续获取快递单号并自动回填货运宝ERP。 ## 要解决什么 用采购人员能理解和操作的方式确定以下闭环,并先通过交互原型验证: 1. `syb_products`、`shopee_products`、`pdd_products`和`purchase_tasks`之间的关系。 2. Shopee 颜色尺码到 PDD 颜色尺码的人工映射。 3. Android 创建订单但永不付款的执行边界。 4. 使用采购任务编号修改 PDD 固定收货地址,尽量避免多个订单合并发货。 5. 人工支付、重新采购、有效订单选择、快递单号采集和货运宝自动回填流程。 6. 断网、重启及结果未知情况下防止重复创建订单。 ## 已确认的数据关系 ```text syb_products N ──> 1 shopee_products N ──> 1 pdd_products │ └──────────> N purchase_tasks ``` - 货运宝商品明细具有唯一来源 ID;若只在单个货运单内唯一,使用`货运单号 + 来源商品ID`作为唯一键。 - 一条`syb_products`代表一个明确的 Shopee 商品、颜色、尺码和数量采购明细。 - 同一货运单中,同一个 Shopee 商品可以有多条不同颜色尺码记录,并分别采购。 - Shopee 商品 ID 全局唯一。 - 一个 Shopee 商品当前只关联一个 PDD 商品;多个 Shopee 商品允许关联同一个 PDD 商品。 - Shopee 与 PDD 规格名称不一致,映射由`shopee_products`维护;Agent不得猜测缺失映射。 - 一个采购任务只采购一个明确规格;数量从1到N均放在同一个PDD订单,不自动拆单。 - 一个`syb_product`允许因失败或人工重新采购产生多个`purchase_tasks`。 ## 已确认的采购与订单规则 - Android Agent可以选择规格、设置数量并点击创建订单。 - Android Agent、规则和管理端均禁止支付;支付只能由采购人员在PDD中人工完成。 - 服务端是最终事实来源;Agent本地使用 SQLite/Room 保存最小任务、订单和待上报信息,用于断网恢复及防重复下单。 - 点击创建订单前先本地持久化`order_submit_started`;进入该状态后不得自动再次点击创建订单。 - Agent重启后只能恢复确认或上报;无法确认是否已创建订单时进入`order_result_unknown`并交由人工处理。 - 服务端结果提交以`task_id + task_attempt_id`保证幂等。 - 一台设备同时只能执行一个任务;同一个PDD账号同时也只能执行一个采购任务。 - 采购任务必须保存PDD账号、商品、URL、goods_id、规则、规格、数量和地址后缀快照。 ## 收货地址后缀规则 PDD App中维护固定收货地址。每次创建订单前,Agent修改当前使用的详细地址: ```text 后缀格式:_cg{采购任务自增ID} 示例:广东省广州市天园街道骏景花园骏晖轩1202_cg11 ``` 处理规则: 1. 只删除地址末尾符合`(?:-|_)cg\d+$`的旧系统后缀。 2. 禁止对全部`-`或`_`直接分割并取下标0,避免破坏`1-1202`等真实门牌号。 3. 使用清理后的基础地址拼接`_cg{task.id}`。 4. 保存后返回订单确认页,重新读取并确认:地址以当前后缀结尾,去掉后缀后的基础地址未变化。 5. 地址修改、保存或复核失败时,任务以明确错误失败,禁止点击创建订单。 6. 该后缀用于尽量避免合并发货;订单与任务的正式关联仍以PDD订单号为准。 ## 重新采购与有效订单 - 已成功采购的`syb_product`默认不能再次创建采购任务。 - 管理员和采购人员均可执行一次性的“允许重新采购一次”,需要二次确认;创建任务后权限自动消耗,不做长期常开开关。 - 明确在创建订单前失败时可以继续处理同一任务;`order_submit_started`或`order_result_unknown`必须先人工核查。 - 重新采购不会删除旧任务和旧PDD订单。 - 采购人员人工确认支付,并人工选择哪一个采购任务用于快递单号回填。 - 允许后选的新订单覆盖货运宝ERP中之前回填的快递单号;覆盖必须来自采购人员的新选择,不能因新订单先发货而自动替换。 - 快递单号成功回填货运宝ERP的采购任务才是当前有效任务,`syb_products.effective_purchase_task_id`指向它。 ## 快递单号采集与回填 - 快递单号属于PDD订单,保存在`purchase_tasks`,不作为`syb_products`的唯一事实字段。 - 后续通过独立的PDD订单物流采集规则,以PDD订单号关联采购任务;默认认为PDD订单详情可读取订单号和快递单号,实施前必须真机验证。 - 采购人员选定回填订单后,系统等待/获取快递单号并自动回填货运宝ERP。 - 不同采购任务获得相同快递单号时仍允许保存和回填,由仓库负责检查,不阻断流程。 - 自动回填必须幂等,并记录待回填、回填中、成功和失败状态;失败不得把任务标记为有效。 ## Stage A:先行 QuantUX 原型(本次唯一实施范围) 使用 QuantUX MCP 创建可点击原型,至少覆盖: 1. 货运宝采购明细列表:货运单、Shopee订单、商品、目标颜色尺码、数量、匹配和采购状态。 2. 采购明细详情:关联的 Shopee/PDD 商品、规格映射、历史采购任务和当前有效任务。 3. Shopee商品关联PDD商品及颜色尺码映射页面。 4. 创建采购任务确认页:PDD账号/设备、目标规格、映射规格、数量和地址后缀预览。 5. 采购任务详情:执行状态、地址修改结果、PDD订单号、下单时间、人工支付确认。 6. “允许重新采购一次”风险确认交互。 7. 多个PDD订单的人工有效订单选择和允许覆盖提示。 8. 快递单号采集、自动回填状态和最终有效结果。 9. 明确展示“Agent只创建订单,永不支付”。 ### 原型审核门禁 - [x] QuantUX MCP原型已创建并提供可访问链接 - [x] 已检查采购人员主流程、异常状态和危险操作确认 - [x] 用户明确回复“原型通过”(2026-08-18) - [x] 原型通过前未修改数据库、服务端、Web、Android或共享API - [x] 已拆分为 #33~#39、#42 实施单元,商品域由 #40、#41 承担;不在一个工单中直接实现全部采购闭环 ## 本工单不做 - 不实现自动支付、免密支付或支付状态自动识别。 - 不在原型审核前实现任何采购代码、数据库迁移或接口。 - 不使用OCR/VLM,不保存原始无障碍控件树或截图。 - 不把PDD账号凭据、完整收货地址或其他个人数据写入代码、日志、工单和文档。 - 不承诺地址后缀一定阻止PDD或卖家合并发货。 - 不在当前采集MVP中混入采购功能。 ## 文档影响 原型审核通过并拆分实施工单后,预计更新: - [ ] `docs/00-project-profile.md` - [ ] `docs/02-architecture-and-code-map.md` - [ ] `docs/03-business-rules-and-glossary.md` - [ ] `docs/08-agent-api-contract.md` - [ ] 采购状态机、数据模型和真机验证说明 ## Stage A验收标准 - [x] 原型能够从货运宝采购明细走到PDD订单、人工支付确认、有效订单选择、快递采集和自动回填结果。 - [x] 同一Shopee商品多规格明细、多个Shopee商品共用一个PDD商品的关系表达清楚。 - [x] 地址后缀固定为`_cg{采购任务ID}`,并展示修改失败禁止创建订单。 - [x] 重新采购、覆盖回填和结果未知场景有清晰的人工决策入口。 - [x] 页面不提供任何自动支付入口。 - [x] 用户完成原型人工审核。2026-08-18 明确通过。 ## 验证方式 - 使用QuantUX MCP结构校验页面、控件与跳转。 - 浏览器人工检查采购人员主流程、危险操作提示和异常状态。 - 在工单中记录原型App ID、链接、页面清单和用户审核结论。 - Stage A不进行真实PDD下单、支付或货运宝回填测试。 ## 风险和回退 - 修改PDD地址和创建订单属于高风险动作,后续每个实施单元必须独立建单并等待人工确认。 - 地址中可能合法包含`-`,只能清理系统末尾标识,不能通用分割。 - 同一PDD账号并发修改地址可能串单,后续实现必须增加账号级互斥。 - 创建订单后断网可能导致结果未知,禁止自动重试下单。 - 原型不通过时只修改或删除原型,不产生数据库和业务代码回退成本。
Author
Owner

实施子工单索引(2026-08-17拆分)

  • #33 T31 采购数据模型与共享 API 契约
  • #34 T32 服务端采购任务、租约、幂等与状态机
  • #35 T33 Admin 采购明细、规格映射与人工处理页面
  • #36 T34 Android 采购规则、地址后缀与创建订单
  • #37 T35 服务端物流调度与货运宝自动回填
  • #38 T36 Android PDD 订单物流采集规则
  • #39 T37 采购闭环真机端到端验收

拆分原则:#32继续作为总体QuantUX原型与用户审核门禁。以上工单当前均为待实施;用户未明确验收#32原型前,不修改数据库、服务端、Web、Android或共享API。Admin和Android分别实施,物流服务端与Android采集也分别实施,最后由独立真机验收工单收口。

## 实施子工单索引(2026-08-17拆分) - [ ] #33 T31 采购数据模型与共享 API 契约 - [ ] #34 T32 服务端采购任务、租约、幂等与状态机 - [ ] #35 T33 Admin 采购明细、规格映射与人工处理页面 - [ ] #36 T34 Android 采购规则、地址后缀与创建订单 - [ ] #37 T35 服务端物流调度与货运宝自动回填 - [ ] #38 T36 Android PDD 订单物流采集规则 - [ ] #39 T37 采购闭环真机端到端验收 拆分原则:#32继续作为总体QuantUX原型与用户审核门禁。以上工单当前均为待实施;用户未明确验收#32原型前,不修改数据库、服务端、Web、Android或共享API。Admin和Android分别实施,物流服务端与Android采集也分别实施,最后由独立真机验收工单收口。
Author
Owner

商品域与采购域解耦调整(2026-08-17)

用户确认PDD、Shopee和SYB商品档案必须独立于采购任务。工单现调整为:

  • #31:PDD商品档案
  • #40:Shopee商品档案、PDD关联与规格映射
  • #41:SYB货运单商品导入与Shopee信息提取
  • #33:仅负责采购任务数据模型和共享API契约
  • #35:仅负责采购任务与人工处理页面,不再实现SYB列表或规格映射维护

依赖关系:

ext #31 PDD商品 ──────────┐ #40 Shopee商品 ──────┼─> #33 采购任务模型/API ─> #34~#39采购实现 #41 SYB商品 ───────────┘

#32仍只负责把完整业务流程做成QuantUX原型供用户审核;它不再代表这些数据模块必须在同一实施工单中开发。原型未明确验收前,所有相关代码工单继续保持待实施。

## 商品域与采购域解耦调整(2026-08-17) 用户确认PDD、Shopee和SYB商品档案必须独立于采购任务。工单现调整为: - #31:PDD商品档案 - #40:Shopee商品档案、PDD关联与规格映射 - #41:SYB货运单商品导入与Shopee信息提取 - #33:仅负责采购任务数据模型和共享API契约 - #35:仅负责采购任务与人工处理页面,不再实现SYB列表或规格映射维护 依赖关系: ` ext #31 PDD商品 ──────────┐ #40 Shopee商品 ──────┼─> #33 采购任务模型/API ─> #34~#39采购实现 #41 SYB商品 ───────────┘ ` #32仍只负责把完整业务流程做成QuantUX原型供用户审核;它不再代表这些数据模块必须在同一实施工单中开发。原型未明确验收前,所有相关代码工单继续保持待实施。
Author
Owner

最小吸收cmautobuy优点的工单调整(2026-08-17)

  • 新增 #42 $(@{id=181; url=#42; html_url=#42; number=42; user=; original_author=; original_author_id=0; title=T40 Android 采购演练规则与持久执行基线; body=## 基本信息

  • 类型:需求 / Android采购演练 / 持久执行基线

  • 所属总体设计:#32

  • 阶段:待实施(受 #32 QuantUX 原型审核门禁阻塞)

依赖与并行

  • 前置工单:#33采购共享契约、#34服务端采购演练任务能力,以及#32原型经用户明确验收
  • 是否允许并行:服务端契约稳定后可开发;必须先于真实地址修改和创建订单
  • 原因:先用没有外部副作用的演练验证“服务端规则变化无需升级APK”和Android持久执行边界

子项目影响

  • 交付单元:android / shared-docs
  • 是否跨子项目:是
  • 是否修改共享接口:只实现#33已确认的采购演练契约,不自行扩展
  • 验证:Android单元测试、APK构建、规则固件测试和不下单真机演练

原始需求

cmautobuy已经验证了商品、规格、数量、价格复核和本地Outbox等采购安全规则,但其PDD页面判断大量写死在Windows Client中,每次兼容新控件树都要更新Client。GoAuto第一步应保留手机直连云端架构,把可变化的页面证据和操作顺序放入服务端规则,并在不创建订单的演练流程中验证。

做什么

  • 增加采购演练执行类型;任务输入人工指定PDD商品、精确颜色、尺码、数量、订单总价上限、设备和采购规则快照。
  • Android使用Room/SQLite持久化最小采购任务、执行尝试和Outbox:task_id、attempt_id、规则快照哈希、当前步骤、状态、结果、上报状态和时间。
  • 任务结果与待上报Outbox在同一事务保存;网络重试只重发既有结果,不重新操作PDD。
  • 复用GoAuto版本化规则和能力协商,采购规则只能调用已声明的通用类型化动作。
  • 用服务端规则完成:打开商品、验证商品身份、进入规格面板、精确选择颜色/尺码、设置数量、复核规格/数量/订单总价。
  • 最终复核完成后停在安全点并提交rehearsal_completed,不得进入地址修改和订单创建。
  • 从cmautobuy提取已验证的页面证据、唯一候选、精确规格、数量和价格保护测试场景;不复制Windows Client、ADB或Python线程架构。
  • 登录失效、验证码、风控、人机验证、商品不一致、规格缺失、价格超限和控件不唯一时明确失败。

规则与Agent边界

仅修改服务端规则即可处理:文字/ID/层级证据变化、同义文字、等待时间、有限滑动次数、已知弹窗分支和最近可点击父节点策略。

必须升级Agent的情况:新增通用动作类型、新的复杂遍历算法、系统级OEM浮层能力、无障碍API边界或新的本地可靠性机制。服务端下发任意脚本不在范围内。

不做什么

  • 不接SYB导入和Shopee映射管理;测试输入允许人工准备。
  • 不修改收货地址,不点击创建订单,不进入支付页面,不支付。
  • 不采集PDD订单号、快递单号或执行货运宝回填。
  • 不保存原始控件树、截图、PDD账号凭据或完整收货地址。
  • 不迁移或保留Windows桌面Client架构。

验收标准

  • 规则A可以完成一次商品、规格、数量和总价复核后安全停止。
  • 服务端把按钮同义文字、等待时间或滑动次数改成规则B后,不更新APK即可执行新任务。
  • 旧任务仍执行自身规则A快照,不受规则B影响。
  • 下发Agent不支持的能力时在操作PDD前返回AGENT_CAPABILITY_MISMATCH。
  • 规格、数量、价格或唯一页面证据不满足时停止,不点击相近候选。
  • 结果与Outbox事务保存;断网/重启后只重新上报,不重复执行PDD操作。
  • 全流程没有修改地址、创建PDD订单或支付。
  • Android单元测试、APK构建和一加真机安全演练通过。

风险和回退

本工单不得包含任何真实下单动作。采购演练能力与采集能力按任务类型隔离;出现问题可停用采购演练规则并回退APK,不影响现有采集闭环。; ref=; assets=System.Object[]; labels=System.Object[]; milestone=; projects=; assignee=; assignees=; state=open; is_locked=False; comments=0; created_at=08/17/2026 10:24:50; updated_at=08/17/2026 10:24:50; closed_at=; due_date=; time_estimate=0; pull_request=; repository=; pin_order=0; content_version=0}.title):第一阶段只做规则驱动的采购演练、Room执行记录和Outbox,止于规格/数量/总价复核,禁止修改地址和创建订单。

  • #36 已收缩并更名为 $(@{id=174; url=#36; html_url=#36; number=36; user=; original_author=; original_author_id=0; title=T34 Android 地址后缀、不可逆门禁与创建订单; body=## 基本信息

  • 类型:需求 / Android / 高风险真实订单动作

  • 所属总体设计:#32

  • 阶段:待实施(受 #32 QuantUX 原型审核门禁阻塞)

依赖与并行

  • 前置工单:#33、#34,以及采购演练与持久执行基线工单(见#32最新索引)
  • 是否允许并行:否;必须先证明规则驱动演练、Room任务记录和Outbox可靠
  • 原因:本工单只在已验收的安全执行基线上增加地址修改和一次性真实订单动作

子项目影响

  • 交付单元:android / shared-docs
  • 是否跨子项目:是
  • 验证:Android单元、APK构建、规则模拟,以及用户再次确认后的真机验收

做什么

  • 复用已验收的采购演练规则执行、Room任务/尝试记录和Outbox,不重复实现商品规格选择流程。
  • 仅live采购规则可以进入PDD确认订单和地址步骤;rehearsal在服务端和Agent双重拒绝。
  • 进入确认订单页后修改PDD App维护的固定收货地址。
  • 只清理末尾(?:-|_)cg\d+$旧后缀,追加_cg{task.id};禁止破坏真实地址主体。
  • 保存后返回确认页,验证当前后缀和基础地址均正确;失败时返回shipping_address_update_failed并禁止创建订单。
  • 最终再次复核商品、规格、数量、订单总价、目标包名/Activity和唯一创建订单按钮。
  • 点击创建订单前在本地事务持久化order_submit_started/irreversible_action_at及最终确认快照。
  • 创建订单按钮最多点击一次;无论点击结果是否明确,之后只能进入只读订单核对,绝不重新下单。
  • 只读核对获得唯一未付款PDD订单后保存订单号和下单时间,并通过既有Outbox幂等上报。
  • 进程重启后恢复核对/上报;零个或多个订单候选进入order_result_unknown并交由人工处理。
  • 同时遵守设备本地互斥和服务端PDD账号租约。

不做什么

  • 永不点击支付,不处理免密支付,不自动判断人工支付结果。
  • 不保存账号凭据、原始控件树或截图,不使用OCR/VLM。
  • 不实现物流采集或货运宝回填。
  • 不把PDD具体文字和控件ID重新硬编码进流程服务;页面证据优先由规则提供。

验收标准

  • 演练模式在任何规则组合下都不能调用地址和创建订单动作。
  • 地址保存后双重校验失败时绝不触发创建订单。
  • 数量1到N在同一个PDD订单中处理,不自动拆单。
  • 不可逆标记和最终确认快照先于唯一一次创建订单点击持久化。
  • Agent崩溃、重启和重复上报时只读核单或重发Outbox,不再次创建订单。
  • 登录失效、验证码、风控、人机验证、规格缺失、价格超限和结果未知均明确失败。
  • APK构建通过;真实下单测试必须单独获得用户确认且不支付。

风险和回退

本工单会修改真实PDD地址并创建真实待付款订单,属于高风险。真机阶段再次等待人工确认;可停用live采购能力并回退APK,演练和现有采集能力保持可用。; ref=; assets=System.Object[]; labels=System.Object[]; milestone=; projects=; assignee=; assignees=; state=open; is_locked=False; comments=0; created_at=08/17/2026 10:00:49; updated_at=08/17/2026 10:24:54; closed_at=; due_date=; time_estimate=0; pull_request=; repository=; pin_order=0; content_version=1}.title):依赖#42,只负责第二阶段的地址修改、不可逆标记、唯一一次创建订单和只读核单。

  • #33 已增加
    ehearsal/live执行模式、规则快照、能力协商和本地持久化契约边界。
  • #34 已增加服务端演练权限隔离、能力门禁和
    ehearsal_completed状态。
  • #39 已把#42加入端到端验收前置。

#42的核心验收是:修改服务端按钮同义文字、等待时间或滑动次数后,不升级Android APK即可让新任务执行新规则;旧任务继续执行旧规则快照。#32原型未通过前,以上工单均保持待实施。

## 最小吸收cmautobuy优点的工单调整(2026-08-17) - 新增 #42 $(@{id=181; url=https://git.ilapage.cn/api/v1/repos/OPC/goauto/issues/42; html_url=https://git.ilapage.cn/OPC/goauto/issues/42; number=42; user=; original_author=; original_author_id=0; title=T40 Android 采购演练规则与持久执行基线; body=## 基本信息 - 类型:需求 / Android采购演练 / 持久执行基线 - 所属总体设计:#32 - 阶段:待实施(受 #32 QuantUX 原型审核门禁阻塞) ## 依赖与并行 - 前置工单:#33采购共享契约、#34服务端采购演练任务能力,以及#32原型经用户明确验收 - 是否允许并行:服务端契约稳定后可开发;必须先于真实地址修改和创建订单 - 原因:先用没有外部副作用的演练验证“服务端规则变化无需升级APK”和Android持久执行边界 ## 子项目影响 - 交付单元:android / shared-docs - 是否跨子项目:是 - 是否修改共享接口:只实现#33已确认的采购演练契约,不自行扩展 - 验证:Android单元测试、APK构建、规则固件测试和不下单真机演练 ## 原始需求 `cmautobuy`已经验证了商品、规格、数量、价格复核和本地Outbox等采购安全规则,但其PDD页面判断大量写死在Windows Client中,每次兼容新控件树都要更新Client。GoAuto第一步应保留手机直连云端架构,把可变化的页面证据和操作顺序放入服务端规则,并在不创建订单的演练流程中验证。 ## 做什么 - 增加采购演练执行类型;任务输入人工指定PDD商品、精确颜色、尺码、数量、订单总价上限、设备和采购规则快照。 - Android使用Room/SQLite持久化最小采购任务、执行尝试和Outbox:`task_id`、`attempt_id`、规则快照哈希、当前步骤、状态、结果、上报状态和时间。 - 任务结果与待上报Outbox在同一事务保存;网络重试只重发既有结果,不重新操作PDD。 - 复用GoAuto版本化规则和能力协商,采购规则只能调用已声明的通用类型化动作。 - 用服务端规则完成:打开商品、验证商品身份、进入规格面板、精确选择颜色/尺码、设置数量、复核规格/数量/订单总价。 - 最终复核完成后停在安全点并提交`rehearsal_completed`,不得进入地址修改和订单创建。 - 从`cmautobuy`提取已验证的页面证据、唯一候选、精确规格、数量和价格保护测试场景;不复制Windows Client、ADB或Python线程架构。 - 登录失效、验证码、风控、人机验证、商品不一致、规格缺失、价格超限和控件不唯一时明确失败。 ## 规则与Agent边界 仅修改服务端规则即可处理:文字/ID/层级证据变化、同义文字、等待时间、有限滑动次数、已知弹窗分支和最近可点击父节点策略。 必须升级Agent的情况:新增通用动作类型、新的复杂遍历算法、系统级OEM浮层能力、无障碍API边界或新的本地可靠性机制。服务端下发任意脚本不在范围内。 ## 不做什么 - 不接SYB导入和Shopee映射管理;测试输入允许人工准备。 - 不修改收货地址,不点击创建订单,不进入支付页面,不支付。 - 不采集PDD订单号、快递单号或执行货运宝回填。 - 不保存原始控件树、截图、PDD账号凭据或完整收货地址。 - 不迁移或保留Windows桌面Client架构。 ## 验收标准 - [ ] 规则A可以完成一次商品、规格、数量和总价复核后安全停止。 - [ ] 服务端把按钮同义文字、等待时间或滑动次数改成规则B后,不更新APK即可执行新任务。 - [ ] 旧任务仍执行自身规则A快照,不受规则B影响。 - [ ] 下发Agent不支持的能力时在操作PDD前返回`AGENT_CAPABILITY_MISMATCH`。 - [ ] 规格、数量、价格或唯一页面证据不满足时停止,不点击相近候选。 - [ ] 结果与Outbox事务保存;断网/重启后只重新上报,不重复执行PDD操作。 - [ ] 全流程没有修改地址、创建PDD订单或支付。 - [ ] Android单元测试、APK构建和一加真机安全演练通过。 ## 风险和回退 本工单不得包含任何真实下单动作。采购演练能力与采集能力按任务类型隔离;出现问题可停用采购演练规则并回退APK,不影响现有采集闭环。; ref=; assets=System.Object[]; labels=System.Object[]; milestone=; projects=; assignee=; assignees=; state=open; is_locked=False; comments=0; created_at=08/17/2026 10:24:50; updated_at=08/17/2026 10:24:50; closed_at=; due_date=; time_estimate=0; pull_request=; repository=; pin_order=0; content_version=0}.title):第一阶段只做规则驱动的采购演练、Room执行记录和Outbox,止于规格/数量/总价复核,禁止修改地址和创建订单。 - #36 已收缩并更名为 $(@{id=174; url=https://git.ilapage.cn/api/v1/repos/OPC/goauto/issues/36; html_url=https://git.ilapage.cn/OPC/goauto/issues/36; number=36; user=; original_author=; original_author_id=0; title=T34 Android 地址后缀、不可逆门禁与创建订单; body=## 基本信息 - 类型:需求 / Android / 高风险真实订单动作 - 所属总体设计:#32 - 阶段:待实施(受 #32 QuantUX 原型审核门禁阻塞) ## 依赖与并行 - 前置工单:#33、#34,以及采购演练与持久执行基线工单(见#32最新索引) - 是否允许并行:否;必须先证明规则驱动演练、Room任务记录和Outbox可靠 - 原因:本工单只在已验收的安全执行基线上增加地址修改和一次性真实订单动作 ## 子项目影响 - 交付单元:android / shared-docs - 是否跨子项目:是 - 验证:Android单元、APK构建、规则模拟,以及用户再次确认后的真机验收 ## 做什么 - 复用已验收的采购演练规则执行、Room任务/尝试记录和Outbox,不重复实现商品规格选择流程。 - 仅`live`采购规则可以进入PDD确认订单和地址步骤;`rehearsal`在服务端和Agent双重拒绝。 - 进入确认订单页后修改PDD App维护的固定收货地址。 - 只清理末尾`(?:-|_)cg\d+$`旧后缀,追加`_cg{task.id}`;禁止破坏真实地址主体。 - 保存后返回确认页,验证当前后缀和基础地址均正确;失败时返回`shipping_address_update_failed`并禁止创建订单。 - 最终再次复核商品、规格、数量、订单总价、目标包名/Activity和唯一创建订单按钮。 - 点击创建订单前在本地事务持久化`order_submit_started`/`irreversible_action_at`及最终确认快照。 - 创建订单按钮最多点击一次;无论点击结果是否明确,之后只能进入只读订单核对,绝不重新下单。 - 只读核对获得唯一未付款PDD订单后保存订单号和下单时间,并通过既有Outbox幂等上报。 - 进程重启后恢复核对/上报;零个或多个订单候选进入`order_result_unknown`并交由人工处理。 - 同时遵守设备本地互斥和服务端PDD账号租约。 ## 不做什么 - 永不点击支付,不处理免密支付,不自动判断人工支付结果。 - 不保存账号凭据、原始控件树或截图,不使用OCR/VLM。 - 不实现物流采集或货运宝回填。 - 不把PDD具体文字和控件ID重新硬编码进流程服务;页面证据优先由规则提供。 ## 验收标准 - [ ] 演练模式在任何规则组合下都不能调用地址和创建订单动作。 - [ ] 地址保存后双重校验失败时绝不触发创建订单。 - [ ] 数量1到N在同一个PDD订单中处理,不自动拆单。 - [ ] 不可逆标记和最终确认快照先于唯一一次创建订单点击持久化。 - [ ] Agent崩溃、重启和重复上报时只读核单或重发Outbox,不再次创建订单。 - [ ] 登录失效、验证码、风控、人机验证、规格缺失、价格超限和结果未知均明确失败。 - [ ] APK构建通过;真实下单测试必须单独获得用户确认且不支付。 ## 风险和回退 本工单会修改真实PDD地址并创建真实待付款订单,属于高风险。真机阶段再次等待人工确认;可停用`live`采购能力并回退APK,演练和现有采集能力保持可用。; ref=; assets=System.Object[]; labels=System.Object[]; milestone=; projects=; assignee=; assignees=; state=open; is_locked=False; comments=0; created_at=08/17/2026 10:00:49; updated_at=08/17/2026 10:24:54; closed_at=; due_date=; time_estimate=0; pull_request=; repository=; pin_order=0; content_version=1}.title):依赖#42,只负责第二阶段的地址修改、不可逆标记、唯一一次创建订单和只读核单。 - #33 已增加 ehearsal/live执行模式、规则快照、能力协商和本地持久化契约边界。 - #34 已增加服务端演练权限隔离、能力门禁和 ehearsal_completed状态。 - #39 已把#42加入端到端验收前置。 #42的核心验收是:修改服务端按钮同义文字、等待时间或滑动次数后,不升级Android APK即可让新任务执行新规则;旧任务继续执行旧规则快照。#32原型未通过前,以上工单均保持待实施。
Author
Owner

Stage A:QuantUX 可点击原型已完成,等待用户审核

原型边界

  • 不重复实现 #31 的 PDD 商品管理列表。
  • 采购流程仅提供“选择现有 PDD 商品”的选择器,并明确提示 PDD 商品新增、编辑和采集由 #31 管理。
  • 原型不执行真实下单、支付或货运宝回填;没有任何自动支付入口。

已覆盖交互

  1. 采购明细列表与详情。
  2. Shopee/PDD 商品关联和颜色、尺码精确映射。
  3. 选择现有 PDD 商品并返回映射页。
  4. 创建采购任务确认,展示设备、PDD 账号、数量、价格上限和脱敏地址后缀预览。
  5. 任务详情、人工支付确认、订单结果未知处理。
  6. 一次性重新采购授权与风险确认。
  7. 多订单有效订单选择及覆盖回填二次确认。
  8. 快递单号采集、货运宝自动回填和最终有效任务状态。

验证结果

  • QuantUX 结构复检:10 页、677 个控件、25 条有效跳转。
  • 无缺失子控件、孤立控件、画布越界、无效跳转或不可达页面。
  • 使用 QuantUX 离线导出和 Playwright 实际点击走通:采购明细 → 创建采购任务 → 人工支付确认 → 选择有效订单 → 物流回填成功。
  • 浏览器控制台仅有本地临时预览缺少 favicon.ico 的 404,不影响原型。
  • 本轮未修改数据库、服务端、Web、Android或共享 API,Git 工作区无变更。

门禁状态

工单保持打开。只有用户明确回复“#32 原型通过”后,才允许进入子工单的数据库、接口、Web 和 Android 实施。

## Stage A:QuantUX 可点击原型已完成,等待用户审核 - QuantUX 应用:`GoAuto - 采购闭环交互原型` - App ID:`6a827440191a826306a7eddd` - 原型概览:<http://124.222.27.183:8082/#/apps/6a827440191a826306a7eddd.html> - 原型编辑器:<http://124.222.27.183:8082/#/apps/6a827440191a826306a7eddd/create.html> - 页面:10 个 - 控件:677 个 - 点击跳转:25 条 ### 原型边界 - 不重复实现 #31 的 PDD 商品管理列表。 - 采购流程仅提供“选择现有 PDD 商品”的选择器,并明确提示 PDD 商品新增、编辑和采集由 #31 管理。 - 原型不执行真实下单、支付或货运宝回填;没有任何自动支付入口。 ### 已覆盖交互 1. 采购明细列表与详情。 2. Shopee/PDD 商品关联和颜色、尺码精确映射。 3. 选择现有 PDD 商品并返回映射页。 4. 创建采购任务确认,展示设备、PDD 账号、数量、价格上限和脱敏地址后缀预览。 5. 任务详情、人工支付确认、订单结果未知处理。 6. 一次性重新采购授权与风险确认。 7. 多订单有效订单选择及覆盖回填二次确认。 8. 快递单号采集、货运宝自动回填和最终有效任务状态。 ### 验证结果 - QuantUX 结构复检:10 页、677 个控件、25 条有效跳转。 - 无缺失子控件、孤立控件、画布越界、无效跳转或不可达页面。 - 使用 QuantUX 离线导出和 Playwright 实际点击走通:采购明细 → 创建采购任务 → 人工支付确认 → 选择有效订单 → 物流回填成功。 - 浏览器控制台仅有本地临时预览缺少 `favicon.ico` 的 404,不影响原型。 - 本轮未修改数据库、服务端、Web、Android或共享 API,Git 工作区无变更。 ### 门禁状态 工单保持打开。只有用户明确回复“#32 原型通过”后,才允许进入子工单的数据库、接口、Web 和 Android 实施。
Author
Owner

QuantUX 原型同步修正:PDD 商品选择状态

已同步修改 App 6a827440191a826306a7eddd 的“选择现有 PDD 商品”页面:

  • 972800403573:正常且规格完整,允许选择;
  • 719834019024:待完善,明确显示“不可选”;
  • 731370706977:已停用 / 数据不完整,明确显示“不可选”。

商品ID、标题和店铺现与 #31 PDD 商品原型完全一致。#32结构仍为10页、677个控件、25条有效跳转,无越界、孤立控件或无效跳转。

原型链接:http://124.222.27.183:8082/#/apps/6a827440191a826306a7eddd.html

工单继续等待用户审核,不进入代码实施。

## QuantUX 原型同步修正:PDD 商品选择状态 已同步修改 App `6a827440191a826306a7eddd` 的“选择现有 PDD 商品”页面: - `972800403573`:正常且规格完整,允许选择; - `719834019024`:待完善,明确显示“不可选”; - `731370706977`:已停用 / 数据不完整,明确显示“不可选”。 商品ID、标题和店铺现与 #31 PDD 商品原型完全一致。#32结构仍为10页、677个控件、25条有效跳转,无越界、孤立控件或无效跳转。 原型链接:<http://124.222.27.183:8082/#/apps/6a827440191a826306a7eddd.html> 工单继续等待用户审核,不进入代码实施。
Author
Owner

已使用 QuantUX MCP 将线上 App 6a827440191a826306a7eddd 导出为本地单文件离线 HTML:

  • 文件:prototypes/quantux-procurement-flow-6a827440191a826306a7eddd.html
  • 大小:370372 bytes
  • 模型:10 个页面、677 个控件、25 条流程线
  • MCP 验证:PASS;导航、输入、交互切换通过,runtimeErrors=0,unsupportedTypes=0
  • 本地验证:无外部 script/link 依赖,10/10 页面名称存在
  • 提交:34b5e0c7ccce2021ba92ee03ce252ff0bcc47fc4

本次只保存线上草稿的可追溯离线快照,不改变原型审核状态,也不授权采购生产代码实施。

已使用 QuantUX MCP 将线上 App `6a827440191a826306a7eddd` 导出为本地单文件离线 HTML: - 文件:`prototypes/quantux-procurement-flow-6a827440191a826306a7eddd.html` - 大小:370372 bytes - 模型:10 个页面、677 个控件、25 条流程线 - MCP 验证:PASS;导航、输入、交互切换通过,runtimeErrors=0,unsupportedTypes=0 - 本地验证:无外部 script/link 依赖,10/10 页面名称存在 - 提交:`34b5e0c7ccce2021ba92ee03ce252ff0bcc47fc4` 本次只保存线上草稿的可追溯离线快照,不改变原型审核状态,也不授权采购生产代码实施。
Author
Owner

采购流程解耦与价格门禁修订(2026-08-17,替代工单正文中冲突的旧规则)

本轮用户确认 #32 原型需要按“采购、人工支付、订单同步、SYB回填彼此独立”重新设计。原型仍为草稿;用户审核通过前禁止进入生产代码。

一、采购任务只负责创建未付款订单

  • 一个采购任务严格对应一条 syb_products 明细;同一明细不能同时存在 pending/running 任务。
  • Agent 成功条件:精确选择商品、颜色、尺码和数量,价格校验通过,地址改为 _cg{taskId},创建未付款订单,并取回 PDD 订单号和下单时间后提交 Admin。
  • Agent 永不付款;人工复核和付款脱离采购任务执行流程。
  • 采购任务仍使用 pending/running/completed/failed。失败后人工创建新任务,保留旧任务,不重置覆盖历史。
  • 点击创建订单前本地持久化不可逆边界;创建后断网只重试结果上报,不能再次创建订单。服务端按 taskId + orderNo 幂等接收;同任务出现冲突订单号转人工处理。
  • 已点击创建订单但未取回订单号/时间时,任务显示失败,同时标记“订单可能已创建,必须先核对,禁止直接再次采购”。可以由订单同步恢复,或由管理员/采购员在“订单异常处理”中补录订单号和时间后恢复完成。

二、人工付款与订单状态独立

  • 人工复核结果只显示“未支付/已支付”,由后续独立的 PDD 订单同步任务更新;GoAuto 不提供支付入口。
  • Android 无法可靠获取 PDD 账号,因此采购任务不强制填写 PDD 账号。订单同步只说明“使用所选设备当前登录的 PDD 账号”,并记录同步时间和设备。
  • 订单同步按订单号精确匹配,_cg{taskId} 仅作兜底;无匹配或多候选转人工,不能把“本设备未找到”解释成订单不存在或已取消。

三、重新采购从 SYB 商品页发起

  • syb_products 保存最新采购投影:最新任务、PDD订单号、下单时间、支付状态、订单使用状态、首个快递单号和最后回填状态;历史尝试仍保存在采购任务。
  • order_use_status 与支付状态独立,只有 active/closed。
  • 已支付订单禁止重新采购。
  • 已有未支付有效订单时,采购员先在外部系统/PDD取消,再在 GoAuto 点击“标记订单已取消”;该按钮只记录取消结果,不负责调用 PDD 取消。标记 closed 后才允许再次采购。
  • 普通已完成订单号禁止直接编辑;管理员和采购员可以修正快递单号。

四、订单同步与 SYB 回填独立

  • 独立“PDD订单同步”规则任务批量遍历所选设备当前账号的订单,更新支付状态、首个快递单号、同步时间和设备。
  • 一个订单有多个快递单号时保存第一个并明显提醒,允许管理员/采购员人工处理。
  • 独立“SYB快递单号回填”页面从 syb_products 批量勾选;必须已有 PDD 订单号和快递单号,回填的是快递单号。
  • 回填可以重复执行,逐条展示成功/失败;只覆盖最后状态、时间和简单错误,不增加复杂历史。

五、全局价格范围门禁

  • 管理员配置统一允许范围,默认参考价格的 20%~150%(内部倍率 0.2~1.5,可调整)。
  • 参考价格取目标颜色最新保存价格;当前阶段不同尺码按同色同价。任务保存参考价、上下限配置和计算结果快照,金额统一使用分,边界值允许。
  • 以 PDD App 实际选中规格的单价校验;若页面只显示商品总价,则 单价=商品总价/数量,运费不计入,优惠券来源不单独处理。
  • 价格缺失、无法读取或越界时,必须在创建订单前失败,不提供单任务绕过。
  • 普通采购人员只看易懂文案,例如“参考价格20元 / 允许价格4~30元 / 当前价格25元 / 价格正常”,不暴露倍率计算细节。

六、本轮 QuantUX 更新范围

  1. SYB商品列表:最新采购结果、再次采购入口及阻断原因。
  2. SYB商品详情:最新结果与历史任务分离。
  3. 创建采购任务确认:去除强制PDD账号,增加价格范围快照和不支付提示。
  4. 采购任务详情:只展示Agent执行、订单号/时间、不可逆边界与异常恢复,不再承担人工支付、物流和回填。
  5. PDD订单同步:设备当前账号说明、支付/物流结果、未找到与多候选状态。
  6. SYB快递单号回填:独立批量操作和逐条结果。
  7. 重新采购与“标记订单已取消”:明确只记录外部取消结果,已支付禁止。
  8. 订单异常处理:订单可能已创建时禁止重复采购,可同步恢复或人工补录。
  9. 管理员价格范围设置:百分比输入、默认值和示例。
  10. 全部危险操作提供确认、禁用、失败和普通人可理解的下一步提示;不提供远程点击、自动取消或任何支付入口。

门禁状态

  • 按以上规则更新 QuantUX App 6a827440191a826306a7eddd
  • 导出并验证新版离线 HTML
  • 用户明确回复“#32 原型通过”
  • 原型通过前不实施采购数据库、接口、Web 或 Android 生产代码
## 采购流程解耦与价格门禁修订(2026-08-17,替代工单正文中冲突的旧规则) 本轮用户确认 #32 原型需要按“采购、人工支付、订单同步、SYB回填彼此独立”重新设计。原型仍为草稿;用户审核通过前禁止进入生产代码。 ### 一、采购任务只负责创建未付款订单 - 一个采购任务严格对应一条 `syb_products` 明细;同一明细不能同时存在 `pending`/`running` 任务。 - Agent 成功条件:精确选择商品、颜色、尺码和数量,价格校验通过,地址改为 `_cg{taskId}`,创建未付款订单,并取回 PDD 订单号和下单时间后提交 Admin。 - Agent 永不付款;人工复核和付款脱离采购任务执行流程。 - 采购任务仍使用 `pending/running/completed/failed`。失败后人工创建新任务,保留旧任务,不重置覆盖历史。 - 点击创建订单前本地持久化不可逆边界;创建后断网只重试结果上报,不能再次创建订单。服务端按 `taskId + orderNo` 幂等接收;同任务出现冲突订单号转人工处理。 - 已点击创建订单但未取回订单号/时间时,任务显示失败,同时标记“订单可能已创建,必须先核对,禁止直接再次采购”。可以由订单同步恢复,或由管理员/采购员在“订单异常处理”中补录订单号和时间后恢复完成。 ### 二、人工付款与订单状态独立 - 人工复核结果只显示“未支付/已支付”,由后续独立的 PDD 订单同步任务更新;GoAuto 不提供支付入口。 - Android 无法可靠获取 PDD 账号,因此采购任务不强制填写 PDD 账号。订单同步只说明“使用所选设备当前登录的 PDD 账号”,并记录同步时间和设备。 - 订单同步按订单号精确匹配,`_cg{taskId}` 仅作兜底;无匹配或多候选转人工,不能把“本设备未找到”解释成订单不存在或已取消。 ### 三、重新采购从 SYB 商品页发起 - `syb_products` 保存最新采购投影:最新任务、PDD订单号、下单时间、支付状态、订单使用状态、首个快递单号和最后回填状态;历史尝试仍保存在采购任务。 - `order_use_status` 与支付状态独立,只有 `active/closed`。 - 已支付订单禁止重新采购。 - 已有未支付有效订单时,采购员先在外部系统/PDD取消,再在 GoAuto 点击“标记订单已取消”;该按钮只记录取消结果,不负责调用 PDD 取消。标记 `closed` 后才允许再次采购。 - 普通已完成订单号禁止直接编辑;管理员和采购员可以修正快递单号。 ### 四、订单同步与 SYB 回填独立 - 独立“PDD订单同步”规则任务批量遍历所选设备当前账号的订单,更新支付状态、首个快递单号、同步时间和设备。 - 一个订单有多个快递单号时保存第一个并明显提醒,允许管理员/采购员人工处理。 - 独立“SYB快递单号回填”页面从 `syb_products` 批量勾选;必须已有 PDD 订单号和快递单号,回填的是快递单号。 - 回填可以重复执行,逐条展示成功/失败;只覆盖最后状态、时间和简单错误,不增加复杂历史。 ### 五、全局价格范围门禁 - 管理员配置统一允许范围,默认参考价格的 `20%~150%`(内部倍率 `0.2~1.5`,可调整)。 - 参考价格取目标颜色最新保存价格;当前阶段不同尺码按同色同价。任务保存参考价、上下限配置和计算结果快照,金额统一使用分,边界值允许。 - 以 PDD App 实际选中规格的单价校验;若页面只显示商品总价,则 `单价=商品总价/数量`,运费不计入,优惠券来源不单独处理。 - 价格缺失、无法读取或越界时,必须在创建订单前失败,不提供单任务绕过。 - 普通采购人员只看易懂文案,例如“参考价格20元 / 允许价格4~30元 / 当前价格25元 / 价格正常”,不暴露倍率计算细节。 ### 六、本轮 QuantUX 更新范围 1. SYB商品列表:最新采购结果、再次采购入口及阻断原因。 2. SYB商品详情:最新结果与历史任务分离。 3. 创建采购任务确认:去除强制PDD账号,增加价格范围快照和不支付提示。 4. 采购任务详情:只展示Agent执行、订单号/时间、不可逆边界与异常恢复,不再承担人工支付、物流和回填。 5. PDD订单同步:设备当前账号说明、支付/物流结果、未找到与多候选状态。 6. SYB快递单号回填:独立批量操作和逐条结果。 7. 重新采购与“标记订单已取消”:明确只记录外部取消结果,已支付禁止。 8. 订单异常处理:订单可能已创建时禁止重复采购,可同步恢复或人工补录。 9. 管理员价格范围设置:百分比输入、默认值和示例。 10. 全部危险操作提供确认、禁用、失败和普通人可理解的下一步提示;不提供远程点击、自动取消或任何支付入口。 ### 门禁状态 - [ ] 按以上规则更新 QuantUX App `6a827440191a826306a7eddd` - [ ] 导出并验证新版离线 HTML - [ ] 用户明确回复“#32 原型通过” - [ ] 原型通过前不实施采购数据库、接口、Web 或 Android 生产代码
Author
Owner

#32 QuantUX 原型已按解耦方案更新,等待用户审核

新版页面(11页)

  1. SYB商品列表
  2. SYB商品详情
  3. Shopee与PDD规格映射
  4. 选择现有PDD商品
  5. 创建采购任务确认
  6. 采购任务详情
  7. 重新采购与标记取消
  8. PDD订单同步
  9. SYB快递单号回填
  10. 订单异常处理
  11. 价格范围设置(管理员)

本轮关键调整

  • 采购任务只负责 Agent 创建未付款订单并回传订单号/下单时间,不再承载人工付款、物流和SYB回填。
  • 去掉强制 PDD 账号选择,改为说明使用所选设备当前登录账号。
  • 订单同步独立成页,展示付款状态、首个快递单号、同步设备/时间及人工匹配边界。
  • SYB快递单号回填独立成页,支持批量勾选、逐条成功/失败和重复回填。
  • 再次采购入口回到 SYB 商品;未付款有效订单必须先在外部取消,再由 GoAuto 只记录“已取消”;已支付禁止。
  • 订单号未取回时明确提示“订单可能已经创建,请先核对,不要重复采购”,支持订单同步恢复或人工补录订单号和时间。
  • 新增管理员全局价格范围设置,界面使用 20%~150% 和普通金额示例;采购人员只看参考价、允许价、当前价和是否正常。
  • 全部页面继续明确:GoAuto 和 Agent 永不付款,也不提供自动取消入口。

验证

  • QuantUX:11页、716个控件、28条有效流程线。
  • quantux_verify_export:PASS;navigation、inputsEditable、toggleWorks 均通过。
  • runtimeErrors:0;unsupportedTypes:0。
  • 离线HTML:389581 bytes,无外部 script/link 依赖;9个关键页面名称全部检查存在。
  • Git:提交已推送到 main,工作区与 origin/main 一致。

门禁

工单继续保持打开和“原型待审核”。用户明确回复“#32 原型通过”之前,不实施采购数据库、服务端、Web 或 Android 生产代码。

## #32 QuantUX 原型已按解耦方案更新,等待用户审核 - QuantUX App:`6a827440191a826306a7eddd` - 在线原型:<http://124.222.27.183:8082/#/apps/6a827440191a826306a7eddd.html> - 本地离线文件:`prototypes/quantux-procurement-flow-6a827440191a826306a7eddd.html` - 提交:`18d96c7` ### 新版页面(11页) 1. SYB商品列表 2. SYB商品详情 3. Shopee与PDD规格映射 4. 选择现有PDD商品 5. 创建采购任务确认 6. 采购任务详情 7. 重新采购与标记取消 8. PDD订单同步 9. SYB快递单号回填 10. 订单异常处理 11. 价格范围设置(管理员) ### 本轮关键调整 - 采购任务只负责 Agent 创建未付款订单并回传订单号/下单时间,不再承载人工付款、物流和SYB回填。 - 去掉强制 PDD 账号选择,改为说明使用所选设备当前登录账号。 - 订单同步独立成页,展示付款状态、首个快递单号、同步设备/时间及人工匹配边界。 - SYB快递单号回填独立成页,支持批量勾选、逐条成功/失败和重复回填。 - 再次采购入口回到 SYB 商品;未付款有效订单必须先在外部取消,再由 GoAuto 只记录“已取消”;已支付禁止。 - 订单号未取回时明确提示“订单可能已经创建,请先核对,不要重复采购”,支持订单同步恢复或人工补录订单号和时间。 - 新增管理员全局价格范围设置,界面使用 `20%~150%` 和普通金额示例;采购人员只看参考价、允许价、当前价和是否正常。 - 全部页面继续明确:GoAuto 和 Agent 永不付款,也不提供自动取消入口。 ### 验证 - QuantUX:11页、716个控件、28条有效流程线。 - `quantux_verify_export`:`PASS`;navigation、inputsEditable、toggleWorks 均通过。 - runtimeErrors:0;unsupportedTypes:0。 - 离线HTML:389581 bytes,无外部 `script/link` 依赖;9个关键页面名称全部检查存在。 - Git:提交已推送到 `main`,工作区与 `origin/main` 一致。 ### 门禁 工单继续保持打开和“原型待审核”。用户明确回复“#32 原型通过”之前,不实施采购数据库、服务端、Web 或 Android 生产代码。
Author
Owner

SYB 商品批量创建采购任务入口修订(2026-08-17)

用户确认旧原型中“进入 SYB 商品详情后创建采购任务”的流程过于复杂。本轮调整如下,替代 #32 中冲突的旧交互:

  • 采购任务创建入口只放在 SYB商品列表。
  • 采购人员在列表左侧勾选一条或多条 SYB 商品,点击“创建采购任务”。
  • 每条被选中的 SYB 商品仍分别创建一个采购任务;批量操作不是把多个商品合并到同一任务或同一 PDD 订单。
  • 点击批量创建后进入统一确认页,展示所选数量、可创建数量、不可创建数量、执行设备策略和逐条校验结果。
  • 不可创建的行要给出普通人可理解的原因,例如:规格未映射、已有进行中任务、存在未取消的有效订单、已支付禁止再次采购。
  • 批量创建采用逐条结果:符合条件的创建成功,不符合条件的跳过并说明原因,不因一条失败回滚其他成功项。
  • SYB商品详情改为只读查看:商品关系、最新采购结果和历史采购任务;清除“创建采购任务”按钮及相关说明、卡片和跳转。
  • “再次采购”同样从 SYB 商品列表发起,并继续遵守订单取消、付款状态和活动任务门禁。
  • 列表批量按钮在未勾选时禁用;勾选后明确显示“已选择 N 条”,防止误操作。
  • 本轮只更新 QuantUX 原型和离线 HTML,原型审核通过前不实施数据库、服务端、Web 或 Android 代码。
## SYB 商品批量创建采购任务入口修订(2026-08-17) 用户确认旧原型中“进入 SYB 商品详情后创建采购任务”的流程过于复杂。本轮调整如下,替代 #32 中冲突的旧交互: - 采购任务创建入口只放在 `SYB商品列表`。 - 采购人员在列表左侧勾选一条或多条 SYB 商品,点击“创建采购任务”。 - 每条被选中的 SYB 商品仍分别创建一个采购任务;批量操作不是把多个商品合并到同一任务或同一 PDD 订单。 - 点击批量创建后进入统一确认页,展示所选数量、可创建数量、不可创建数量、执行设备策略和逐条校验结果。 - 不可创建的行要给出普通人可理解的原因,例如:规格未映射、已有进行中任务、存在未取消的有效订单、已支付禁止再次采购。 - 批量创建采用逐条结果:符合条件的创建成功,不符合条件的跳过并说明原因,不因一条失败回滚其他成功项。 - `SYB商品详情`改为只读查看:商品关系、最新采购结果和历史采购任务;清除“创建采购任务”按钮及相关说明、卡片和跳转。 - “再次采购”同样从 SYB 商品列表发起,并继续遵守订单取消、付款状态和活动任务门禁。 - 列表批量按钮在未勾选时禁用;勾选后明确显示“已选择 N 条”,防止误操作。 - 本轮只更新 QuantUX 原型和离线 HTML,原型审核通过前不实施数据库、服务端、Web 或 Android 代码。
Author
Owner

SYB 商品列表批量创建交互已更新,等待用户审核

已按本工单最新确认修改 QuantUX App 6a827440191a826306a7eddd:

  • SYB 商品列表增加左侧选择状态、“已选择 2 条”和“创建采购任务”批量入口。
  • 演示数据覆盖:1 条可创建、1 条已有采购中任务、1 条未映射且未选择。
  • 批量确认页改为逐条校验,明确每条 SYB 商品分别创建一个任务和一个 PDD 订单,不合并。
  • 可创建项继续、不可创建项跳过;新增“批量创建结果”页显示成功 1 条、跳过 1 条及原因。
  • SYB 商品详情删除规格维护按钮、创建任务卡片、创建按钮及对应跳转;只保留只读商品关系、最新采购结果和历史任务。
  • 从批量确认页返回时直接回到 SYB 商品列表,不再回到详情。
  • 移除 SYB 列表中与采购人员无关的管理员价格设置按钮;价格范围设置页面仍作为独立设计证据保留。

验证:

  • QuantUX:12 页、770 个控件、31 条有效流程线。
  • quantux_verify_export:PASS;runtimeErrors=0,unsupportedTypes=0。
  • 已确认不存在悬空跳转;详情页只剩“返回列表”和“查看任务”两个按钮。
  • 离线 HTML:prototypes/quantux-procurement-flow-6a827440191a826306a7eddd.html,416114 bytes,无外部 script/link 依赖。
  • 提交:f5c1096,已推送 main。

工单继续保持原型待审核;用户明确通过前不实施采购生产代码。

## SYB 商品列表批量创建交互已更新,等待用户审核 已按本工单最新确认修改 QuantUX App `6a827440191a826306a7eddd`: - SYB 商品列表增加左侧选择状态、“已选择 2 条”和“创建采购任务”批量入口。 - 演示数据覆盖:1 条可创建、1 条已有采购中任务、1 条未映射且未选择。 - 批量确认页改为逐条校验,明确每条 SYB 商品分别创建一个任务和一个 PDD 订单,不合并。 - 可创建项继续、不可创建项跳过;新增“批量创建结果”页显示成功 1 条、跳过 1 条及原因。 - SYB 商品详情删除规格维护按钮、创建任务卡片、创建按钮及对应跳转;只保留只读商品关系、最新采购结果和历史任务。 - 从批量确认页返回时直接回到 SYB 商品列表,不再回到详情。 - 移除 SYB 列表中与采购人员无关的管理员价格设置按钮;价格范围设置页面仍作为独立设计证据保留。 验证: - QuantUX:12 页、770 个控件、31 条有效流程线。 - `quantux_verify_export`:PASS;runtimeErrors=0,unsupportedTypes=0。 - 已确认不存在悬空跳转;详情页只剩“返回列表”和“查看任务”两个按钮。 - 离线 HTML:`prototypes/quantux-procurement-flow-6a827440191a826306a7eddd.html`,416114 bytes,无外部 script/link 依赖。 - 提交:`f5c1096`,已推送 `main`。 工单继续保持原型待审核;用户明确通过前不实施采购生产代码。
Author
Owner

多选、禁用状态与“去匹配”交互补充(2026-08-17)

本轮继续更新 QuantUX 原型:

  • SYB 商品列表左侧固定显示复选框,表头复选框只选择当前页;工具栏显示“已选择 N 条”,未选择时“创建采购任务”禁用。
  • 页面已知不能采购的行,复选框禁用并在状态列写明原因;服务端创建前仍须重新校验,防止选择后状态变化。
  • 颜色/尺码未映射行的操作改为“去匹配”,进入 #40 的 Shopee/PDD 规格映射页;保存后回到 SYB 列表并重新检查。
  • 批量创建仍是一条 SYB 商品创建一个独立采购任务和一个 PDD 订单,不合并。
  • 服务端复核后允许部分成功,结果页逐条显示“创建成功/未创建”和普通人可理解的原因。
  • SYB 商品详情继续只读,不恢复创建任务或映射维护按钮。
  • PDD 商品列表的多选属于 #31 原型和独立采集工单,不在 #32 采购页面实现。

原型继续保持待审核;本轮只修改线上 QuantUX 和本地离线 HTML,不实施生产代码。

## 多选、禁用状态与“去匹配”交互补充(2026-08-17) 本轮继续更新 QuantUX 原型: - SYB 商品列表左侧固定显示复选框,表头复选框只选择当前页;工具栏显示“已选择 N 条”,未选择时“创建采购任务”禁用。 - 页面已知不能采购的行,复选框禁用并在状态列写明原因;服务端创建前仍须重新校验,防止选择后状态变化。 - 颜色/尺码未映射行的操作改为“去匹配”,进入 #40 的 Shopee/PDD 规格映射页;保存后回到 SYB 列表并重新检查。 - 批量创建仍是一条 SYB 商品创建一个独立采购任务和一个 PDD 订单,不合并。 - 服务端复核后允许部分成功,结果页逐条显示“创建成功/未创建”和普通人可理解的原因。 - SYB 商品详情继续只读,不恢复创建任务或映射维护按钮。 - PDD 商品列表的多选属于 #31 原型和独立采集工单,不在 #32 采购页面实现。 原型继续保持待审核;本轮只修改线上 QuantUX 和本地离线 HTML,不实施生产代码。
Author
Owner

SYB 多选与规格映射快捷入口原型已更新,等待审核

覆盖 SYB 当前页多选、已知不可采购行禁用、批量创建独立采购任务,以及“规格未映射 → 去匹配 → Shopee/PDD规格映射 → 保存/返回SYB列表”。批量确认和结果均按行展示。工单仍为原型待审核,不授权生产实现。

## SYB 多选与规格映射快捷入口原型已更新,等待审核 - App ID:`6a827440191a826306a7eddd` - 在线:<http://124.222.27.183:8082/#/apps/6a827440191a826306a7eddd.html> - 本地:`prototypes/quantux-procurement-flow-6a827440191a826306a7eddd.html` - 结构:12页、770控件、31条流程线 - 验证:QuantUX PASS,runtimeErrors=0,unsupportedTypes=0 - 提交:`7df4546` 覆盖 SYB 当前页多选、已知不可采购行禁用、批量创建独立采购任务,以及“规格未映射 → 去匹配 → Shopee/PDD规格映射 → 保存/返回SYB列表”。批量确认和结果均按行展示。工单仍为原型待审核,不授权生产实现。
Author
Owner

验收结论

用户 2026-08-18 明确回复「验收通过 #32」,Stage A QuantUX 原型确认通过,可作为采购实施依据。

原型证据

  • QuantUX App ID 6a827440191a826306a7eddd,12 个页面、770 个控件、31 条流程线,MCP 导出验证 PASS
  • 离线快照 prototypes/quantux-procurement-flow-6a827440191a826306a7eddd.html

任务归档

文档同步(Wiki-first,镜像已导出并检查一致)

  • Product-Requirements-Overview:#32 原型状态改为「2026-08-18 已确认」
  • Delivery-Issues:T30 标记已验收;#33 依赖改为「#32 原型已通过」;#40、#41 标注各自 Stage A 原型门禁
  • prototypes/README.md:原型审核状态由草稿改为已确认

相关提交

  • a3ef9cb docs(#40,#41): mirror stage A prototype gate
  • 23464ec docs(#32): record procurement prototype acceptance

未验证部分

  • Stage A 不做真实 PDD 下单、支付、物流采集和货运宝回填测试
  • PDD 订单详情能否稳定读取订单号与快递单号,需在 #38 实施前真机验证

后续门禁

  • 商品域独立管理页原型由 #40、#41 各自 Stage A 交付
  • #36 创建真实待付款订单前需再次人工确认
## 验收结论 用户 2026-08-18 明确回复「验收通过 #32」,Stage A QuantUX 原型确认通过,可作为采购实施依据。 **原型证据** - QuantUX App ID `6a827440191a826306a7eddd`,12 个页面、770 个控件、31 条流程线,MCP 导出验证 `PASS` - 离线快照 `prototypes/quantux-procurement-flow-6a827440191a826306a7eddd.html` **任务归档** - Wiki [Task 32 procurement closed loop prototype](https://git.ilapage.cn/OPC/goauto/wiki/Task-32-procurement-closed-loop-prototype) **文档同步(Wiki-first,镜像已导出并检查一致)** - `Product-Requirements-Overview`:#32 原型状态改为「2026-08-18 已确认」 - `Delivery-Issues`:T30 标记已验收;#33 依赖改为「#32 原型已通过」;#40、#41 标注各自 Stage A 原型门禁 - `prototypes/README.md`:原型审核状态由草稿改为已确认 **相关提交** - `a3ef9cb` docs(#40,#41): mirror stage A prototype gate - `23464ec` docs(#32): record procurement prototype acceptance **未验证部分** - Stage A 不做真实 PDD 下单、支付、物流采集和货运宝回填测试 - PDD 订单详情能否稳定读取订单号与快递单号,需在 #38 实施前真机验证 **后续门禁** - 商品域独立管理页原型由 #40、#41 各自 Stage A 交付 - #36 创建真实待付款订单前需再次人工确认
ila closed this issue 2026-08-18 09:31:40 +08:00
Author
Owner

子工单 #33 已完成采购任务数据模型与共享 API 契约实现,源码提交 978f428,MySQL 8.4 迁移和服务端全量验证通过,当前等待用户验收。后续 #34 仍不得在 #33 验收前开始。

子工单 #33 已完成采购任务数据模型与共享 API 契约实现,源码提交 `978f428`,MySQL 8.4 迁移和服务端全量验证通过,当前等待用户验收。后续 #34 仍不得在 #33 验收前开始。
Author
Owner

子工单 #33 已于 2026-08-20 验收关闭;#34 服务端采购任务状态机开始实施。当前仍不执行 Android 下单或支付。

子工单 #33 已于 2026-08-20 验收关闭;#34 服务端采购任务状态机开始实施。当前仍不执行 Android 下单或支付。
Author
Owner

子工单 #34 已完成服务端采购任务状态机并进入待验收:创建/快照、设备与可选账号租约、两趟规格探测、attempt 结果幂等、结果未知人工解除、一次性重新采购授权和人工处置接口均已落地。源码 65ae41f;未执行真实下单或支付。

子工单 #34 已完成服务端采购任务状态机并进入待验收:创建/快照、设备与可选账号租约、两趟规格探测、attempt 结果幂等、结果未知人工解除、一次性重新采购授权和人工处置接口均已落地。源码 `65ae41f`;未执行真实下单或支付。
Author
Owner

#34 已于 2026-08-20 通过用户验收并关闭。采购数据契约和服务端状态机已完成;按既定依赖顺序,下一实施单元为 #42 Android 无副作用采购演练,然后是 #35 Admin 人工处理页面,最后才进入 #36 高风险正式创建订单。

#34 已于 2026-08-20 通过用户验收并关闭。采购数据契约和服务端状态机已完成;按既定依赖顺序,下一实施单元为 #42 Android 无副作用采购演练,然后是 #35 Admin 人工处理页面,最后才进入 #36 高风险正式创建订单。
Author
Owner

采购子工单 #53 已验收关闭,补齐了 #42 所需的参数化动作契约;#42 已恢复实施。

采购子工单 #53 已验收关闭,补齐了 #42 所需的参数化动作契约;#42 已恢复实施。
Author
Owner

基于本原型实施的 #35 Admin 采购任务与人工处理页面,以及其接口支撑 #55、#56,已于 2026-08-21 通过用户验收并关闭。后续采购任务创建入口仍由 #44 独立实施。

基于本原型实施的 #35 Admin 采购任务与人工处理页面,以及其接口支撑 #55、#56,已于 2026-08-21 通过用户验收并关闭。后续采购任务创建入口仍由 #44 独立实施。
Author
Owner

子工单 #36 已于 2026-08-22 由用户明确验收并关闭。正式采购已验证到 order_created,订单号和下单时间已保存,未执行支付。#32 保持已关闭状态。

子工单 #36 已于 2026-08-22 由用户明确验收并关闭。正式采购已验证到 `order_created`,订单号和下单时间已保存,未执行支付。#32 保持已关闭状态。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#32