-- ============================================================
|
-- 芯导-LIMS 第三批需求 DDL
|
-- ⑤ 数据采集与处理:清洗规则 + 验证记录 + 接口自动采集配置
|
-- ⑥ 实时监控与预警:告警记录 + 监控项判定字段
|
-- 库:lims-ruoyi
|
-- ============================================================
|
|
-- ============================================================
|
-- ⑤ 数据清洗规则
|
-- ============================================================
|
DROP TABLE IF EXISTS `lims_clean_rule`;
|
CREATE TABLE `lims_clean_rule` (
|
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
`interface_id` BIGINT DEFAULT NULL COMMENT '接口ID(NULL=全局规则)',
|
`interface_code` VARCHAR(64) DEFAULT NULL COMMENT '接口编码(冗余)',
|
`rule_name` VARCHAR(255) DEFAULT NULL COMMENT '规则名称',
|
`rule_type` VARCHAR(32) DEFAULT NULL COMMENT '类型(empty-空值处理,range-范围校验,outlier-异常值剔除,duplicate-重复剔除,unit-单位换算)',
|
`target_field` VARCHAR(64) DEFAULT 'collectionValue' COMMENT '作用字段(collectionValue/dataType/unit)',
|
`condition_expr` VARCHAR(500) DEFAULT NULL COMMENT '条件表达式(如 <0 或 >1000,或 3sigma)',
|
`action_type` VARCHAR(32) DEFAULT NULL COMMENT '动作(replace-替换,clamp-截断到边界,discard-丢弃整条,flag-仅标记)',
|
`action_value` VARCHAR(255) DEFAULT NULL COMMENT '动作参数(替换值/边界值)',
|
`priority` INT DEFAULT 100 COMMENT '优先级(数字小的先执行)',
|
`enabled` CHAR(1) DEFAULT '1' COMMENT '是否启用(1-启用,0-停用)',
|
`remark` VARCHAR(500) DEFAULT NULL COMMENT '备注',
|
`del_flag` CHAR(1) DEFAULT '0' COMMENT '删除标志(0-正常,2-删除)',
|
`tenant_id` BIGINT DEFAULT NULL COMMENT '租户ID',
|
`create_time` DATETIME DEFAULT NULL COMMENT '创建时间',
|
`create_user` INT DEFAULT NULL COMMENT '创建用户',
|
`update_time` DATETIME DEFAULT NULL COMMENT '修改时间',
|
`update_user` INT DEFAULT NULL COMMENT '修改用户',
|
PRIMARY KEY (`id`),
|
KEY `idx_interface_id` (`interface_id`),
|
KEY `idx_enabled` (`enabled`),
|
KEY `idx_tenant` (`tenant_id`)
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='LIMS-数据清洗规则';
|
|
-- ============================================================
|
-- ⑤ 采集数据验证记录
|
-- ============================================================
|
DROP TABLE IF EXISTS `lims_collection_verify`;
|
CREATE TABLE `lims_collection_verify` (
|
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
`collection_id` BIGINT DEFAULT NULL COMMENT '采集记录ID(lims_data_collection.id)',
|
`collection_code` VARCHAR(64) DEFAULT NULL COMMENT '采集编号(冗余)',
|
`rule_id` BIGINT DEFAULT NULL COMMENT '规则ID',
|
`rule_name` VARCHAR(255) DEFAULT NULL COMMENT '规则名称(冗余)',
|
`rule_type` VARCHAR(32) DEFAULT NULL COMMENT '规则类型',
|
`passed` CHAR(1) DEFAULT '1' COMMENT '是否通过(1-通过,0-不通过)',
|
`expected` VARCHAR(255) DEFAULT NULL COMMENT '期望/规则描述',
|
`actual` VARCHAR(255) DEFAULT NULL COMMENT '实际值',
|
`message` VARCHAR(1000) DEFAULT NULL COMMENT '说明',
|
`verify_time` DATETIME DEFAULT NULL COMMENT '验证时间',
|
`del_flag` CHAR(1) DEFAULT '0' COMMENT '删除标志(0-正常,2-删除)',
|
`tenant_id` BIGINT DEFAULT NULL COMMENT '租户ID',
|
`create_time` DATETIME DEFAULT NULL COMMENT '创建时间',
|
`create_user` INT DEFAULT NULL COMMENT '创建用户',
|
`update_time` DATETIME DEFAULT NULL COMMENT '修改时间',
|
`update_user` INT DEFAULT NULL COMMENT '修改用户',
|
PRIMARY KEY (`id`),
|
KEY `idx_collection_id` (`collection_id`),
|
KEY `idx_tenant` (`tenant_id`)
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='LIMS-采集数据验证记录';
|
|
-- ============================================================
|
-- ⑥ 告警记录(预警闭环)
|
-- ============================================================
|
DROP TABLE IF EXISTS `lims_alert_record`;
|
CREATE TABLE `lims_alert_record` (
|
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
`monitor_id` BIGINT DEFAULT NULL COMMENT '监控项ID(lims_realtime_monitor.id)',
|
`monitor_code` VARCHAR(64) DEFAULT NULL COMMENT '监控编号(冗余)',
|
`monitor_target` VARCHAR(255) DEFAULT NULL COMMENT '监控对象(冗余)',
|
`monitor_type` VARCHAR(32) DEFAULT NULL COMMENT '监控类型(冗余)',
|
`alert_level` VARCHAR(32) DEFAULT NULL COMMENT '告警级别(low/medium/high)',
|
`alert_value` DECIMAL(18,4) DEFAULT NULL COMMENT '触发值',
|
`unit` VARCHAR(32) DEFAULT NULL COMMENT '单位',
|
`upper_limit` DECIMAL(18,4) DEFAULT NULL COMMENT '当时上限',
|
`lower_limit` DECIMAL(18,4) DEFAULT NULL COMMENT '当时下限',
|
`alert_message` VARCHAR(1000) DEFAULT NULL COMMENT '告警描述',
|
`source` VARCHAR(32) DEFAULT 'auto' COMMENT '来源(auto-定时扫描,manual-手动检查,collect-采集同步)',
|
`status` VARCHAR(32) DEFAULT 'pending' COMMENT '状态(pending-待处理,handling-处理中,resolved-已处理,ignored-已忽略)',
|
`handler` VARCHAR(64) DEFAULT NULL COMMENT '处理人',
|
`handle_time` DATETIME DEFAULT NULL COMMENT '处理时间',
|
`handle_measure` VARCHAR(1000) DEFAULT NULL COMMENT '处理措施',
|
`alert_time` DATETIME DEFAULT NULL COMMENT '告警时间',
|
`del_flag` CHAR(1) DEFAULT '0' COMMENT '删除标志(0-正常,2-删除)',
|
`tenant_id` BIGINT DEFAULT NULL COMMENT '租户ID',
|
`create_time` DATETIME DEFAULT NULL COMMENT '创建时间',
|
`create_user` INT DEFAULT NULL COMMENT '创建用户',
|
`update_time` DATETIME DEFAULT NULL COMMENT '修改时间',
|
`update_user` INT DEFAULT NULL COMMENT '修改用户',
|
PRIMARY KEY (`id`),
|
KEY `idx_monitor_id` (`monitor_id`),
|
KEY `idx_status` (`status`),
|
KEY `idx_alert_time` (`alert_time`),
|
KEY `idx_tenant` (`tenant_id`)
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='LIMS-告警记录';
|
|
-- ============================================================
|
-- 改动现有表
|
-- ============================================================
|
|
-- ⑤ 接口:自动采集配置
|
ALTER TABLE `lims_data_interface`
|
ADD COLUMN `auto_enabled` CHAR(1) DEFAULT '0' COMMENT '是否自动采集(1-启用,0-停用)' AFTER `status`,
|
ADD COLUMN `collect_cron` VARCHAR(64) DEFAULT NULL COMMENT '采集间隔cron(如 0 */5 * * * ?)' AFTER `auto_enabled`,
|
ADD COLUMN `last_collect_time` DATETIME DEFAULT NULL COMMENT '上次采集时间' AFTER `collect_cron`,
|
ADD COLUMN `last_collect_result` VARCHAR(500) DEFAULT NULL COMMENT '上次采集结果' AFTER `last_collect_time`;
|
|
-- ⑤ 采集记录:清洗与验证状态
|
ALTER TABLE `lims_data_collection`
|
ADD COLUMN `clean_status` VARCHAR(32) DEFAULT 'pending' COMMENT '清洗状态(pending-待清洗,cleaned-已清洗,discarded-已丢弃,failed-清洗失败)' AFTER `process_method`,
|
ADD COLUMN `clean_log` VARCHAR(2000) DEFAULT NULL COMMENT '清洗日志(逐条记录执行了哪些规则)' AFTER `clean_status`,
|
ADD COLUMN `verify_status` VARCHAR(32) DEFAULT 'pending' COMMENT '验证状态(pending-待验证,passed-通过,failed-未通过)' AFTER `clean_log`,
|
ADD COLUMN `verify_msg` VARCHAR(1000) DEFAULT NULL COMMENT '验证说明' AFTER `verify_status`;
|
|
-- ⑥ 监控项:判定相关
|
ALTER TABLE `lims_realtime_monitor`
|
ADD COLUMN `last_check_time` DATETIME DEFAULT NULL COMMENT '上次判定时间' AFTER `monitor_time`,
|
ADD COLUMN `alert_count` INT DEFAULT 0 COMMENT '累计触发告警次数' AFTER `last_check_time`,
|
ADD COLUMN `source_collection_id` BIGINT DEFAULT NULL COMMENT '数据来源采集记录ID' AFTER `alert_count`;
|
|
-- ============================================================
|
-- 预置几条常用清洗规则(全局,接口ID为空)
|
-- ============================================================
|
INSERT INTO `lims_clean_rule` (`rule_name`, `rule_type`, `target_field`, `condition_expr`, `action_type`, `action_value`, `priority`, `enabled`, `remark`) VALUES
|
('空值丢弃', 'empty', 'collectionValue', 'null', 'discard', NULL, 10, '1', '采集数值为空时整条丢弃'),
|
('负值截断为零', 'range', 'collectionValue', '<0', 'clamp', '0', 20, '1', '浓度/压力等不应为负,截断到 0'),
|
('极大值标记', 'outlier', 'collectionValue', '>1000000','flag', NULL, 30, '1', '超过一百万视为可疑,仅标记不丢弃');
|
|
-- ============================================================
|
-- 校验
|
-- ============================================================
|
SELECT table_name, table_comment
|
FROM information_schema.tables
|
WHERE table_schema = 'lims-ruoyi'
|
AND table_name IN ('lims_clean_rule','lims_collection_verify','lims_alert_record')
|
ORDER BY table_name;
|
|
SELECT column_name, column_type, column_comment
|
FROM information_schema.columns
|
WHERE table_schema = 'lims-ruoyi' AND table_name = 'lims_data_collection'
|
AND column_name IN ('clean_status','clean_log','verify_status','verify_msg')
|
ORDER BY ordinal_position;
|
|
SELECT column_name, column_type
|
FROM information_schema.columns
|
WHERE table_schema = 'lims-ruoyi' AND table_name = 'lims_data_interface'
|
AND column_name IN ('auto_enabled','collect_cron','last_collect_time','last_collect_result');
|
|
SELECT column_name, column_type
|
FROM information_schema.columns
|
WHERE table_schema = 'lims-ruoyi' AND table_name = 'lims_realtime_monitor'
|
AND column_name IN ('last_check_time','alert_count','source_collection_id');
|
|
-- ============================================================
|
-- ⑤⑥ 定时任务(RuoYi 的 sys_job,配置后到「系统监控→定时任务」里能看到并启停)
|
-- ============================================================
|
DELETE FROM `sys_job` WHERE `invoke_target` IN ('limsTask.autoCollect', 'limsTask.checkAlerts');
|
|
INSERT INTO `sys_job` (`job_name`, `job_group`, `invoke_target`, `cron_expression`, `misfire_policy`, `concurrent`, `status`, `create_by`, `create_time`, `remark`) VALUES
|
('LIMS自动采集', 'LIMS', 'limsTask.autoCollect', '0 */5 * * * ?', '3', '1', '1', 'admin', NOW(), '扫描 auto_enabled=1 的接口,逐个采集并按清洗规则处理'),
|
('LIMS监控预警扫描', 'LIMS', 'limsTask.checkAlerts', '0 * * * * ?', '3', '1', '1', 'admin', NOW(), '先清洗待处理采集数据,再扫描所有监控项判定越限并生成告警');
|
|
SELECT job_id, job_name, invoke_target, cron_expression, status FROM `sys_job` WHERE `job_group` = 'LIMS';
|