CMVR-IOT/sql/inspection_result.sql
lixiaolong 521e3e4e24 feat(inspection): 新增巡检仪表识别和人工判断功能
- 添加巡检仪表读数识别动作枚举和处理器
- 实现人工巡检判断任务创建功能
- 扩展巡检报警监听服务支持工作流上下文
- 新增统一巡检结果表和媒体证据表
- 更新巡检告警实体和数据传输对象
- 扩展工作流执行事件传递更多节点信息
- 优化巡检报警入库服务支持订阅模式
2026-07-24 13:43:03 +08:00

92 lines
6.1 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 统一巡检结果和三级告警增量脚本。
-- 执行前请先备份数据库;本脚本不删除现有巡检数据。
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;