- 添加巡检仪表读数识别动作枚举和处理器 - 实现人工巡检判断任务创建功能 - 扩展巡检报警监听服务支持工作流上下文 - 新增统一巡检结果表和媒体证据表 - 更新巡检告警实体和数据传输对象 - 扩展工作流执行事件传递更多节点信息 - 优化巡检报警入库服务支持订阅模式
92 lines
6.1 KiB
SQL
92 lines
6.1 KiB
SQL
-- 统一巡检结果和三级告警增量脚本。
|
||
-- 执行前请先备份数据库;本脚本不删除现有巡检数据。
|
||
|
||
CREATE TABLE IF NOT EXISTS `inspection_result` (
|
||
`id` varchar(32) NOT NULL COMMENT '主键ID',
|
||
`result_code` varchar(64) NOT NULL COMMENT '结果编码',
|
||
`dedupe_key` varchar(255) NOT NULL COMMENT '结果幂等键',
|
||
`task_instance_id` varchar(64) DEFAULT NULL COMMENT '巡检任务实例数据库ID',
|
||
`flow_instance_id` varchar(64) DEFAULT NULL COMMENT '工作流实例ID',
|
||
`task_id` varchar(64) DEFAULT NULL COMMENT '巡检任务ID',
|
||
`item_id` varchar(64) DEFAULT NULL COMMENT '检测项ID',
|
||
`node_id` varchar(64) DEFAULT NULL COMMENT '工作流节点ID',
|
||
`node_name` varchar(255) DEFAULT NULL COMMENT '工作流节点名称',
|
||
`iteration_path` varchar(255) DEFAULT NULL COMMENT '循环迭代路径JSON',
|
||
`result_type` varchar(20) NOT NULL COMMENT 'PPE/METER/MANUAL',
|
||
`result_status` varchar(32) NOT NULL COMMENT 'PENDING/NORMAL/ABNORMAL/RECOGNIZE_FAILED',
|
||
`result_name` varchar(255) NOT NULL COMMENT '检查名称',
|
||
`value_number` decimal(20,8) DEFAULT NULL COMMENT '结构化数值',
|
||
`value_text` varchar(1000) DEFAULT NULL COMMENT '文本结果',
|
||
`unit` varchar(32) DEFAULT NULL COMMENT '单位',
|
||
`alarm_level` tinyint DEFAULT NULL COMMENT '告警级别(1提示 2警告 3严重)',
|
||
`alarm_message` varchar(1000) DEFAULT NULL COMMENT '告警描述',
|
||
`confidence` decimal(10,8) DEFAULT NULL COMMENT '模型置信度',
|
||
`source_event_id` varchar(128) DEFAULT NULL COMMENT '外部PPE事件ID',
|
||
`evidence_url` varchar(1000) DEFAULT NULL COMMENT '主要MinIO证据地址',
|
||
`evidence_type` varchar(20) DEFAULT NULL COMMENT '主要证据类型(IMAGE/VIDEO)',
|
||
`raw_result` mediumtext COMMENT '模型或边缘端原始返回',
|
||
`matched_rule_json` text COMMENT '最终命中的报警规则',
|
||
`rule_snapshot_json` mediumtext COMMENT '完整报警规则快照',
|
||
`reviewer` varchar(64) DEFAULT NULL COMMENT '人工复核人',
|
||
`review_time` datetime DEFAULT NULL COMMENT '人工复核时间',
|
||
`review_remark` varchar(1000) DEFAULT NULL COMMENT '人工复核说明',
|
||
`review_version` int NOT NULL DEFAULT 0 COMMENT '人工复核版本',
|
||
`alarm_id` varchar(64) DEFAULT NULL COMMENT '关联告警ID',
|
||
`occurred_time` datetime NOT NULL COMMENT '结果发生时间',
|
||
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
|
||
`create_time` datetime NOT NULL COMMENT '创建时间',
|
||
`update_by` varchar(64) DEFAULT '' COMMENT '更新者',
|
||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_inspection_result_code` (`result_code`),
|
||
UNIQUE KEY `uk_inspection_result_dedupe` (`dedupe_key`),
|
||
KEY `idx_result_task_instance` (`task_instance_id`),
|
||
KEY `idx_result_flow_instance` (`flow_instance_id`),
|
||
KEY `idx_result_status` (`result_status`),
|
||
KEY `idx_result_type` (`result_type`),
|
||
KEY `idx_result_occurred_time` (`occurred_time`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='统一巡检结果表';
|
||
|
||
CREATE TABLE IF NOT EXISTS `inspection_result_media` (
|
||
`id` varchar(32) NOT NULL COMMENT '主键ID',
|
||
`result_id` varchar(32) NOT NULL COMMENT '巡检结果ID',
|
||
`media_type` varchar(20) NOT NULL COMMENT 'IMAGE或VIDEO',
|
||
`media_url` varchar(1000) NOT NULL COMMENT 'MinIO媒体地址',
|
||
`sort_order` int NOT NULL DEFAULT 0 COMMENT '排序号',
|
||
`create_time` datetime NOT NULL COMMENT '创建时间',
|
||
PRIMARY KEY (`id`),
|
||
KEY `idx_result_media_result_id` (`result_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='巡检结果媒体证据表';
|
||
|
||
-- 已存在inspection_result表时补充主要证据类型字段。
|
||
SET @sql := IF((SELECT COUNT(*) FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='inspection_result' AND column_name='evidence_type')=0,
|
||
'ALTER TABLE inspection_result ADD COLUMN evidence_type varchar(20) DEFAULT NULL COMMENT ''主要证据类型(IMAGE/VIDEO)'' AFTER evidence_url', 'SELECT 1');
|
||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||
|
||
-- 回填历史结果,使用与主表evidence_url完全一致的媒体记录,避免取错非主要证据。
|
||
UPDATE inspection_result r
|
||
JOIN inspection_result_media m ON m.result_id = r.id AND m.media_url = r.evidence_url
|
||
SET r.evidence_type = m.media_type
|
||
WHERE r.evidence_type IS NULL;
|
||
|
||
SET @sql := IF((SELECT COUNT(*) FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='inspection_alarm' AND column_name='result_id')=0,
|
||
'ALTER TABLE inspection_alarm ADD COLUMN result_id varchar(64) DEFAULT NULL COMMENT ''关联巡检结果ID'' AFTER task_instance_id', 'SELECT 1');
|
||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||
|
||
SET @sql := IF((SELECT COUNT(*) FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='inspection_alarm' AND column_name='alarm_source')=0,
|
||
'ALTER TABLE inspection_alarm ADD COLUMN alarm_source varchar(20) DEFAULT NULL COMMENT ''告警来源'' AFTER result_id', 'SELECT 1');
|
||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||
|
||
SET @sql := IF((SELECT COUNT(*) FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='inspection_alarm' AND column_name='item_id')=0,
|
||
'ALTER TABLE inspection_alarm ADD COLUMN item_id varchar(64) DEFAULT NULL COMMENT ''检测项ID'' AFTER alarm_source', 'SELECT 1');
|
||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||
|
||
SET @sql := IF((SELECT COUNT(*) FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='inspection_alarm' AND column_name='node_id')=0,
|
||
'ALTER TABLE inspection_alarm ADD COLUMN node_id varchar(64) DEFAULT NULL COMMENT ''工作流节点ID'' AFTER item_id', 'SELECT 1');
|
||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||
|
||
SET @sql := IF((SELECT COUNT(*) FROM information_schema.statistics WHERE table_schema=DATABASE() AND table_name='inspection_alarm' AND index_name='uk_alarm_result_id')=0,
|
||
'ALTER TABLE inspection_alarm ADD UNIQUE KEY uk_alarm_result_id (result_id)', 'SELECT 1');
|
||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|