-- liquibase formatted sql

-- changeset charles7c:1
-- comment 初始化表结构
CREATE TABLE IF NOT EXISTS `sys_menu`
(
    `id`          bigint(20)          NOT NULL AUTO_INCREMENT COMMENT 'ID',
    `title`       varchar(30)         NOT NULL COMMENT '标题',
    `parent_id`   bigint(20)          NOT NULL DEFAULT 0 COMMENT '上级菜单ID',
    `type`        tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '类型（1：目录；2：菜单；3：按钮）',
    `path`        varchar(255)                 DEFAULT NULL COMMENT '路由地址',
    `name`        varchar(50)                  DEFAULT NULL COMMENT '组件名称',
    `component`   varchar(255)                 DEFAULT NULL COMMENT '组件路径',
    `redirect`    varchar(255)                 DEFAULT NULL COMMENT '重定向地址',
    `icon`        varchar(50)                  DEFAULT NULL COMMENT '图标',
    `is_external` bit(1)                       DEFAULT b'0' COMMENT '是否外链',
    `is_cache`    bit(1)                       DEFAULT b'0' COMMENT '是否缓存',
    `is_hidden`   bit(1)                       DEFAULT b'0' COMMENT '是否隐藏',
    `permission`  varchar(100)                 DEFAULT NULL COMMENT '权限标识',
    `sort`        int                 NOT NULL DEFAULT 999 COMMENT '排序',
    `status`      tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '状态（1：启用；2：禁用）',
    `create_user` bigint(20)          NOT NULL COMMENT '创建人',
    `create_time` datetime            NOT NULL COMMENT '创建时间',
    `update_user` bigint(20)                   DEFAULT NULL COMMENT '修改人',
    `update_time` datetime                     DEFAULT NULL COMMENT '修改时间',
    PRIMARY KEY (`id`),
    UNIQUE INDEX `uk_title_parent_id` (`title`, `parent_id`),
    INDEX `idx_parent_id` (`parent_id`),
    INDEX `idx_create_user` (`create_user`),
    INDEX `idx_update_user` (`update_user`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='菜单表';

CREATE TABLE IF NOT EXISTS `sys_dept`
(
    `id`          bigint(20)          NOT NULL AUTO_INCREMENT COMMENT 'ID',
    `name`        varchar(30)         NOT NULL COMMENT '名称',
    `parent_id`   bigint(20)          NOT NULL DEFAULT 0 COMMENT '上级部门ID',
    `ancestors`   varchar(512)        NOT NULL DEFAULT '' COMMENT '祖级列表',
    `description` varchar(200)                 DEFAULT NULL COMMENT '描述',
    `sort`        int                 NOT NULL DEFAULT 999 COMMENT '排序',
    `status`      tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '状态（1：启用；2：禁用）',
    `is_system`   bit(1)              NOT NULL DEFAULT b'0' COMMENT '是否为系统内置数据',
    `create_user` bigint(20)          NOT NULL COMMENT '创建人',
    `create_time` datetime            NOT NULL COMMENT '创建时间',
    `update_user` bigint(20)                   DEFAULT NULL COMMENT '修改人',
    `update_time` datetime                     DEFAULT NULL COMMENT '修改时间',
    PRIMARY KEY (`id`),
    UNIQUE INDEX `uk_name_parent_id` (`name`, `parent_id`),
    INDEX `idx_parent_id` (`parent_id`),
    INDEX `idx_create_user` (`create_user`),
    INDEX `idx_update_user` (`update_user`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='部门表';

CREATE TABLE IF NOT EXISTS `sys_role`
(
    `id`                  bigint(20)  NOT NULL AUTO_INCREMENT COMMENT 'ID',
    `name`                varchar(30) NOT NULL COMMENT '名称',
    `code`                varchar(30) NOT NULL COMMENT '编码',
    `data_scope`          tinyint(1)  NOT NULL DEFAULT 4 COMMENT '数据权限（1：全部数据权限；2：本部门及以下数据权限；3：本部门数据权限；4：仅本人数据权限；5：自定义数据权限）',
    `description`         varchar(200)         DEFAULT NULL COMMENT '描述',
    `sort`                int         NOT NULL DEFAULT 999 COMMENT '排序',
    `is_system`           bit(1)      NOT NULL DEFAULT b'0' COMMENT '是否为系统内置数据',
    `menu_check_strictly` bit(1)               DEFAULT b'1' COMMENT '菜单选择是否父子节点关联',
    `dept_check_strictly` bit(1)               DEFAULT b'1' COMMENT '部门选择是否父子节点关联',
    `create_user`         bigint(20)  NOT NULL COMMENT '创建人',
    `create_time`         datetime    NOT NULL COMMENT '创建时间',
    `update_user`         bigint(20)           DEFAULT NULL COMMENT '修改人',
    `update_time`         datetime             DEFAULT NULL COMMENT '修改时间',
    PRIMARY KEY (`id`),
    UNIQUE INDEX `uk_name` (`name`),
    UNIQUE INDEX `uk_code` (`code`),
    INDEX `idx_create_user` (`create_user`),
    INDEX `idx_update_user` (`update_user`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='角色表';

CREATE TABLE IF NOT EXISTS `sys_user`
(
    `id`             bigint(20)          NOT NULL AUTO_INCREMENT COMMENT 'ID',
    `username`       varchar(64)         NOT NULL COMMENT '用户名',
    `nickname`       varchar(30)         NOT NULL COMMENT '昵称',
    `password`       varchar(255)                 DEFAULT NULL COMMENT '密码',
    `gender`         tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '性别（0：未知；1：男；2：女）',
    `email`          varchar(255)                 DEFAULT NULL COMMENT '邮箱',
    `phone`          varchar(255)                 DEFAULT NULL COMMENT '手机号码',
    `avatar`         longtext                     DEFAULT NULL COMMENT '头像',
    `description`    varchar(200)                 DEFAULT NULL COMMENT '描述',
    `status`         tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '状态（1：启用；2：禁用）',
    `is_system`      bit(1)              NOT NULL DEFAULT b'0' COMMENT '是否为系统内置数据',
    `pwd_reset_time` datetime                     DEFAULT NULL COMMENT '最后一次修改密码时间',
    `dept_id`        bigint(20)          NOT NULL COMMENT '部门ID',
    `create_user`    bigint(20)                   DEFAULT NULL COMMENT '创建人',
    `create_time`    datetime            NOT NULL COMMENT '创建时间',
    `update_user`    bigint(20)                   DEFAULT NULL COMMENT '修改人',
    `update_time`    datetime                     DEFAULT NULL COMMENT '修改时间',
    PRIMARY KEY (`id`),
    UNIQUE INDEX `uk_username` (`username`),
    UNIQUE INDEX `uk_email` (`email`),
    UNIQUE INDEX `uk_phone` (`phone`),
    INDEX `idx_dept_id` (`dept_id`),
    INDEX `idx_create_user` (`create_user`),
    INDEX `idx_update_user` (`update_user`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='用户表';

CREATE TABLE IF NOT EXISTS `sys_user_password_history`
(
    `id`          bigint(20)   NOT NULL AUTO_INCREMENT COMMENT 'ID',
    `user_id`     bigint(20)   NOT NULL COMMENT '用户ID',
    `password`    varchar(255) NOT NULL COMMENT '密码',
    `create_time` datetime     NOT NULL COMMENT '创建时间',
    PRIMARY KEY (`id`),
    INDEX `idx_user_id` (`user_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='用户历史密码表';

CREATE TABLE IF NOT EXISTS `sys_user_social`
(
    `id`              bigint(20)   NOT NULL AUTO_INCREMENT COMMENT 'ID',
    `source`          varchar(255) NOT NULL COMMENT '来源',
    `open_id`         varchar(255) NOT NULL COMMENT '开放ID',
    `user_id`         bigint(20)   NOT NULL COMMENT '用户ID',
    `meta_json`       text     DEFAULT NULL COMMENT '附加信息',
    `last_login_time` datetime DEFAULT NULL COMMENT '最后登录时间',
    `create_time`     datetime     NOT NULL COMMENT '创建时间',
    PRIMARY KEY (`id`),
    UNIQUE INDEX `uk_source_open_id` (`source`, `open_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='用户社会化关联表';

CREATE TABLE IF NOT EXISTS `sys_user_role`
(
    `id`      bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
    `user_id` bigint(20) NOT NULL COMMENT '用户ID',
    `role_id` bigint(20) NOT NULL COMMENT '角色ID',
    PRIMARY KEY (`id`),
    UNIQUE INDEX `uk_user_id_role_id` (`user_id`, `role_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='用户和角色关联表';

CREATE TABLE IF NOT EXISTS `sys_role_menu`
(
    `role_id` bigint(20) NOT NULL COMMENT '角色ID',
    `menu_id` bigint(20) NOT NULL COMMENT '菜单ID',
    PRIMARY KEY (`role_id`, `menu_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='角色和菜单关联表';

CREATE TABLE IF NOT EXISTS `sys_role_dept`
(
    `role_id` bigint(20) NOT NULL COMMENT '角色ID',
    `dept_id` bigint(20) NOT NULL COMMENT '部门ID',
    PRIMARY KEY (`role_id`, `dept_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='角色和部门关联表';

CREATE TABLE IF NOT EXISTS `sys_option`
(
    `id`            bigint(20)   NOT NULL AUTO_INCREMENT COMMENT 'ID',
    `category`      varchar(50)  NOT NULL COMMENT '类别',
    `name`          varchar(50)  NOT NULL COMMENT '名称',
    `code`          varchar(100) NOT NULL COMMENT '键',
    `value`         longtext     DEFAULT NULL COMMENT '值',
    `default_value` longtext     DEFAULT NULL COMMENT '默认值',
    `description`   varchar(200) DEFAULT NULL COMMENT '描述',
    `update_user`   bigint(20)   DEFAULT NULL COMMENT '修改人',
    `update_time`   datetime     DEFAULT NULL COMMENT '修改时间',
    PRIMARY KEY (`id`),
    UNIQUE INDEX `uk_category_code` (`category`, `code`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='参数表';

CREATE TABLE IF NOT EXISTS `sys_dict`
(
    `id`          bigint(20)  NOT NULL AUTO_INCREMENT COMMENT 'ID',
    `name`        varchar(30) NOT NULL COMMENT '名称',
    `code`        varchar(30) NOT NULL COMMENT '编码',
    `description` varchar(200)         DEFAULT NULL COMMENT '描述',
    `is_system`   bit(1)      NOT NULL DEFAULT b'0' COMMENT '是否为系统内置数据',
    `create_user` bigint(20)  NOT NULL COMMENT '创建人',
    `create_time` datetime    NOT NULL COMMENT '创建时间',
    `update_user` bigint(20)           DEFAULT NULL COMMENT '修改人',
    `update_time` datetime             DEFAULT NULL COMMENT '修改时间',
    PRIMARY KEY (`id`),
    UNIQUE INDEX `uk_name` (`name`),
    UNIQUE INDEX `uk_code` (`code`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='字典表';

CREATE TABLE IF NOT EXISTS `sys_dict_item`
(
    `id`          bigint(20)          NOT NULL AUTO_INCREMENT COMMENT 'ID',
    `label`       varchar(30)         NOT NULL COMMENT '标签',
    `value`       varchar(30)         NOT NULL COMMENT '值',
    `color`       varchar(30)                  DEFAULT NULL COMMENT '标签颜色',
    `sort`        int                 NOT NULL DEFAULT 999 COMMENT '排序',
    `description` varchar(200)                 DEFAULT NULL COMMENT '描述',
    `status`      tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '状态（1：启用；2：禁用）',
    `dict_id`     bigint(20)          NOT NULL COMMENT '字典ID',
    `create_user` bigint(20)          NOT NULL COMMENT '创建人',
    `create_time` datetime            NOT NULL COMMENT '创建时间',
    `update_user` bigint(20)                   DEFAULT NULL COMMENT '修改人',
    `update_time` datetime                     DEFAULT NULL COMMENT '修改时间',
    PRIMARY KEY (`id`),
    UNIQUE INDEX `uk_value_dict_id` (`value`, `dict_id`),
    INDEX `idx_dict_id` (`dict_id`),
    INDEX `idx_create_user` (`create_user`),
    INDEX `idx_update_user` (`update_user`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='字典项表';

CREATE TABLE IF NOT EXISTS `sys_log`
(
    `id`               bigint(20)          NOT NULL AUTO_INCREMENT COMMENT 'ID',
    `trace_id`         varchar(255)                 DEFAULT NULL COMMENT '链路ID',
    `description`      varchar(255)        NOT NULL COMMENT '日志描述',
    `module`           varchar(100)        NOT NULL COMMENT '所属模块',
    `request_url`      varchar(512)        NOT NULL COMMENT '请求URL',
    `request_method`   varchar(10)         NOT NULL COMMENT '请求方式',
    `request_headers`  text                         DEFAULT NULL COMMENT '请求头',
    `request_body`     text                         DEFAULT NULL COMMENT '请求体',
    `status_code`      int                 NOT NULL COMMENT '状态码',
    `response_headers` text                         DEFAULT NULL COMMENT '响应头',
    `response_body`    mediumtext                   DEFAULT NULL COMMENT '响应体',
    `time_taken`       bigint(20)          NOT NULL COMMENT '耗时（ms）',
    `ip`               varchar(100)                 DEFAULT NULL COMMENT 'IP',
    `address`          varchar(255)                 DEFAULT NULL COMMENT 'IP归属地',
    `browser`          varchar(100)                 DEFAULT NULL COMMENT '浏览器',
    `os`               varchar(100)                 DEFAULT NULL COMMENT '操作系统',
    `status`           tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '状态（1：成功；2：失败）',
    `error_msg`        text                         DEFAULT NULL COMMENT '错误信息',
    `create_user`      bigint(20)                   DEFAULT NULL COMMENT '创建人',
    `create_time`      datetime            NOT NULL COMMENT '创建时间',
    PRIMARY KEY (`id`),
    INDEX `idx_module` (`module`),
    INDEX `idx_ip` (`ip`),
    INDEX `idx_address` (`address`),
    INDEX `idx_create_time` (`create_time`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='系统日志表';

CREATE TABLE IF NOT EXISTS `sys_message`
(
    `id`          bigint(20)          NOT NULL AUTO_INCREMENT COMMENT 'ID',
    `title`       varchar(50)         NOT NULL COMMENT '标题',
    `content`     varchar(255)                 DEFAULT NULL COMMENT '内容',
    `type`        tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '类型（1：系统消息）',
    `create_user` bigint(20)                   DEFAULT NULL COMMENT '创建人',
    `create_time` datetime            NOT NULL COMMENT '创建时间',
    PRIMARY KEY (`id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='消息表';

CREATE TABLE IF NOT EXISTS `sys_message_user`
(
    `message_id` bigint(20) NOT NULL COMMENT '消息ID',
    `user_id`    bigint(11) NOT NULL COMMENT '用户ID',
    `is_read`    bit(1)     NOT NULL DEFAULT b'0' COMMENT '是否已读',
    `read_time`  datetime            DEFAULT NULL COMMENT '读取时间',
    PRIMARY KEY (`message_id`, `user_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='消息和用户关联表';

CREATE TABLE IF NOT EXISTS `sys_notice`
(
    `id`             bigint(20)          NOT NULL AUTO_INCREMENT COMMENT 'ID',
    `title`          varchar(150)        NOT NULL COMMENT '标题',
    `content`        mediumtext          NOT NULL COMMENT '内容',
    `type`           varchar(30)         NOT NULL COMMENT '类型',
    `effective_time` datetime                     DEFAULT NULL COMMENT '生效时间',
    `terminate_time` datetime                     DEFAULT NULL COMMENT '终止时间',
    `notice_scope`   tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '通知范围（1：所有人；2：指定用户）',
    `notice_users`   json                         DEFAULT NULL COMMENT '通知用户',
    `sort`           int                 NOT NULL DEFAULT 999 COMMENT '排序',
    `create_user`    bigint(20)          NOT NULL COMMENT '创建人',
    `create_time`    datetime            NOT NULL COMMENT '创建时间',
    `update_user`    bigint(20)                   DEFAULT NULL COMMENT '修改人',
    `update_time`    datetime                     DEFAULT NULL COMMENT '修改时间',
    PRIMARY KEY (`id`),
    INDEX `idx_create_user` (`create_user`),
    INDEX `idx_update_user` (`update_user`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='公告表';

CREATE TABLE IF NOT EXISTS `sys_storage`
(
    `id`          bigint(20)          NOT NULL AUTO_INCREMENT COMMENT 'ID',
    `name`        varchar(100)        NOT NULL COMMENT '名称',
    `code`        varchar(30)         NOT NULL COMMENT '编码',
    `type`        tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '类型（1：本地存储；2：对象存储）',
    `access_key`  varchar(255)                 DEFAULT NULL COMMENT 'Access Key',
    `secret_key`  varchar(255)                 DEFAULT NULL COMMENT 'Secret Key',
    `endpoint`    varchar(255)                 DEFAULT NULL COMMENT 'Endpoint',
    `bucket_name` varchar(255)        NOT NULL COMMENT 'Bucket',
    `domain`      varchar(255)                 DEFAULT NULL COMMENT '域名',
    `description` varchar(200)                 DEFAULT NULL COMMENT '描述',
    `is_default`  bit(1)              NOT NULL DEFAULT b'0' COMMENT '是否为默认存储',
    `sort`        int                 NOT NULL DEFAULT 999 COMMENT '排序',
    `status`      tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '状态（1：启用；2：禁用）',
    `create_user` bigint(20)          NOT NULL COMMENT '创建人',
    `create_time` datetime            NOT NULL COMMENT '创建时间',
    `update_user` bigint(20)                   DEFAULT NULL COMMENT '修改人',
    `update_time` datetime                     DEFAULT NULL COMMENT '修改时间',
    PRIMARY KEY (`id`),
    UNIQUE INDEX `uk_code` (`code`),
    INDEX `idx_create_user` (`create_user`),
    INDEX `idx_update_user` (`update_user`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='存储表';

CREATE TABLE IF NOT EXISTS `sys_file`
(
    `id`                 bigint(20)          NOT NULL AUTO_INCREMENT COMMENT 'ID',
    `name`               varchar(255)        NOT NULL COMMENT '名称',
    `original_name`      varchar(255)        NOT NULL COMMENT '原始名称',
    `size`               bigint(20)                   DEFAULT NULL COMMENT '大小（字节）',
    `parent_path`        varchar(512)        NOT NULL DEFAULT '/' COMMENT '上级目录',
    `path`               varchar(512)        NOT NULL COMMENT '路径',
    `extension`          varchar(32)                  DEFAULT NULL COMMENT '扩展名',
    `content_type`       varchar(255)                 DEFAULT NULL COMMENT '内容类型',
    `type`               tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '类型（0: 目录；1：其他；2：图片；3：文档；4：视频；5：音频）',
    `sha256`             varchar(256)                 DEFAULT NULL COMMENT 'SHA256值',
    `metadata`           text                         DEFAULT NULL COMMENT '元数据',
    `thumbnail_name`     varchar(255)                 DEFAULT NULL COMMENT '缩略图名称',
    `thumbnail_size`     bigint(20)                   DEFAULT NULL COMMENT '缩略图大小（字节)',
    `thumbnail_metadata` text                         DEFAULT NULL COMMENT '缩略图元数据',
    `storage_id`         bigint(20)          NOT NULL COMMENT '存储ID',
    `create_user`        bigint(20)          NOT NULL COMMENT '创建人',
    `create_time`        datetime            NOT NULL COMMENT '创建时间',
    `update_user`        bigint(20)                   DEFAULT NULL COMMENT '修改人',
    `update_time`        datetime                     DEFAULT NULL COMMENT '修改时间',
    PRIMARY KEY (`id`),
    INDEX `idx_type` (`type`),
    INDEX `idx_sha256` (`sha256`),
    INDEX `idx_storage_id` (`storage_id`),
    INDEX `idx_create_user` (`create_user`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='文件表';

CREATE TABLE IF NOT EXISTS `sys_client`
(
    `id`             bigint(20)          NOT NULL AUTO_INCREMENT COMMENT 'ID',
    `client_id`      varchar(50)         NOT NULL COMMENT '客户端ID',
    `client_type`    varchar(50)         NOT NULL COMMENT '客户端类型',
    `auth_type`      json                NOT NULL COMMENT '认证类型',
    `active_timeout` bigint(20)                   DEFAULT -1 COMMENT 'Token最低活跃频率（单位：秒，-1：不限制，永不冻结）',
    `timeout`        bigint(20)                   DEFAULT 2592000 COMMENT 'Token有效期（单位：秒，-1：永不过期）',
    `status`         tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '状态（1：启用；2：禁用）',
    `create_user`    bigint(20)          NOT NULL COMMENT '创建人',
    `create_time`    datetime            NOT NULL COMMENT '创建时间',
    `update_user`    bigint(20)                   DEFAULT NULL COMMENT '修改人',
    `update_time`    datetime                     DEFAULT NULL COMMENT '修改时间',
    PRIMARY KEY (`id`),
    UNIQUE INDEX `uk_client_id` (`client_id`),
    INDEX `idx_create_user` (`create_user`),
    INDEX `idx_update_user` (`update_user`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='客户端表';

CREATE TABLE IF NOT EXISTS `sys_sms_config`
(
    `id`              bigint(20)          NOT NULL AUTO_INCREMENT COMMENT 'ID',
    `name`            varchar(100)        NOT NULL COMMENT '名称',
    `supplier`        varchar(50)         NOT NULL COMMENT '厂商',
    `access_key`      varchar(255)        NOT NULL COMMENT 'Access Key',
    `secret_key`      varchar(255)        NOT NULL COMMENT 'Secret Key',
    `signature`       varchar(100)                 DEFAULT NULL COMMENT '短信签名',
    `template_id`     varchar(50)                  DEFAULT NULL COMMENT '模板ID',
    `weight`          int                          DEFAULT NULL COMMENT '负载均衡权重',
    `retry_interval`  int                          DEFAULT NULL COMMENT '重试间隔（单位：秒）',
    `max_retries`     int                          DEFAULT NULL COMMENT '重试次数',
    `maximum`         int                          DEFAULT NULL COMMENT '发送上限',
    `supplier_config` text                         DEFAULT NULL COMMENT '各个厂商独立配置',
    `is_default`      bit(1)              NOT NULL DEFAULT b'0' COMMENT '是否为默认配置',
    `status`          tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '状态（1：启用；2：禁用）',
    `create_user`     bigint(20)          NOT NULL COMMENT '创建人',
    `create_time`     datetime            NOT NULL COMMENT '创建时间',
    `update_user`     bigint(20)                   DEFAULT NULL COMMENT '修改人',
    `update_time`     datetime                     DEFAULT NULL COMMENT '修改时间',
    PRIMARY KEY (`id`),
    INDEX `idx_create_user` (`create_user`),
    INDEX `idx_update_user` (`update_user`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='短信配置表';

CREATE TABLE IF NOT EXISTS `sys_sms_log`
(
    `id`          bigint(20)          NOT NULL AUTO_INCREMENT COMMENT 'ID',
    `config_id`   bigint(20)          NOT NULL COMMENT '配置ID',
    `phone`       varchar(25)         NOT NULL COMMENT '手机号',
    `params`      text                         DEFAULT NULL COMMENT '参数配置',
    `status`      tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '发送状态（1：成功；2：失败）',
    `res_msg`     text                         DEFAULT NULL COMMENT '返回数据',
    `create_user` bigint(20)          NOT NULL COMMENT '创建人',
    `create_time` datetime            NOT NULL COMMENT '创建时间',
    PRIMARY KEY (`id`),
    INDEX `idx_config_id` (`config_id`),
    INDEX `idx_create_user` (`create_user`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='短信日志表';


-- -------------------------------------------------------------------------------------------------------------
-- ------------------------------
-- Table structure for aigc_model
-- ------------------------------
CREATE TABLE IF NOT EXISTS `aigc_model`
(
    `id`                    BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    `type`                  VARCHAR(100)    NOT NULL COMMENT '模型类型:Chat/Embedding/Image/Video/Audio',
    `model`                 VARCHAR(100)    NOT NULL COMMENT '官方模型名称',
    `version`               VARCHAR(50)  DEFAULT NULL COMMENT '模型版本号',
    `provider`              VARCHAR(100)    NOT NULL COMMENT '服务商',
    `name`                  VARCHAR(100)    NOT NULL COMMENT '自定义模型别名',
    `description`           VARCHAR(500) DEFAULT NULL COMMENT '模型描述',
    `status`                TINYINT(1)   DEFAULT 1 COMMENT '状态:0停用 1启用',
    `response_limit`        INT          DEFAULT 4096 COMMENT '最大响应长度',
    `max_tokens`            INT          DEFAULT 4096 COMMENT '上下文最大token数',
    `temperature`           DOUBLE       DEFAULT 0.7 COMMENT '随机性控制',
    `top_p`                 DOUBLE       DEFAULT 1.0 COMMENT '核心采样概率',
    -- 服务商特定参数
    `azure_deployment_name` varchar(100) DEFAULT NULL COMMENT 'Azure部署名称',
    `gemini_project`        varchar(100) DEFAULT NULL COMMENT 'Google Cloud项目ID',
    `gemini_location`       varchar(100) DEFAULT NULL COMMENT 'Google Cloud服务区域',
    -- 图片生成参数
    `image_size`            varchar(50)  DEFAULT '1024x1024' COMMENT '图片尺寸(支持1024x1024/1792x1024等)',
    `image_quality`         varchar(50)  DEFAULT 'standard' COMMENT '图片质量:standard/hd',
    `image_style`           varchar(50)  DEFAULT 'vivid' COMMENT '图片风格:vivid/natural',
    `timeout`               INT          DEFAULT 30 COMMENT 'API超时时间(秒)',
    `retry_strategy`        VARCHAR(50)  DEFAULT 'linear' COMMENT '重试策略',
    `rate_limit`            INT          DEFAULT 1000 COMMENT '每分钟最大请求数',
    `create_user`           BIGINT          NOT NULL COMMENT '创建人',
    `create_time`           DATETIME        NOT NULL COMMENT '创建时间',
    `update_user`           BIGINT       DEFAULT NULL COMMENT '修改人',
    `update_time`           DATETIME     DEFAULT NULL COMMENT '修改时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uniq_model_provider` (`model`, `provider`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='AIGC模型配置表';

-- ------------------------------
-- Table structure for aigc_model_secret
-- ------------------------------
CREATE TABLE IF NOT EXISTS `aigc_model_secret`
(
    `id`          BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    `model_id`    BIGINT UNSIGNED NOT NULL COMMENT '关联模型ID',
    `api_key`     VARCHAR(255) DEFAULT NULL COMMENT 'API密钥',
    `secret_key`  VARCHAR(255) DEFAULT NULL COMMENT '密钥',
    `base_url`    VARCHAR(255) DEFAULT NULL COMMENT '基础URL',
    `api_version` VARCHAR(50)  DEFAULT NULL COMMENT 'API版本',
    `dimension`     INT                     COMMENT '向量维数',
    `create_user` BIGINT          NOT NULL COMMENT '创建人',
    `create_time` DATETIME        NOT NULL COMMENT '创建时间',
    `update_user` BIGINT       DEFAULT NULL COMMENT '修改人',
    `update_time` DATETIME     DEFAULT NULL COMMENT '修改时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uniq_model_id` (`model_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='模型安全配置表';

-- ------------------------------
-- Table structure for aigc_knowledge
-- ------------------------------
CREATE TABLE IF NOT EXISTS `aigc_knowledge`
(
    `id`             BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    `name`           VARCHAR(100)    NOT NULL COMMENT '知识库名称(唯一)',
    `type`           VARCHAR(50)   DEFAULT 'document' COMMENT '类型:document/image/audio/video/multi',
    `file_type`      VARCHAR(100)  DEFAULT '*' COMMENT '允许的文件类型',
    `embed_config`   JSON            NOT NULL COMMENT '向量配置 {
                                                                     "store_type":"milvus",
                                                                     "collection":"default",
                                                                     "index_type":"HNSW",
                                                                     "dimension":768,
                                                                     "metadata_schema":{
                                                                       "author":"string",
                                                                       "publish_date":"date"
                                                                     }
                                                                   }',
    `embed_model_id` BIGINT UNSIGNED NOT NULL COMMENT '关联向量模型ID',
    `embed_store_id` BIGINT UNSIGNED NOT NULL COMMENT '关联向量存储ID',
    `chunk_strategy` VARCHAR(50)   DEFAULT 'fixed' COMMENT '切片策略:fixed/semantic/hybrid',
    `chunk_size`     INT           DEFAULT 500 COMMENT '切片大小',
    `chunk_overlap`  INT           DEFAULT 50 COMMENT '切片重叠大小',
    `last_sync_time` DATETIME      DEFAULT NULL COMMENT '最后向量化同步时间',
    `storage_size`   BIGINT        DEFAULT 0 COMMENT '知识库大小(字节)',
    `file_count`     INT           DEFAULT 0 COMMENT '包含文件数',
    `storage_config` JSON          DEFAULT NULL COMMENT '存储参数 {
                                                                     "bucket":"aigc-kb",
                                                                     "region":"ap-northeast-1",
                                                                     "prefix":"/knowledge/"
                                                                   }',
    `status`         TINYINT(1)    DEFAULT 1 COMMENT '状态:0停用 1启用 2同步中',
    `hit_count`      BIGINT        DEFAULT 0 COMMENT '被检索次数',
    `avg_relevance`  DECIMAL(5, 2) DEFAULT 0.00 COMMENT '平均检索相关度',
    `know_describe`              VARCHAR(500)    NOT NULL COMMENT '文档描述',
    `create_user`    BIGINT          NOT NULL COMMENT '创建人',
    `create_time`    DATETIME        NOT NULL COMMENT '创建时间',
    `update_user`    BIGINT        DEFAULT NULL COMMENT '修改人',
    `update_time`    DATETIME      DEFAULT NULL COMMENT '修改时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uniq_kb_name` (`name`),
    KEY `idx_embed_model` (`embed_model_id`),
    KEY `idx_embed_store` (`embed_store_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='AIGC知识库表';

-- ------------------------------
-- Table structure for aigc_doc
-- ------------------------------
CREATE TABLE IF NOT EXISTS `aigc_doc`
(
    `id`                BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    `knowledge_id`      BIGINT UNSIGNED NOT NULL COMMENT '所属知识库ID',
    `name`              VARCHAR(255)    NOT NULL COMMENT '文档名称',
    `file_type`         VARCHAR(20)     NOT NULL COMMENT '文件类型',
    `mime_type`         VARCHAR(100) DEFAULT NULL COMMENT 'MIME类型',
    `file_encoding`     VARCHAR(50)  DEFAULT 'UTF-8' COMMENT '文件编码',
    `file_hash`         CHAR(64)         COMMENT '文件哈希',
    `file_size`         BIGINT       DEFAULT 0 COMMENT '文件大小',
    `storage_path`      VARCHAR(512)    NOT NULL COMMENT '存储路径',
    `storage_region`    VARCHAR(50)  DEFAULT 'default' COMMENT '存储区域',
    `parsed_content`    LONGTEXT     DEFAULT NULL COMMENT '解析后文本',
    `original_content`  longblob     DEFAULT NULL COMMENT '原始文件内容',
    `metadata`          JSON         DEFAULT NULL COMMENT '元数据 {
                                                                      "author": "张三",
                                                                      "pages": 42,
                                                                      "language": "zh",
                                                                      "created_time": "2023-01-01"
                                                                    }',
    `processing_status` VARCHAR(20)  DEFAULT 'uploaded' COMMENT '处理状态:uploaded/parsing/parsed/failed',
    `chunk_config`      JSON         DEFAULT NULL COMMENT '切片配置 {
                                                                      "strategy":"auto",
                                                                      "chunk_size":1000,
                                                                      "overlap":50
                                                                    }',
    `chunk_details`     JSON         DEFAULT NULL COMMENT '切片详情 [
                                                                      {"id":1,"content":"...","vectors":32},
                                                                      {"id":2,"content":"...","vectors":28}
                                                                    ]',
    `vector_status`     VARCHAR(20)  DEFAULT 'pending' COMMENT '向量化状态:pending/processing/completed/failed',
    `error_log`         TEXT         DEFAULT NULL COMMENT '错误日志',
    `retry_count`       INT          DEFAULT 0 COMMENT '重试次数',
    `is_sensitive`      TINYINT(1)   DEFAULT 0 COMMENT '敏感内容标记',
    `version`           INT          DEFAULT 1 COMMENT '文档版本',
    `create_user`       BIGINT          NOT NULL COMMENT '创建人',
    `create_time`       DATETIME        NOT NULL COMMENT '创建时间',
    `update_user`       BIGINT       DEFAULT NULL COMMENT '修改人',
    `update_time`       DATETIME     DEFAULT NULL COMMENT '修改时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uniq_file_hash` (`file_hash`),
    KEY `idx_knowledge_status` (`knowledge_id`, `processing_status`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='智能文档表';

-- ------------------------------
-- Table structure for aigc_doc_chunk
-- ------------------------------
CREATE TABLE IF NOT EXISTS `aigc_doc_chunk`
(
    `id`              BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    `embed_store_id`  VARCHAR(100)   COMMENT '向量库的ID',
    `name`  VARCHAR(255)   COMMENT '文档名称',
    `doc_id`          BIGINT   COMMENT '文档ID',
    `knowledge_id`    BIGINT   COMMENT '知识库ID',
    `chunk_index`     INT              COMMENT '切片索引',
    `content`         TEXT             COMMENT '切片内容',
    `word_num`        INT           DEFAULT NULL COMMENT '字符数',
    `metadata`        JSON          DEFAULT NULL COMMENT '元数据',
    `embedding`       JSON          DEFAULT NULL COMMENT '向量数据(可选存储)',
    `status`          TINYINT(1)    DEFAULT 1 COMMENT '状态:0无效 1有效',
    `relevance_score` DECIMAL(5, 4) DEFAULT NULL COMMENT '相关性分数',
    `create_user`     BIGINT          NOT NULL COMMENT '创建人',
    `create_time`     DATETIME        NOT NULL COMMENT '创建时间',
    `update_user`     BIGINT        DEFAULT NULL COMMENT '修改人',
    `update_time`     DATETIME      DEFAULT NULL COMMENT '修改时间',
    PRIMARY KEY (`id`),
    KEY `idx_embed_store_id` (`embed_store_id`),
    KEY `idx_doc_id` (`doc_id`),
    KEY `idx_knowledge_id` (`knowledge_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='文档切片表';

-- ------------------------------
-- Table structure for aigc_embed_store
-- ------------------------------
CREATE TABLE IF NOT EXISTS `aigc_embed_store`
(
    `id`              BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    `name`            VARCHAR(100)    NOT NULL COMMENT '存储配置名称(唯一)',
    `provider`        VARCHAR(50)     NOT NULL COMMENT '供应商:milvus/pinecone/qdrant/pgvector/faiss',
    `endpoints`       JSON            NOT NULL COMMENT '连接端点 {"host":"192.168.1.10","port":19530}',
    `auth_config`     JSON            NOT NULL COMMENT '认证配置 {
                                                                  "username":"admin",
                                                                  "password":"****"
                                                                }',
    `database_config` JSON            NOT NULL COMMENT '数据库配置 {
                                                                  "database":"admin",
                                                                  "table":"****"
                                                                }',
    `vector_config`   JSON            NOT NULL COMMENT '向量配置 {
                                                                  "dimension":768,
                                                                  "metric_type":"L2",
                                                                  "index_type":"HNSW",
                                                                  "max_conn":16
                                                                }',
    `pool_config`     JSON       DEFAULT NULL COMMENT '连接池配置 {
                                                                  "max_conn":50,
                                                                  "timeout":5000,
                                                                  "retry_policy":"exponential"
                                                                }',
    `proxy_config`    JSON       DEFAULT NULL COMMENT '代理配置 {
                                                                  "proxy_host":"gateway.example.com",
                                                                  "proxy_port":443,
                                                                  "proxy_type":"https"
                                                                }',
    `last_health`     DATETIME   DEFAULT NULL COMMENT '最后健康检查时间',
    `health_status`   TINYINT(1) DEFAULT 0 COMMENT '健康状态:0异常 1正常',
    `vector_count`    BIGINT     DEFAULT 0 COMMENT '向量数量',
    `storage_usage`   BIGINT     DEFAULT 0 COMMENT '存储使用量(字节)',
    `create_user`     BIGINT          NOT NULL COMMENT '创建人',
    `create_time`     DATETIME        NOT NULL COMMENT '创建时间',
    `update_user`     BIGINT     DEFAULT NULL COMMENT '修改人',
    `update_time`     DATETIME   DEFAULT NULL COMMENT '修改时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uniq_store_name` (`name`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='向量存储配置表';

-- ------------------------------
-- Table structure for aigc_app
-- ------------------------------
CREATE TABLE IF NOT EXISTS `aigc_app`
(
    `id`              BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    `model_id`        BIGINT UNSIGNED NOT NULL COMMENT '绑定模型ID',
    `version`         VARCHAR(20)   DEFAULT '1.0.0' COMMENT '语义化版本号',
    `cover`           VARCHAR(512)  DEFAULT NULL COMMENT '封面图URL',
    `name`            VARCHAR(100)    NOT NULL COMMENT '应用名称(唯一)',
    `category`        VARCHAR(50)   DEFAULT '通用' COMMENT '应用分类',
    `tags`            VARCHAR(200)  DEFAULT NULL COMMENT '标签',
    `prompt`          TEXT            NOT NULL COMMENT '系统级提示词',
    `negative_prompt` TEXT          DEFAULT NULL COMMENT '负面提示词',
    `context_window`  INT           DEFAULT 5 COMMENT '上下文记忆轮次',
    `status`          TINYINT(1)    DEFAULT 1 COMMENT '状态:0下架 1发布 2审核中',
    `config`          JSON          DEFAULT NULL COMMENT '动态配置',
    `retention_days`  INT           DEFAULT 30 COMMENT '聊天记录保留天数',
    `invoke_count`    BIGINT        DEFAULT 0 COMMENT '调用次数统计',
    `avg_rating`      DECIMAL(3, 2) DEFAULT 0.00 COMMENT '平均评分',
    `create_user`     BIGINT          NOT NULL COMMENT '创建人',
    `create_time`     DATETIME        NOT NULL COMMENT '创建时间',
    `update_user`     BIGINT        DEFAULT NULL COMMENT '修改人',
    `update_time`     DATETIME      DEFAULT NULL COMMENT '修改时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uniq_app_name` (`name`),
    KEY `idx_category_status` (`category`, `status`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='AIGC应用配置表';

-- ------------------------------
-- Table structure for aigc_app_knowledge
-- ------------------------------
CREATE TABLE IF NOT EXISTS `aigc_app_knowledge`
(
    `id`               BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    `app_id`           BIGINT UNSIGNED NOT NULL COMMENT '应用ID',
    `knowledge_id`     BIGINT UNSIGNED NOT NULL COMMENT '知识库ID',
    `retrieval_config` JSON          DEFAULT NULL COMMENT '检索配置',
    `top_k`            INT           DEFAULT 3 COMMENT '检索返回数量',
    `score_threshold`  DECIMAL(5, 4) DEFAULT 0.7 COMMENT '相似度阈值',
    `create_user`      BIGINT          NOT NULL COMMENT '创建人',
    `create_time`      DATETIME        NOT NULL COMMENT '创建时间',
    `update_user`      BIGINT        DEFAULT NULL COMMENT '修改人',
    `update_time`      DATETIME      DEFAULT NULL COMMENT '修改时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_app_knowledge` (`app_id`, `knowledge_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='应用和知识库关联表';

-- ------------------------------
-- Table structure for aigc_app_api
-- ------------------------------
CREATE TABLE IF NOT EXISTS `aigc_app_api`
(
    `id`              BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    `app_id`          BIGINT UNSIGNED NOT NULL COMMENT '关联应用ID',
    `channel`         VARCHAR(50)     NOT NULL COMMENT '渠道类型:web/mobile/api/sdk',
    `api_key`         VARCHAR(255)    NOT NULL COMMENT 'API密钥',
    `secret_key`      VARCHAR(255)  DEFAULT NULL COMMENT 'API密钥(双密钥)',
    `status`          TINYINT(1)    DEFAULT 1 COMMENT '状态:0停用 1启用 2限流',
    `expire_time`     DATETIME      DEFAULT NULL COMMENT '过期时间',
    `ip_whitelist`    VARCHAR(1000) DEFAULT '0.0.0.0' COMMENT 'IP白名单',
    `rate_limit`      INT           DEFAULT 1000 COMMENT '每分钟最大请求数',
    `scopes`          VARCHAR(500)  DEFAULT 'all' COMMENT '权限范围',
    `model_whitelist` VARCHAR(500)  DEFAULT NULL COMMENT '允许访问的模型ID列表',
    `total_calls`     BIGINT        DEFAULT 0 COMMENT '总调用次数',
    `last_used_time`  DATETIME      DEFAULT NULL COMMENT '最后调用时间',
    `create_user`     BIGINT          NOT NULL COMMENT '创建人',
    `create_time`     DATETIME        NOT NULL COMMENT '创建时间',
    `update_user`     BIGINT        DEFAULT NULL COMMENT '修改人',
    `update_time`     DATETIME      DEFAULT NULL COMMENT '修改时间',
    PRIMARY KEY (`id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='应用API密钥表';

-- ------------------------------
-- Table structure for aigc_conversation
-- ------------------------------
CREATE TABLE IF NOT EXISTS `aigc_conversation`
(
    `id`              BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    `user_id`         BIGINT   COMMENT '所属用户ID',
    `app_id`          BIGINT   COMMENT '关联应用ID',
    `agent_id`        BIGINT UNSIGNED DEFAULT NULL COMMENT '关联智能体ID',
    `model_id`        BIGINT   COMMENT '使用模型ID',
    `title`           VARCHAR(200)     COMMENT '对话标题',
    `summary`         VARCHAR(500)    DEFAULT NULL COMMENT '对话摘要',
    `initial_prompt`  TEXT            DEFAULT NULL COMMENT '对话初始提示词快照',
    `message_count`   INT             DEFAULT 0 COMMENT '消息总数',
    `last_message_id` BIGINT          DEFAULT NULL COMMENT '最后消息ID',
    `last_active`     DATETIME         COMMENT '最后活动时间',
    `status`          TINYINT(1)      DEFAULT 1 COMMENT '状态:0关闭 1进行中 2置顶',
    `create_user`     BIGINT           COMMENT '创建人',
    `create_time`     DATETIME         COMMENT '创建时间',
    `update_user`     BIGINT          DEFAULT NULL COMMENT '修改人',
    `update_time`     DATETIME        DEFAULT NULL COMMENT '修改时间',
    PRIMARY KEY (`id`),
    KEY `idx_user_id` (`user_id`),
    KEY `idx_app_id` (`app_id`),
    KEY `idx_agent_id` (`agent_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='智能对话会话表';

-- ------------------------------
-- Table structure for aigc_message
-- ------------------------------
CREATE TABLE IF NOT EXISTS `aigc_message`
(
    `id`                BIGINT UNSIGNED                                      NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    `conversation_id`   BIGINT UNSIGNED                                      NOT NULL COMMENT '所属会话ID',
    `parent_id`         BIGINT       DEFAULT NULL COMMENT '父消息ID',
    `user_id`           BIGINT UNSIGNED                                      NOT NULL COMMENT '用户ID',
    `user_type`         TINYINT(1)   DEFAULT 1 COMMENT '用户类型:1普通用户 2API账号',
    `user_agent`        VARCHAR(500) DEFAULT NULL COMMENT '客户端UA信息',
    `client_ip`         VARCHAR(128) DEFAULT '0.0.0.0' COMMENT '客户端IP',
    `role`              ENUM ('user','assistant','system','tool','function') NOT NULL COMMENT '消息角色',
    `content`           LONGTEXT                                             NOT NULL COMMENT '消息内容',
    `content_type`      VARCHAR(50)  DEFAULT 'text' COMMENT '内容类型:text/image/audio/video/file',
    `content_metadata`  JSON         DEFAULT NULL COMMENT '元数据',
    `model_id`          BIGINT UNSIGNED                                      NOT NULL COMMENT '调用模型ID',
    `model_version`     VARCHAR(50)  DEFAULT NULL COMMENT '模型版本快照',
    `usage_token`             json                                                 COMMENT 'token消耗 {"prompt_tokens":20,"completion_tokens":50,"total_tokens":70}',
    `status`            TINYINT(1)   DEFAULT 1 COMMENT '状态:0删除 1正常 2标记',
    `error_info`        TEXT         DEFAULT NULL COMMENT '错误信息',
    `is_sensitive`      TINYINT(1)   DEFAULT 0 COMMENT '敏感内容标记',
    `retrieval_results` JSON         DEFAULT NULL COMMENT '知识库检索结果',
    `tool_calls`        JSON         DEFAULT NULL COMMENT '工具调用记录',
    `create_user`       BIGINT                                               NOT NULL COMMENT '创建人',
    `create_time`       DATETIME                                             NOT NULL COMMENT '创建时间',
    `update_user`       BIGINT       DEFAULT NULL COMMENT '修改人',
    `update_time`       DATETIME     DEFAULT NULL COMMENT '修改时间',
    PRIMARY KEY (`id`),
    KEY `idx_conversation_id` (`conversation_id`),
    KEY `idx_parent_id` (`parent_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='智能对话消息表';

-- ------------------------------
-- Table structure for aigc_message_feedback
-- ------------------------------
CREATE TABLE IF NOT EXISTS `aigc_message_feedback`
(
    `id`               BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    `message_id`       BIGINT UNSIGNED NOT NULL COMMENT '消息ID',
    `conversation_id`  BIGINT UNSIGNED NOT NULL COMMENT '会话ID',
    `user_id`          BIGINT UNSIGNED NOT NULL COMMENT '用户ID',
    `rating`           TINYINT(1)   DEFAULT NULL COMMENT '评分:1-5',
    `feedback_type`    VARCHAR(20)  DEFAULT NULL COMMENT '反馈类型:helpful/not_helpful/harmful/inaccurate',
    `feedback_content` VARCHAR(500) DEFAULT NULL COMMENT '反馈内容',
    `create_user`      BIGINT          NOT NULL COMMENT '创建人',
    `create_time`      DATETIME        NOT NULL COMMENT '创建时间',
    `update_user`      BIGINT       DEFAULT NULL COMMENT '修改人',
    `update_time`      DATETIME     DEFAULT NULL COMMENT '修改时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uniq_message_user` (`message_id`, `user_id`),
    KEY `idx_message_id` (`message_id`),
    KEY `idx_conversation_id` (`conversation_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='消息反馈表';

-- ------------------------------
-- Table structure for aigc_agent
-- ------------------------------
CREATE TABLE IF NOT EXISTS `aigc_agent`
(
    `id`               BIGINT UNSIGNED     NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    `name`             VARCHAR(50)         NOT NULL COMMENT '智能体名称',
    `code`             VARCHAR(50)         NOT NULL COMMENT '智能体唯一标识码',
    `agent_type`       VARCHAR(50)         NOT NULL COMMENT '智能体类型:assistant/task/workflow',
    `description`      VARCHAR(500)        NOT NULL COMMENT '智能体描述',
    `system_prompt`    TEXT                NOT NULL COMMENT '智能体提示词',
    `next_step_prompt` TEXT                         DEFAULT NULL COMMENT '智能体执行下一步任务的提示词',
    `model_id`         BIGINT UNSIGNED     NOT NULL COMMENT '关联模型ID',
    `icon`             VARCHAR(255)                 DEFAULT NULL COMMENT '图标URL',
    `config`           JSON                         DEFAULT NULL COMMENT '配置参数',
    `max_steps`        INT                          DEFAULT 10 COMMENT '最大步骤数',
    `timeout`          INT                          DEFAULT 60 COMMENT '执行超时时间(秒)',
    `runtime_status`   VARCHAR(50)                  DEFAULT NULL COMMENT '运行时状态',
    `status`           TINYINT(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '状态（1：启用；2：禁用）',
    `version`          VARCHAR(20)                  DEFAULT '1.0.0' COMMENT '版本号',
    `create_user`      BIGINT              NOT NULL COMMENT '创建人',
    `create_time`      DATETIME            NOT NULL COMMENT '创建时间',
    `update_user`      BIGINT                       DEFAULT NULL COMMENT '修改人',
    `update_time`      DATETIME                     DEFAULT NULL COMMENT '修改时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uniq_agent_code` (`code`),
    KEY `idx_model_id` (`model_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='智能体表';

INSERT INTO aigc_agent (id, name, code, agent_type, description, system_prompt, next_step_prompt, model_id, icon,
                        config, max_steps, timeout, runtime_status, status, version, create_user, create_time,
                        update_user, update_time)
VALUES (722203598359887877, 'BROWSER_AGENT', 'BROWSER_AGENT', 'task', '一个可以控制浏览器完成任务的浏览器代理', '你是一个设计用于自动化浏览器任务的AI代理。你的目标是按照规则完成最终任务。

# 输入格式
[index]<type>文本</type>
- index：交互的数字标识符
- type：HTML元素类型（按钮、输入框等）
- 文本：元素描述
示例：
[33]<button>提交表单</button>

- 只有带有[]中数字索引的元素可交互
- 不带[]的元素仅提供上下文

# 响应规则
1. 操作：你一次只可以做一个tool call 操作

2. 元素交互：
- 只使用有索引的元素
- 如用户要求点击某元素，但当期可交互元素中没有，则先查找对应的元素的对应像素位置，然后用click点击该元素

3. 导航和错误处理：
- 遇到困难时尝试替代方法
- 处理弹窗和cookie提示
- 处理验证码或寻找替代方案
- 等待页面加载

4. 任务完成：
- 如果完成则使用terminate工具

5. 视觉上下文：
- 使用提供的截图
- 引用元素索引

6. 表单填写：
- 处理动态字段变化', '为实现我的目标，下一步应该做什么？

重点：
1. 使用\'get_text\'操作获取页面内容，而不是滚动
2. 不用担心内容可见性或视口位置
3. 专注于基于文本的信息提取
4. 直接处理获取的文本数据
5. 重要：你必须在回复中使用至少一个工具才能取得进展！

考虑可见的内容和当前视口之外可能存在的内容。
有条理地行动 - 记住你的进度和迄今为止学到的知识。', 722203598359887866, null, null, 20, 60, null, 1, '1.0.0', 1,
        '2025-06-09 11:10:23', null, null);


-- ------------------------------
-- Table structure for aigc_tool
-- ------------------------------
CREATE TABLE IF NOT EXISTS `aigc_tool`
(
    `id`               BIGINT UNSIGNED     NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    `tool_key`         VARCHAR(50)         NOT NULL COMMENT '工具唯一标识',
    `name`             VARCHAR(50)         NOT NULL COMMENT '工具名称',
    `tool_group`       VARCHAR(50)         NOT NULL COMMENT '工具组:system/web/data/file/custom',
    `description`      VARCHAR(500)        NOT NULL COMMENT '工具描述',
    `parameters`       JSON                NOT NULL COMMENT '工具参数',
    `is_return_direct` TINYINT(1)          NOT NULL DEFAULT 0 COMMENT '是否直接返回结果',
    `status`           TINYINT(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '状态（1：启用；2：禁用）',
    `create_user`      BIGINT              NOT NULL COMMENT '创建人',
    `create_time`      DATETIME            NOT NULL COMMENT '创建时间',
    `update_user`      BIGINT                       DEFAULT NULL COMMENT '修改人',
    `update_time`      DATETIME                     DEFAULT NULL COMMENT '修改时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uniq_tool_key` (`tool_key`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='工具表';

INSERT INTO aigc_tool (id, `tool_key`, name, tool_group, description, parameters, is_return_direct, status, create_user,
                       create_time, update_user, update_time)
VALUES (722203598359887888, 'BROWSER_USE', 'BROWSER_USE', 'default-tool-group', '与网页浏览器交互，执行各种操作，如导航、元素交互、内容提取和标签页管理。搜索类优先考虑此工具。
支持的操作包括：
- \'navigate\'：访问特定URL，默认使用https://baidu.com
- \'click\'：按索引点击元素
- \'input_text\'：在元素中输入文本，对于百度(Baidu)，输入框的索引是
- \'key_enter\'：按回车键
- \'screenshot\'：捕获屏幕截图
- \'get_html\'：获取页面HTML内容
- \'get_text\'：获取页面文本内容
- \'execute_js\'：执行JavaScript代码
- \'scroll\'：滚动页面
- \'switch_tab\'：切换到特定标签页
- \'new_tab\'：打开新标签页
- \'close_tab\'：关闭当前标签页
- \'refresh\'：刷新当前页面', '{
  "type": "object",
  "required": [
    "action"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "URL for \'navigate\' or \'new_tab\' actions"
    },
    "text": {
      "type": "string",
      "description": "Text for \'input_text\' action"
    },
    "index": {
      "type": "integer",
      "description": "Element index for \'click\' or \'input_text\' actions"
    },
    "action": {
      "enum": [
        "navigate",
        "click",
        "input_text",
        "key_enter",
        "screenshot",
        "get_html",
        "get_text",
        "execute_js",
        "scroll",
        "switch_tab",
        "new_tab",
        "close_tab",
        "refresh"
      ],
      "type": "string",
      "description": "The browser action to perform"
    },
    "script": {
      "type": "string",
      "description": "JavaScript code for \'execute_js\' action"
    },
    "tab_id": {
      "type": "integer",
      "description": "Tab ID for \'switch_tab\' action"
    },
    "scroll_amount": {
      "type": "integer",
      "description": "Pixels to scroll (positive for down, negative for up) for \'scroll\' action"
    }
  },
  "dependencies": {
    "click": [
      "index"
    ],
    "scroll": [
      "scroll_amount"
    ],
    "new_tab": [
      "url"
    ],
    "navigate": [
      "url"
    ],
    "key_enter": [
      "index"
    ],
    "execute_js": [
      "script"
    ],
    "input_text": [
      "index",
      "text"
    ],
    "switch_tab": [
      "tab_id"
    ]
  }
}', 0, 1, 1, '2025-06-09 11:01:58', null, null);


-- ------------------------------
-- Table structure for aigc_tool
-- ------------------------------
CREATE TABLE IF NOT EXISTS `aigc_agent_tool`
(
    `id`       BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    `agent_id` BIGINT UNSIGNED NOT NULL COMMENT '智能体ID',
    `tool_id`  BIGINT UNSIGNED NOT NULL COMMENT '工具ID',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_agent_id_tool_id` (`agent_id`, `tool_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='智能体和工具关联表';

INSERT INTO aigc_agent_tool (id, agent_id, tool_id)
VALUES (722203598359887899, 722203598359887877, 722203598359887888);


-- ------------------------------
-- Table structure for aigc_agent_knowledge
-- ------------------------------
CREATE TABLE IF NOT EXISTS `aigc_agent_knowledge`
(
    `id`               BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    `agent_id`         BIGINT UNSIGNED NOT NULL COMMENT '智能体ID',
    `knowledge_id`     BIGINT UNSIGNED NOT NULL COMMENT '知识库ID',
    `retrieval_config` JSON          DEFAULT NULL COMMENT '检索配置',
    `top_k`            INT           DEFAULT 3 COMMENT '检索返回数量',
    `score_threshold`  DECIMAL(5, 4) DEFAULT 0.7 COMMENT '相似度阈值',
    `create_user`      BIGINT          NOT NULL COMMENT '创建人',
    `create_time`      DATETIME        NOT NULL COMMENT '创建时间',
    `update_user`      BIGINT        DEFAULT NULL COMMENT '修改人',
    `update_time`      DATETIME      DEFAULT NULL COMMENT '修改时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_agent_knowledge` (`agent_id`, `knowledge_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='智能体和知识库关联表';

-- ------------------------------
-- Table structure for aigc_agent_plan
-- ------------------------------
CREATE TABLE IF NOT EXISTS `aigc_agent_plan`
(
    `id`                   BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    `user_id`              BIGINT UNSIGNED DEFAULT NULL COMMENT '用户ID',
    `conversation_id`      BIGINT UNSIGNED DEFAULT NULL COMMENT '所属会话ID',
    `message_id`           BIGINT UNSIGNED DEFAULT NULL COMMENT '对话消息Id',
    `message_content`      LONGTEXT        NOT NULL COMMENT '对话消息内容',
    `think_input`          LONGTEXT        DEFAULT NULL COMMENT '规划思考过程内容输入',
    `think_output`         LONGTEXT        DEFAULT NULL COMMENT '规划思考过程内容输出',
    `title`                VARCHAR(500)    DEFAULT NULL COMMENT '计划主题,大模型根据用户消息生成',
    `start_time`           DATETIME        DEFAULT NULL COMMENT '规划开始时间',
    `end_time`             DATETIME        DEFAULT NULL COMMENT '规划结束时间',
    `duration`             LONG            DEFAULT NULL COMMENT '怪话时长(秒)',
    `current_plan_step_id` BIGINT UNSIGNED DEFAULT NULL COMMENT '当前执行的步骤编号',
    `completed`            TINYINT(1)      DEFAULT 0 COMMENT '计划是否完成:0未完成 1已完成',
    `summary`              TEXT            DEFAULT NULL COMMENT '规划总结',
    `create_user`          BIGINT          NOT NULL COMMENT '创建人',
    `create_time`          DATETIME        NOT NULL COMMENT '创建时间',
    `update_user`          BIGINT          DEFAULT NULL COMMENT '修改人',
    `update_time`          DATETIME        DEFAULT NULL COMMENT '修改时间',
    PRIMARY KEY (`id`),
    KEY `idx_message_id` (`message_id`),
    KEY `idx_conversation_id` (`conversation_id`),
    KEY `idx_user_id` (`user_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='智能体规划记录表';

-- ------------------------------
-- Table structure for aigc_agent_plan_step
-- ------------------------------
CREATE TABLE IF NOT EXISTS `aigc_agent_plan_step`
(
    `id`                   BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主键',
    `plan_id`              BIGINT UNSIGNED NOT NULL COMMENT '计划ID',
    `description`          VARCHAR(500) DEFAULT NULL COMMENT '计划描述:[BROWSER_AGENT] 打开百度主页',
    `step_index`           INT          DEFAULT NULL COMMENT '步骤序号',
    `agent_code`           VARCHAR(50)  DEFAULT NULL COMMENT '本次计划要使用的智能体:[BROWSER_AGENT]',
    `think_start_time`     DATETIME     DEFAULT NULL COMMENT '智能体思考开始的时间戳',
    `think_end_time`       DATETIME     DEFAULT NULL COMMENT '智能体思考完成的时间戳',
    `think_input`          TEXT         DEFAULT NULL COMMENT '智能体思考过程的输入上下文',
    `think_output`         TEXT         DEFAULT NULL COMMENT '智能体思考过程的输出结果',
    `think_duration`       LONG         DEFAULT NULL COMMENT '智能体思考时长(秒)',
    `execution_needed`     TINYINT(1)   DEFAULT 0 COMMENT '智能体思考是否确定需要执行步骤:0否 1是',
    `execution_params`     JSON         DEFAULT NULL COMMENT '此步骤执行参数',
    `execution_start_time` DATETIME     DEFAULT NULL COMMENT '插件执行此步骤开始的时间戳',
    `execution_end_time`   DATETIME     DEFAULT NULL COMMENT '插件执行此步骤完成的时间戳',
    `execution_duration`   LONG         DEFAULT NULL COMMENT '插件执行时长(秒)',
    `tool_name`            VARCHAR(50)  DEFAULT NULL COMMENT '智能体选中的工具名称',
    `tool_parameters`      JSON         DEFAULT NULL COMMENT '智能体选中的工具执行时需要的参数',
    `result`               TEXT         DEFAULT NULL COMMENT '步骤执行思考的结果',
    `status`               VARCHAR(20)  DEFAULT NULL COMMENT '智能体状态:IDLE/RUNNING/FINISHED',
    `completed`            TINYINT(1)   DEFAULT 0 COMMENT '是否完成:0未完成 1已完成',
    `stucked`              TINYINT(1)   DEFAULT 0 COMMENT '是否卡主:0未卡住 1已卡住',
    `error_message`        TEXT         DEFAULT NULL COMMENT '错误信息',
    `create_user`          BIGINT          NOT NULL COMMENT '创建人',
    `create_time`          DATETIME        NOT NULL COMMENT '创建时间',
    `update_user`          BIGINT       DEFAULT NULL COMMENT '修改人',
    `update_time`          DATETIME     DEFAULT NULL COMMENT '修改时间',
    PRIMARY KEY (`id`),
    KEY `idx_plan_id` (`plan_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4 COMMENT ='智能体规划步骤记录表';