feat(database): 数据库定稿落地,cnc_business(17表)+cnc_log(3表),含预置数据(车间/品牌/配置/大屏卡片)

main
haoliang 1 week ago
parent 3d07293510
commit c4138c0e48

@ -0,0 +1,369 @@
-- =============================================
-- CNC机床数据采集系统 - 数据库初始化脚本
-- MariaDB 11.8 + UTF8MB4
-- 生成时间: 2026-04-28
-- =============================================
-- 创建数据库
CREATE DATABASE IF NOT EXISTS cnc_business DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE DATABASE IF NOT EXISTS cnc_log DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- =============================================
-- 业务库 cnc_business17张表
-- =============================================
USE cnc_business;
-- 2.1 车间表
CREATE TABLE IF NOT EXISTS cnc_workshop (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL UNIQUE,
sort_order INT NOT NULL DEFAULT 0,
is_enabled TINYINT(1) NOT NULL DEFAULT 1,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='车间表';
-- 2.2 品牌模板表
CREATE TABLE IF NOT EXISTS cnc_brand (
id INT AUTO_INCREMENT PRIMARY KEY,
brand_name VARCHAR(50) NOT NULL UNIQUE,
device_field VARCHAR(50) NOT NULL DEFAULT 'device',
tags_path VARCHAR(100) NOT NULL DEFAULT 'tags',
is_enabled TINYINT(1) NOT NULL DEFAULT 1,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='CNC品牌模板表';
-- 2.3 品牌字段映射表
CREATE TABLE IF NOT EXISTS cnc_brand_field_mapping (
id INT AUTO_INCREMENT PRIMARY KEY,
brand_id INT NOT NULL,
standard_field VARCHAR(50) NOT NULL,
field_name VARCHAR(50) NOT NULL,
match_by VARCHAR(20) NOT NULL DEFAULT 'id',
data_type VARCHAR(20) NOT NULL DEFAULT 'string',
is_required TINYINT(1) NOT NULL DEFAULT 0,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (brand_id) REFERENCES cnc_brand(id) ON DELETE CASCADE,
UNIQUE KEY uk_brand_standard (brand_id, standard_field)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='品牌字段映射表';
-- 2.4 采集地址表
CREATE TABLE IF NOT EXISTS cnc_collect_address (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
url VARCHAR(500) NOT NULL,
brand_id INT NOT NULL,
collect_interval INT NOT NULL DEFAULT 30,
is_enabled TINYINT(1) NOT NULL DEFAULT 1,
last_collect_time DATETIME NULL,
last_collect_status VARCHAR(20) NULL,
fail_count INT NOT NULL DEFAULT 0,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (brand_id) REFERENCES cnc_brand(id),
INDEX idx_brand (brand_id),
INDEX idx_enabled (is_enabled)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采集地址表';
-- 2.5 机床表
CREATE TABLE IF NOT EXISTS cnc_machine (
id INT AUTO_INCREMENT PRIMARY KEY,
device_code VARCHAR(100) NOT NULL,
name VARCHAR(100) NOT NULL,
workshop_id INT NOT NULL,
collect_address_id INT NOT NULL,
ip_address VARCHAR(50) NOT NULL,
brand_id INT NOT NULL,
is_enabled TINYINT(1) NOT NULL DEFAULT 1,
is_online TINYINT(1) NOT NULL DEFAULT 0,
last_ping_time DATETIME NULL,
last_collect_time DATETIME NULL,
last_device_status VARCHAR(20) NULL,
last_run_status VARCHAR(20) NULL,
last_program_name VARCHAR(200) NULL,
last_part_count DECIMAL(15,5) NULL,
last_operate_mode VARCHAR(20) NULL,
last_machining_status VARCHAR(20) NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (workshop_id) REFERENCES cnc_workshop(id),
FOREIGN KEY (collect_address_id) REFERENCES cnc_collect_address(id),
FOREIGN KEY (brand_id) REFERENCES cnc_brand(id),
UNIQUE KEY uk_device_code (device_code),
INDEX idx_workshop (workshop_id),
INDEX idx_collect_address (collect_address_id),
INDEX idx_enabled_online (is_enabled, is_online),
INDEX idx_enabled_address (is_enabled, collect_address_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='CNC机床表';
-- 2.6 工人表
CREATE TABLE IF NOT EXISTS cnc_worker (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
code VARCHAR(50) NOT NULL UNIQUE,
is_enabled TINYINT(1) NOT NULL DEFAULT 1,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工人表';
-- 2.7 工人-机床绑定表
CREATE TABLE IF NOT EXISTS cnc_worker_machine (
id INT AUTO_INCREMENT PRIMARY KEY,
worker_id INT NOT NULL,
machine_id INT NOT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (worker_id) REFERENCES cnc_worker(id) ON DELETE CASCADE,
FOREIGN KEY (machine_id) REFERENCES cnc_machine(id) ON DELETE CASCADE,
UNIQUE KEY uk_machine (machine_id),
INDEX idx_worker (worker_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工人-机床绑定表';
-- 2.8 采集结构化记录表(按月分区)
-- 注意分区键collect_time必须包含在PRIMARY KEY中分区表不支持FOREIGN KEY
CREATE TABLE IF NOT EXISTS cnc_collect_record (
id BIGINT AUTO_INCREMENT,
machine_id INT NOT NULL,
collect_time DATETIME NOT NULL,
device_time DATETIME NULL,
program_name VARCHAR(200) NULL,
part_count DECIMAL(15,5) NULL,
device_status VARCHAR(20) NULL,
run_status VARCHAR(20) NULL,
operate_mode VARCHAR(20) NULL,
spindle_speed_set DECIMAL(15,5) NULL,
feed_speed_set DECIMAL(15,5) NULL,
spindle_speed_actual DECIMAL(15,5) NULL,
feed_speed_actual DECIMAL(15,5) NULL,
spindle_load DECIMAL(15,5) NULL,
spindle_override DECIMAL(5,2) NULL,
power_on_time DECIMAL(15,2) NULL,
run_time DECIMAL(15,2) NULL,
cutting_time DECIMAL(15,2) NULL,
cycle_time DECIMAL(15,2) NULL,
machining_status VARCHAR(20) NULL,
extra_data JSON NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id, collect_time),
INDEX idx_machine_time (machine_id, collect_time),
INDEX idx_collect_time (collect_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='采集结构化记录表按月分区90天自动清理'
PARTITION BY RANGE (TO_DAYS(collect_time)) (
PARTITION p202604 VALUES LESS THAN (TO_DAYS('2026-05-01')),
PARTITION p202605 VALUES LESS THAN (TO_DAYS('2026-06-01')),
PARTITION p202606 VALUES LESS THAN (TO_DAYS('2026-07-01')),
PARTITION p_future VALUES LESS THAN MAXVALUE
);
-- 2.9 产量分段记录表
CREATE TABLE IF NOT EXISTS cnc_production_segment (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
machine_id INT NOT NULL,
program_name VARCHAR(200) NOT NULL,
production_date DATE NOT NULL,
start_time DATETIME NOT NULL,
end_time DATETIME NULL,
start_part_count DECIMAL(15,5) NOT NULL,
end_part_count DECIMAL(15,5) NULL,
quantity DECIMAL(15,5) NULL,
is_settled TINYINT(1) NOT NULL DEFAULT 0,
close_reason VARCHAR(30) NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (machine_id) REFERENCES cnc_machine(id),
INDEX idx_machine_date (machine_id, production_date),
INDEX idx_machine_date_program (machine_id, production_date, program_name),
INDEX idx_active (machine_id, is_settled, end_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='产量分段记录表';
-- 2.10 机床日状态表
CREATE TABLE IF NOT EXISTS cnc_machine_daily_status (
id INT AUTO_INCREMENT PRIMARY KEY,
machine_id INT NOT NULL,
production_date DATE NOT NULL,
data_status VARCHAR(20) NOT NULL DEFAULT 'normal',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (machine_id) REFERENCES cnc_machine(id),
UNIQUE KEY uk_machine_date (machine_id, production_date),
INDEX idx_date_status (production_date, data_status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='机床日状态表';
-- 2.11 日汇总表(按机床+程序)
CREATE TABLE IF NOT EXISTS cnc_daily_production (
id INT AUTO_INCREMENT PRIMARY KEY,
machine_id INT NOT NULL,
production_date DATE NOT NULL,
program_name VARCHAR(200) NOT NULL,
total_quantity DECIMAL(15,5) NOT NULL DEFAULT 0,
segment_count INT NOT NULL DEFAULT 1,
total_run_time DECIMAL(15,2) NULL,
total_cutting_time DECIMAL(15,2) NULL,
total_cycle_time DECIMAL(15,2) NULL,
is_adjusted TINYINT(1) NOT NULL DEFAULT 0,
adjusted_quantity DECIMAL(15,5) NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (machine_id) REFERENCES cnc_machine(id),
UNIQUE KEY uk_machine_date_program (machine_id, production_date, program_name),
INDEX idx_date (production_date),
INDEX idx_date_program (production_date, program_name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='日汇总表(按机床+程序)';
-- 2.12 工人日汇总表
CREATE TABLE IF NOT EXISTS cnc_worker_daily_summary (
id INT AUTO_INCREMENT PRIMARY KEY,
worker_id INT NOT NULL,
production_date DATE NOT NULL,
total_quantity DECIMAL(15,5) NOT NULL DEFAULT 0,
machine_count INT NOT NULL DEFAULT 0,
program_count INT NOT NULL DEFAULT 0,
is_adjusted TINYINT(1) NOT NULL DEFAULT 0,
adjusted_quantity DECIMAL(15,5) NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (worker_id) REFERENCES cnc_worker(id) ON DELETE CASCADE,
UNIQUE KEY uk_worker_date (worker_id, production_date),
INDEX idx_date (production_date),
INDEX idx_date_quantity (production_date, total_quantity)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工人日汇总表';
-- 2.13 产量修正审计表
CREATE TABLE IF NOT EXISTS cnc_production_adjustment (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
target_table VARCHAR(30) NOT NULL,
target_id INT NOT NULL,
field_name VARCHAR(50) NOT NULL,
old_value DECIMAL(15,5) NULL,
new_value DECIMAL(15,5) NOT NULL,
reason VARCHAR(500) NOT NULL,
operator_ip VARCHAR(50) NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
INDEX idx_target (target_table, target_id),
INDEX idx_created (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='产量修正审计表';
-- 2.14 告警表
CREATE TABLE IF NOT EXISTS cnc_alert (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
alert_type VARCHAR(30) NOT NULL,
machine_id INT NULL,
collect_address_id INT NULL,
title VARCHAR(200) NOT NULL,
detail TEXT NULL,
is_resolved TINYINT(1) NOT NULL DEFAULT 0,
resolved_at DATETIME NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (machine_id) REFERENCES cnc_machine(id) ON DELETE SET NULL,
FOREIGN KEY (collect_address_id) REFERENCES cnc_collect_address(id) ON DELETE SET NULL,
INDEX idx_type_resolved (alert_type, is_resolved),
INDEX idx_machine_time (machine_id, created_at),
INDEX idx_created (created_at),
INDEX idx_unresolved (is_resolved, created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='告警表';
-- 2.15 系统配置表
CREATE TABLE IF NOT EXISTS cnc_sys_config (
id INT AUTO_INCREMENT PRIMARY KEY,
config_key VARCHAR(100) NOT NULL UNIQUE,
config_value TEXT NOT NULL,
value_type VARCHAR(20) NOT NULL DEFAULT 'string',
description VARCHAR(200) NULL,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统配置表';
-- 2.16 大屏配置表
CREATE TABLE IF NOT EXISTS cnc_screen_config (
id INT AUTO_INCREMENT PRIMARY KEY,
card_key VARCHAR(50) NOT NULL UNIQUE,
card_type VARCHAR(30) NOT NULL,
title VARCHAR(100) NOT NULL,
metric VARCHAR(50) NOT NULL,
dimension VARCHAR(30) NULL,
sort_order INT NOT NULL DEFAULT 0,
is_enabled TINYINT(1) NOT NULL DEFAULT 1,
chart_config JSON NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='大屏卡片配置表';
-- 2.17 大屏筛选配置表
CREATE TABLE IF NOT EXISTS cnc_screen_filter (
id INT AUTO_INCREMENT PRIMARY KEY,
screen_key VARCHAR(50) NOT NULL,
filter_type VARCHAR(30) NOT NULL,
filter_value VARCHAR(100) NOT NULL,
is_default TINYINT(1) NOT NULL DEFAULT 0,
sort_order INT NOT NULL DEFAULT 0,
UNIQUE KEY uk_screen_filter (screen_key, filter_type, filter_value)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='大屏筛选配置表';
-- =============================================
-- 日志库 cnc_log3张表
-- =============================================
USE cnc_log;
-- 3.1 原始采集JSON表按月分区
-- 注意分区键request_time必须包含在PRIMARY KEY中
CREATE TABLE IF NOT EXISTS log_collect_raw (
id BIGINT AUTO_INCREMENT,
collect_address_id INT NOT NULL,
request_time DATETIME NOT NULL,
response_time DATETIME NOT NULL,
response_duration INT NULL,
is_success TINYINT(1) NOT NULL DEFAULT 1,
status_code INT NULL,
raw_json MEDIUMTEXT NOT NULL,
error_message VARCHAR(500) NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id, request_time),
INDEX idx_address_time (collect_address_id, request_time),
INDEX idx_request_time (request_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='原始采集JSON表按月分区90天自动清理'
PARTITION BY RANGE (TO_DAYS(request_time)) (
PARTITION p202604 VALUES LESS THAN (TO_DAYS('2026-05-01')),
PARTITION p202605 VALUES LESS THAN (TO_DAYS('2026-06-01')),
PARTITION p202606 VALUES LESS THAN (TO_DAYS('2026-07-01')),
PARTITION p_future VALUES LESS THAN MAXVALUE
);
-- 3.2 系统日志表(按月分区)
-- 注意分区键created_at必须包含在PRIMARY KEY中
CREATE TABLE IF NOT EXISTS log_system (
id BIGINT AUTO_INCREMENT,
log_level VARCHAR(10) NOT NULL,
source VARCHAR(50) NOT NULL,
message TEXT NOT NULL,
stack_trace TEXT NULL,
extra_data JSON NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id, created_at),
INDEX idx_level_time (log_level, created_at),
INDEX idx_source_time (source, created_at),
INDEX idx_created (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='系统日志表按月分区30天自动清理'
PARTITION BY RANGE (TO_DAYS(created_at)) (
PARTITION p202604 VALUES LESS THAN (TO_DAYS('2026-05-01')),
PARTITION p202605 VALUES LESS THAN (TO_DAYS('2026-06-01')),
PARTITION p202606 VALUES LESS THAN (TO_DAYS('2026-07-01')),
PARTITION p_future VALUES LESS THAN MAXVALUE
);
-- 3.3 采集服务心跳表
CREATE TABLE IF NOT EXISTS log_collector_heartbeat (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
service_id VARCHAR(50) NOT NULL DEFAULT 'CncCollector',
status VARCHAR(20) NOT NULL,
collect_address_id INT NULL,
last_collect_time DATETIME NULL,
success_count INT NOT NULL DEFAULT 0,
fail_count INT NOT NULL DEFAULT 0,
uptime_seconds BIGINT NULL,
detail JSON NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
INDEX idx_service_time (service_id, created_at),
INDEX idx_address_time (collect_address_id, created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采集服务心跳表7天自动清理';

@ -0,0 +1,71 @@
-- =============================================
-- CNC机床数据采集系统 - 预置数据
-- 生成时间: 2026-04-28
-- =============================================
USE cnc_business;
-- 车间预置
INSERT IGNORE INTO cnc_workshop (name, sort_order, is_enabled) VALUES
('A栋', 1, 1),
('B栋', 2, 1),
('C栋', 3, 1);
-- 品牌预置FANUC
INSERT IGNORE INTO cnc_brand (brand_name, device_field, tags_path, is_enabled) VALUES
('FANUC', 'device', 'tags', 1);
-- FANUC字段映射预置
SET @fanuc_brand_id = (SELECT id FROM cnc_brand WHERE brand_name = 'FANUC');
INSERT IGNORE INTO cnc_brand_field_mapping (brand_id, standard_field, field_name, match_by, data_type, is_required) VALUES
(@fanuc_brand_id, 'program_name', 'program_name', 'id', 'string', 1),
(@fanuc_brand_id, 'part_count', 'part_count', 'id', 'number', 1),
(@fanuc_brand_id, 'device_status', 'device_status', 'id', 'number', 0),
(@fanuc_brand_id, 'run_status', 'run_status', 'id', 'number', 0),
(@fanuc_brand_id, 'operate_mode', 'operate_mode', 'id', 'number', 0),
(@fanuc_brand_id, 'spindle_speed_set', 'spindle_speed_set', 'id', 'number', 0),
(@fanuc_brand_id, 'feed_speed_set', 'feed_speed_set', 'id', 'number', 0),
(@fanuc_brand_id, 'spindle_speed_actual', 'spindle_speed_actual', 'id', 'number', 0),
(@fanuc_brand_id, 'feed_speed_actual', 'feed_speed_actual', 'id', 'number', 0),
(@fanuc_brand_id, 'spindle_load', 'spindle_load', 'id', 'number', 0),
(@fanuc_brand_id, 'spindle_override', 'spindle_override', 'id', 'number', 0),
(@fanuc_brand_id, 'power_on_time', 'power_on_time', 'id', 'number', 0),
(@fanuc_brand_id, 'run_time', 'run_time', 'id', 'number', 0),
(@fanuc_brand_id, 'cutting_time', 'cutting_time', 'id', 'number', 0),
(@fanuc_brand_id, 'cycle_time', 'cycle_time', 'id', 'number', 0),
(@fanuc_brand_id, 'machining_status', 'machining_status', 'id', 'string', 0);
-- 系统配置预置
INSERT IGNORE INTO cnc_sys_config (config_key, config_value, value_type, description) VALUES
('ping_interval', '60', 'number', 'Ping检测间隔(秒)'),
('collect_retry_count', '3', 'number', '采集失败重试次数'),
('collect_retry_interval', '30', 'number', '采集重试间隔(秒)'),
('collect_fail_alert_threshold', '5', 'number', '连续失败N次触发告警'),
('heartbeat_interval', '10', 'number', '心跳写入间隔(秒)'),
('daily_summary_time', '01:00', 'string', '日终汇总执行时间'),
('config_poll_interval', '30', 'number', '采集服务轮询配置间隔(秒)'),
('log_retention_days', '90', 'number', '原始采集日志保留天数'),
('system_log_retention_days', '30', 'number', '系统日志保留天数'),
('alert_log_retention_days', '180', 'number', '异常日志保留天数'),
('heartbeat_retention_days', '7', 'number', '心跳记录保留天数'),
('bigscreen_refresh_interval', '10', 'number', '大屏刷新间隔(秒)'),
('api_token', '', 'string', '前端API Token'),
('collector_api_port', '5800', 'number', '采集服务管理API端口'),
('collector_api_key', '', 'string', '采集服务间通信API Key'),
('error_retry_base_interval', '60', 'number', '任务错误重试基础间隔(秒)'),
('admin_username', 'admin', 'string', '管理员用户名(不可修改)'),
('admin_password_hash', '$2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy', 'string', '管理员密码哈希默认admin123');
-- 大屏卡片配置预置
INSERT IGNORE INTO cnc_screen_config (card_key, card_type, title, metric, dimension, sort_order, is_enabled) VALUES
('total_online', 'stat_number', '在线机床数', 'online_count', NULL, 1, 1),
('total_production_today', 'stat_number', '今日总产量', 'part_count', NULL, 2, 1),
('workshop_production', 'bar_chart', '各车间产量', 'part_count', 'workshop', 3, 1),
('worker_rank', 'rank_list', '工人产量排行', 'part_count', 'worker', 4, 1),
('machine_rank', 'rank_list', '机床产量排行', 'part_count', 'machine', 5, 1),
('machine_status', 'status_grid', '机床状态总览', 'status', NULL, 6, 1),
('collector_status', 'stat_number', '采集服务状态', 'status', NULL, 7, 1),
('production_trend', 'line_chart', '产量趋势(7天)', 'part_count', NULL, 8, 1);

@ -1,7 +1,7 @@
# CNC机床数据采集系统 - 数据库设计文档 # CNC机床数据采集系统 - 数据库设计文档
> 最后更新2026-04-25 > 最后更新2026-04-28
> 状态:草案(界面设计确认后定稿,允许根据界面需求调整表结构 > 状态:定稿(界面设计已全部确认,数据库结构已落地
--- ---
@ -202,7 +202,7 @@ CREATE TABLE cnc_worker_machine (
``sql ``sql
CREATE TABLE cnc_collect_record ( CREATE TABLE cnc_collect_record (
id BIGINT AUTO_INCREMENT PRIMARY KEY, id BIGINT AUTO_INCREMENT,
machine_id INT NOT NULL, machine_id INT NOT NULL,
collect_time DATETIME NOT NULL, collect_time DATETIME NOT NULL,
device_time DATETIME NULL, device_time DATETIME NULL,
@ -224,7 +224,7 @@ CREATE TABLE cnc_collect_record (
machining_status VARCHAR(20) NULL, machining_status VARCHAR(20) NULL,
extra_data JSON NULL, extra_data JSON NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (machine_id) REFERENCES cnc_machine(id), PRIMARY KEY (id, collect_time),
INDEX idx_machine_time (machine_id, collect_time), INDEX idx_machine_time (machine_id, collect_time),
INDEX idx_collect_time (collect_time) INDEX idx_collect_time (collect_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
@ -455,6 +455,8 @@ CREATE TABLE cnc_sys_config (
| collector_api_port | 5800 | 采集服务管理API端口 | | collector_api_port | 5800 | 采集服务管理API端口 |
| collector_api_key | (自动生成) | 采集服务间通信API Key | | collector_api_key | (自动生成) | 采集服务间通信API Key |
| error_retry_base_interval | 60 | 任务错误重试基础间隔(秒) | | error_retry_base_interval | 60 | 任务错误重试基础间隔(秒) |
| admin_username | admin | 管理员用户名(不可修改) |
| admin_password_hash | (bcrypt hash of admin123) | 管理员密码哈希 |
--- ---
@ -515,7 +517,7 @@ CREATE TABLE cnc_screen_filter (
``sql ``sql
CREATE TABLE log_collect_raw ( CREATE TABLE log_collect_raw (
id BIGINT AUTO_INCREMENT PRIMARY KEY, id BIGINT AUTO_INCREMENT,
collect_address_id INT NOT NULL, collect_address_id INT NOT NULL,
request_time DATETIME NOT NULL, request_time DATETIME NOT NULL,
response_time DATETIME NOT NULL, response_time DATETIME NOT NULL,
@ -525,6 +527,7 @@ CREATE TABLE log_collect_raw (
raw_json MEDIUMTEXT NOT NULL, raw_json MEDIUMTEXT NOT NULL,
error_message VARCHAR(500) NULL, error_message VARCHAR(500) NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id, request_time),
INDEX idx_address_time (collect_address_id, request_time), INDEX idx_address_time (collect_address_id, request_time),
INDEX idx_request_time (request_time) INDEX idx_request_time (request_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
@ -545,13 +548,14 @@ CREATE TABLE log_collect_raw (
``sql ``sql
CREATE TABLE log_system ( CREATE TABLE log_system (
id BIGINT AUTO_INCREMENT PRIMARY KEY, id BIGINT AUTO_INCREMENT,
log_level VARCHAR(10) NOT NULL, log_level VARCHAR(10) NOT NULL,
source VARCHAR(50) NOT NULL, source VARCHAR(50) NOT NULL,
message TEXT NOT NULL, message TEXT NOT NULL,
stack_trace TEXT NULL, stack_trace TEXT NULL,
extra_data JSON NULL, extra_data JSON NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id, created_at),
INDEX idx_level_time (log_level, created_at), INDEX idx_level_time (log_level, created_at),
INDEX idx_source_time (source, created_at), INDEX idx_source_time (source, created_at),
INDEX idx_created (created_at) INDEX idx_created (created_at)

Loading…
Cancel
Save