/*
 Viewsh AIoT Platform — viewsh-module-video 建表脚本（最终融合版）

 融合来源：
   - aiot-video.sql（框架字段标准写法：datetime、bigint、creator/updater/deleted/tenant_id）
   - video.sql（业务字段：AI扩展表字段、video_ 表前缀）

 规范：
   - 业务数据表（23张）：ProjectBaseDO，含 project_id + tenant_id + BaseDO 字段
   - 租户字典表（2张）：TenantBaseDO，含 tenant_id + BaseDO 字段，不含 project_id
   - 全局共享表（1张）：BaseDO，只含 creator/create_time/updater/update_time，不含 tenant_id/deleted
   - 唯一索引包含 deleted 字段支持逻辑删除后重新添加
   - 时间字段统一 datetime，WVP 原 varchar(50) 时间字段移除
   - 不含 wvp_user / wvp_user_role / wvp_user_api_key（由 viewsh-module-system 管理）
   - 不含 wvp_jt_terminal / wvp_jt_channel（JT1078 Phase 2 迁移）

 表清单（26张）：
   业务数据（17张）：video_device, video_device_channel, video_device_alarm,
                     video_device_mobile_position, video_platform, video_platform_channel,
                     video_platform_group, video_platform_region, video_common_gb_channel,
                     video_common_group, video_common_region, video_stream_proxy, video_stream_push,
                     video_cloud_record, video_record_plan, video_record_plan_item, video_ai_alert
   AI 业务数据（6张）：video_ai_edge_device, video_ai_roi, video_ai_roi_algo_bind,
                       video_ai_config_log, video_ai_config_snapshot, video_ai_camera_snapshot
   租户字典（2张）：video_ai_algorithm, video_ai_algo_template
   全局共享（1张）：video_media_server

 维护者：AI Assistant
 生成日期：2026-04-20
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ============================================================================
-- 一、GB/T 28181 设备与通道
-- ============================================================================

-- ----------------------------
-- 国标设备基础信息（ProjectBaseDO）
-- ----------------------------
DROP TABLE IF EXISTS `video_device`;
CREATE TABLE `video_device` (
    `id`                                  bigint        NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `device_id`                           varchar(50)   NOT NULL COMMENT '国标设备编号',
    `name`                                varchar(255)  NULL     COMMENT '设备名称',
    `manufacturer`                        varchar(255)  NULL     COMMENT '设备厂商',
    `model`                               varchar(255)  NULL     COMMENT '设备型号',
    `firmware`                            varchar(255)  NULL     COMMENT '固件版本号',
    `transport`                           varchar(50)   NULL     COMMENT '信令传输协议（TCP/UDP）',
    `stream_mode`                         varchar(50)   NULL     COMMENT '拉流方式（主动/被动）',
    `on_line`                             tinyint(1)    NOT NULL DEFAULT 0 COMMENT '在线状态',
    `register_time`                       varchar(50)   NULL     COMMENT '注册时间',
    `keepalive_time`                      varchar(50)   NULL     COMMENT '最近心跳时间',
    `ip`                                  varchar(50)   NULL     COMMENT '设备IP地址',
    `port`                                int           NULL     COMMENT '信令端口',
    `expires`                             int           NULL     COMMENT '注册有效期',
    `subscribe_cycle_for_catalog`         int           NOT NULL DEFAULT 0 COMMENT '目录订阅周期',
    `subscribe_cycle_for_mobile_position` int           NOT NULL DEFAULT 0 COMMENT '移动位置订阅周期',
    `mobile_position_submission_interval` int           NOT NULL DEFAULT 5 COMMENT '移动位置上报间隔',
    `subscribe_cycle_for_alarm`           int           NOT NULL DEFAULT 0 COMMENT '报警订阅周期',
    `host_address`                        varchar(50)   NULL     COMMENT '设备域名/主机地址',
    `charset`                             varchar(50)   NULL     COMMENT '信令字符集',
    `ssrc_check`                          tinyint(1)    NOT NULL DEFAULT 0 COMMENT '是否校验SSRC',
    `geo_coord_sys`                       varchar(50)   NULL     COMMENT '坐标系类型',
    `media_server_id`                     varchar(50)   NOT NULL DEFAULT 'auto' COMMENT '绑定的流媒体服务ID',
    `custom_name`                         varchar(255)  NULL     COMMENT '自定义显示名称',
    `sdp_ip`                              varchar(50)   NULL     COMMENT 'SDP中携带的IP',
    `local_ip`                            varchar(50)   NULL     COMMENT '本地局域网IP',
    `password`                            varchar(255)  NULL     COMMENT '设备鉴权密码',
    `as_message_channel`                  tinyint(1)    NOT NULL DEFAULT 0 COMMENT '是否作为消息通道',
    `heart_beat_interval`                 int           NULL     COMMENT '心跳间隔',
    `heart_beat_count`                    int           NULL     COMMENT '心跳失败次数',
    `position_capability`                 int           NULL     COMMENT '定位能力标识',
    `broadcast_push_after_ack`            tinyint(1)    NOT NULL DEFAULT 0 COMMENT 'ACK后是否自动推流',
    `server_id`                           varchar(50)   NULL     COMMENT '所属信令服务器ID',
    `creator`                             varchar(64)   NOT NULL DEFAULT '' COMMENT '创建者',
    `create_time`                         datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater`                             varchar(64)   NOT NULL DEFAULT '' COMMENT '更新者',
    `update_time`                         datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted`                             bit(1)        NOT NULL DEFAULT b'0' COMMENT '是否删除',
    `tenant_id`                           bigint        NOT NULL DEFAULT 0 COMMENT '租户编号',
    `project_id`                          bigint        NOT NULL DEFAULT 0 COMMENT '项目编号',
    PRIMARY KEY (`id`) USING BTREE,
    UNIQUE KEY `uk_device_id_deleted` (`device_id`, `deleted`) COMMENT '设备ID唯一（含逻辑删除）'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='国标设备基础信息';

-- ----------------------------
-- 设备通道信息（ProjectBaseDO）
-- ----------------------------
DROP TABLE IF EXISTS `video_device_channel`;
CREATE TABLE `video_device_channel` (
    `id`                           bigint        NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `device_id`                    varchar(50)   NULL     COMMENT '所属设备ID',
    `name`                         varchar(255)  NULL     COMMENT '通道名称',
    `manufacturer`                 varchar(50)   NULL     COMMENT '厂商',
    `model`                        varchar(50)   NULL     COMMENT '型号',
    `owner`                        varchar(50)   NULL     COMMENT '归属单位',
    `civil_code`                   varchar(50)   NULL     COMMENT '行政区划代码',
    `block`                        varchar(50)   NULL     COMMENT '区域/小区编号',
    `address`                      varchar(50)   NULL     COMMENT '安装地址',
    `parental`                     int           NULL     COMMENT '是否有子节点',
    `parent_id`                    varchar(50)   NULL     COMMENT '父级通道ID',
    `safety_way`                   int           NULL     COMMENT '安全防范等级',
    `register_way`                 int           NULL     COMMENT '注册方式',
    `cert_num`                     varchar(50)   NULL     COMMENT '证书编号',
    `certifiable`                  int           NULL     COMMENT '是否可认证',
    `err_code`                     int           NULL     COMMENT '故障状态码',
    `end_time`                     varchar(50)   NULL     COMMENT '服务截止时间',
    `secrecy`                      int           NULL     COMMENT '保密级别',
    `ip_address`                   varchar(50)   NULL     COMMENT '设备IP地址',
    `port`                         int           NULL     COMMENT '设备端口',
    `password`                     varchar(255)  NULL     COMMENT '访问密码',
    `status`                       varchar(50)   NULL     COMMENT '在线状态',
    `longitude`                    double        NULL     COMMENT '经度',
    `latitude`                     double        NULL     COMMENT '纬度',
    `ptz_type`                     int           NULL     COMMENT '云台类型',
    `position_type`                int           NULL     COMMENT '点位类型',
    `room_type`                    int           NULL     COMMENT '房间类型',
    `use_type`                     int           NULL     COMMENT '使用性质',
    `supply_light_type`            int           NULL     COMMENT '补光方式',
    `direction_type`               int           NULL     COMMENT '朝向',
    `resolution`                   varchar(255)  NULL     COMMENT '分辨率',
    `business_group_id`            varchar(255)  NULL     COMMENT '业务分组ID',
    `download_speed`               varchar(255)  NULL     COMMENT '下载/码流速率',
    `svc_space_support_mod`        int           NULL     COMMENT '空域SVC能力',
    `svc_time_support_mode`        int           NULL     COMMENT '时域SVC能力',
    `sub_count`                    int           NULL     COMMENT '子节点数量',
    `stream_id`                    varchar(255)  NULL     COMMENT '绑定的流ID',
    `has_audio`                    tinyint(1)    NOT NULL DEFAULT 0 COMMENT '是否有音频',
    `gps_time`                     varchar(50)   NULL     COMMENT 'GPS定位时间',
    `stream_identification`        varchar(50)   NULL     COMMENT '流标识',
    `channel_type`                 int           NOT NULL DEFAULT 0 COMMENT '通道类型',
    `map_level`                    int           NOT NULL DEFAULT 0 COMMENT '地图层级',
    `gb_device_id`                 varchar(50)   NULL     COMMENT 'GB内的设备ID',
    `gb_name`                      varchar(255)  NULL     COMMENT 'GB上报的名称',
    `gb_manufacturer`              varchar(255)  NULL     COMMENT 'GB厂商',
    `gb_model`                     varchar(255)  NULL     COMMENT 'GB型号',
    `gb_owner`                     varchar(255)  NULL     COMMENT 'GB归属',
    `gb_civil_code`                varchar(255)  NULL     COMMENT 'GB行政区划',
    `gb_block`                     varchar(255)  NULL     COMMENT 'GB区域',
    `gb_address`                   varchar(255)  NULL     COMMENT 'GB地址',
    `gb_parental`                  int           NULL     COMMENT 'GB子节点标识',
    `gb_parent_id`                 varchar(255)  NULL     COMMENT 'GB父通道',
    `gb_safety_way`                int           NULL     COMMENT 'GB安全防范',
    `gb_register_way`              int           NULL     COMMENT 'GB注册方式',
    `gb_cert_num`                  varchar(50)   NULL     COMMENT 'GB证书编号',
    `gb_certifiable`               int           NULL     COMMENT 'GB认证标志',
    `gb_err_code`                  int           NULL     COMMENT 'GB错误码',
    `gb_end_time`                  varchar(50)   NULL     COMMENT 'GB截止时间',
    `gb_secrecy`                   int           NULL     COMMENT 'GB保密级别',
    `gb_ip_address`                varchar(50)   NULL     COMMENT 'GB IP',
    `gb_port`                      int           NULL     COMMENT 'GB端口',
    `gb_password`                  varchar(50)   NULL     COMMENT 'GB接入密码',
    `gb_status`                    varchar(50)   NULL     COMMENT 'GB状态',
    `gb_longitude`                 double        NULL     COMMENT 'GB经度',
    `gb_latitude`                  double        NULL     COMMENT 'GB纬度',
    `gb_business_group_id`         varchar(50)   NULL     COMMENT 'GB业务分组',
    `gb_ptz_type`                  int           NULL     COMMENT 'GB云台类型',
    `gb_position_type`             int           NULL     COMMENT 'GB点位类型',
    `gb_room_type`                 int           NULL     COMMENT 'GB房间类型',
    `gb_use_type`                  int           NULL     COMMENT 'GB用途',
    `gb_supply_light_type`         int           NULL     COMMENT 'GB补光',
    `gb_direction_type`            int           NULL     COMMENT 'GB朝向',
    `gb_resolution`                varchar(255)  NULL     COMMENT 'GB分辨率',
    `gb_download_speed`            varchar(255)  NULL     COMMENT 'GB码流速率',
    `gb_svc_space_support_mod`     int           NULL     COMMENT 'GB空域SVC',
    `gb_svc_time_support_mode`     int           NULL     COMMENT 'GB时域SVC',
    `record_plan_id`               int           NULL     COMMENT '绑定的录像计划ID',
    `data_type`                    int           NOT NULL COMMENT '数据类型标识',
    `data_device_id`               int           NOT NULL COMMENT '数据来源设备主键',
    `gps_speed`                    double        NULL     COMMENT 'GPS速度',
    `gps_altitude`                 double        NULL     COMMENT 'GPS海拔',
    `gps_direction`                double        NULL     COMMENT 'GPS方向',
    `enable_broadcast`             int           NOT NULL DEFAULT 0 COMMENT '是否支持广播',
    `creator`                      varchar(64)   NOT NULL DEFAULT '' COMMENT '创建者',
    `create_time`                  datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater`                      varchar(64)   NOT NULL DEFAULT '' COMMENT '更新者',
    `update_time`                  datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted`                      bit(1)        NOT NULL DEFAULT b'0' COMMENT '是否删除',
    `tenant_id`                    bigint        NOT NULL DEFAULT 0 COMMENT '租户编号',
    `project_id`                   bigint        NOT NULL DEFAULT 0 COMMENT '项目编号',
    PRIMARY KEY (`id`) USING BTREE,
    UNIQUE KEY `uk_gb_device_id_deleted` (`gb_device_id`, `deleted`) COMMENT 'GB通道ID唯一（含逻辑删除）',
    INDEX `idx_data_type` (`data_type`),
    INDEX `idx_data_device_id` (`data_device_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='设备通道信息';

-- ----------------------------
-- 设备报警记录（ProjectBaseDO）
-- ----------------------------
DROP TABLE IF EXISTS `video_device_alarm`;
CREATE TABLE `video_device_alarm` (
    `id`                bigint        NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `device_id`         varchar(50)   NOT NULL COMMENT '国标设备ID',
    `channel_id`        varchar(50)   NOT NULL COMMENT '报警关联的通道ID',
    `alarm_priority`    varchar(50)   NULL     COMMENT '报警级别',
    `alarm_method`      varchar(50)   NULL     COMMENT '报警方式（视频/语音等）',
    `alarm_time`        varchar(50)   NULL     COMMENT '报警发生时间',
    `alarm_description` varchar(255)  NULL     COMMENT '报警描述',
    `longitude`         double        NULL     COMMENT '报警经度',
    `latitude`          double        NULL     COMMENT '报警纬度',
    `alarm_type`        varchar(50)   NULL     COMMENT '报警类型',
    `creator`           varchar(64)   NOT NULL DEFAULT '' COMMENT '创建者',
    `create_time`       datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '数据入库时间',
    `updater`           varchar(64)   NOT NULL DEFAULT '' COMMENT '更新者',
    `update_time`       datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted`           bit(1)        NOT NULL DEFAULT b'0' COMMENT '是否删除',
    `tenant_id`         bigint        NOT NULL DEFAULT 0 COMMENT '租户编号',
    `project_id`        bigint        NOT NULL DEFAULT 0 COMMENT '项目编号',
    PRIMARY KEY (`id`) USING BTREE,
    INDEX `idx_device_id` (`device_id`) COMMENT '设备ID索引'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='设备报警记录';

-- ----------------------------
-- 移动位置订阅上报数据（ProjectBaseDO）
-- ----------------------------
DROP TABLE IF EXISTS `video_device_mobile_position`;
CREATE TABLE `video_device_mobile_position` (
    `id`            bigint        NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `device_id`     varchar(50)   NOT NULL COMMENT '设备ID',
    `channel_id`    varchar(50)   NOT NULL COMMENT '通道ID',
    `device_name`   varchar(255)  NULL     COMMENT '设备名称',
    `time`          varchar(50)   NULL     COMMENT '上报时间',
    `longitude`     double        NULL     COMMENT '经度',
    `latitude`      double        NULL     COMMENT '纬度',
    `altitude`      double        NULL     COMMENT '海拔',
    `speed`         double        NULL     COMMENT '速度',
    `direction`     double        NULL     COMMENT '方向角',
    `report_source` varchar(50)   NULL     COMMENT '上报来源',
    `creator`       varchar(64)   NOT NULL DEFAULT '' COMMENT '创建者',
    `create_time`   datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '入库时间',
    `updater`       varchar(64)   NOT NULL DEFAULT '' COMMENT '更新者',
    `update_time`   datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted`       bit(1)        NOT NULL DEFAULT b'0' COMMENT '是否删除',
    `tenant_id`     bigint        NOT NULL DEFAULT 0 COMMENT '租户编号',
    `project_id`    bigint        NOT NULL DEFAULT 0 COMMENT '项目编号',
    PRIMARY KEY (`id`) USING BTREE,
    INDEX `idx_device_channel` (`device_id`, `channel_id`) COMMENT '设备+通道索引'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='移动位置订阅上报数据';

-- ----------------------------
-- 通用 GB 通道统一视图（ProjectBaseDO）
-- ----------------------------
DROP TABLE IF EXISTS `video_common_gb_channel`;
CREATE TABLE `video_common_gb_channel` (
    `id`                           bigint        NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `gb_device_id`                 varchar(50)   NULL     COMMENT 'GB通道编号',
    `name`                         varchar(255)  NULL     COMMENT '通道名称',
    `manufacturer`                 varchar(255)  NULL     COMMENT '厂商',
    `model`                        varchar(255)  NULL     COMMENT '型号',
    `owner`                        varchar(255)  NULL     COMMENT '归属单位',
    `civil_code`                   varchar(50)   NULL     COMMENT '行政区划代码',
    `block`                        varchar(50)   NULL     COMMENT '区域/小区编号',
    `address`                      varchar(255)  NULL     COMMENT '安装地址',
    `parental`                     int           NULL     COMMENT '是否有子节点',
    `parent_id`                    varchar(50)   NULL     COMMENT '父级通道ID',
    `safety_way`                   int           NULL     COMMENT '安全防范等级',
    `register_way`                 int           NULL     COMMENT '注册方式',
    `cert_num`                     varchar(50)   NULL     COMMENT '证书编号',
    `certifiable`                  int           NULL     COMMENT '是否可认证',
    `err_code`                     int           NULL     COMMENT '故障状态码',
    `end_time`                     varchar(50)   NULL     COMMENT '服务截止时间',
    `secrecy`                      int           NULL     COMMENT '保密级别',
    `ip_address`                   varchar(50)   NULL     COMMENT '设备IP地址',
    `port`                         int           NULL     COMMENT '设备端口',
    `password`                     varchar(255)  NULL     COMMENT '访问密码',
    `status`                       varchar(50)   NULL     COMMENT '在线状态',
    `longitude`                    double        NULL     COMMENT '经度',
    `latitude`                     double        NULL     COMMENT '纬度',
    `ptz_type`                     int           NULL     COMMENT '云台类型',
    `position_type`                int           NULL     COMMENT '点位类型',
    `room_type`                    int           NULL     COMMENT '房间类型',
    `use_type`                     int           NULL     COMMENT '使用性质',
    `supply_light_type`            int           NULL     COMMENT '补光方式',
    `direction_type`               int           NULL     COMMENT '朝向',
    `resolution`                   varchar(255)  NULL     COMMENT '分辨率',
    `business_group_id`            varchar(255)  NULL     COMMENT '业务分组ID',
    `download_speed`               varchar(255)  NULL     COMMENT '下载/码流速率',
    `svc_space_support_mod`        int           NULL     COMMENT '空域SVC能力',
    `svc_time_support_mode`        int           NULL     COMMENT '时域SVC能力',
    `has_audio`                    tinyint(1)    NOT NULL DEFAULT 0 COMMENT '是否有音频',
    `stream_identification`        varchar(50)   NULL     COMMENT '流标识',
    `data_type`                    int           NOT NULL DEFAULT 0 COMMENT '数据类型（0=GB设备 1=拉流代理 2=推流）',
    `data_device_id`               bigint        NOT NULL DEFAULT 0 COMMENT '数据来源设备主键',
    `record_plan_id`               bigint        NULL     COMMENT '绑定的录像计划ID',
    `stream_id`                    varchar(255)  NULL     COMMENT '绑定的流ID',
    `map_level`                    int           NOT NULL DEFAULT 0 COMMENT '地图层级',
    `creator`                      varchar(64)   NOT NULL DEFAULT '' COMMENT '创建者',
    `create_time`                  datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater`                      varchar(64)   NOT NULL DEFAULT '' COMMENT '更新者',
    `update_time`                  datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted`                      bit(1)        NOT NULL DEFAULT b'0' COMMENT '是否删除',
    `tenant_id`                    bigint        NOT NULL DEFAULT 0 COMMENT '租户编号',
    `project_id`                   bigint        NOT NULL DEFAULT 0 COMMENT '项目编号',
    PRIMARY KEY (`id`) USING BTREE,
    UNIQUE KEY `uk_gb_device_id_deleted` (`gb_device_id`, `deleted`) COMMENT 'GB通道编号唯一（含逻辑删除）',
    INDEX `idx_data_type` (`data_type`),
    INDEX `idx_data_device_id` (`data_device_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='通用 GB 通道统一视图';

-- ----------------------------
-- 通用分组表（ProjectBaseDO）
-- ----------------------------
DROP TABLE IF EXISTS `video_common_group`;
CREATE TABLE `video_common_group` (
    `id`               bigint        NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `device_id`        varchar(50)   NOT NULL COMMENT '分组对应的平台或设备ID',
    `name`             varchar(255)  NOT NULL COMMENT '分组名称',
    `parent_id`        bigint        NULL     COMMENT '父级分组ID',
    `parent_device_id` varchar(50)   NULL     COMMENT '父级分组对应的设备ID',
    `business_group`   varchar(50)   NOT NULL COMMENT '业务分组编码',
    `civil_code`       varchar(50)   NULL     COMMENT '行政区划代码',
    `alias`            varchar(255)  NULL     COMMENT '别名',
    `creator`          varchar(64)   NOT NULL DEFAULT '' COMMENT '创建者',
    `create_time`      datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater`          varchar(64)   NOT NULL DEFAULT '' COMMENT '更新者',
    `update_time`      datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted`          bit(1)        NOT NULL DEFAULT b'0' COMMENT '是否删除',
    `tenant_id`        bigint        NOT NULL DEFAULT 0 COMMENT '租户编号',
    `project_id`       bigint        NOT NULL DEFAULT 0 COMMENT '项目编号',
    PRIMARY KEY (`id`) USING BTREE,
    UNIQUE KEY `uk_device_id_deleted` (`device_id`, `deleted`) COMMENT '分组设备ID唯一（含逻辑删除）'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='通用分组表';

-- ----------------------------
-- 通用行政区域表（ProjectBaseDO）
-- ----------------------------
DROP TABLE IF EXISTS `video_common_region`;
CREATE TABLE `video_common_region` (
    `id`               bigint        NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `device_id`        varchar(50)   NOT NULL COMMENT '区域对应的平台或设备ID',
    `name`             varchar(255)  NOT NULL COMMENT '区域名称',
    `parent_id`        bigint        NULL     COMMENT '父级区域ID',
    `parent_device_id` varchar(50)   NULL     COMMENT '父级区域的设备ID',
    `creator`          varchar(64)   NOT NULL DEFAULT '' COMMENT '创建者',
    `create_time`      datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater`          varchar(64)   NOT NULL DEFAULT '' COMMENT '更新者',
    `update_time`      datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted`          bit(1)        NOT NULL DEFAULT b'0' COMMENT '是否删除',
    `tenant_id`        bigint        NOT NULL DEFAULT 0 COMMENT '租户编号',
    `project_id`       bigint        NOT NULL DEFAULT 0 COMMENT '项目编号',
    PRIMARY KEY (`id`) USING BTREE,
    UNIQUE KEY `uk_device_id_deleted` (`device_id`, `deleted`) COMMENT '区域设备ID唯一（含逻辑删除）'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='通用行政区域表';

-- ============================================================================
-- 二、上级平台级联
-- ============================================================================

-- ----------------------------
-- 上级国标平台注册信息（ProjectBaseDO）
-- ----------------------------
DROP TABLE IF EXISTS `video_platform`;
CREATE TABLE `video_platform` (
    `id`                    bigint        NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `enable`                tinyint(1)    NOT NULL DEFAULT 0 COMMENT '是否启用该平台注册',
    `name`                  varchar(255)  NULL     COMMENT '平台名称',
    `server_gb_id`          varchar(50)   NULL     COMMENT '上级平台国标编码',
    `server_gb_domain`      varchar(50)   NULL     COMMENT '上级平台域编码',
    `server_ip`             varchar(50)   NULL     COMMENT '上级平台IP',
    `server_port`           int           NULL     COMMENT '上级平台注册端口',
    `device_gb_id`          varchar(50)   NULL     COMMENT '本平台向上注册的国标编码',
    `device_ip`             varchar(50)   NULL     COMMENT '本平台信令IP',
    `device_port`           varchar(50)   NULL     COMMENT '本平台信令端口',
    `username`              varchar(255)  NULL     COMMENT '注册用户名',
    `password`              varchar(50)   NULL     COMMENT '注册密码',
    `expires`               varchar(50)   NULL     COMMENT '注册有效期',
    `keep_timeout`          varchar(50)   NULL     COMMENT '心跳超时时间',
    `transport`             varchar(50)   NULL     COMMENT '传输协议（UDP/TCP）',
    `civil_code`            varchar(50)   NULL     COMMENT '行政区划代码',
    `manufacturer`          varchar(255)  NULL     COMMENT '厂商',
    `model`                 varchar(255)  NULL     COMMENT '型号',
    `address`               varchar(255)  NULL     COMMENT '地址',
    `character_set`         varchar(50)   NULL     COMMENT '字符集',
    `ptz`                   tinyint(1)    NOT NULL DEFAULT 0 COMMENT '是否支持PTZ',
    `rtcp`                  tinyint(1)    NOT NULL DEFAULT 0 COMMENT '是否开启RTCP',
    `status`                tinyint(1)    NOT NULL DEFAULT 0 COMMENT '注册状态',
    `catalog_group`         int           NULL     COMMENT '目录分组方式',
    `register_way`          int           NULL     COMMENT '注册方式',
    `secrecy`               int           NULL     COMMENT '保密级别',
    `as_message_channel`    tinyint(1)    NOT NULL DEFAULT 0 COMMENT '是否作为消息通道',
    `catalog_with_platform` int           NOT NULL DEFAULT 1 COMMENT '是否推送平台目录',
    `catalog_with_group`    int           NOT NULL DEFAULT 1 COMMENT '是否推送分组目录',
    `catalog_with_region`   int           NOT NULL DEFAULT 1 COMMENT '是否推送区域目录',
    `auto_push_channel`     tinyint(1)    NOT NULL DEFAULT 1 COMMENT '是否自动推送通道',
    `send_stream_ip`        varchar(50)   NULL     COMMENT '推流时使用的IP',
    `server_id`             varchar(50)   NULL     COMMENT '对应信令服务器ID',
    `creator`               varchar(64)   NOT NULL DEFAULT '' COMMENT '创建者',
    `create_time`           datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater`               varchar(64)   NOT NULL DEFAULT '' COMMENT '更新者',
    `update_time`           datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted`               bit(1)        NOT NULL DEFAULT b'0' COMMENT '是否删除',
    `tenant_id`             bigint        NOT NULL DEFAULT 0 COMMENT '租户编号',
    `project_id`            bigint        NOT NULL DEFAULT 0 COMMENT '项目编号',
    PRIMARY KEY (`id`) USING BTREE,
    UNIQUE KEY `uk_server_gb_id_deleted` (`server_gb_id`, `deleted`) COMMENT '上级平台国标编码唯一（含逻辑删除）'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='上级国标平台注册信息';

-- ----------------------------
-- 国标平台通道映射关系（ProjectBaseDO）
-- ----------------------------
DROP TABLE IF EXISTS `video_platform_channel`;
CREATE TABLE `video_platform_channel` (
    `id`                           bigint        NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `platform_id`                  bigint        NULL     COMMENT '平台ID',
    `device_channel_id`            bigint        NULL     COMMENT '本地通道表主键',
    `custom_device_id`             varchar(50)   NULL     COMMENT '自定义国标编码',
    `custom_name`                  varchar(255)  NULL     COMMENT '自定义名称',
    `custom_manufacturer`          varchar(50)   NULL     COMMENT '自定义厂商',
    `custom_model`                 varchar(50)   NULL     COMMENT '自定义型号',
    `custom_owner`                 varchar(50)   NULL     COMMENT '自定义归属',
    `custom_civil_code`            varchar(50)   NULL     COMMENT '自定义行政区划',
    `custom_block`                 varchar(50)   NULL     COMMENT '自定义区域',
    `custom_address`               varchar(50)   NULL     COMMENT '自定义地址',
    `custom_parental`              int           NULL     COMMENT '自定义父/子标识',
    `custom_parent_id`             varchar(50)   NULL     COMMENT '自定义父节点',
    `custom_safety_way`            int           NULL     COMMENT '自定义安全防范',
    `custom_register_way`          int           NULL     COMMENT '自定义注册方式',
    `custom_cert_num`              varchar(50)   NULL     COMMENT '自定义证书编号',
    `custom_certifiable`           int           NULL     COMMENT '自定义可认证标志',
    `custom_err_code`              int           NULL     COMMENT '自定义错误码',
    `custom_end_time`              varchar(50)   NULL     COMMENT '自定义截止时间',
    `custom_secrecy`               int           NULL     COMMENT '自定义保密级别',
    `custom_ip_address`            varchar(50)   NULL     COMMENT '自定义IP',
    `custom_port`                  int           NULL     COMMENT '自定义端口',
    `custom_password`              varchar(255)  NULL     COMMENT '自定义密码',
    `custom_status`                varchar(50)   NULL     COMMENT '自定义状态',
    `custom_longitude`             double        NULL     COMMENT '自定义经度',
    `custom_latitude`              double        NULL     COMMENT '自定义纬度',
    `custom_ptz_type`              int           NULL     COMMENT '自定义云台类型',
    `custom_position_type`         int           NULL     COMMENT '自定义点位类型',
    `custom_room_type`             int           NULL     COMMENT '自定义房间类型',
    `custom_use_type`              int           NULL     COMMENT '自定义用途',
    `custom_supply_light_type`     int           NULL     COMMENT '自定义补光',
    `custom_direction_type`        int           NULL     COMMENT '自定义朝向',
    `custom_resolution`            varchar(255)  NULL     COMMENT '自定义分辨率',
    `custom_business_group_id`     varchar(255)  NULL     COMMENT '自定义业务分组',
    `custom_download_speed`        varchar(255)  NULL     COMMENT '自定义码流速率',
    `custom_svc_space_support_mod` int           NULL     COMMENT '自定义空域SVC',
    `custom_svc_time_support_mode` int           NULL     COMMENT '自定义时域SVC',
    `creator`                      varchar(64)   NOT NULL DEFAULT '' COMMENT '创建者',
    `create_time`                  datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater`                      varchar(64)   NOT NULL DEFAULT '' COMMENT '更新者',
    `update_time`                  datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted`                      bit(1)        NOT NULL DEFAULT b'0' COMMENT '是否删除',
    `tenant_id`                    bigint        NOT NULL DEFAULT 0 COMMENT '租户编号',
    `project_id`                   bigint        NOT NULL DEFAULT 0 COMMENT '项目编号',
    PRIMARY KEY (`id`) USING BTREE,
    UNIQUE KEY `uk_platform_channel_deleted` (`platform_id`, `device_channel_id`, `deleted`) COMMENT '平台+通道唯一（含逻辑删除）',
    UNIQUE KEY `uk_custom_device_id_deleted` (`custom_device_id`, `deleted`) COMMENT '自定义设备ID唯一（含逻辑删除）'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='国标平台通道映射关系';

-- ----------------------------
-- 平台与分组关联（ProjectBaseDO）
-- ----------------------------
DROP TABLE IF EXISTS `video_platform_group`;
CREATE TABLE `video_platform_group` (
    `id`          bigint  NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `platform_id` bigint  NULL COMMENT '平台ID',
    `group_id`    bigint  NULL COMMENT '分组ID',
    `creator`     varchar(64)  NOT NULL DEFAULT '' COMMENT '创建者',
    `create_time` datetime     NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater`     varchar(64)  NOT NULL DEFAULT '' COMMENT '更新者',
    `update_time` datetime     NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted`     bit(1)       NOT NULL DEFAULT b'0' COMMENT '是否删除',
    `tenant_id`   bigint       NOT NULL DEFAULT 0 COMMENT '租户编号',
    `project_id`  bigint       NOT NULL DEFAULT 0 COMMENT '项目编号',
    PRIMARY KEY (`id`) USING BTREE,
    UNIQUE KEY `uk_platform_group_deleted` (`platform_id`, `group_id`, `deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='平台与分组关联';

-- ----------------------------
-- 平台与区域关联（ProjectBaseDO）
-- ----------------------------
DROP TABLE IF EXISTS `video_platform_region`;
CREATE TABLE `video_platform_region` (
    `id`          bigint  NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `platform_id` bigint  NULL COMMENT '平台ID',
    `region_id`   bigint  NULL COMMENT '区域ID',
    `creator`     varchar(64)  NOT NULL DEFAULT '' COMMENT '创建者',
    `create_time` datetime     NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater`     varchar(64)  NOT NULL DEFAULT '' COMMENT '更新者',
    `update_time` datetime     NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted`     bit(1)       NOT NULL DEFAULT b'0' COMMENT '是否删除',
    `tenant_id`   bigint       NOT NULL DEFAULT 0 COMMENT '租户编号',
    `project_id`  bigint       NOT NULL DEFAULT 0 COMMENT '项目编号',
    PRIMARY KEY (`id`) USING BTREE,
    UNIQUE KEY `uk_platform_region_deleted` (`platform_id`, `region_id`, `deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='平台与区域关联';

-- ============================================================================
-- 三、媒体服务器（全局共享，BaseDO，无 tenant_id / project_id / deleted）
-- ============================================================================

DROP TABLE IF EXISTS `video_media_server`;
CREATE TABLE `video_media_server` (
    `id`                  varchar(255)  NOT NULL COMMENT '媒体服务器ID',
    `ip`                  varchar(50)   NULL     COMMENT '服务器IP',
    `hook_ip`             varchar(50)   NULL     COMMENT 'hook回调IP',
    `sdp_ip`              varchar(50)   NULL     COMMENT 'SDP中使用的IP',
    `stream_ip`           varchar(50)   NULL     COMMENT '推流使用的IP',
    `http_port`           int           NULL     COMMENT 'HTTP端口',
    `http_ssl_port`       int           NULL     COMMENT 'HTTPS端口',
    `rtmp_port`           int           NULL     COMMENT 'RTMP端口',
    `rtmp_ssl_port`       int           NULL     COMMENT 'RTMPS端口',
    `rtp_proxy_port`      int           NULL     COMMENT 'RTP代理端口',
    `rtsp_port`           int           NULL     COMMENT 'RTSP端口',
    `rtsp_ssl_port`       int           NULL     COMMENT 'RTSPS端口',
    `flv_port`            int           NULL     COMMENT 'FLV端口',
    `flv_ssl_port`        int           NULL     COMMENT 'FLV HTTPS端口',
    `mp4_port`            int           NULL     COMMENT 'MP4点播端口',
    `mp4_ssl_port`        int           NULL     COMMENT 'MP4 HTTPS端口',
    `ws_flv_port`         int           NULL     COMMENT 'WS-FLV端口',
    `ws_flv_ssl_port`     int           NULL     COMMENT 'WS-FLV HTTPS端口',
    `jtt_proxy_port`      int           NULL     COMMENT 'JT/T代理端口',
    `auto_config`         tinyint(1)    NOT NULL DEFAULT 0 COMMENT '是否自动配置',
    `secret`              varchar(50)   NULL     COMMENT 'ZLM校验密钥',
    `type`                varchar(50)   NOT NULL DEFAULT 'zlm' COMMENT '节点类型',
    `rtp_enable`          tinyint(1)    NOT NULL DEFAULT 0 COMMENT '是否开启RTP',
    `rtp_port_range`      varchar(50)   NULL     COMMENT 'RTP端口范围',
    `send_rtp_port_range` varchar(50)   NULL     COMMENT '发送RTP端口范围',
    `record_assist_port`  int           NULL     COMMENT '录像辅助端口',
    `default_server`      tinyint(1)    NOT NULL DEFAULT 0 COMMENT '是否默认节点',
    `hook_alive_interval` int           NULL     COMMENT 'hook心跳间隔',
    `record_path`         varchar(255)  NULL     COMMENT '录像目录',
    `record_day`          int           NOT NULL DEFAULT 7 COMMENT '录像保留天数',
    `transcode_suffix`    varchar(255)  NULL     COMMENT '转码指令后缀',
    `server_id`           varchar(50)   NULL     COMMENT '对应信令服务器ID',
    `creator`             varchar(64)   NOT NULL DEFAULT '' COMMENT '创建者',
    `create_time`         datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater`             varchar(64)   NOT NULL DEFAULT '' COMMENT '更新者',
    `update_time`         datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`) USING BTREE,
    UNIQUE KEY `uk_ip_http_port_server_id` (`ip`, `http_port`, `server_id`) COMMENT '节点IP+端口+服务器唯一'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='媒体服务器节点配置（不含租户隔离）';

-- ============================================================================
-- 四、流媒体 / 云录像
-- ============================================================================

-- ----------------------------
-- 拉流代理/转推配置（ProjectBaseDO）
-- ----------------------------
DROP TABLE IF EXISTS `video_stream_proxy`;
CREATE TABLE `video_stream_proxy` (
    `id`                         bigint        NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `type`                       varchar(50)   NULL     COMMENT '代理类型（拉流/推流）',
    `app`                        varchar(255)  NULL     COMMENT '应用名',
    `stream`                     varchar(255)  NULL     COMMENT '流ID',
    `src_url`                    varchar(255)  NULL     COMMENT '源地址',
    `timeout`                    int           NULL     COMMENT '拉流超时时间',
    `ffmpeg_cmd_key`             varchar(255)  NULL     COMMENT 'FFmpeg命令模板键',
    `rtsp_type`                  varchar(50)   NULL     COMMENT 'RTSP拉流方式',
    `media_server_id`            varchar(50)   NULL     COMMENT '指定媒体服务器ID',
    `enable_audio`               tinyint(1)    NOT NULL DEFAULT 0 COMMENT '是否启用音频',
    `enable_mp4`                 tinyint(1)    NOT NULL DEFAULT 0 COMMENT '是否录制MP4',
    `pulling`                    tinyint(1)    NOT NULL DEFAULT 0 COMMENT '当前是否在拉流',
    `enable`                     tinyint(1)    NOT NULL DEFAULT 0 COMMENT '是否启用该代理',
    `name`                       varchar(255)  NULL     COMMENT '代理名称',
    `stream_key`                 varchar(255)  NULL     COMMENT '唯一流标识',
    `server_id`                  varchar(50)   NULL     COMMENT '信令服务器ID',
    `enable_disable_none_reader` tinyint(1)    NOT NULL DEFAULT 0 COMMENT '是否无人观看时自动停流',
    `relates_media_server_id`    varchar(50)   NULL     COMMENT '关联的媒体服务器ID',
    `camera_code`                varchar(64)   NOT NULL DEFAULT '' COMMENT '摄像头编码',
    `camera_name`                varchar(100)  NULL     COMMENT '摄像头名称',
    `area_id`                    bigint        NULL     COMMENT '所属区域ID',
    `edge_device_id`             varchar(64)   NULL     COMMENT '绑定的边缘设备ID',
    `creator`                    varchar(64)   NOT NULL DEFAULT '' COMMENT '创建者',
    `create_time`                datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater`                    varchar(64)   NOT NULL DEFAULT '' COMMENT '更新者',
    `update_time`                datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted`                    bit(1)        NOT NULL DEFAULT b'0' COMMENT '是否删除',
    `tenant_id`                  bigint        NOT NULL DEFAULT 0 COMMENT '租户编号',
    `project_id`                 bigint        NOT NULL DEFAULT 0 COMMENT '项目编号',
    PRIMARY KEY (`id`) USING BTREE,
    UNIQUE KEY `uk_app_stream_deleted` (`app`, `stream`, `deleted`) COMMENT '应用+流ID唯一（含逻辑删除）',
    UNIQUE KEY `uk_camera_code_deleted` (`camera_code`, `deleted`) COMMENT '摄像头编码唯一（含逻辑删除）'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='拉流代理/转推配置';

-- ----------------------------
-- 推流会话记录（ProjectBaseDO）
-- ----------------------------
DROP TABLE IF EXISTS `video_stream_push`;
CREATE TABLE `video_stream_push` (
    `id`                 bigint        NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `app`                varchar(255)  NULL     COMMENT '应用名',
    `stream`             varchar(255)  NULL     COMMENT '流ID',
    `media_server_id`    varchar(50)   NULL     COMMENT '推流所在媒体服务器',
    `server_id`          varchar(50)   NULL     COMMENT '信令服务器ID',
    `push_time`          varchar(50)   NULL     COMMENT '推流开始时间',
    `status`             tinyint(1)    NOT NULL DEFAULT 0 COMMENT '推流状态',
    `pushing`            tinyint(1)    NOT NULL DEFAULT 0 COMMENT '是否正在推流',
    `self`               tinyint(1)    NOT NULL DEFAULT 0 COMMENT '是否本地发起',
    `start_offline_push` tinyint(1)    NOT NULL DEFAULT 1 COMMENT '是否离线后自动重推',
    `creator`            varchar(64)   NOT NULL DEFAULT '' COMMENT '创建者',
    `create_time`        datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater`            varchar(64)   NOT NULL DEFAULT '' COMMENT '更新者',
    `update_time`        datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted`            bit(1)        NOT NULL DEFAULT b'0' COMMENT '是否删除',
    `tenant_id`          bigint        NOT NULL DEFAULT 0 COMMENT '租户编号',
    `project_id`         bigint        NOT NULL DEFAULT 0 COMMENT '项目编号',
    PRIMARY KEY (`id`) USING BTREE,
    UNIQUE KEY `uk_app_stream_deleted` (`app`, `stream`, `deleted`) COMMENT '应用+流ID唯一（含逻辑删除）'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='推流会话记录';

-- ----------------------------
-- 云端录像记录（ProjectBaseDO）
-- ----------------------------
DROP TABLE IF EXISTS `video_cloud_record`;
CREATE TABLE `video_cloud_record` (
    `id`              bigint        NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `app`             varchar(255)  NULL     COMMENT '应用名',
    `stream`          varchar(255)  NULL     COMMENT '流ID',
    `call_id`         varchar(255)  NULL     COMMENT '会话ID',
    `start_time`      bigint        NULL     COMMENT '录像开始时间',
    `end_time`        bigint        NULL     COMMENT '录像结束时间',
    `media_server_id` varchar(50)   NULL     COMMENT '媒体服务器ID',
    `server_id`       varchar(50)   NULL     COMMENT '信令服务器ID',
    `file_name`       varchar(255)  NULL     COMMENT '文件名',
    `folder`          varchar(500)  NULL     COMMENT '目录',
    `file_path`       varchar(500)  NULL     COMMENT '完整路径',
    `collect`         tinyint(1)    NOT NULL DEFAULT 0 COMMENT '是否收藏',
    `file_size`       bigint        NULL     COMMENT '文件大小',
    `time_len`        double        NULL     COMMENT '时长',
    `creator`         varchar(64)   NOT NULL DEFAULT '' COMMENT '创建者',
    `create_time`     datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater`         varchar(64)   NOT NULL DEFAULT '' COMMENT '更新者',
    `update_time`     datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted`         bit(1)        NOT NULL DEFAULT b'0' COMMENT '是否删除',
    `tenant_id`       bigint        NOT NULL DEFAULT 0 COMMENT '租户编号',
    `project_id`      bigint        NOT NULL DEFAULT 0 COMMENT '项目编号',
    PRIMARY KEY (`id`) USING BTREE,
    INDEX `idx_app_stream` (`app`, `stream`) COMMENT '应用+流ID索引',
    INDEX `idx_call_id` (`call_id`) COMMENT '会话ID索引'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='云端录像记录';

-- ============================================================================
-- 五、录像计划
-- ============================================================================

-- ----------------------------
-- 录像计划基础信息（ProjectBaseDO）
-- ----------------------------
DROP TABLE IF EXISTS `video_record_plan`;
CREATE TABLE `video_record_plan` (
    `id`          bigint        NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `snap`        tinyint(1)    NOT NULL DEFAULT 0 COMMENT '是否抓图计划',
    `name`        varchar(255)  NOT NULL COMMENT '计划名称',
    `creator`     varchar(64)   NOT NULL DEFAULT '' COMMENT '创建者',
    `create_time` datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater`     varchar(64)   NOT NULL DEFAULT '' COMMENT '更新者',
    `update_time` datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted`     bit(1)        NOT NULL DEFAULT b'0' COMMENT '是否删除',
    `tenant_id`   bigint        NOT NULL DEFAULT 0 COMMENT '租户编号',
    `project_id`  bigint        NOT NULL DEFAULT 0 COMMENT '项目编号',
    PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='录像计划基础信息';

-- ----------------------------
-- 录像计划条目（ProjectBaseDO）
-- ----------------------------
DROP TABLE IF EXISTS `video_record_plan_item`;
CREATE TABLE `video_record_plan_item` (
    `id`          bigint  NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `start`       int     NULL COMMENT '开始时间（分钟）',
    `stop`        int     NULL COMMENT '结束时间（分钟）',
    `week_day`    int     NULL COMMENT '星期（0-6）',
    `plan_id`     bigint  NULL COMMENT '所属录像计划ID',
    `creator`     varchar(64)  NOT NULL DEFAULT '' COMMENT '创建者',
    `create_time` datetime     NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater`     varchar(64)  NOT NULL DEFAULT '' COMMENT '更新者',
    `update_time` datetime     NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted`     bit(1)       NOT NULL DEFAULT b'0' COMMENT '是否删除',
    `tenant_id`   bigint       NOT NULL DEFAULT 0 COMMENT '租户编号',
    `project_id`  bigint       NOT NULL DEFAULT 0 COMMENT '项目编号',
    PRIMARY KEY (`id`) USING BTREE,
    INDEX `idx_plan_id` (`plan_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='录像计划条目';

-- ============================================================================
-- 六、AI 智能视频分析
-- ============================================================================

-- ----------------------------
-- AI 告警记录（ProjectBaseDO）
-- ----------------------------
DROP TABLE IF EXISTS `video_ai_alert`;
CREATE TABLE `video_ai_alert` (
    `id`              bigint        NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `alert_id`        varchar(128)  NOT NULL COMMENT '告警唯一ID',
    `camera_id`       varchar(64)   NOT NULL COMMENT '摄像头ID（通道国标编号）',
    `roi_id`          varchar(64)   NOT NULL COMMENT 'ROI 区域ID',
    `bind_id`         varchar(64)   NULL     COMMENT '绑定ID',
    `alert_type`      varchar(50)   NOT NULL COMMENT '告警类型（leave_post/intrusion/crowd_detection）',
    `target_class`    varchar(50)   NULL     COMMENT '目标类别',
    `confidence`      double        NULL     COMMENT '置信度',
    `bbox`            varchar(255)  NULL     COMMENT 'JSON: [x1,y1,x2,y2]',
    `message`         text          NULL     COMMENT '告警消息',
    `image_path`      varchar(255)  NULL     COMMENT '告警图片路径',
    `duration_minutes` double       NULL     COMMENT '持续时长(分钟)',
    `extra_data`      text          NULL     COMMENT 'JSON 扩展',
    `received_at`     varchar(50)   NOT NULL COMMENT '接收时间',
    `creator`         varchar(64)   NOT NULL DEFAULT '' COMMENT '创建者',
    `create_time`     datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater`         varchar(64)   NOT NULL DEFAULT '' COMMENT '更新者',
    `update_time`     datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted`         bit(1)        NOT NULL DEFAULT b'0' COMMENT '是否删除',
    `tenant_id`       bigint        NOT NULL DEFAULT 0 COMMENT '租户编号',
    `project_id`      bigint        NOT NULL DEFAULT 0 COMMENT '项目编号',
    PRIMARY KEY (`id`) USING BTREE,
    UNIQUE KEY `uk_alert_id_deleted` (`alert_id`, `deleted`) COMMENT '告警UUID唯一（含逻辑删除）',
    INDEX `idx_camera_id` (`camera_id`),
    INDEX `idx_alert_type` (`alert_type`),
    INDEX `idx_received_at` (`received_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI 告警记录';

-- ----------------------------
-- AI 边缘设备状态（ProjectBaseDO）
-- ----------------------------
DROP TABLE IF EXISTS `video_ai_edge_device`;
CREATE TABLE `video_ai_edge_device` (
    `id`               bigint        NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `device_id`        varchar(64)   NOT NULL COMMENT '设备唯一ID',
    `status`           varchar(20)   NOT NULL DEFAULT 'offline' COMMENT '状态：online/offline',
    `last_heartbeat`   varchar(50)   NULL     COMMENT '最后心跳时间',
    `uptime_seconds`   bigint        NULL     COMMENT '运行时长(秒)',
    `frames_processed` bigint        NULL     COMMENT '已处理帧数',
    `alerts_generated` bigint        NULL     COMMENT '已生成告警数',
    `stream_stats`     text          NULL     COMMENT '流统计 JSON',
    `stream_count`     int           NULL     COMMENT '活跃视频流数量',
    `config_version`   varchar(64)   NULL     COMMENT '当前配置版本',
    `updated_at`       varchar(50)   NULL     COMMENT '更新时间',
    `creator`          varchar(64)   NOT NULL DEFAULT '' COMMENT '创建者',
    `create_time`      datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater`          varchar(64)   NOT NULL DEFAULT '' COMMENT '更新者',
    `update_time`      datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted`          bit(1)        NOT NULL DEFAULT b'0' COMMENT '是否删除',
    `tenant_id`        bigint        NOT NULL DEFAULT 0 COMMENT '租户编号',
    `project_id`       bigint        NOT NULL DEFAULT 0 COMMENT '项目编号',
    PRIMARY KEY (`id`) USING BTREE,
    UNIQUE KEY `uk_device_id_deleted` (`device_id`, `deleted`) COMMENT '边缘设备ID唯一（含逻辑删除）'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI 边缘设备状态';

-- ----------------------------
-- ROI 区域配置（ProjectBaseDO）
-- ----------------------------
DROP TABLE IF EXISTS `video_ai_roi`;
CREATE TABLE `video_ai_roi` (
    `id`            bigint        NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `roi_id`        varchar(50)   NOT NULL COMMENT 'UUID，与 FastAPI 端同步用',
    `camera_id`     varchar(50)   NOT NULL COMMENT '通道国标编号',
    `channel_db_id` int           NULL     COMMENT '视频通道表 ID',
    `device_id`     varchar(50)   NULL     COMMENT '设备国标编号',
    `name`          varchar(100)  NULL     COMMENT 'ROI 名称',
    `roi_type`      varchar(20)   NOT NULL DEFAULT 'rectangle' COMMENT '形状：rectangle/polygon',
    `coordinates`   text          NOT NULL COMMENT '归一化坐标 JSON',
    `color`         varchar(20)   NULL     DEFAULT '#FF0000' COMMENT '显示颜色',
    `priority`      int           NOT NULL DEFAULT 0 COMMENT '优先级',
    `enabled`       tinyint(1)    NOT NULL DEFAULT 1 COMMENT '启用状态',
    `extra_params`  text          NULL     COMMENT '扩展参数 JSON',
    `description`   varchar(500)  NULL     COMMENT '描述',
    `creator`       varchar(64)   NOT NULL DEFAULT '' COMMENT '创建者',
    `create_time`   datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater`       varchar(64)   NOT NULL DEFAULT '' COMMENT '更新者',
    `update_time`   datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted`       bit(1)        NOT NULL DEFAULT b'0' COMMENT '是否删除',
    `tenant_id`     bigint        NOT NULL DEFAULT 0 COMMENT '租户编号',
    `project_id`    bigint        NOT NULL DEFAULT 0 COMMENT '项目编号',
    PRIMARY KEY (`id`) USING BTREE,
    UNIQUE KEY `uk_roi_id_deleted` (`roi_id`, `deleted`) COMMENT 'ROI UUID唯一（含逻辑删除）',
    INDEX `idx_camera_id` (`camera_id`),
    INDEX `idx_device_id` (`device_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI ROI 区域配置';

-- ----------------------------
-- ROI-算法绑定（ProjectBaseDO）
-- ----------------------------
DROP TABLE IF EXISTS `video_ai_roi_algo_bind`;
CREATE TABLE `video_ai_roi_algo_bind` (
    `id`             bigint        NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `bind_id`        varchar(50)   NOT NULL COMMENT 'UUID，同步用',
    `roi_id`         varchar(50)   NOT NULL COMMENT 'ROI 的 UUID',
    `algo_code`      varchar(100)  NOT NULL COMMENT '算法编码',
    `params`         text          NULL     COMMENT '自定义参数 JSON',
    `priority`       int           NOT NULL DEFAULT 0 COMMENT '优先级',
    `enabled`        tinyint(1)    NOT NULL DEFAULT 1 COMMENT '启用状态',
    `template_id`    varchar(64)   NULL     COMMENT '引用的模板 ID',
    `param_override` text          NULL     COMMENT '覆盖模板的局部参数 JSON',
    `creator`        varchar(64)   NOT NULL DEFAULT '' COMMENT '创建者',
    `create_time`    datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater`        varchar(64)   NOT NULL DEFAULT '' COMMENT '更新者',
    `update_time`    datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted`        bit(1)        NOT NULL DEFAULT b'0' COMMENT '是否删除',
    `tenant_id`      bigint        NOT NULL DEFAULT 0 COMMENT '租户编号',
    `project_id`     bigint        NOT NULL DEFAULT 0 COMMENT '项目编号',
    PRIMARY KEY (`id`) USING BTREE,
    UNIQUE KEY `uk_bind_id_deleted` (`bind_id`, `deleted`) COMMENT '绑定UUID唯一（含逻辑删除）',
    INDEX `idx_roi_id` (`roi_id`),
    INDEX `idx_algo_code` (`algo_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI ROI-算法绑定';

-- ----------------------------
-- 配置变更日志（ProjectBaseDO）
-- ----------------------------
DROP TABLE IF EXISTS `video_ai_config_log`;
CREATE TABLE `video_ai_config_log` (
    `id`          bigint        NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `config_type` varchar(30)   NOT NULL COMMENT '类型：ROI/ALGORITHM/BIND',
    `config_id`   varchar(50)   NOT NULL COMMENT '目标ID',
    `old_value`   text          NULL     COMMENT '变更前 JSON',
    `new_value`   text          NULL     COMMENT '变更后 JSON',
    `updated_by`  varchar(100)  NULL     COMMENT '操作人',
    `updated_at`  varchar(50)   NULL     COMMENT '操作时间',
    `creator`     varchar(64)   NOT NULL DEFAULT '' COMMENT '创建者',
    `create_time` datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater`     varchar(64)   NOT NULL DEFAULT '' COMMENT '更新者',
    `update_time` datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted`     bit(1)        NOT NULL DEFAULT b'0' COMMENT '是否删除',
    `tenant_id`   bigint        NOT NULL DEFAULT 0 COMMENT '租户编号',
    `project_id`  bigint        NOT NULL DEFAULT 0 COMMENT '项目编号',
    PRIMARY KEY (`id`) USING BTREE,
    INDEX `idx_config_type` (`config_type`),
    INDEX `idx_config_id` (`config_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI 配置变更日志';

-- ----------------------------
-- AI 配置版本快照（ProjectBaseDO）
-- ----------------------------
DROP TABLE IF EXISTS `video_ai_config_snapshot`;
CREATE TABLE `video_ai_config_snapshot` (
    `id`          bigint        NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `version`     int           NOT NULL COMMENT '自增版本号',
    `scope_type`  varchar(20)   NOT NULL COMMENT 'CAMERA | ROI | BIND',
    `scope_id`    varchar(64)   NOT NULL COMMENT 'camera_id / roi_id / bind_id',
    `camera_id`   varchar(64)   NOT NULL COMMENT '所属摄像头',
    `snapshot`    longtext      NOT NULL COMMENT '完整 JSON 快照',
    `change_type` varchar(20)   NOT NULL COMMENT 'CREATE | UPDATE | DELETE | ROLLBACK | PUSH',
    `change_desc` varchar(255)  NULL     COMMENT '变更描述',
    `created_by`  varchar(64)   NULL     COMMENT '操作人',
    `created_at`  varchar(50)   NOT NULL COMMENT '创建时间',
    `creator`     varchar(64)   NOT NULL DEFAULT '' COMMENT '创建者',
    `create_time` datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater`     varchar(64)   NOT NULL DEFAULT '' COMMENT '更新者',
    `update_time` datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted`     bit(1)        NOT NULL DEFAULT b'0' COMMENT '是否删除',
    `tenant_id`   bigint        NOT NULL DEFAULT 0 COMMENT '租户编号',
    `project_id`  bigint        NOT NULL DEFAULT 0 COMMENT '项目编号',
    PRIMARY KEY (`id`) USING BTREE,
    INDEX `idx_scope` (`scope_type`, `scope_id`),
    INDEX `idx_camera` (`camera_id`),
    INDEX `idx_version` (`scope_type`, `scope_id`, `version` DESC)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI 配置版本快照';

-- ----------------------------
-- AI 摄像头截图持久化（ProjectBaseDO）
-- ----------------------------
DROP TABLE IF EXISTS `video_ai_camera_snapshot`;
CREATE TABLE `video_ai_camera_snapshot` (
    `id`          bigint        NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `camera_code` varchar(64)   NOT NULL COMMENT '摄像头编码',
    `cos_key`     varchar(512)  NOT NULL COMMENT 'COS 对象键（永久有效）',
    `updated_at`  datetime      NULL     DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
    `creator`     varchar(64)   NOT NULL DEFAULT '' COMMENT '创建者',
    `create_time` datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater`     varchar(64)   NOT NULL DEFAULT '' COMMENT '更新者',
    `update_time` datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted`     bit(1)        NOT NULL DEFAULT b'0' COMMENT '是否删除',
    `tenant_id`   bigint        NOT NULL DEFAULT 0 COMMENT '租户编号',
    `project_id`  bigint        NOT NULL DEFAULT 0 COMMENT '项目编号',
    PRIMARY KEY (`id`) USING BTREE,
    UNIQUE KEY `uk_camera_code_deleted` (`camera_code`, `deleted`) COMMENT '摄像头编码唯一（含逻辑删除）'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI 摄像头截图持久化';

-- ============================================================================
-- 七、租户级字典（TenantBaseDO，无 project_id）
-- ============================================================================

-- ----------------------------
-- AI 算法注册表（TenantBaseDO）
-- ----------------------------
DROP TABLE IF EXISTS `video_ai_algorithm`;
CREATE TABLE `video_ai_algorithm` (
    `id`            bigint        NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `algo_code`     varchar(100)  NOT NULL COMMENT '算法编码',
    `algo_name`     varchar(200)  NULL     COMMENT '算法名称',
    `target_class`  varchar(50)   NULL     COMMENT '目标类别',
    `param_schema`  text          NULL     COMMENT '参数模板 JSON',
    `global_params` text          NULL     COMMENT '用户自定义的全局默认参数 JSON',
    `description`   varchar(500)  NULL     COMMENT '描述',
    `is_active`     tinyint(1)    NOT NULL DEFAULT 1 COMMENT '是否可用',
    `sync_time`     varchar(50)   NULL     COMMENT '最后同步时间',
    `creator`       varchar(64)   NOT NULL DEFAULT '' COMMENT '创建者',
    `create_time`   datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater`       varchar(64)   NOT NULL DEFAULT '' COMMENT '更新者',
    `update_time`   datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted`       bit(1)        NOT NULL DEFAULT b'0' COMMENT '是否删除',
    `tenant_id`     bigint        NOT NULL DEFAULT 0 COMMENT '租户编号',
    PRIMARY KEY (`id`) USING BTREE,
    UNIQUE KEY `uk_algo_code_deleted` (`algo_code`, `deleted`) COMMENT '算法编码唯一（含逻辑删除）'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI 算法注册表';

-- ----------------------------
-- AI 算法参数模板（TenantBaseDO）
-- ----------------------------
DROP TABLE IF EXISTS `video_ai_algo_template`;
CREATE TABLE `video_ai_algo_template` (
    `id`            bigint        NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `template_id`   varchar(64)   NOT NULL COMMENT '模板唯一ID',
    `template_name` varchar(100)  NOT NULL COMMENT '模板名称',
    `algo_code`     varchar(50)   NOT NULL COMMENT '关联算法编码',
    `params`        text          NOT NULL COMMENT 'JSON 参数',
    `description`   varchar(255)  NULL     COMMENT '描述',
    `creator`       varchar(64)   NOT NULL DEFAULT '' COMMENT '创建者',
    `create_time`   datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater`       varchar(64)   NOT NULL DEFAULT '' COMMENT '更新者',
    `update_time`   datetime      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted`       bit(1)        NOT NULL DEFAULT b'0' COMMENT '是否删除',
    `tenant_id`     bigint        NOT NULL DEFAULT 0 COMMENT '租户编号',
    PRIMARY KEY (`id`) USING BTREE,
    UNIQUE KEY `uk_template_id_deleted` (`template_id`, `deleted`) COMMENT '模板ID唯一（含逻辑删除）',
    INDEX `idx_algo_code` (`algo_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI 算法参数模板';

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

-- 预置算法（与 FastAPI 边缘端保持一致）
INSERT INTO `video_ai_algorithm` (`algo_code`, `algo_name`, `target_class`, `param_schema`, `description`, `is_active`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES
('leave_post', '离岗检测', 'person',
 '{"confirm_on_duty_sec":{"type":"int","default":10,"min":1},"confirm_leave_sec":{"type":"int","default":30,"min":1},"leave_countdown_sec":{"type":"int","default":300,"min":0},"cooldown_sec":{"type":"int","default":600,"min":0},"working_hours":{"type":"list","default":[]}}',
 '检测人员是否在岗，支持工作时间段配置', 1, 'system', NOW(), 'system', NOW(), b'0', 0),
('intrusion', '周界入侵检测', 'person',
 '{"cooldown_seconds":{"type":"int","default":120,"min":0},"confirm_seconds":{"type":"int","default":5,"min":1}}',
 '检测人员进入指定区域', 1, 'system', NOW(), 'system', NOW(), b'0', 0);

SET FOREIGN_KEY_CHECKS = 1;
