Files
cmautobuy/docs/task/98-真实采购任务安全模式.md
T

4.4 KiB
Raw Blame History

98 Admin:增加真实采购任务模式、能力隔离与创建审计

背景与目标

原有采购任务无法区分演练和真实下单,也不能阻止只支持演练的 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_run Client 只能领取演练任务,live Client 可以领取两种模式。
  • 任务列表、详情和 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=1
    • GOTOOLCHAIN=go1.23.0 go test ./service -run 'Test(Claim_无主任务能被领到并标记领取者|SubmitResult_同键同内容返回同一结果)' -count=1
    • GOTOOLCHAIN=go1.23.0 go test ./repository -run 'TestMySQLMigrate_(V4升级V5且断点重跑|V5形状错误不记版本)' -count=1
    • GOTOOLCHAIN=go1.23.0 go test ./handler/api ./handler/web -count=1
    • GOTOOLCHAIN=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 测试因远程逐用例建库耗时过长被主动停止,没有出现失败输出; 本工单直接相关用例已单独全部通过。

相关提交

  • 3aaa40cfe043d9cfb9841dd4c899d2a4d8b2d141 feat: 增加真实采购任务安全模式 (#98)