#############################系统管理相关表#############################
#用户表
CREATE TABLE IF NOT EXISTS `user` (
    `id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `name` varchar(50) NOT NULL COMMENT '用户名',
    `login_name` varchar(50) NOT NULL COMMENT '登录名',
    `login_password` varchar(255) NOT NULL COMMENT '登录密码',
    `enable` int NOT NULL COMMENT '是否启用(1、启用 2、禁用)',
    `create_time` datetime(3) NOT NULL COMMENT '创建时间',
    `update_time` datetime(3) NOT NULL COMMENT '更新时间',
    PRIMARY KEY (`id`),
    KEY `I_user_login_name` (`login_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

#用户token表
CREATE TABLE IF NOT EXISTS `user_token` (
    `id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `token` varchar(50) NOT NULL COMMENT 'token',
    `user_id` int NOT NULL COMMENT '用户ID',
    `expiration_time` datetime(3) NOT NULL COMMENT '过期时间',
    `create_time` datetime(3) NOT NULL COMMENT '创建时间',
    `update_time` datetime(3) NOT NULL COMMENT '更新时间',
    PRIMARY KEY (`id`),
    KEY `I_user_token_user_id` (`user_id`),
    KEY `I_user_token_token` (`token`),
    KEY `I_user_token_expiration_time` (`expiration_time`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

#端口池
CREATE TABLE IF NOT EXISTS `port_pool` (
    `id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `group_id` int NOT NULL DEFAULT 1 COMMENT '分组ID',
    `port` int NOT NULL COMMENT '端口',
    `enable` int NOT NULL COMMENT '是否启用(1、启用 2、禁用)',
    `create_time` datetime(3) NOT NULL COMMENT '创建时间',
    `update_time` datetime(3) NOT NULL COMMENT '更新时间',
    PRIMARY KEY (`id`),
    KEY `I_port_pool_port` (`port`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

#端口分组
CREATE TABLE IF NOT EXISTS `port_group` (
    `id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `name` varchar(255) NOT NULL COMMENT '分组名称',
    `possessor_type` int NOT NULL DEFAULT '0' COMMENT '所有者类型 (0、全局共享 1、用户所有 2License所有) ',
    `possessor_id` int NOT NULL DEFAULT '-1' COMMENT '所有者id(当type为0时 固定为-1、当type为1时为用户id 、当type为2时为licenseid)',
    `enable` int NOT NULL COMMENT '是否启用(1、启用 2、禁用)',
    `create_time` datetime(3) NOT NULL COMMENT '创建时间',
    `update_time` datetime(3) NOT NULL COMMENT '更新时间',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4;

#安全组
CREATE TABLE IF NOT EXISTS `security_group` (
    `id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `name` varchar(20) NOT NULL COMMENT '安全组名称',
    `description` varchar(255) COMMENT '安全组描述',
    `user_id` int NOT NULL COMMENT '用户ID',
    `enable` int NOT NULL COMMENT '是否启用(1、启用 2、禁用)',
    `default_pass_type` int NOT NULL COMMENT '默认放行类型',
    `create_time` datetime(3) NOT NULL COMMENT '创建时间',
    `update_time` datetime(3) NOT NULL COMMENT '更新时间',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

#安全组规则
CREATE TABLE IF NOT EXISTS `security_rule` (
    `id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `group_id` int NOT NULL COMMENT '关联安全组',
    `name` varchar(20) NOT NULL COMMENT '规则名称',
    `description` varchar(255) NOT NULL COMMENT '规则描述',
    `rule` text NOT NULL COMMENT '规则内容',
    `pass_type` int NOT NULL COMMENT '放行类型',
    `priority` int(1) NOT NULL COMMENT '优先级',
    `user_id` int NOT NULL COMMENT '用户ID',
    `enable` int NOT NULL COMMENT '是否启用(1、启用 2、禁用)',
    `create_time` datetime(3) NOT NULL COMMENT '创建时间',
    `update_time` datetime(3) NOT NULL COMMENT '更新时间',
    PRIMARY KEY (`id`),
    KEY `I_security_rule_group_id_priority` (`group_id`, `priority`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

#############################代理配置相关表#############################
#license表
CREATE TABLE IF NOT EXISTS `license` (
    `id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `name` varchar(50) NOT NULL COMMENT 'license名称',
    `key` varchar(100) NOT NULL COMMENT 'license key',
    `user_id` int NOT NULL COMMENT '用户ID',
    `up_limit_rate` varchar(20) DEFAULT NULL COMMENT '上传限速',
    `down_limit_rate` varchar(20) DEFAULT NULL COMMENT '下载限速',
    `is_online` int NOT NULL COMMENT '是否在线（1、在线 2、离线）',
    `enable` int NOT NULL COMMENT '是否启用(1、启用 2、禁用)',
    `create_time` datetime(3) NOT NULL COMMENT '创建时间',
    `update_time` datetime(3) NOT NULL COMMENT '更新时间',
    PRIMARY KEY (`id`) USING BTREE,
    KEY `I_license_key` (`key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

#端口映射表
CREATE TABLE IF NOT EXISTS `port_mapping` (
    `id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `license_id` int NOT NULL COMMENT 'licenseID',
    `protocal` varchar(10) NOT NULL DEFAULT 'TCP' COMMENT '协议',
    `subdomain` varchar(50) DEFAULT NULL COMMENT '子域名（仅HTTP时有效）',
    `server_port` int NOT NULL COMMENT '服务端端口',
    `client_ip` varchar(20) NOT NULL COMMENT '客户端IP',
    `client_port` int NOT NULL COMMENT '客户端端口',
    `up_limit_rate` varchar(20) DEFAULT NULL COMMENT '上传限速',
    `down_limit_rate` varchar(20) DEFAULT NULL COMMENT '下载限速',
    `is_online` int NOT NULL COMMENT '是否在线（1、在线 2、离线）',
    `description` varchar(100) DEFAULT NULL COMMENT '描述',
    `proxy_responses` int NOT NULL DEFAULT 0 COMMENT '代理响应数据包数量',
    `proxy_timeout_ms` int NOT NULL DEFAULT 0 COMMENT '代理超时毫秒数',
    `enable` int NOT NULL COMMENT '是否启用(1、启用 2、禁用)',
    `security_group_id` int DEFAULT 0 COMMENT '安全组Id',
    `create_time` datetime(3) NOT NULL COMMENT '创建时间',
    `update_time` datetime(3) NOT NULL COMMENT '更新时间',
    PRIMARY KEY (`id`),
    KEY `I_port_mapping_server_port` (`server_port`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
#############################日志管理相关表#############################
#用户登录记录表
CREATE TABLE IF NOT EXISTS `user_login_record` (
    `id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `user_id` int NOT NULL COMMENT '用户ID',
    `ip` varchar(50) NOT NULL COMMENT 'IP',
    `token` varchar(100) NOT NULL COMMENT 'token',
    `type` int NOT NULL COMMENT '类型（1、登录 2、登出）',
    `create_time` datetime(3) NOT NULL COMMENT '创建时间',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
#客户端连接记录表
CREATE TABLE IF NOT EXISTS `client_connect_record` (
    `id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `ip` varchar(50) NOT NULL COMMENT 'IP',
    `license_id` int NOT NULL COMMENT 'licenseId',
    `type` int NOT NULL COMMENT '类型（1、连接 2、断开连接）',
    `msg` varchar(512) DEFAULT NULL COMMENT '消息',
    `code` int NOT NULL COMMENT '结果 （1、成功 2、失败）',
    `err` text DEFAULT NULL COMMENT '异常信息',
    `create_time` datetime(3) NOT NULL COMMENT '创建时间',
    PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
#############################调度管理相关表#############################
#触发器信息表
CREATE TABLE IF NOT EXISTS `job_info` (
    `id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `desc` varchar(255) NOT NULL COMMENT '描述',
    `handler` varchar(255) NOT NULL COMMENT '处理器',
    `cron` varchar(128) NOT NULL COMMENT 'cron',
    `param` varchar(512) DEFAULT NULL COMMENT '参数',
    `alarm_email` varchar(255) DEFAULT NULL COMMENT '报警邮箱',
    `alarm_ding` varchar(255) DEFAULT NULL COMMENT '报警钉钉配置',
    `enable` int NOT NULL COMMENT '是否启用(1、启用 2、禁用)',
    `create_time` datetime(3) NOT NULL COMMENT '创建时间',
    `update_time` datetime(3) NOT NULL COMMENT '更新时间',
    PRIMARY KEY (`id`),
    KEY `I_job_info_handler` (`handler`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

#触发器日志表
CREATE TABLE IF NOT EXISTS `job_log` (
    `id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `job_id` int NOT NULL COMMENT 'JobId',
    `handler` varchar(255) NOT NULL COMMENT '处理器',
    `param` varchar(512) DEFAULT NULL COMMENT '参数',
    `code` int NOT NULL COMMENT '结果（1、成功 2、失败）',
    `msg` text COMMENT '消息',
    `alarm_status` int NOT NULL COMMENT '报警状态（1、未报警 2、已报警）',
    `create_time` datetime(3) NOT NULL COMMENT '创建时间',
    PRIMARY KEY (`id`) USING BTREE,
    KEY `I_job_log_create_time` (`create_time`) USING BTREE,
    KEY `I_job_log_code` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

#############################报表管理相关表#############################
#流量统计报表-分钟(保留24小时)
CREATE TABLE IF NOT EXISTS `flow_report_minute` (
    `id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `user_id` int NOT NULL COMMENT '用户ID',
    `license_id` int NOT NULL COMMENT 'licenseId',
    `write_bytes` bigint NOT NULL COMMENT '写入流量',
    `read_bytes` bigint NOT NULL COMMENT '读取流量',
    `date` datetime(3) NOT NULL COMMENT '时间',
    `date_str` varchar(20) NOT NULL COMMENT '时间 yyyy-MM-dd HH:mm',
    `create_time` datetime(3) NOT NULL COMMENT '创建时间',
    PRIMARY KEY (`id`),
    KEY `I_flow_report_minute_create_time` (`create_time`) USING BTREE,
    KEY `I_flow_report_minute_date` (`date`) USING BTREE,
    KEY `I_flow_report_minute_user_id` (`user_id`),
    KEY `I_flow_report_minute_license_id` (`license_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

#流量统计报表-小时(保留60天)
CREATE TABLE IF NOT EXISTS `flow_report_hour` (
    `id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `user_id` int NOT NULL COMMENT '用户ID',
    `license_id` int NOT NULL COMMENT 'licenseId',
    `write_bytes` bigint NOT NULL COMMENT '写入流量',
    `read_bytes` bigint NOT NULL COMMENT '读取流量',
    `date` datetime(3) NOT NULL COMMENT '时间',
    `date_str` varchar(20) NOT NULL COMMENT '时间 yyyy-MM-dd HH',
    `create_time` datetime(3) NOT NULL COMMENT '创建时间',
    PRIMARY KEY (`id`),
    KEY `I_flow_report_hour_create_time` (`create_time`) USING BTREE,
    KEY `I_flow_report_hour_date` (`date`) USING BTREE,
    KEY `I_flow_report_hour_user_id` (`user_id`),
    KEY `I_flow_report_hour_license_id` (`license_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

#流量统计报表-天(保留1年)
CREATE TABLE IF NOT EXISTS `flow_report_day` (
    `id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `user_id` int NOT NULL COMMENT '用户ID',
    `license_id` int NOT NULL COMMENT 'licenseId',
    `write_bytes` bigint NOT NULL COMMENT '写入流量',
    `read_bytes` bigint NOT NULL COMMENT '读取流量',
    `date` datetime(3) NOT NULL COMMENT '时间',
    `date_str` varchar(20) NOT NULL COMMENT '时间 yyyy-MM-dd',
    `create_time` datetime(3) NOT NULL COMMENT '创建时间',
    PRIMARY KEY (`id`),
    KEY `I_flow_report_day_create_time` (`create_time`) USING BTREE,
    KEY `I_flow_report_day_date` (`date`) USING BTREE,
    KEY `I_flow_report_day_user_id` (`user_id`),
    KEY `I_flow_report_day_license_id` (`license_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

#流量统计报表-月(全量保留)
CREATE TABLE IF NOT EXISTS `flow_report_month` (
    `id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `user_id` int NOT NULL COMMENT '用户ID',
    `license_id` int NOT NULL COMMENT 'licenseId',
    `write_bytes` bigint NOT NULL COMMENT '写入流量',
    `read_bytes` bigint NOT NULL COMMENT '读取流量',
    `date` datetime(3) NOT NULL COMMENT '时间',
    `date_str` varchar(20) NOT NULL COMMENT '时间 yyyy-MM',
    `create_time` datetime(3) NOT NULL COMMENT '创建时间',
    PRIMARY KEY (`id`),
    KEY `I_flow_report_month_create_time` (`create_time`) USING BTREE,
    KEY `I_flow_report_month_date` (`date`) USING BTREE,
    KEY `I_flow_report_month_user_id` (`user_id`),
    KEY `I_flow_report_month_license_id` (`license_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

