llmage/scripts/migrate_llmusage_history.sql
yumoqing 07b4893252 feat(llmage): 添加llmusage历史记录备份和记账失败检索功能
- 新增 llmusage_history 表:定时备份已记账(use_date<today)的历史记录
- 新增 llmusage_accounting_failed 表:记录记账失败详情,支持检索
- 新增 backup_accounted_llmusage() 函数:备份+清理历史数据
- 新增 get_failed_accounting_records() 函数:按条件检索失败记录
- 更新 llm_accoung_failed():同时写入失败表记录
- 新增 failed_accounting.ui 页面和 failed_accounting_list.dspy API
- 新增 llmusage CRUD API (create/update/delete)
- 新增表索引优化查询性能
- 更新 setup_llmage_perms.sh 添加新端点权限
- 生成生产迁移SQL: scripts/migrate_llmusage_history.sql
2026-05-24 13:55:48 +08:00

87 lines
3.9 KiB
SQL

-- ============================================================
-- llmage 模块数据库迁移脚本
-- 新增: llmusage_history (使用历史表) + llmusage_accounting_failed (记账失败表)
-- 日期: 2026-05-24
-- 执行前请备份数据库!
-- ============================================================
-- 1. 创建 llmusage_history 表 (已记账记录的历史归档)
CREATE TABLE IF NOT EXISTS llmusage_history
(
`id` VARCHAR(32) NOT NULL COMMENT 'id',
`llmid` VARCHAR(32) COMMENT '模型id',
`use_date` date COMMENT '使用日期',
`use_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '使用时间',
`userid` VARCHAR(32) COMMENT '用户id',
`usages` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '使用信息',
`ioinfo` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '交互内容',
`transno` VARCHAR(32) COMMENT '交易号',
`responsed_seconds` double(18,3) COMMENT '响应时间',
`finish_seconds` double(18,3) COMMENT '结束时间',
`status` VARCHAR(32) COMMENT '状态',
`taskid` VARCHAR(256) COMMENT '任务号',
`amount` double(18,5) COMMENT '交易金额',
`cost` double(18,5) COMMENT '交易成本',
`userorgid` VARCHAR(32) COMMENT '用户机构id',
`ownerid` VARCHAR(32) COMMENT '模型机构id',
`accounting_status` VARCHAR(32) COMMENT '记账状态',
`backup_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '备份时间',
PRIMARY KEY(id)
)
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci
engine=innodb
COMMENT '模型使用历史记录';
CREATE INDEX idx_lh_use_date ON llmusage_history(use_date);
CREATE INDEX idx_lh_userorgid ON llmusage_history(userorgid);
CREATE INDEX idx_lh_llmid ON llmusage_history(llmid);
CREATE INDEX idx_lh_backup_time ON llmusage_history(backup_time);
-- 2. 创建 llmusage_accounting_failed 表 (记账失败记录)
CREATE TABLE IF NOT EXISTS llmusage_accounting_failed
(
`id` VARCHAR(32) NOT NULL COMMENT 'id',
`llmusageid` VARCHAR(32) COMMENT '使用记录id',
`llmid` VARCHAR(32) COMMENT '模型id',
`userid` VARCHAR(32) COMMENT '用户id',
`userorgid` VARCHAR(32) COMMENT '用户机构id',
`use_date` date COMMENT '使用日期',
`use_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '使用时间',
`amount` double(18,5) COMMENT '交易金额',
`cost` double(18,5) COMMENT '交易成本',
`failed_reason` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '失败原因',
`failed_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '失败时间',
`retry_count` int COMMENT '重试次数',
`handled` VARCHAR(1) DEFAULT '0' COMMENT '是否已处理',
`handled_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '处理时间',
`handled_note` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '处理备注',
PRIMARY KEY(id)
)
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci
engine=innodb
COMMENT '记账失败记录';
CREATE INDEX idx_laf_use_date ON llmusage_accounting_failed(use_date);
CREATE INDEX idx_laf_userorgid ON llmusage_accounting_failed(userorgid);
CREATE INDEX idx_laf_llmid ON llmusage_accounting_failed(llmid);
CREATE INDEX idx_laf_handled ON llmusage_accounting_failed(handled);
CREATE INDEX idx_laf_failed_time ON llmusage_accounting_failed(failed_time);
-- ============================================================
-- 验证步骤(执行后运行):
-- 1. 确认表创建成功:
-- SHOW TABLES LIKE 'llmusage_%';
-- 2. 确认索引创建成功:
-- SHOW INDEX FROM llmusage_history;
-- SHOW INDEX FROM llmusage_accounting_failed;
-- 3. 确认表结构正确:
-- DESCRIBE llmusage_history;
-- DESCRIBE llmusage_accounting_failed;
-- ============================================================
-- 回滚步骤(如需撤销):
-- DROP TABLE IF EXISTS llmusage_history;
-- DROP TABLE IF EXISTS llmusage_accounting_failed;
-- ============================================================