云
2026-10-30 4271b1bf63ec4740b2a96a7ab727a21ca97cb7af
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
-- ============================================================
-- 芯导-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';