Files
qihuaiflow/migrations/012_production_column_sync.sql
qyyfw 78ff261b5a 初始提交: Qihu-AIFlow v2.0.1 完整项目
- 前端 React+TypeScript (源码+构建产物)
- 后端 Python FastAPI
- 数据库迁移 001-015
- Docker部署配置
- 微信ClawBot API频道绑定
- 项目文档 README.md
2026-07-02 14:40:46 +08:00

82 lines
5.6 KiB
SQL

-- Qihu-AIFlow 012: 幂等修复orders表遗漏列 + 确保生产环境列完整
USE aiflow;
-- ============================================================
-- 存储过程:幂等添加列
-- ============================================================
DROP PROCEDURE IF EXISTS add_col_if_missing_012;
DELIMITER $$
CREATE PROCEDURE add_col_if_missing_012()
BEGIN
-- orders 表:发票相关列(可能在生产环境缺失)
IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'aiflow' AND TABLE_NAME = 'orders' AND COLUMN_NAME = 'paid_at') THEN
ALTER TABLE orders ADD COLUMN paid_at DATETIME DEFAULT NULL COMMENT '支付时间';
END IF;
IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'aiflow' AND TABLE_NAME = 'orders' AND COLUMN_NAME = 'receipt_number') THEN
ALTER TABLE orders ADD COLUMN receipt_number VARCHAR(100) DEFAULT NULL COMMENT '发票凭证号码';
END IF;
IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'aiflow' AND TABLE_NAME = 'orders' AND COLUMN_NAME = 'receipt_type') THEN
ALTER TABLE orders ADD COLUMN receipt_type VARCHAR(20) DEFAULT NULL COMMENT '发票类型';
END IF;
IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'aiflow' AND TABLE_NAME = 'orders' AND COLUMN_NAME = 'receipt_title') THEN
ALTER TABLE orders ADD COLUMN receipt_title VARCHAR(200) DEFAULT NULL COMMENT '发票抬头';
END IF;
IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'aiflow' AND TABLE_NAME = 'orders' AND COLUMN_NAME = 'receipt_tax_number') THEN
ALTER TABLE orders ADD COLUMN receipt_tax_number VARCHAR(50) DEFAULT NULL COMMENT '发票税号';
END IF;
IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'aiflow' AND TABLE_NAME = 'orders' AND COLUMN_NAME = 'receipt_issued_at') THEN
ALTER TABLE orders ADD COLUMN receipt_issued_at DATETIME DEFAULT NULL COMMENT '发票开具时间';
END IF;
-- 确保 storage_overview 需要的关键表有正确结构
-- knowledge_documents 的 file_size 列
IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'aiflow' AND TABLE_NAME = 'knowledge_documents' AND COLUMN_NAME = 'file_size') THEN
ALTER TABLE knowledge_documents ADD COLUMN file_size BIGINT DEFAULT 0 COMMENT '文件大小(字节)';
END IF;
IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'aiflow' AND TABLE_NAME = 'knowledge_documents' AND COLUMN_NAME = 'file_path') THEN
ALTER TABLE knowledge_documents ADD COLUMN file_path VARCHAR(500) DEFAULT NULL COMMENT '文件存储路径';
END IF;
-- messages 表的 used_skills 列
IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'aiflow' AND TABLE_NAME = 'messages' AND COLUMN_NAME = 'used_skills') THEN
ALTER TABLE messages ADD COLUMN used_skills JSON DEFAULT NULL COMMENT '该轮对话调用的进化技能名列表';
END IF;
-- evolution_trajectories 补充列
IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'aiflow' AND TABLE_NAME = 'evolution_trajectories' AND COLUMN_NAME = 'error_msg') THEN
ALTER TABLE evolution_trajectories ADD COLUMN error_msg VARCHAR(500) DEFAULT NULL COMMENT '轨迹处理失败的错误信息';
END IF;
IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'aiflow' AND TABLE_NAME = 'evolution_trajectories' AND COLUMN_NAME = 'retry_count') THEN
ALTER TABLE evolution_trajectories ADD COLUMN retry_count INT DEFAULT 0 COMMENT '失败重试次数';
END IF;
IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'aiflow' AND TABLE_NAME = 'evolution_trajectories' AND COLUMN_NAME = 'tasks_extracted') THEN
ALTER TABLE evolution_trajectories ADD COLUMN tasks_extracted INT DEFAULT 0 COMMENT '拆分的AtomTask数量';
END IF;
-- user_evolution_config 补充列
IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'aiflow' AND TABLE_NAME = 'user_evolution_config' AND COLUMN_NAME = 'watcher_error') THEN
ALTER TABLE user_evolution_config ADD COLUMN watcher_error VARCHAR(500) DEFAULT NULL COMMENT 'watcher异常信息';
END IF;
IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'aiflow' AND TABLE_NAME = 'user_evolution_config' AND COLUMN_NAME = 'pipeline_status') THEN
ALTER TABLE user_evolution_config ADD COLUMN pipeline_status VARCHAR(20) DEFAULT 'idle' COMMENT '流水线状态';
END IF;
IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'aiflow' AND TABLE_NAME = 'user_evolution_config' AND COLUMN_NAME = 'pipeline_processed') THEN
ALTER TABLE user_evolution_config ADD COLUMN pipeline_processed INT DEFAULT 0 COMMENT '已处理轨迹数';
END IF;
-- models 表的 is_default 列
IF NOT EXISTS (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'aiflow' AND TABLE_NAME = 'models' AND COLUMN_NAME = 'is_default') THEN
ALTER TABLE models ADD COLUMN is_default BOOLEAN DEFAULT FALSE COMMENT '全局默认模型';
END IF;
END$$
DELIMITER ;
CALL add_col_if_missing_012();
DROP PROCEDURE IF EXISTS add_col_if_missing_012;
-- ============================================================
-- 补初始化默认模型(如果无任何默认模型)
-- ============================================================
UPDATE models SET is_default = TRUE WHERE name = 'gpt-4o' AND is_default = FALSE
AND NOT EXISTS (SELECT 1 FROM (SELECT 1 FROM models WHERE is_default = TRUE) AS t);