-- =============================================
-- 城市地下管网预警管理系统数据库表设计
-- =============================================

-- 1. 预警信息表
DROP TABLE IF EXISTS `early_warning`;
CREATE TABLE `early_warning` (
  `warning_id` varchar(64) NOT NULL COMMENT '预警ID（主键）',
  `warning_no` varchar(64) NOT NULL COMMENT '预警编号',
  `warning_name` varchar(256) NOT NULL COMMENT '预警名称',
  `warning_type` varchar(64) NOT NULL COMMENT '预警类型',
  `warning_level` varchar(32) NOT NULL COMMENT '预警级别（1-最高 2-次高 3-一般 4-常态；驾驶舱展示色为1红2黄3蓝4绿）',
  `warning_special` varchar(128) DEFAULT NULL COMMENT '预警专项',
  `location` varchar(512) DEFAULT NULL COMMENT '预警位置',
  `longitude` decimal(15,10) DEFAULT NULL COMMENT '经度',
  `latitude` decimal(15,10) DEFAULT NULL COMMENT '纬度',
  `ownership_unit` varchar(256) DEFAULT NULL COMMENT '权属单位',
  `publisher` varchar(128) DEFAULT NULL COMMENT '发布人',
  `publish_time` datetime DEFAULT NULL COMMENT '发布时间',
  `handler` varchar(128) DEFAULT NULL COMMENT '处置人',
  `status` varchar(32) NOT NULL DEFAULT 'DRAFT' COMMENT '状态（DRAFT-草稿 PENDING-待办 PROCESSING-处置中 RELEASED-已发布 HANDLED-已处置 CLOSED-已解除）',
  `warning_content` text COMMENT '预警内容描述',
  `process_instance_id` varchar(128) DEFAULT NULL COMMENT '工作流实例ID',
  `create_by` varchar(128) DEFAULT NULL COMMENT '创建人',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_by` varchar(128) DEFAULT NULL COMMENT '更新人',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `remark` varchar(512) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`warning_id`),
  UNIQUE KEY `uk_warning_no` (`warning_no`),
  KEY `idx_warning_type` (`warning_type`),
  KEY `idx_warning_level` (`warning_level`),
  KEY `idx_status` (`status`),
  KEY `idx_publish_time` (`publish_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='预警信息表';

-- 2. 报警预警关联表
DROP TABLE IF EXISTS `alarm_warning_rel`;
CREATE TABLE `alarm_warning_rel` (
  `rel_id` varchar(64) NOT NULL COMMENT '关联ID',
  `warning_id` varchar(64) NOT NULL COMMENT '预警ID',
  `alarm_id` varchar(64) NOT NULL COMMENT '报警ID',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`rel_id`),
  KEY `idx_warning_id` (`warning_id`),
  KEY `idx_alarm_id` (`alarm_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='报警预警关联表';

-- 3. 预警报告附件表
DROP TABLE IF EXISTS `warning_attachment`;
CREATE TABLE `warning_attachment` (
  `attachment_id` varchar(64) NOT NULL COMMENT '附件ID',
  `warning_id` varchar(64) NOT NULL COMMENT '预警ID',
  `attachment_name` varchar(256) NOT NULL COMMENT '附件名称',
  `attachment_url` varchar(512) NOT NULL COMMENT '附件地址',
  `attachment_type` varchar(255) DEFAULT NULL COMMENT '附件类型（MIME，标准 MIME 可达 70+ 字符）',
  `attachment_size` bigint DEFAULT NULL COMMENT '附件大小（字节）',
  `create_by` varchar(128) DEFAULT NULL COMMENT '上传人',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '上传时间',
  PRIMARY KEY (`attachment_id`),
  KEY `idx_warning_id` (`warning_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='预警报告附件表';

-- 4. 预警处置记录表
DROP TABLE IF EXISTS `warning_disposal`;
CREATE TABLE `warning_disposal` (
  `disposal_id` varchar(64) NOT NULL COMMENT '处置记录ID',
  `warning_id` varchar(64) NOT NULL COMMENT '预警ID',
  `disposal_type` varchar(32) NOT NULL COMMENT '处置类型（UPGRADE-升级 DOWNGRADE-降级 RESOLVE-解除 RETURN-退回 SUPERVISION-督办 INSTRUCTION-批示）',
  `old_level` varchar(32) DEFAULT NULL COMMENT '原预警级别',
  `new_level` varchar(32) DEFAULT NULL COMMENT '新预警级别',
  `disposal_user` varchar(128) NOT NULL COMMENT '处置人',
  `disposal_content` text COMMENT '处置内容/意见',
  `supervision_user` varchar(128) DEFAULT NULL COMMENT '督办人员',
  `supervision_content` text COMMENT '督办意见',
  `notification_type` varchar(32) DEFAULT NULL COMMENT '通知方式（SMS-短信 EMAIL-邮件 APP-APP通知）',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '处置时间',
  PRIMARY KEY (`disposal_id`),
  KEY `idx_warning_id` (`warning_id`),
  KEY `idx_disposal_type` (`disposal_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='预警处置记录表';

-- 5. 预警督办表
DROP TABLE IF EXISTS `warning_supervision`;
CREATE TABLE `warning_supervision` (
  `supervision_id` varchar(64) NOT NULL COMMENT '督办ID',
  `warning_id` varchar(64) NOT NULL COMMENT '预警ID',
  `supervision_user` varchar(128) NOT NULL COMMENT '督办人员',
  `supervision_content` text NOT NULL COMMENT '督办意见',
  `notification_type` varchar(32) NOT NULL COMMENT '通知方式',
  `notification_content` text COMMENT '通知内容',
  `attachment_url` varchar(512) DEFAULT NULL COMMENT '附件地址',
  `create_by` varchar(128) DEFAULT NULL COMMENT '创建人',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`supervision_id`),
  KEY `idx_warning_id` (`warning_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='预警督办表';

-- 6. 领导批示表
DROP TABLE IF EXISTS `leader_instruction`;
CREATE TABLE `leader_instruction` (
  `instruction_id` varchar(64) NOT NULL COMMENT '批示ID',
  `warning_id` varchar(64) NOT NULL COMMENT '预警ID',
  `leader_name` varchar(128) NOT NULL COMMENT '领导姓名',
  `instruction_content` text NOT NULL COMMENT '批示内容',
  `sms_receivers` text COMMENT '短信接收人（逗号分隔）',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '批示时间',
  PRIMARY KEY (`instruction_id`),
  KEY `idx_warning_id` (`warning_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='领导批示表';

-- 7. 预警待办表（为了快速查询待办已办）
DROP TABLE IF EXISTS `warning_todo`;
CREATE TABLE `warning_todo` (
  `todo_id` varchar(64) NOT NULL COMMENT '待办ID',
  `warning_id` varchar(64) NOT NULL COMMENT '预警ID',
  `user_id` varchar(64) NOT NULL COMMENT '用户ID',
  `user_name` varchar(128) DEFAULT NULL COMMENT '用户姓名',
  `todo_type` varchar(32) NOT NULL COMMENT '待办类型（TODO-待办 DONE-已办）',
  `read_status` varchar(32) DEFAULT 'UNREAD' COMMENT '阅读状态（UNREAD-未读 READ-已读）',
  `task_name` varchar(256) DEFAULT NULL COMMENT '任务名称',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `complete_time` datetime DEFAULT NULL COMMENT '完成时间',
  PRIMARY KEY (`todo_id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_warning_id` (`warning_id`),
  KEY `idx_todo_type` (`todo_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='预警待办表';

-- =============================================
-- 初始化数据
-- =============================================

-- 初始化预警类型字典
INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES
(100, '预警类型', 'warning_type', '0', 'admin', NOW(), '', NULL, '预警类型列表');

INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES
(100, 1, '供水管网预警', 'WATER_PIPE', 'warning_type', '', 'primary', 'N', '0', 'admin', NOW(), '', NULL, '供水管网预警'),
(101, 2, '排水管网预警', 'SEWER_PIPE', 'warning_type', '', 'primary', 'N', '0', 'admin', NOW(), '', NULL, '排水管网预警'),
(102, 3, '燃气管网预警', 'GAS_PIPE', 'warning_type', '', 'warning', 'N', '0', 'admin', NOW(), '', NULL, '燃气管网预警'),
(103, 4, '热力管网预警', 'HEAT_PIPE', 'warning_type', '', 'warning', 'N', '0', 'admin', NOW(), '', NULL, '热力管网预警'),
(104, 5, '电力管网预警', 'ELECTRIC_PIPE', 'warning_type', '', 'danger', 'N', '0', 'admin', NOW(), '', NULL, '电力管网预警'),
(105, 6, '通信管网预警', 'COMMUNICATION_PIPE', 'warning_type', '', 'info', 'N', '0', 'admin', NOW(), '', NULL, '通信管网预警');

-- 初始化设备类型字典
INSERT INTO `sys_dict_type` (`dict_id`, `dict_name`, `dict_type`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES
(101, '设备类型', 'equipment_type', '0', 'admin', NOW(), '', NULL, '设备类型列表');

INSERT INTO `sys_dict_data` (`dict_code`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES
(106, 1, '压力传感器', 'PRESSURE', 'equipment_type', '', 'primary', 'N', '0', 'admin', NOW(), '', NULL, '压力传感器'),
(107, 2, '流量传感器', 'FLOW', 'equipment_type', '', 'primary', 'N', '0', 'admin', NOW(), '', NULL, '流量传感器'),
(108, 3, '液位传感器', 'LEVEL', 'equipment_type', '', 'warning', 'N', '0', 'admin', NOW(), '', NULL, '液位传感器'),
(109, 4, '温度传感器', 'TEMPERATURE', 'equipment_type', '', 'info', 'N', '0', 'admin', NOW(), '', NULL, '温度传感器'),
(110, 5, '气体传感器', 'GAS', 'equipment_type', '', 'danger', 'N', '0', 'admin', NOW(), '', NULL, '气体传感器'),
(111, 6, '阀门控制器', 'VALVE', 'equipment_type', '', 'default', 'N', '0', 'admin', NOW(), '', NULL, '阀门控制器'),
(112, 7, '摄像头', 'CAMERA', 'equipment_type', '', 'default', 'N', '0', 'admin', NOW(), '', NULL, '摄像头');

-- 10. 预警归档表
DROP TABLE IF EXISTS `warning_archive`;
CREATE TABLE `warning_archive` (
  `archive_id` varchar(64) NOT NULL COMMENT '归档ID',
  `warning_id` varchar(64) NOT NULL COMMENT '预警ID',
  `archive_no` varchar(64) NOT NULL COMMENT '归档编号',
  `warning_no` varchar(64) NOT NULL COMMENT '预警编号',
  `warning_name` varchar(256) NOT NULL COMMENT '预警名称',
  `warning_type` varchar(64) NOT NULL COMMENT '预警类型',
  `warning_level` varchar(32) NOT NULL COMMENT '预警级别',
  `location` varchar(512) DEFAULT NULL COMMENT '预警位置',
  `longitude` decimal(15,10) DEFAULT NULL COMMENT '经度',
  `latitude` decimal(15,10) DEFAULT NULL COMMENT '纬度',
  `ownership_unit` varchar(256) DEFAULT NULL COMMENT '权属单位',
  `publisher` varchar(128) DEFAULT NULL COMMENT '发布人',
  `publish_time` datetime DEFAULT NULL COMMENT '发布时间',
  `handler` varchar(128) DEFAULT NULL COMMENT '处置人',
  `warning_content` text COMMENT '预警内容',
  `archive_content` text COMMENT '归档内容',
  `archive_status` varchar(32) DEFAULT NULL COMMENT '归档状态',
  `create_by` varchar(128) DEFAULT NULL COMMENT '创建人',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`archive_id`),
  UNIQUE KEY `uk_warning_id` (`warning_id`),
  KEY `idx_archive_no` (`archive_no`),
  KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='预警归档表';

-- 11. 预警清单表
DROP TABLE IF EXISTS `warning_item`;
CREATE TABLE `warning_item` (
  `item_id` varchar(64) NOT NULL COMMENT '事项ID',
  `item_code` varchar(64) NOT NULL COMMENT '事项编码',
  `item_name` varchar(256) NOT NULL COMMENT '事项名称',
  `warning_type` varchar(64) NOT NULL COMMENT '预警类型',
  `warning_level` varchar(32) NOT NULL COMMENT '预警级别',
  `warning_special` varchar(128) DEFAULT NULL COMMENT '预警专项',
  `industry` varchar(128) DEFAULT NULL COMMENT '所属行业',
  `duration` int DEFAULT NULL COMMENT '预警时长（小时）',
  `link_config` text COMMENT '预警环节配置',
  `status` varchar(32) DEFAULT 'ENABLED' COMMENT '状态（ENABLED-启用 DISABLED-禁用 INVALID-作废）',
  `create_by` varchar(128) DEFAULT NULL COMMENT '创建人',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_by` varchar(128) DEFAULT NULL COMMENT '更新人',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `remark` varchar(512) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`item_id`),
  UNIQUE KEY `uk_item_code` (`item_code`),
  KEY `idx_warning_type` (`warning_type`),
  KEY `idx_warning_level` (`warning_level`),
  KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='预警清单表';

-- 12. 预警原因库表
DROP TABLE IF EXISTS `warning_reason`;
CREATE TABLE `warning_reason` (
  `reason_id` varchar(64) NOT NULL COMMENT '原因ID',
  `reason_code` varchar(64) NOT NULL COMMENT '原因编码',
  `reason_name` varchar(256) NOT NULL COMMENT '原因名称',
  `warning_type` varchar(64) NOT NULL COMMENT '预警类型',
  `warning_level` varchar(32) NOT NULL COMMENT '预警级别',
  `description` text COMMENT '原因描述',
  `sort_order` int DEFAULT 0 COMMENT '排序',
  `status` char(1) DEFAULT '0' COMMENT '状态（0-正常 1-停用）',
  `create_by` varchar(128) DEFAULT NULL COMMENT '创建人',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_by` varchar(128) DEFAULT NULL COMMENT '更新人',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`reason_id`),
  UNIQUE KEY `uk_reason_code` (`reason_code`),
  KEY `idx_warning_type` (`warning_type`),
  KEY `idx_warning_level` (`warning_level`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='预警原因库表';
