-- 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);