-- ----------------------------
-- 智能巡检模块数据库表结构
-- ----------------------------

-- 1. 巡检机器人表
DROP TABLE IF EXISTS `inspection_robot`;
CREATE TABLE `inspection_robot` (
  `id` varchar(64) NOT NULL COMMENT '主键ID',
  `robot_id` varchar(128) DEFAULT NULL COMMENT 'QUIC上报的永久机器人ID',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  `robot_code` varchar(64) DEFAULT NULL COMMENT '机器人编码',
  `robot_name` varchar(100) NOT NULL COMMENT '机器人名称',
  `robot_model` varchar(100) DEFAULT NULL COMMENT '机器人型号',
  `robot_type` varchar(50) DEFAULT NULL COMMENT '机器人类型',
  `ip_address` varchar(50) DEFAULT NULL COMMENT 'IP地址',
  `port` int(11) DEFAULT NULL COMMENT '端口号',
  `current_map_id` varchar(64) DEFAULT NULL COMMENT '当前地图ID',
  `status` char(1) DEFAULT '0' COMMENT '状态(0在线 1离线 2充电中 3巡检中)',
  `battery_level` int(3) DEFAULT NULL COMMENT '电量百分比',
  `current_position` varchar(200) DEFAULT NULL COMMENT '当前位置',
  `connect_status` char(1) NOT NULL DEFAULT '0' COMMENT '连接状态(0离线 1在线)',
  `quic_node_id` varchar(128) DEFAULT NULL COMMENT '当前QUIC节点实例',
  `quic_session_id` varchar(128) DEFAULT NULL COMMENT '当前QUIC会话',
  `quic_boot_id` varchar(128) DEFAULT NULL COMMENT '边缘端启动ID',
  `observed_ip` varchar(64) DEFAULT NULL COMMENT 'QUIC连接来源IP',
  `software_version` varchar(64) DEFAULT NULL COMMENT '边缘端软件版本',
  `last_heartbeat_time` datetime(3) DEFAULT NULL COMMENT '最后心跳时间',
  `archived_status` char(1) NOT NULL DEFAULT '0' COMMENT '归档状态(0正常 1归档)',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_robot_code` (`robot_code`),
  KEY `idx_inspection_robot_robot_id` (`robot_id`),
  KEY `idx_inspection_robot_connect_status` (`connect_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='巡检机器人表';

-- 1.1 QUIC自动发现的机器人设备表（逻辑唯一性由后端校验）
DROP TABLE IF EXISTS `inspection_robot_device`;
CREATE TABLE `inspection_robot_device` (
  `id` varchar(64) NOT NULL COMMENT '主键ID',
  `robot_id` varchar(128) NOT NULL COMMENT '永久机器人ID',
  `device_id` varchar(128) NOT NULL COMMENT '边缘端设备ID',
  `device_name` varchar(128) DEFAULT NULL COMMENT '设备显示名称',
  `device_kind` int DEFAULT NULL COMMENT '设备类型',
  `type_name` varchar(128) DEFAULT NULL COMMENT '设备实现类型',
  `enabled` char(1) NOT NULL DEFAULT '1' COMMENT '是否启用',
  `manager_state` int DEFAULT NULL COMMENT '设备管理状态',
  `health_status` int DEFAULT NULL COMMENT '健康状态',
  `online_status` char(1) NOT NULL DEFAULT '0' COMMENT '在线状态',
  `has_error` char(1) NOT NULL DEFAULT '0' COMMENT '是否有错误',
  `error_message` varchar(1000) DEFAULT NULL COMMENT '错误信息',
  `status_updated_time` datetime(3) DEFAULT NULL COMMENT '边缘端状态更新时间',
  `last_seen_time` datetime(3) DEFAULT NULL COMMENT '最后发现时间',
  `offline_time` datetime(3) DEFAULT NULL COMMENT '离线时间',
  `create_by` varchar(64) DEFAULT NULL,
  `create_time` datetime DEFAULT NULL,
  `update_by` varchar(64) DEFAULT NULL,
  `update_time` datetime DEFAULT NULL,
  `remark` varchar(500) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_robot_device_robot_id` (`robot_id`),
  KEY `idx_robot_device_identity` (`robot_id`, `device_id`),
  KEY `idx_robot_device_online` (`robot_id`, `online_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='机器人自动发现设备';

-- 2. 巡检地图表
DROP TABLE IF EXISTS `inspection_map`;
CREATE TABLE `inspection_map` (
  `id` varchar(64) NOT NULL COMMENT '主键ID',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  `map_name` varchar(100) NOT NULL COMMENT '地图名称',
  `map_source_robot_id` varchar(64) DEFAULT NULL COMMENT '地图来源的机器人id',
  `map_source_name` varchar(100) DEFAULT NULL COMMENT '地图来源的地图名称',
  `map_file_path` varchar(500) DEFAULT NULL COMMENT '地图文件路径',
  `status` char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)',
  `map_desc` varchar(500) DEFAULT NULL COMMENT '地图描述',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='巡检地图表';

-- 3. 巡检任务表（不再包含机器人信息）
DROP TABLE IF EXISTS `inspection_task`;
CREATE TABLE `inspection_task` (
  `id` varchar(64) NOT NULL COMMENT '主键ID',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  `task_code` varchar(64) DEFAULT NULL COMMENT '任务编码',
  `task_name` varchar(100) NOT NULL COMMENT '任务名称',
  `task_type` char(1) DEFAULT '1' COMMENT '任务类型(1巡检任务 2讲解任务)',
  `task_config_id` varchar(64) DEFAULT NULL COMMENT '任务配置ID',
  `map_id` varchar(64) DEFAULT NULL COMMENT '地图ID',
  `waypoint_count` int(11) DEFAULT '0' COMMENT '点位总数',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_task_code` (`task_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='巡检任务表';

-- 4. 巡检点位表（不再包含任务ID，通过关联表关联）
DROP TABLE IF EXISTS `inspection_waypoint`;
CREATE TABLE `inspection_waypoint` (
  `id` varchar(64) NOT NULL COMMENT '主键ID',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  `waypoint_name` varchar(100) NOT NULL COMMENT '点位名称',
  `enabled` char(1) DEFAULT '0' COMMENT '是否启用(0启用 1禁用)',
  `sort_order` int(11) DEFAULT '0' COMMENT '排序号',
  `detect_item_id` varchar(64) DEFAULT NULL COMMENT '检测项ID',
  `map_id` varchar(64) DEFAULT NULL COMMENT '地图ID',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='巡检点位表';

-- 4.1 任务与点位关联表（多对多）
DROP TABLE IF EXISTS `inspection_task_waypoint`;
CREATE TABLE `inspection_task_waypoint` (
  `task_id` varchar(64) NOT NULL COMMENT '任务ID',
  `waypoint_id` varchar(64) NOT NULL COMMENT '点位ID',
  `sort_order` int(11) DEFAULT '0' COMMENT '排序号',
  PRIMARY KEY (`task_id`, `waypoint_id`),
  KEY `idx_task_id` (`task_id`),
  KEY `idx_waypoint_id` (`waypoint_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务与点位关联表';

-- 4.2 巡检任务执行实例表
DROP TABLE IF EXISTS `inspection_task_instance`;
CREATE TABLE `inspection_task_instance` (
  `id` varchar(64) NOT NULL COMMENT '主键ID',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  `task_id` varchar(64) NOT NULL COMMENT '任务ID',
  `robot_id` varchar(64) DEFAULT NULL COMMENT '机器人ID',
  `status` char(1) DEFAULT '0' COMMENT '执行状态(0待执行 1执行中 2已完成 3已取消 4执行失败 5已暂停)',
  `start_time` datetime DEFAULT NULL COMMENT '开始时间',
  `end_time` datetime DEFAULT NULL COMMENT '结束时间',
  `task_ins_id` varchar(64) DEFAULT NULL COMMENT '检测任务id',
  `waypoint_count` int(11) DEFAULT '0' COMMENT '点位总数',
  PRIMARY KEY (`id`),
  KEY `idx_task_id` (`task_id`),
  KEY `idx_robot_id` (`robot_id`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='巡检任务执行实例表';

-- 5. 巡检告警表（增加任务执行实例ID）
DROP TABLE IF EXISTS `inspection_alarm`;
CREATE TABLE `inspection_alarm` (
  `id` varchar(64) NOT NULL COMMENT '主键ID',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  `alarm_code` varchar(64) DEFAULT NULL COMMENT '告警编码',
  `task_instance_id` varchar(64) DEFAULT NULL COMMENT '任务执行实例ID',
  `result_id` varchar(64) DEFAULT NULL COMMENT '关联巡检结果ID',
  `alarm_source` varchar(20) DEFAULT NULL COMMENT '告警来源(PPE/METER/MANUAL)',
  `item_id` varchar(64) DEFAULT NULL COMMENT '检测项ID',
  `node_id` varchar(64) DEFAULT NULL COMMENT '工作流节点ID',
  `task_id` varchar(64) DEFAULT NULL COMMENT '任务ID',
  `task_name` varchar(100) DEFAULT NULL COMMENT '任务名称',
  `robot_id` varchar(64) DEFAULT NULL COMMENT '机器人ID',
  `robot_name` varchar(100) DEFAULT NULL COMMENT '机器人名称',
  `alarm_level` char(1) DEFAULT '2' COMMENT '告警级别(1提示 2警告 3严重)',
  `alarm_type` char(1) DEFAULT NULL COMMENT '告警类型(1设备异常 2环境异常 3任务异常 4通信异常)',
  `alarm_title` varchar(200) DEFAULT NULL COMMENT '告警标题',
  `alarm_content` text COMMENT '告警内容',
  `alarm_location` varchar(200) DEFAULT NULL COMMENT '告警位置',
  `alarm_time` datetime DEFAULT NULL COMMENT '告警时间',
  `handle_status` char(1) DEFAULT '0' COMMENT '处理状态(0未处理 1处理中 2已处理 3已忽略)',
  `handler` varchar(64) DEFAULT NULL COMMENT '处理人',
  `handle_time` datetime DEFAULT NULL COMMENT '处理时间',
  `handle_remark` varchar(500) DEFAULT NULL COMMENT '处理说明',
  `evidence_image` varchar(500) DEFAULT NULL COMMENT '图片证据',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_alarm_code` (`alarm_code`),
  UNIQUE KEY `uk_alarm_result_id` (`result_id`),
  KEY `idx_task_instance_id` (`task_instance_id`),
  KEY `idx_task_id` (`task_id`),
  KEY `idx_robot_id` (`robot_id`),
  KEY `idx_alarm_time` (`alarm_time`),
  KEY `idx_handle_status` (`handle_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='巡检告警表';

-- ----------------------------
-- 巡检任务执行日志表
-- ----------------------------
DROP TABLE IF EXISTS `inspection_task_log`;
CREATE TABLE `inspection_task_log` (
                                       `id` varchar(64) NOT NULL COMMENT '主键ID',
                                       `task_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 '节点名称',
                                       `log_type` int(11) DEFAULT '1' COMMENT '日志类型(1文字 2图片 3视频 4音频)',
                                       `log_content` text COMMENT '日志内容/文字描述',
                                       `media_url` varchar(500) DEFAULT NULL COMMENT '媒体文件URL(图片/视频/音频)',
                                       `status` int(11) DEFAULT '1' COMMENT '执行状态(0待执行 1执行中 2已完成 3已取消 4执行失败 5已暂停)',
                                       `progress` DECIMAL(5,2) DEFAULT NULL COMMENT '执行进度(百分比，保留2位小数)',
                                       `log_time` datetime DEFAULT NULL COMMENT '日志时间',
                                       `extra_info` text COMMENT '扩展信息(JSON格式)',
                                       `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
                                       `create_time` datetime DEFAULT NULL COMMENT '创建时间',
                                       `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
                                       `update_time` datetime DEFAULT NULL COMMENT '更新时间',
                                       `remark` varchar(500) DEFAULT NULL COMMENT '备注',
                                       PRIMARY KEY (`id`),
                                       KEY `idx_task_instance_id` (`task_instance_id`),
                                       KEY `idx_task_id` (`task_id`),
                                       KEY `idx_log_time` (`log_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='巡检任务执行日志表';

-- 6. 统一巡检结果表
DROP TABLE IF EXISTS `inspection_result_media`;
DROP TABLE IF EXISTS `inspection_result`;
CREATE TABLE `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='统一巡检结果表';

-- 7. 巡检结果媒体证据表
CREATE TABLE `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='巡检结果媒体证据表';
