-- TSP智能助手数据库初始化脚本 -- 创建数据库(如果不存在) CREATE DATABASE IF NOT EXISTS tsp_assistant CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 使用数据库 USE tsp_assistant; -- 创建用户表 CREATE TABLE IF NOT EXISTS users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) UNIQUE NOT NULL, email VARCHAR(100) UNIQUE NOT NULL, password_hash VARCHAR(255) NOT NULL, role ENUM('admin', 'user', 'operator') DEFAULT 'user', is_active BOOLEAN DEFAULT TRUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); -- 创建工单表 CREATE TABLE IF NOT EXISTS work_orders ( id INT AUTO_INCREMENT PRIMARY KEY, order_id VARCHAR(50) UNIQUE NOT NULL, title VARCHAR(200) NOT NULL, description TEXT, category VARCHAR(50), priority ENUM('low', 'medium', 'high', 'urgent') DEFAULT 'medium', status ENUM('open', 'in_progress', 'resolved', 'closed') DEFAULT 'open', user_id INT, assigned_to INT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, resolved_at TIMESTAMP NULL, FOREIGN KEY (user_id) REFERENCES users(id), FOREIGN KEY (assigned_to) REFERENCES users(id) ); -- 创建预警表 CREATE TABLE IF NOT EXISTS alerts ( id INT AUTO_INCREMENT PRIMARY KEY, rule_name VARCHAR(100) NOT NULL, message TEXT NOT NULL, level ENUM('info', 'warning', 'error', 'critical') DEFAULT 'info', status ENUM('active', 'resolved', 'suppressed') DEFAULT 'active', source VARCHAR(100), metadata JSON, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, resolved_at TIMESTAMP NULL, INDEX idx_level (level), INDEX idx_status (status), INDEX idx_created_at (created_at) ); -- 创建对话表 CREATE TABLE IF NOT EXISTS conversations ( id INT AUTO_INCREMENT PRIMARY KEY, session_id VARCHAR(100) NOT NULL, user_id INT, work_order_id INT, user_message TEXT NOT NULL, assistant_response TEXT NOT NULL, confidence_score DECIMAL(3,2) DEFAULT 0.50, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id), FOREIGN KEY (work_order_id) REFERENCES work_orders(id), INDEX idx_session_id (session_id), INDEX idx_created_at (created_at) ); -- 创建知识库表 CREATE TABLE IF NOT EXISTS knowledge_entries ( id INT AUTO_INCREMENT PRIMARY KEY, question TEXT NOT NULL, answer TEXT NOT NULL, category VARCHAR(50), confidence_score DECIMAL(3,2) DEFAULT 0.50, usage_count INT DEFAULT 0, is_verified BOOLEAN DEFAULT FALSE, is_active BOOLEAN DEFAULT TRUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, INDEX idx_category (category), INDEX idx_is_active (is_active), INDEX idx_is_verified (is_verified) ); -- 创建工单建议表 CREATE TABLE IF NOT EXISTS work_order_suggestions ( id INT AUTO_INCREMENT PRIMARY KEY, work_order_id INT NOT NULL, ai_suggestion TEXT, human_resolution TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (work_order_id) REFERENCES work_orders(id) ON DELETE CASCADE ); -- 创建系统配置表 CREATE TABLE IF NOT EXISTS system_settings ( id INT AUTO_INCREMENT PRIMARY KEY, key_name VARCHAR(100) UNIQUE NOT NULL, value TEXT, description TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); -- 插入默认管理员用户 INSERT IGNORE INTO users (username, email, password_hash, role) VALUES ('admin', 'admin@tsp.com', '$2b$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMQJqhN8/LewdBPj4J/8K8K8K8', 'admin'); -- 插入默认系统配置 INSERT IGNORE INTO system_settings (key_name, value, description) VALUES ('system_name', 'TSP智能助手', '系统名称'), ('version', '2.0.0', '系统版本'), ('maintenance_mode', 'false', '维护模式'), ('max_concurrent_users', '100', '最大并发用户数'), ('session_timeout', '3600', '会话超时时间(秒)'); -- 创建索引优化查询性能 CREATE INDEX idx_work_orders_status ON work_orders(status); CREATE INDEX idx_work_orders_priority ON work_orders(priority); CREATE INDEX idx_work_orders_created_at ON work_orders(created_at); CREATE INDEX idx_alerts_level_status ON alerts(level, status); CREATE INDEX idx_conversations_user_id ON conversations(user_id); CREATE INDEX idx_knowledge_entries_category_active ON knowledge_entries(category, is_active);