-- SageAPI DDL (auto-generated) CREATE TABLE IF NOT EXISTS `accounting_records` ( `id` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '主键', `customer_id` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '客户ID', `llmid` VARCHAR(32) NULL DEFAULT '' COMMENT '模型ID', `model_name` VARCHAR(128) NULL DEFAULT '' COMMENT '模型名称', `pricing_id` VARCHAR(32) NULL DEFAULT '' COMMENT '定价ID', `input_tokens` BIGINT NULL COMMENT '输入token数', `output_tokens` BIGINT NULL COMMENT '输出token数', `total_tokens` BIGINT NULL COMMENT '总token数', `quantity` DECIMAL(15,4) NULL COMMENT '用量(图片数/分钟数等)', `amount` DECIMAL(15,6) NOT NULL DEFAULT 0.0 COMMENT '金额', `currency` VARCHAR(8) NOT NULL DEFAULT 'CNY' COMMENT '货币单位', `request_id` VARCHAR(64) NULL DEFAULT '' COMMENT '请求ID(幂等键)', `transno` VARCHAR(64) NULL DEFAULT '' COMMENT '事务号', `status` VARCHAR(16) NOT NULL DEFAULT 'pending' COMMENT '状态: pending/accounted/failed', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ALTER TABLE `accounting_records` ADD INDEX `idx_customer_id` (`customer_id`); ALTER TABLE `accounting_records` ADD INDEX `idx_llmid` (`llmid`); ALTER TABLE `accounting_records` ADD UNIQUE `idx_request_id` (`request_id`); ALTER TABLE `accounting_records` ADD INDEX `idx_status` (`status`); ALTER TABLE `accounting_records` ADD INDEX `idx_created_at` (`created_at`); CREATE TABLE IF NOT EXISTS `customer_balance` ( `id` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '主键,即 customer_id', `balance` DECIMAL(15,4) NOT NULL DEFAULT 0.0 COMMENT '当前余额', `currency` VARCHAR(8) NOT NULL DEFAULT 'CNY' COMMENT '货币单位', `credit_limit` DECIMAL(15,4) NULL COMMENT '信用额度', `last_recharge` DATETIME NULL COMMENT '最后充值时间', `last_consumption` DATETIME NULL COMMENT '最后消费时间', `status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态: active/suspended/arrears', `sync_version` VARCHAR(32) NULL DEFAULT '' COMMENT '同步版本号', `cached_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '缓存更新时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ALTER TABLE `customer_balance` ADD INDEX `idx_status` (`status`); ALTER TABLE `customer_balance` ADD INDEX `idx_balance` (`balance`); CREATE TABLE IF NOT EXISTS `llmage_cache` ( `id` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '主键', `llmid` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '关联模型ID', `model_name` VARCHAR(128) NULL DEFAULT '' COMMENT '模型名称', `upappid` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '上游应用ID', `apiname` VARCHAR(128) NOT NULL DEFAULT '' COMMENT 'API名称', `api_url` VARCHAR(512) NULL DEFAULT '' COMMENT 'API端点URL', `api_params` TEXT NULL COMMENT 'API参数配置JSON', `model_params` TEXT NULL COMMENT '模型参数配置JSON(max_tokens, temperature等)', `status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态: active/inactive', `sync_version` VARCHAR(32) NULL DEFAULT '' COMMENT '同步版本号', `cached_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '缓存写入时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ALTER TABLE `llmage_cache` ADD INDEX `idx_llmid` (`llmid`); ALTER TABLE `llmage_cache` ADD INDEX `idx_upappid` (`upappid`); ALTER TABLE `llmage_cache` ADD INDEX `idx_apiname` (`apiname`); CREATE TABLE IF NOT EXISTS `pricing_cache` ( `id` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '主键,对应 pricing_program id (ppid)', `llmid` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '关联模型ID', `model_name` VARCHAR(128) NULL DEFAULT '' COMMENT '模型名称', `pricing_type` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '计费类型: token/image/video/audio', `input_price` DECIMAL(10,6) NULL COMMENT '输入单价(每千token)', `output_price` DECIMAL(10,6) NULL COMMENT '输出单价(每千token)', `unit_price` DECIMAL(10,6) NULL COMMENT '统一单价(按次/按图/按分钟等)', `currency` VARCHAR(8) NOT NULL DEFAULT 'CNY' COMMENT '货币单位', `status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态: active/inactive/deprecated', `effective_from` DATETIME NULL COMMENT '生效时间', `effective_to` DATETIME NULL COMMENT '失效时间', `sync_version` VARCHAR(32) NULL DEFAULT '' COMMENT '同步版本号', `cached_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '缓存写入时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ALTER TABLE `pricing_cache` ADD INDEX `idx_llmid` (`llmid`); ALTER TABLE `pricing_cache` ADD INDEX `idx_pricing_type` (`pricing_type`); ALTER TABLE `pricing_cache` ADD INDEX `idx_status` (`status`); CREATE TABLE IF NOT EXISTS `sync_state` ( `id` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '主键', `entity_type` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '实体类型: users/pricing/llmage/uapi', `entity_id` VARCHAR(64) NULL DEFAULT '' COMMENT '实体标识(全量同步时为空)', `last_sync_time` DATETIME NULL COMMENT '最后同步时间', `sync_version` VARCHAR(32) NULL DEFAULT '' COMMENT 'Sage返回的版本标识', `sync_status` VARCHAR(16) NOT NULL DEFAULT 'success' COMMENT '同步状态: success/pending/failed', `error_msg` TEXT NULL COMMENT '失败原因', `retry_count` INT NOT NULL DEFAULT 0 COMMENT '重试次数', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ALTER TABLE `sync_state` ADD INDEX `idx_entity_type` (`entity_type`); ALTER TABLE `sync_state` ADD UNIQUE `idx_entity_type_id` (`entity_type`,`entity_id`); ALTER TABLE `sync_state` ADD INDEX `idx_sync_status` (`sync_status`); CREATE TABLE IF NOT EXISTS `uapi_cache` ( `id` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '主键', `upappid` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '上游应用ID', `apiname` VARCHAR(128) NOT NULL DEFAULT '' COMMENT 'API名称', `method` VARCHAR(16) NULL DEFAULT 'POST' COMMENT 'HTTP方法', `endpoint` VARCHAR(512) NULL DEFAULT '' COMMENT 'API端点', `auth_type` VARCHAR(32) NULL DEFAULT 'bearer' COMMENT '认证类型', `rate_limit` INT NULL COMMENT '速率限制(次/分钟)', `description` TEXT NULL COMMENT 'API描述', `status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态', `sync_version` VARCHAR(32) NULL DEFAULT '' COMMENT '同步版本号', `cached_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '缓存写入时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ALTER TABLE `uapi_cache` ADD UNIQUE `idx_upappid_apiname` (`upappid`,`apiname`); ALTER TABLE `uapi_cache` ADD INDEX `idx_status` (`status`); CREATE TABLE IF NOT EXISTS `users_cache` ( `id` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '主键,对应 users 表 id', `username` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '用户名', `orgid` VARCHAR(32) NULL DEFAULT '' COMMENT '组织ID', `orgname` VARCHAR(255) NULL DEFAULT '' COMMENT '组织名称', `email` VARCHAR(128) NULL DEFAULT '' COMMENT '邮箱', `phone` VARCHAR(32) NULL DEFAULT '' COMMENT '手机号', `status` VARCHAR(16) NOT NULL DEFAULT 'active' COMMENT '状态: active/inactive/suspended', `created_at` DATETIME NULL COMMENT '创建时间', `updated_at` DATETIME NULL COMMENT '更新时间', `sync_version` VARCHAR(32) NULL DEFAULT '' COMMENT '同步版本号', `cached_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '缓存写入时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ALTER TABLE `users_cache` ADD INDEX `idx_username` (`username`); ALTER TABLE `users_cache` ADD INDEX `idx_orgid` (`orgid`); ALTER TABLE `users_cache` ADD INDEX `idx_sync_version` (`sync_version`);