118 lines
7.1 KiB
MySQL
118 lines
7.1 KiB
MySQL
|
|
-- =================================================================
|
|||
|
|
-- V2: AI任务与积分消费系统 数据库结构定义
|
|||
|
|
-- 时间: 2025-10-19
|
|||
|
|
-- 描述: 为集成第三方AI模型和积分商业化,新增相关表结构。
|
|||
|
|
-- 此脚本为增量更新,不修改现有表,保证向前兼容。
|
|||
|
|
-- =================================================================
|
|||
|
|
|
|||
|
|
-- 1. AI生成任务表 (核心)
|
|||
|
|
-- 作用: 持久化用户的每一次AI生成请求,追踪其完整的生命周期。
|
|||
|
|
-- =================================================================
|
|||
|
|
CREATE TABLE IF NOT EXISTS `ai_task` (
|
|||
|
|
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
|||
|
|
`task_no` varchar(64) UNIQUE NOT NULL COMMENT '任务编号 (系统生成的唯一ID)',
|
|||
|
|
`user_id` bigint NOT NULL COMMENT '关联的用户ID',
|
|||
|
|
`model_name` varchar(64) NOT NULL COMMENT '请求的模型名称 (如: sora_image)',
|
|||
|
|
`task_type` varchar(32) NOT NULL COMMENT '任务类型 (image/video)',
|
|||
|
|
`prompt` text NOT NULL COMMENT '用户提交的提示词',
|
|||
|
|
`status` varchar(32) NOT NULL DEFAULT 'created' COMMENT '任务状态 (created, queued, processing, completed, failed, cancelled)',
|
|||
|
|
`progress` int DEFAULT 0 COMMENT '生成进度百分比 (0-100)',
|
|||
|
|
`progress_message` varchar(255) DEFAULT NULL COMMENT '当前进度文本描述',
|
|||
|
|
`points_frozen` int NOT NULL COMMENT '本次任务冻结的积分',
|
|||
|
|
`points_consumed` int DEFAULT 0 COMMENT '任务成功后实际消耗的积分',
|
|||
|
|
`result_url` varchar(512) DEFAULT NULL COMMENT '生成结果的URL',
|
|||
|
|
`error_message` text DEFAULT NULL COMMENT '任务失败时的错误信息',
|
|||
|
|
`queue_time` datetime DEFAULT NULL COMMENT '进入队列的时间',
|
|||
|
|
`start_time` datetime DEFAULT NULL COMMENT '开始处理的时间',
|
|||
|
|
`complete_time` datetime DEFAULT NULL COMMENT '任务完成或失败的时间',
|
|||
|
|
`expire_time` datetime DEFAULT NULL COMMENT '结果URL的过期时间 (根据第三方API策略设定)',
|
|||
|
|
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '任务创建时间',
|
|||
|
|
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
|
|||
|
|
`is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标识',
|
|||
|
|
PRIMARY KEY (`id`),
|
|||
|
|
UNIQUE KEY `uk_task_no` (`task_no`),
|
|||
|
|
KEY `idx_user_status` (`user_id`, `status`),
|
|||
|
|
KEY `idx_status_time` (`status`, `create_time`),
|
|||
|
|
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON DELETE CASCADE
|
|||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI生成任务表';
|
|||
|
|
|
|||
|
|
-- =================================================================
|
|||
|
|
-- 2. 积分消费配置表
|
|||
|
|
-- 作用: 管理员可在此配置不同AI模型的积分价格,实现动态调价。
|
|||
|
|
-- =================================================================
|
|||
|
|
CREATE TABLE IF NOT EXISTS `points_config` (
|
|||
|
|
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
|||
|
|
`model_name` varchar(64) UNIQUE NOT NULL COMMENT '模型名称 (如: sora_image)',
|
|||
|
|
`points_cost` int NOT NULL COMMENT '调用一次消耗的积分',
|
|||
|
|
`description` varchar(255) DEFAULT NULL COMMENT '模型描述',
|
|||
|
|
`is_enabled` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否启用 (0:禁用, 1:启用)',
|
|||
|
|
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|||
|
|
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
|
|||
|
|
PRIMARY KEY (`id`)
|
|||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='积分消费配置表';
|
|||
|
|
|
|||
|
|
-- =================================================================
|
|||
|
|
-- 3. 积分消费记录表
|
|||
|
|
-- 作用: 提供完整的积分变动审计日志,便于追踪和对账。
|
|||
|
|
-- =================================================================
|
|||
|
|
CREATE TABLE IF NOT EXISTS `points_consumption_log` (
|
|||
|
|
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
|||
|
|
`user_id` bigint NOT NULL COMMENT '关联的用户ID',
|
|||
|
|
`task_no` varchar(64) DEFAULT NULL COMMENT '关联的AI任务编号',
|
|||
|
|
`change_type` varchar(32) NOT NULL COMMENT '变动类型 (consume:消费, refund:退款, admin_adjust:管理员调整)',
|
|||
|
|
`change_amount` int NOT NULL COMMENT '变动积分数量 (正数表示增加,负数表示减少)',
|
|||
|
|
`balance_before` int NOT NULL COMMENT '变动前积分余额',
|
|||
|
|
`balance_after` int NOT NULL COMMENT '变动后积分余额',
|
|||
|
|
`description` varchar(255) DEFAULT NULL COMMENT '变动描述',
|
|||
|
|
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
|
|||
|
|
PRIMARY KEY (`id`),
|
|||
|
|
KEY `idx_user_id_type` (`user_id`, `change_type`),
|
|||
|
|
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON DELETE CASCADE
|
|||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='积分消费记录表';
|
|||
|
|
|
|||
|
|
-- =================================================================
|
|||
|
|
-- 4. 系统配置表
|
|||
|
|
-- 作用: 存储可由管理员在后台动态调整的系统级参数。
|
|||
|
|
-- =================================================================
|
|||
|
|
CREATE TABLE IF NOT EXISTS `system_config` (
|
|||
|
|
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
|||
|
|
`config_key` varchar(64) UNIQUE NOT NULL COMMENT '配置键 (如: ai.queue.max_concurrent)',
|
|||
|
|
`config_value` varchar(512) NOT NULL COMMENT '配置值',
|
|||
|
|
`description` varchar(255) DEFAULT NULL COMMENT '配置说明',
|
|||
|
|
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|||
|
|
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
|
|||
|
|
PRIMARY KEY (`id`)
|
|||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统配置表';
|
|||
|
|
|
|||
|
|
-- =================================================================
|
|||
|
|
-- 初始化默认配置数据
|
|||
|
|
-- 作用: 插入一些基础配置,保证系统首次启动时功能正常。
|
|||
|
|
-- =================================================================
|
|||
|
|
|
|||
|
|
-- 初始化系统配置
|
|||
|
|
INSERT INTO `system_config` (`config_key`, `config_value`, `description`) VALUES
|
|||
|
|
('ai.queue.max_concurrent', '50', '每个AI模型的最大并发处理数'),
|
|||
|
|
('ai.queue.max_user_concurrent', '3', '单个用户的最大并发任务数'),
|
|||
|
|
('ai.task.timeout_minutes', '10', '任务处理超时时间(分钟)'),
|
|||
|
|
('ai.task.max_retry', '2', '任务失败后的最大自动重试次数')
|
|||
|
|
ON DUPLICATE KEY UPDATE `config_value` = VALUES(`config_value`);
|
|||
|
|
|
|||
|
|
-- 初始化图片模型定价
|
|||
|
|
INSERT INTO `points_config` (`model_name`, `points_cost`, `description`, `is_enabled`) VALUES
|
|||
|
|
('sora_image', 11, 'Sora高质量图片生成', 1),
|
|||
|
|
('gpt-4o-image', 11, 'GPT-4o图片生成', 1)
|
|||
|
|
ON DUPLICATE KEY UPDATE `points_cost` = VALUES(`points_cost`);
|
|||
|
|
|
|||
|
|
-- 初始化视频模型定价
|
|||
|
|
INSERT INTO `points_config` (`model_name`, `points_cost`, `description`, `is_enabled`) VALUES
|
|||
|
|
('sora_video2', 160, 'Sora视频生成 (竖屏10秒)', 1),
|
|||
|
|
('sora_video2-landscape', 160, 'Sora视频生成 (横屏10秒)', 1),
|
|||
|
|
('sora_video2-15s', 260, 'Sora视频生成 (竖屏15秒)', 1),
|
|||
|
|
('sora_video2-landscape-15s', 260, 'Sora视频生成 (横屏15秒)', 1),
|
|||
|
|
('sora-2-pro-all', 420, 'Sora Pro高清视频', 1)
|
|||
|
|
ON DUPLICATE KEY UPDATE `points_cost` = VALUES(`points_cost`);
|
|||
|
|
|
|||
|
|
-- =================================================================
|
|||
|
|
-- V2脚本结束
|
|||
|
|
-- =================================================================
|