文档
开发文档

数据与状态

逻辑实体、唯一约束、资金事务与恢复状态设计

本页定义必须表达的数据语义,实体名为逻辑名称,不是已经创建的表。T-01/T-03 审计真实 new-api 用户、quota、Token、日志、订单及任务结构后,决定复用列、扩展表和迁移。迁移前先给出旧资金路径到新操作的映射,不能再建立独立钱包。

逻辑实体

实体必需信息与约束
用户/会话/角色稳定用户 ID、账户状态、会话归属与撤销、平台角色及产品作用域角色;企业专属账户属性
API Key用户归属、摘要/安全保存、模型权限、额度/有效期/状态;不得以 Key 余额代替用户余额
价格方案与版本客户方案有效期、模型/收费项、单位/精度/舍入、版本、发布状态;引用后不可改写
资金账户与既有 quota 的唯一映射,可用/冻结、并发版本或行锁;一用户一份权威余额
授权/资金操作operation_id、可信用户/产品/动作、业务任务、指纹、价格快照、预留额、确认用量、状态和恢复依据
资金流水原操作、动作与唯一键、可用/冻结变化、单位、前后值或可核对序列、原消费退款引用;不可删除覆盖
使用记录原操作与调用 ID、来源、模型/收费项、数量/单位、价格和费用;日志修复不重复记账
平台模型任务用户/产品/操作归属、网关任务 ID、提交状态、确认事实、结果引用和保存状态
支付订单/事件平台订单、用户、人民币金额、积分/优惠快照、商户/渠道交易、校验结果、入账流水与退款关联
恢复记录/审计操作、恢复动作、租约/重试时间、确认事实、错误分类;操作人、原因与关联证据

产品业务任务/Project/素材表不进入平台库。平台保存结果的归属与必要引用,长期素材由产品保存;链接期限与复制政策待定。

约束与幂等

  • 用户资金账户唯一;产品授权创建的幂等键以可信产品、用户、业务操作与动作限定,并保存输入指纹。
  • 原操作的同一账务动作只有一个有效流水结果,数据库唯一约束与事务共同保护;仅在内存查“已处理”无效。
  • 支付渠道/商户/交易身份唯一,平台订单只能有效入账一次;回调事件可保留多份核对线索,不能产生多份充值。
  • 平台任务与原付费操作稳定关联;网关任务映射以网关身份限定,不能假设不同网关 ID 全局唯一。
  • 金额序列化为确定的整数最小单位或定点字符串,约定单位、精度与舍入;不以 JavaScript 浮点数做金额权威计算。

资金事务

预留/结算/释放时锁定同一用户资金路径,校验余额、操作归属、状态及指纹,在同一事务写余额变化、冻结变化、操作终态和流水。明确锁顺序避免死锁。事务冲突可有界重试同一动作;外部供应调用和支付网络请求不能在此长事务内等待。

如果现有 Key 额度或日志无法同事务更新,需要持久恢复记录和独立核对,不能因为余额已成功就丢失额度补偿。用量日志可以修复,资金主流水不能靠再次扣费补齐。跨网关无分布式资金事务,靠已保存操作、确认事实及幂等恢复协调。

状态分开保存

以下为目标语义,实际枚举名在 OpenAPI/迁移定稿,不把所有状态塞进一个 status。

维度状态语义规则
执行已授权/未开始 → 执行中 → 成功、明确失败或未知确认开始先与到期释放做原子竞争;未知只能核对原执行
资金已预留 → 已结算或已释放;结算后可有原消费退款终态互斥,退款是关联的新资金动作
恢复待处理/持有租约/等待重试/待人工核对/完成租约失效触发接管,不能直接释放或认定执行失败
结果保存未取得/待保存/已保存/保存失败保存失败只恢复结果获取及保存,不重做生成

仅预留且确认未开始的操作到期才可释放。确认开始的响应丢失,执行方先查状态,不盲目调用业务。供应提交前落地执行意图;提交响应丢失进入未知并查询,供应不支持可靠查询/幂等时需要人工核对,不自动再次创建。

订单状态单独描述创建、待支付、确认到账、关闭、异常及退款事实。关闭后迟到成功的处理需要明确政策与证据,不能随意入账或忽略已发生支付。

迁移与核对

建议显式版本化 SQL/迁移程序,不仅依赖 GORM 自动建表。每项给出前置条件、回填方式、索引/锁影响、兼容窗口、恢复步骤和验证查询。精度转换、余额回填、退款与增减积分均需保存批次并可复验;不可把生产数据复制到 Git。

On this page