-- 多设备管理数据库表创建脚本
-- 创建时间: 2025-10-30
-- 功能: 支持多设备联合测试

-- 设备配置表
CREATE TABLE device_config (
    id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '设备ID',
    device_id VARCHAR(50) UNIQUE NOT NULL COMMENT '设备唯一标识',
    device_name VARCHAR(100) NOT NULL COMMENT '设备名称',
    device_code VARCHAR(50) NOT NULL UNIQUE COMMENT '设备编码',
    device_type VARCHAR(50) NOT NULL COMMENT '设备类型(上大车/大理片/玻璃存储)',
    project_id BIGINT NOT NULL COMMENT '所属项目ID',
    plc_ip VARCHAR(15) NOT NULL COMMENT 'PLC IP地址',
    plc_type VARCHAR(20) NOT NULL COMMENT 'PLC类型(S7-1200/S7-1500等)',
    module_name VARCHAR(50) NOT NULL COMMENT '模块名称',
    is_primary BOOLEAN DEFAULT FALSE COMMENT '是否主控设备',
    enabled BOOLEAN DEFAULT TRUE COMMENT '是否启用',
    config_json TEXT COMMENT '设备特定配置(JSON格式)',
    description VARCHAR(200) COMMENT '设备描述',
    extra_params JSON COMMENT '扩展参数JSON',
    is_deleted INT DEFAULT 0 COMMENT '是否删除：0-否，1-是',
    created_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    created_by VARCHAR(50) NOT NULL DEFAULT 'system' COMMENT '创建人',
    updated_by VARCHAR(50) NOT NULL DEFAULT 'system' COMMENT '更新人',
    
    INDEX idx_device_type (device_type),
    INDEX idx_module_name (module_name),
    INDEX idx_enabled (enabled),
    INDEX idx_is_deleted (is_deleted),
    INDEX idx_device_config_project_id (project_id),
    INDEX idx_device_config_device_code (device_code),
    INDEX idx_device_config_created_at (created_time),
    INDEX idx_device_config_updated_at (updated_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='设备配置表';

-- 设备组配置表
CREATE TABLE device_group_config (
    id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '设备组ID',
    group_code VARCHAR(50) UNIQUE NOT NULL COMMENT '设备组编码',
    group_name VARCHAR(100) NOT NULL COMMENT '设备组名称',
    group_type INT NOT NULL COMMENT '设备组类型：1-生产线，2-测试线，3-辅助设备组',
    project_id BIGINT NOT NULL COMMENT '所属项目ID',
    status INT NOT NULL DEFAULT 1 COMMENT '设备组状态：0-停用，1-启用，3-维护中',
    max_concurrent_devices INT DEFAULT 0 COMMENT '最大并发设备数',
    heartbeat_interval INT DEFAULT 30 COMMENT '心跳检测间隔(秒)',
    communication_timeout INT DEFAULT 5000 COMMENT '通信超时时间(毫秒)',
    description VARCHAR(200) COMMENT '设备组描述',
    extra_config JSON COMMENT '扩展配置JSON',
    is_deleted INT NOT NULL DEFAULT 0 COMMENT '是否删除：0-否，1-是',
    created_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    created_by VARCHAR(50) NOT NULL DEFAULT 'system' COMMENT '创建人',
    updated_by VARCHAR(50) NOT NULL DEFAULT 'system' COMMENT '更新人',

    INDEX idx_device_group_config_group_code (group_code),
    INDEX idx_device_group_config_group_type (group_type),
    INDEX idx_device_group_config_project_id (project_id),
    INDEX idx_device_group_config_created_at (created_time),
    INDEX idx_device_group_config_updated_at (updated_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='设备组配置表';

-- 设备组与设备关联关系表
CREATE TABLE device_group_relation (
    id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '关联ID',
    group_id BIGINT NOT NULL COMMENT '设备组ID',
    device_id BIGINT NOT NULL COMMENT '设备ID',
    priority INT DEFAULT 5 COMMENT '设备在组内的优先级：1-最高，10-最低',
    role INT DEFAULT 2 COMMENT '设备在组内的角色：1-主控，2-协作，3-监控',
    status INT DEFAULT 1 COMMENT '设备在该组中的状态：0-未配置，1-正常，2-故障，3-维护',
    connection_order INT DEFAULT 1 COMMENT '连接顺序：数值越小越先连接',
    relation_desc VARCHAR(200) COMMENT '关联描述',
    extra_params JSON COMMENT '扩展参数JSON',
    is_deleted INT NOT NULL DEFAULT 0 COMMENT '是否删除：0-否，1-是',
    created_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    created_by VARCHAR(50) NOT NULL DEFAULT 'system' COMMENT '创建人',
    updated_by VARCHAR(50) NOT NULL DEFAULT 'system' COMMENT '更新人',

    INDEX idx_device_group_relation_group_id (group_id),
    INDEX idx_device_group_relation_device_id (device_id),
    INDEX idx_device_group_relation_role (role),
    INDEX idx_device_group_relation_status (status),
    INDEX idx_device_group_relation_priority (priority),
    INDEX idx_device_group_relation_connection_order (connection_order),
    INDEX idx_device_group_relation_created_at (created_time),
    INDEX idx_device_group_relation_updated_at (updated_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='设备组与设备关联关系表';

-- 多设备任务表
CREATE TABLE multi_device_task (
    id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '任务ID',
    task_id VARCHAR(50) UNIQUE NOT NULL COMMENT '任务唯一标识',
    group_id VARCHAR(50) NOT NULL COMMENT '设备组ID',
    project_id VARCHAR(50) NOT NULL COMMENT '项目ID',
    status ENUM('PENDING', 'RUNNING', 'COMPLETED', 'FAILED', 'CANCELLED') DEFAULT 'PENDING' COMMENT '任务状态',
    current_step INT DEFAULT 0 COMMENT '当前执行步骤',
    total_steps INT DEFAULT 0 COMMENT '总步骤数',
    start_time DATETIME COMMENT '开始时间',
    end_time DATETIME COMMENT '结束时间',
    error_message TEXT COMMENT '错误信息',
    result_data JSON COMMENT '结果数据(JSON格式)',
    created_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    
    INDEX idx_task_project (project_id),
    INDEX idx_task_status (status),
    INDEX idx_task_time (created_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='多设备任务表';

-- 任务步骤详情表
CREATE TABLE task_step_detail (
    id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '步骤ID',
    task_id VARCHAR(50) NOT NULL COMMENT '任务ID',
    step_order INT NOT NULL COMMENT '步骤顺序',
    device_id VARCHAR(50) NOT NULL COMMENT '设备ID',
    step_name VARCHAR(100) NOT NULL COMMENT '步骤名称',
    status ENUM('PENDING', 'RUNNING', 'COMPLETED', 'FAILED', 'SKIPPED') DEFAULT 'PENDING' COMMENT '步骤状态',
    start_time DATETIME COMMENT '步骤开始时间',
    end_time DATETIME COMMENT '步骤结束时间',
    duration_ms BIGINT COMMENT '执行耗时(毫秒)',
    input_data JSON COMMENT '输入数据(JSON格式)',
    output_data JSON COMMENT '输出数据(JSON格式)',
    error_message TEXT COMMENT '错误信息',
    retry_count INT DEFAULT 0 COMMENT '重试次数',
    created_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    
    INDEX idx_step_task (task_id),
    INDEX idx_step_device (device_id),
    INDEX idx_step_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='任务步骤详情表';

-- 设备状态监控表
CREATE TABLE device_status (
    id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '记录ID',
    device_id VARCHAR(50) NOT NULL COMMENT '设备ID',
    task_id VARCHAR(50) COMMENT '关联任务ID(可选)',
    status ENUM('ONLINE', 'OFFLINE', 'BUSY', 'ERROR', 'MAINTENANCE') DEFAULT 'OFFLINE' COMMENT '设备状态',
    last_heartbeat DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '最后心跳时间',
    cpu_usage DECIMAL(5,2) COMMENT 'CPU使用率(%)',
    memory_usage DECIMAL(5,2) COMMENT '内存使用率(%)',
    plc_connection_status ENUM('CONNECTED', 'DISCONNECTED', 'ERROR') DEFAULT 'DISCONNECTED' COMMENT 'PLC连接状态',
    current_operation VARCHAR(100) COMMENT '当前操作',
    operation_progress DECIMAL(5,2) COMMENT '操作进度(0-100)',
    alert_message TEXT COMMENT '告警信息',
    created_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '记录时间',
    
    INDEX idx_device_status (device_id),
    INDEX idx_device_heartbeat (last_heartbeat),
    INDEX idx_plc_connection (plc_connection_status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='设备状态监控表';

-- 插入一些示例数据
INSERT INTO device_config (device_id, device_name, device_code, device_type, project_id, plc_ip, plc_type, module_name, is_primary, config_json, description) VALUES
('DEVICE_001', '上大车设备1', 'DEV_001', '上大车', 1, '192.168.1.100', 'S7-1200', '上大车模块', TRUE, '{"vehicleCapacity": 6000, "glassIntervalMs": 1000}', '上大车设备1'),
('DEVICE_002', '大理片设备1', 'DEV_002', '大理片', 1, '192.168.1.101', 'S7-1200', '大理片模块', FALSE, '{"glassMatchingEnabled": true, "batchProcessing": true}', '大理片设备1'),
('DEVICE_003', '玻璃存储设备1', 'DEV_003', '玻璃存储', 1, '192.168.1.102', 'S7-1500', '玻璃存储模块', FALSE, '{"storageCapacity": 100, "sortingEnabled": true}', '玻璃存储设备1');

INSERT INTO device_group_config (group_code, group_name, group_type, project_id, status, description) VALUES
('GROUP_001', '生产线A', 1, 1, 1, '生产线A设备组');

-- 插入设备组关联数据
INSERT INTO device_group_relation (group_id, device_id, role, status, priority, connection_order) VALUES
((SELECT id FROM device_group_config WHERE group_code = 'GROUP_001' AND is_deleted = 0), (SELECT id FROM device_config WHERE device_id = 'DEVICE_001' AND is_deleted = 0), 1, 1, 5, 1),
((SELECT id FROM device_group_config WHERE group_code = 'GROUP_001' AND is_deleted = 0), (SELECT id FROM device_config WHERE device_id = 'DEVICE_002' AND is_deleted = 0), 2, 1, 5, 2),
((SELECT id FROM device_group_config WHERE group_code = 'GROUP_001' AND is_deleted = 0), (SELECT id FROM device_config WHERE device_id = 'DEVICE_003' AND is_deleted = 0), 2, 1, 5, 3);