-- 多设备管理数据库表创建脚本 -- 创建时间: 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);