4.4 KiB
4.4 KiB
98 Admin:增加真实采购任务模式、能力隔离与创建审计
- 类型:需求
- 父级大工单:#96
- 所属 MVP / 版本:#97
- 状态:已完成
- 日期:2026-08-10
- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/98
背景与目标
原有采购任务无法区分演练和真实下单,也不能阻止只支持演练的 Client 领取真实任务。 本任务增加不可变执行模式、真实任务创建审计和 Client 能力隔离,同时保持真实下单默认关闭且不增加付款能力。
最终方案
- MySQL 追加 v5 迁移,为
tasks增加execution_mode、live_confirmed_by和live_confirmed_at,历史数据默认dry_run;数据库 CHECK 同时约束模式和 live 审计字段。 - 管理员和其他正常状态用户均可创建
dry_run或live采购任务。live必须勾选风险确认、 输入“创建未付款订单”,并选择当前账号可见且声明purchase_mode=live的 Client。 - 任务领取按 Client 上报能力过滤:
dry_runClient 只能领取演练任务,liveClient 可以领取两种模式。 - 任务列表、详情和 Client 领取响应显示
execution_mode;Client 契约同步更新。 - 顺运宝创建弹窗默认选择采购演练;切换真实模式后显示明确警告和双重确认,并禁用仅演练客户端。
- 与最初建单方案的差异:用户在实施中确认取消“仅管理员创建 live”的限制,改为所有正常状态用户均可创建; 工单正文和实施均已同步调整。
改了哪些
admin/repository/mysql_db.go:追加可重放的 MySQL v5 迁移、约束、索引和 schema 自检。admin/model/model.go、admin/repository/task.go:增加任务执行模式与 live 创建审计字段,读写和领取查询同步支持。admin/repository/client.go:安全解析 Client 采购能力,旧值和非法值回退为dry_run。admin/service/purchase_workflow.go:校验账号状态、live 双重确认、客户端可见范围与 live 能力并记录审计。admin/handler/、admin/templates/、admin/static/:解析创建参数,显示任务模式并实现安全确认交互。docs/client/04-admin-api-contract.md及 Admin 基线文档:同步领取能力矩阵、响应字段、数据和界面规则。- 新增及扩充测试:覆盖 v5 迁移、错误表形状、创建门禁、能力领取隔离、模式保持和 API 响应。
验收结果
| 验收标准 | 结果 |
|---|---|
| MySQL 从 v4 升级、DDL 完成但版本未记录时重放,并通过表形状自检 | 通过 |
| 错误 v5 列形状不记录迁移版本 | 通过 |
旧任务和未传模式请求默认 dry_run |
通过 |
| 管理员和其他正常状态用户均可经阻断确认创建 live,禁用账号不可创建 | 通过 |
| live 必须指定 live Client,dry_run Client 无法领取 | 通过 |
| 取消和重派不改变任务模式 | 通过 |
| 页面、详情和 Client API 明确区分执行模式 | 通过 |
| 取消或重派后仍接受原 Client 结果 | 通过 |
| 不增加付款、凭据记录或风控绕过能力 | 通过 |
测试
- 执行的命令:
GOTOOLCHAIN=go1.23.0 go test ./service -run '<#98 创建、领取、模式保持及取消/重派回归>' -count=1GOTOOLCHAIN=go1.23.0 go test ./service -run 'Test(Claim_无主任务能被领到并标记领取者|SubmitResult_同键同内容返回同一结果)' -count=1GOTOOLCHAIN=go1.23.0 go test ./repository -run 'TestMySQLMigrate_(V4升级V5且断点重跑|V5形状错误不记版本)' -count=1GOTOOLCHAIN=go1.23.0 go test ./handler/api ./handler/web -count=1GOTOOLCHAIN=go1.23.0 go vet ./...GOTOOLCHAIN=go1.23.0 go build ./...gofmt -l .、git diff --check
- 生产核验:通过 TLS 只读查询确认
autobuy已记录 v5,三列、两个强制 CHECK、领取索引和存量任务审计均正确。 - 结果:精确服务测试、真实 MySQL 8
_test迁移测试、生产 v5 核验、handler 测试、vet、build、格式和空白检查全部通过。 - 没验证到的部分:未让 Client 在安卓真机创建真实未付款订单;该执行能力属于后续 Client 工单。 完整受影响包的真实 MySQL 测试因远程逐用例建库耗时过长被主动停止,没有出现失败输出; 本工单直接相关用例已单独全部通过。
相关提交
3aaa40cfe043d9cfb9841dd4c899d2a4d8b2d141feat: 增加真实采购任务安全模式 (#98)