-- CNC机床数据采集分析系统数据库脚本 -- 创建时间: 2024-01-01 -- 数据库: cnc_business (业务库) -- 1. 设备管理表 -- 设备信息表 CREATE TABLE `devices` ( `id` int(11) NOT NULL AUTO_INCREMENT, `device_code` varchar(50) NOT NULL COMMENT '设备编号', `device_name` varchar(100) NOT NULL COMMENT '设备名称', `ip_address` varchar(15) NOT NULL COMMENT 'IP地址', `http_url` varchar(255) NOT NULL COMMENT '采集地址', `collection_interval` int(11) NOT NULL DEFAULT '60' COMMENT '采集间隔(秒)', `template_id` int(11) NOT NULL COMMENT '模板ID', `is_available` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否可用', `is_online` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否在线', `last_collection_time` datetime DEFAULT NULL COMMENT '最后采集时间', `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uk_device_code` (`device_code`), KEY `idx_ip_address` (`ip_address`), KEY `idx_template_id` (`template_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='设备信息表'; -- 设备状态表 CREATE TABLE `device_status` ( `id` int(11) NOT NULL AUTO_INCREMENT, `device_id` int(11) NOT NULL COMMENT '设备ID', `status` varchar(20) NOT NULL COMMENT '设备状态', `is_running` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否运行', `nc_program` varchar(100) DEFAULT NULL COMMENT 'NC程序名', `cumulative_count` int(11) NOT NULL DEFAULT '0' COMMENT '累计数量', `operating_mode` varchar(20) DEFAULT NULL COMMENT '操作模式', `record_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录时间', PRIMARY KEY (`id`), KEY `idx_device_id` (`device_id`), KEY `idx_record_time` (`record_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='设备状态表'; -- 2. 模板管理表 -- 品牌模板表 CREATE TABLE `cnc_templates` ( `id` int(11) NOT NULL AUTO_INCREMENT, `brand_name` varchar(50) NOT NULL COMMENT '品牌名称', `description` varchar(255) DEFAULT NULL COMMENT '描述', `is_enabled` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否启用', `field_mappings` json NOT NULL COMMENT '字段映射配置', `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uk_brand_name` (`brand_name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='CNC品牌模板表'; -- 字段映射表 CREATE TABLE `template_field_mappings` ( `id` int(11) NOT NULL AUTO_INCREMENT, `template_id` int(11) NOT NULL COMMENT '模板ID', `source_field_path` varchar(255) NOT NULL COMMENT '源字段路径', `standard_field_id` varchar(50) NOT NULL COMMENT '标准字段ID', `standard_field_desc` varchar(100) NOT NULL COMMENT '标准字段描述', `data_type` varchar(20) NOT NULL COMMENT '数据类型', `conversion_rule` json DEFAULT NULL COMMENT '转换规则', `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_template_id` (`template_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='模板字段映射表'; -- 3. 生产数据表 -- 生产记录表 CREATE TABLE `production_records` ( `id` int(11) NOT NULL AUTO_INCREMENT, `device_id` int(11) NOT NULL COMMENT '设备ID', `nc_program` varchar(100) NOT NULL COMMENT 'NC程序名', `production_date` date NOT NULL COMMENT '生产日期', `quantity` int(11) NOT NULL DEFAULT '0' COMMENT '产量', `quality_rate` decimal(5,2) DEFAULT '100.00' COMMENT '合格率', `start_time` datetime DEFAULT NULL COMMENT '开始时间', `end_time` datetime DEFAULT NULL COMMENT '结束时间', `operator_id` int(11) DEFAULT NULL COMMENT '操作员ID', `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_device_id` (`device_id`), KEY `idx_nc_program` (`nc_program`), KEY `idx_production_date` (`production_date`), KEY `idx_operator_id` (`operator_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='生产记录表'; -- 程序产量统计表 CREATE TABLE `program_production_summary` ( `id` int(11) NOT NULL AUTO_INCREMENT, `device_id` int(11) NOT NULL COMMENT '设备ID', `nc_program` varchar(100) NOT NULL COMMENT 'NC程序名', `production_date` date NOT NULL COMMENT '生产日期', `total_quantity` int(11) NOT NULL DEFAULT '0' COMMENT '总产量', `valid_quantity` int(11) NOT NULL DEFAULT '0' COMMENT '有效产量', `invalid_quantity` int(11) NOT NULL DEFAULT '0' COMMENT '无效数量', `quality_rate` decimal(5,2) DEFAULT '100.00' COMMENT '合格率', PRIMARY KEY (`id`), UNIQUE KEY `uk_device_program_date` (`device_id`,`nc_program`,`production_date`), KEY `idx_production_date` (`production_date`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='程序产量统计表'; -- 4. 用户管理表 -- 用户表 CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL COMMENT '用户名', `password_hash` varchar(255) NOT NULL COMMENT '密码哈希', `real_name` varchar(50) NOT NULL COMMENT '真实姓名', `email` varchar(100) DEFAULT NULL COMMENT '邮箱', `phone` varchar(20) DEFAULT NULL COMMENT '电话', `role_id` int(11) NOT NULL COMMENT '角色ID', `is_active` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否激活', `last_login_time` datetime DEFAULT NULL COMMENT '最后登录时间', `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uk_username` (`username`), KEY `idx_role_id` (`role_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表'; -- 角色表 CREATE TABLE `roles` ( `id` int(11) NOT NULL AUTO_INCREMENT, `role_name` varchar(50) NOT NULL COMMENT '角色名称', `description` varchar(255) DEFAULT NULL COMMENT '角色描述', `permissions` json NOT NULL COMMENT '权限列表', `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uk_role_name` (`role_name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色表'; -- 员工表 CREATE TABLE `employees` ( `id` int(11) NOT NULL AUTO_INCREMENT, `employee_code` varchar(50) NOT NULL COMMENT '员工编号', `name` varchar(50) NOT NULL COMMENT '员工姓名', `department` varchar(50) DEFAULT NULL COMMENT '部门', `position` varchar(50) DEFAULT NULL COMMENT '职位', `assigned_devices` json DEFAULT NULL COMMENT '分配的设备ID列表', `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uk_employee_code` (`employee_code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='员工表'; -- 设备分配表 CREATE TABLE `device_assignments` ( `id` int(11) NOT NULL AUTO_INCREMENT, `device_id` int(11) NOT NULL COMMENT '设备ID', `employee_id` int(11) NOT NULL COMMENT '员工ID', `assignment_date` date NOT NULL COMMENT '分配日期', `end_date` date DEFAULT NULL COMMENT '结束日期', `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_device_id` (`device_id`), KEY `idx_employee_id` (`employee_id`), KEY `idx_assignment_date` (`assignment_date`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='设备分配表'; -- 5. 系统管理表 -- 统计规则表 CREATE TABLE `statistic_rules` ( `id` int(11) NOT NULL AUTO_INCREMENT, `rule_name` varchar(100) NOT NULL COMMENT '规则名称', `description` varchar(255) DEFAULT NULL COMMENT '描述', `metric_formula` text NOT NULL COMMENT '指标计算公式', `group_by_dimensions` json NOT NULL COMMENT '分组维度', `is_enabled` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否启用', `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='统计规则表'; -- 告警表 CREATE TABLE `alarms` ( `id` int(11) NOT NULL AUTO_INCREMENT, `alarm_type` varchar(50) NOT NULL COMMENT '告警类型', `alarm_level` varchar(20) NOT NULL COMMENT '告警级别', `alarm_content` text NOT NULL COMMENT '告警内容', `device_id` int(11) DEFAULT NULL COMMENT '关联设备ID', `device_name` varchar(100) DEFAULT NULL COMMENT '设备名称', `is_resolved` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否已解决', `occurrence_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '发生时间', `resolution_time` datetime DEFAULT NULL COMMENT '解决时间', `resolution_note` text DEFAULT NULL COMMENT '解决备注', `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_alarm_type` (`alarm_type`), KEY `idx_alarm_level` (`alarm_level`), KEY `idx_device_id` (`device_id`), KEY `idx_occurrence_time` (`occurrence_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='告警表'; -- 系统配置表 CREATE TABLE `system_config` ( `id` int(11) NOT NULL AUTO_INCREMENT, `config_key` varchar(100) NOT NULL COMMENT '配置键', `config_value` text NOT NULL COMMENT '配置值', `description` varchar(255) DEFAULT NULL COMMENT '描述', `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `uk_config_key` (`config_key`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统配置表'; -- 6. 初始化数据 -- 插入默认角色 INSERT INTO `roles` (`role_name`, `description`, `permissions`) VALUES ('管理员', '系统管理员,拥有所有权限', '["*"]'), ('班组长', '班组长,管理本班组设备', '["device:view", "production:view", "alarm:view"]'), ('操作员', '操作员,查看个人设备', '["device:view_own", "production:view_own"]'), ('访客', '访客,只读权限', '["device:view_readonly", "production:view_readonly"]'); -- 插入默认用户 INSERT INTO `users` (`username`, `password_hash`, `real_name`, `role_id`, `is_active`) VALUES ('admin', '$2a$10$XUn0bQjQoO.nE0zWnYh0uOe2zQzQzQzQzQzQzQzQzQzQzQzQzQzQzQzQzQzQz', '系统管理员', 1, 1); -- 插入默认系统配置 INSERT INTO `system_config` (`config_key`, `config_value`, `description`) VALUES ('collection_interval', '60', '数据采集间隔(秒)'), ('max_retry_count', '3', '最大重试次数'), ('retry_interval', '30', '重试间隔(秒)'), ('max_concurrent_collections', '100', '最大并发采集数'), ('data_retention_days', '30', '数据保留天数'), ('alarm_email_enabled', 'true', '是否启用告警邮件'), ('alarm_email_smtp', 'smtp.example.com', '邮件服务器'), ('alarm_email_port', '587', '邮件端口'), ('alarm_email_username', 'alarm@example.com', '邮件用户名'), ('alarm_email_password', 'password', '邮件密码'), ('dashboard_refresh_interval', '30', '仪表板刷新间隔(秒)');