Page:
Task 33 purchase task contract
Pages
Android-Agent-API-Contract
Architecture-and-Code-Map
Business-Rules-and-Glossary
Common-Changes
Delivery-Issues
Deployment-Template
Deployment-and-Operations
Development-Workflow
Home
Local-Development-and-Verification
OnePlus-Real-Device-Acceptance
PDD-Detail-Rule-Migration-Analysis
Product-Requirements-Overview
Project-Profile
SYB-ERP-Interface-Contract
Task 26 PDD spec traversal
Task 31 PDD product archive
Task 32 procurement closed loop prototype
Task 33 purchase task contract
Task 34 purchase task state machine
Task-35-Admin-采购任务与人工处理页面
Task-36-Android地址后缀不可逆门禁与创建订单
Task 40 Shopee product archive
Task 41 SYB product import
Task-42-Android-采购演练规则与持久执行基线
Task-43-升级-DevHarness-文档基线
Task-43-升级-GoAuto-DevHarness-文档基线
Task-44-Admin-SYB商品列表规格匹配入口与批量采购创建
Task-47-升级-DevHarness-文档基线至-bfdf648
Task-49-店铺管理与-SYB-同步店铺过滤
Task 50 SYB async sync
Task 51 SYB list layout
Task 52 SYB sync diagnostics
Task-53-补齐采购规则参数化动作契约
Task-54-统一采集与采购任务设备状态
Task-55-补齐采购任务-Admin-列表与详情查询接口
Task-56-采购-Admin-接口成功响应兼容
Task-57-优化采购管理筛选栏布局
Task-58-采购管理失败任务批量重试
Task-59-修复-PDD-规格入口误触商品评论页
Task-60-修复可选颜色切换后价格缺失
Task-61-修复采购规格探测未识别安全入口
Task-62-采购规格标准化匹配与-AI-Provider-设置
Task-63-采购列表刷新不得触发-AI-规格匹配
Task-64-修复正式采购规格滚动定位与重复探测卡死
Task 65 purchase address panel recovery
Task 66 Android payment chooser reconciliation
Task-67-SYB-与采购任务蝦皮订单号
Task-68-调整-SYB-商品页顶部工具栏与采购入口
Task-69-蝦皮与-PDD-规格匹配.-
Task-70-从-cmautobuy-线上库导入-PDD-与蝦皮商品
Task-71-Supervisor-GoAuto-services
Task-72-Fix-Supervisor-SYB-startup-race
Task-73-优化-SYB-商品列表加载与采购准备预检
Task-74-优化-SYB-商品筛选与列表列宽
Task-75-SYB-Hourly-Sync
Task-78-在-SYB-同步记录页增加管理员立即同步
Task-79-SYB-只读分页请求超时后有限重试
Task-81-修复-SYB-查看-PDD-商品跳转
Task-82-区分去关联-PDD-与去匹配动作
Task-83-PDD-商品单商品定位模式
Task-85-修复采购员账号登录并补齐最小权限
Task-Archive-Template
Troubleshooting
Clone
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.
33 采购任务数据模型与共享 API 契约
- 类型:需求
- 所属总体设计:#32
- 所属 MVP / 版本:采购闭环
- 状态:已完成
- 日期:2026-08-20
- Gitea 工单:#33
- Wiki 页面:Task-33-purchase-task-contract
背景与目标
在 PDD、虾皮和 SYB 三个独立商品域之外建立采购任务事实,固定演练/正式模式、不可变业务快照、任务尝试幂等、设备与可选账号串行、订单结果未知和后续物流回填边界,同时保证系统永远不支付。
最终方案
- 新增
purchase_task:消费三个商品域外键并固化身份、规格、数量、价格边界、币种、URL、goods_id、规则、设备和可选账号快照。 - 新增
purchase_task_attempt:使用稳定attempt_id、任务内序号、阶段和结果幂等键记录每次 Agent 执行,不保存控件树或截图。 - 新增可选
pdd_account调度引用,只保存人工名称和状态,不保存凭据;Android 无法识别账号时允许为空。 - 使用可空 guard 复合唯一索引限制同一 SYB 明细最多一个活动任务、同一设备最多一个执行中任务,以及已知账号最多一个执行中任务;终态历史完整保留。
- 正式
live任务必须关联 SYB;无副作用rehearsal可不关联。MySQL 8.4 不允许外键列同时参与跨字段 CHECK,因此该条件由模型钩子和后续 #34 创建服务校验。 - 采购规则仅接受白名单类型化动作。演练拒绝改地址、创建订单和核单;任何模式拒绝支付与未知动作;正式高风险动作要求独立版本化能力。
- 地址后缀固定为
_cg{task.id};价格使用参考/最低/最高单价整数分与币种;PDD 商品实际单价越界时明确失败。 - Wiki-first 更新共享 API、业务规则、架构、项目档案与交付索引;HTTP 路由、状态机服务、Admin 页面和 Android 执行仍属于后续工单。
修改文件
server/app/goauto/models/purchase.go:采购任务、尝试和可选 PDD 账号引用模型及 guard 派生。server/app/goauto/purchasecontract/:采购规则类型化动作、模式和能力校验。server/app/goauto/migrations/:迁移清单与采购约束回归测试。server/cmd/migrate/migration/version-local/1786701100000_purchase_contract.go:追加型版本迁移。docs/00、02、03、08、09:Wiki revisionf9245c8的只读镜像。
验收结果
| 验收标准 | 结果 |
|---|---|
| 追加迁移在既有商品表环境执行并可幂等复跑 | 通过;MySQL 8.4 版本只登记一次 |
| 演练与正式规则能力隔离,所有模式禁止支付 | 通过 |
| 商品域只通过外键与快照被消费 | 通过 |
| 同一 SYB 可保留多个历史任务且最多一个活动任务 | 通过 |
| 商品档案修改不改变已创建任务快照 | 通过 |
| 契约包含能力、幂等、租约、结果未知和回填状态 | 通过 |
| 三个商品表没有采购订单或物流字段 | 通过;MySQL 查询为 0 |
测试
go test ./app/goauto/purchasecontract ./app/goauto/migrations:通过。go test ./...:通过。powershell -ExecutionPolicy Bypass -File scripts/verify.ps1 -Component server:全量测试与构建通过。python dev_scripts/harness.py check --strict:通过。- 本地 MySQL 8.4:迁移
1786701100000成功且幂等复跑通过;pdd_account、purchase_task、purchase_task_attempt均存在,采购任务为 0 条,三个 guard 唯一索引正确。 - 未验证部分:#33 不实现 HTTP 状态机、Admin 页面、Android 执行、真实地址修改、创建订单、人工支付或物流回填;没有执行任何 PDD 下单或支付动作。
遗留问题
- Gitea 迁移后的 Wiki REST API 返回 404;本次按已经验证的 Wiki Git 仓库完成 Wiki-first 更新和归档,核心镜像内容已逐页一致性比较。该环境问题不影响 #33 产品契约。
- #34 必须在创建服务事务中回写
_cg{task.id},并再次强制校验正式任务的 SYB 引用、规则能力和状态转换。
相关提交
978f42806a9d649236a1476c5a831d2b02dfc16afeat(#33): define purchase task data and API contract
用户验收
- 2026-08-20:用户明确回复“通过验收 #33”。