-- ----------------------------
-- 一定要在与upms相同的数据库中执行该脚本。
-- ----------------------------

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- 在线表单字段表
-- ----------------------------
DROP TABLE IF EXISTS `zz_online_column`;
CREATE TABLE `zz_online_column`
(
    `column_id`               bigint(20)                                       NOT NULL COMMENT '主键Id',
    `column_name`             varchar(64) COLLATE utf8mb4_bin                  NOT NULL COMMENT '字段名',
    `table_id`                bigint(20)                                       NOT NULL COMMENT '数据表Id',
    `column_type`             varchar(32) CHARACTER SET utf8 COLLATE utf8_bin  NOT NULL COMMENT '数据表中的字段类型',
    `full_column_type`        varchar(32) CHARACTER SET utf8 COLLATE utf8_bin  NOT NULL COMMENT '数据表中的完整字段类型(包括了精度和刻度)',
    `primary_key`             bit(1)                                           NOT NULL COMMENT '是否为主键',
    `auto_increment`          bit(1)                                           NOT NULL COMMENT '是否是自增主键(0: 不是 1: 是)',
    `nullable`                bit(1)                                           NOT NULL COMMENT '是否可以为空 (0: 不可以为空 1: 可以为空)',
    `column_default`          varchar(255) CHARACTER SET utf8 COLLATE utf8_bin          DEFAULT NULL COMMENT '缺省值',
    `column_show_order`       int(11)                                          NOT NULL COMMENT '字段在数据表中的显示位置',
    `column_comment`          varchar(255) CHARACTER SET utf8 COLLATE utf8_bin          DEFAULT NULL COMMENT '数据表中的字段注释',
    `object_field_name`       varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '对象映射字段名称',
    `object_field_type`       varchar(32) CHARACTER SET utf8 COLLATE utf8_bin  NOT NULL COMMENT '对象映射字段类型',
    `numeric_precision`       int(11) COMMENT '数值型字段的精度',
    `numeric_scale`           int(11) COMMENT '数值型字段的刻度',
    `filter_type`             int(11)                                          NOT NULL DEFAULT 1 COMMENT '字段过滤类型',
    `parent_key`              bit(1)                                           NOT NULL COMMENT '是否是主键的父Id',
    `dept_filter`             bit(1)                                           NOT NULL COMMENT '是否部门过滤字段',
    `user_filter`             bit(1)                                           NOT NULL COMMENT '是否用户过滤字段',
    `field_kind`              int(11)                                                   DEFAULT NULL COMMENT '字段类别',
    `max_file_count`          int(11)                                                   DEFAULT NULL COMMENT '包含的文件文件数量，0表示无限制',
    `upload_file_system_type` int(11)                                                   DEFAULT 0 COMMENT '上传文件系统类型',
    `encoded_rule`            varchar(255)                                              DEFAULT NULL COMMENT '编码规则的JSON格式数据',
    `dict_id`                 bigint(20)                                                DEFAULT NULL COMMENT '字典Id',
    `update_time`             datetime                                         NOT NULL COMMENT '更新时间',
    `create_time`             datetime                                         NOT NULL COMMENT '创建时间',
    PRIMARY KEY (`column_id`),
    KEY `idx_table_id` (`table_id`) USING BTREE,
    KEY `idx_dict_id` (`dict_id`) USING BTREE
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_bin COMMENT ='在线表单字段表';

-- ----------------------------
-- 在线表单字段和字段规则关联中间表
-- ----------------------------
DROP TABLE IF EXISTS `zz_online_column_rule`;
CREATE TABLE `zz_online_column_rule`
(
    `column_id`      bigint(20) NOT NULL COMMENT '字段Id',
    `rule_id`        bigint(20) NOT NULL COMMENT '规则Id',
    `prop_data_json` text COLLATE utf8mb4_bin COMMENT '规则属性数据',
    PRIMARY KEY (`column_id`, `rule_id`) USING BTREE,
    KEY `idx_rule_id` (`rule_id`) USING BTREE
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_bin COMMENT ='在线表单字段和字段规则关联中间表';

-- ----------------------------
-- 在线表单数据源表
-- ----------------------------
DROP TABLE IF EXISTS `zz_online_datasource`;
CREATE TABLE `zz_online_datasource`
(
    `datasource_id`   bigint(20)                      NOT NULL COMMENT '主键Id',
    `datasource_name` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '数据源名称',
    `variable_name`   varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '数据源变量名',
    `dblink_id`       bigint(20)                      NOT NULL COMMENT '数据库链接Id',
    `master_table_id` bigint(20)                      NOT NULL COMMENT '主表Id',
    `update_time`     datetime                        NOT NULL COMMENT '更新时间',
    `create_time`     datetime                        NOT NULL COMMENT '创建时间',
    PRIMARY KEY (`datasource_id`),
    UNIQUE KEY `uk_variable_name` (`variable_name`) USING BTREE,
    KEY `idx_master_table_id` (`master_table_id`) USING BTREE
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_bin COMMENT ='在线表单数据源表';

-- ----------------------------
-- 在线表单数据源关联表
-- ----------------------------
DROP TABLE IF EXISTS `zz_online_datasource_relation`;
CREATE TABLE `zz_online_datasource_relation`
(
    `relation_id`      bigint(20)                       NOT NULL COMMENT '主键Id',
    `relation_name`    varchar(64) COLLATE utf8mb4_bin  NOT NULL COMMENT '关联名称',
    `variable_name`    varchar(128) COLLATE utf8mb4_bin NOT NULL COMMENT '变量名',
    `datasource_id`    bigint(20)                       NOT NULL COMMENT '主数据源Id',
    `relation_type`    int(11)                          NOT NULL COMMENT '关联类型',
    `master_column_id` bigint(20)                       NOT NULL COMMENT '主表关联字段Id',
    `slave_table_id`   bigint(20)                       NOT NULL COMMENT '从表Id',
    `slave_column_id`  bigint(20)                       NOT NULL COMMENT '从表关联字段Id',
    `cascade_delete`   bit(1)                           NOT NULL COMMENT '删除主表的时候是否级联删除一对一和一对多的从表数据，多对多只是删除关联，不受到这个标记的影响。',
    `left_join`        bit(1)                           NOT NULL COMMENT '是否左连接',
    `update_time`      datetime                         NOT NULL COMMENT '更新时间',
    `create_time`      datetime                         NOT NULL COMMENT '创建时间',
    PRIMARY KEY (`relation_id`) USING BTREE,
    UNIQUE KEY `idx_datasource_id_variable_name` (`datasource_id`, `variable_name`) USING BTREE
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_bin COMMENT ='在线表单数据源关联表';

-- ----------------------------
-- 在线表单数据源和数据表关联的中间表
-- ----------------------------
DROP TABLE IF EXISTS `zz_online_datasource_table`;
CREATE TABLE `zz_online_datasource_table`
(
    `id`            bigint(20) NOT NULL COMMENT '主键Id',
    `datasource_id` bigint(20) NOT NULL COMMENT '数据源Id',
    `relation_id`   bigint(20) DEFAULT NULL COMMENT '数据源关联Id',
    `table_id`      bigint(20) NOT NULL COMMENT '数据表Id',
    PRIMARY KEY (`id`) USING BTREE,
    KEY `idx_relation_id` (`relation_id`) USING BTREE,
    KEY `idx_datasource_id` (`datasource_id`) USING BTREE,
    KEY `idx_table_id` (`table_id`) USING BTREE
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_bin COMMENT ='在线表单数据源和数据表关联的中间表';

-- ----------------------------
-- 在线表单数据库链接表
-- ----------------------------
DROP TABLE IF EXISTS `zz_online_dblink`;
CREATE TABLE `zz_online_dblink`
(
    `dblink_id`              bigint(20)                      NOT NULL COMMENT '主键Id',
    `dblink_name`            varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '链接中文名称',
    `variable_name`          varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '链接英文名称',
    `dblink_desc`            varchar(512) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '链接描述',
    `dblink_config_constant` int                             NOT NULL COMMENT '数据源配置常量',
    `create_time`            datetime                        NOT NULL COMMENT '创建时间',
    PRIMARY KEY (`dblink_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_bin COMMENT ='在线表单数据库链接表';

-- ----------------------------
-- 为 zz_online_dblink 插入一条缺省数据。出于安全考虑，前端没有提供dblink的配置接口，因此，推荐手动维护。
-- 有关 dblink_config_constant 字段的数值，可参考在线文档。
-- ----------------------------

INSERT INTO `zz_online_dblink`
VALUES (1, 'first', 'first', '第一个链接', 0, CURDATE());

-- ----------------------------
-- 在线表单字典表
-- ----------------------------
DROP TABLE IF EXISTS `zz_online_dict`;
CREATE TABLE `zz_online_dict`
(
    `dict_id`                   bigint(20)                      NOT NULL COMMENT '主键Id',
    `dict_name`                 varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '字典名称',
    `dict_type`                 int(11)                         NOT NULL COMMENT '字典类型',
    `dblink_id`                 bigint(20)                       DEFAULT NULL COMMENT '数据库链接Id',
    `table_name`                varchar(64) COLLATE utf8mb4_bin  DEFAULT NULL COMMENT '字典表名称',
    `key_column_name`           varchar(64) COLLATE utf8mb4_bin  DEFAULT NULL COMMENT '字典表键字段名称',
    `parent_key_column_name`    varchar(64) COLLATE utf8mb4_bin  DEFAULT NULL COMMENT '字典表父键字段名称',
    `value_column_name`         varchar(64) COLLATE utf8mb4_bin  DEFAULT NULL COMMENT '字典值字段名称',
    `deleted_column_name`       varchar(64) COLLATE utf8mb4_bin  DEFAULT NULL COMMENT '逻辑删除字段',
    `user_filter_column_name`   varchar(64) COLLATE utf8mb4_bin  DEFAULT NULL COMMENT '用户过滤滤字段名称',
    `dept_filter_column_name`   varchar(64) COLLATE utf8mb4_bin  DEFAULT NULL COMMENT '部门过滤滤字段名称',
    `tenant_filter_column_name` varchar(64) COLLATE utf8mb4_bin  DEFAULT NULL COMMENT '租户过滤字段名称',
    `tree_flag`                 bit(1)                          NOT NULL COMMENT '是否树形标记',
    `dict_list_url`             varchar(512) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '获取字典列表数据的url',
    `dict_ids_url`              varchar(512) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '根据主键id批量获取字典数据的url',
    `dict_data_json`            text COLLATE utf8mb4_bin COMMENT '字典的JSON数据',
    `update_time`               datetime                        NOT NULL COMMENT '更新时间',
    `create_time`               datetime                        NOT NULL COMMENT '创建时间',
    PRIMARY KEY (`dict_id`) USING BTREE
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_bin COMMENT ='在线表单字典表';

-- ----------------------------
-- 在线表单表单表
-- ----------------------------
DROP TABLE IF EXISTS `zz_online_form`;
CREATE TABLE `zz_online_form`
(
    `form_id`         bigint(20)                      NOT NULL COMMENT '主键Id',
    `page_id`         bigint(20)                      NOT NULL COMMENT '页面id',
    `form_code`       varchar(128) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '表单编码',
    `form_name`       varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '表单名称',
    `form_kind`       int(11)                         NOT NULL COMMENT '表单类别',
    `form_type`       int(11)                         NOT NULL COMMENT '表单类型',
    `master_table_id` bigint(20)                      NOT NULL COMMENT '表单主表id',
    `widget_json`     mediumtext COLLATE utf8mb4_bin COMMENT '表单组件JSON',
    `params_json`     text COLLATE utf8mb4_bin COMMENT '表单参数JSON',
    `update_time`     datetime                        NOT NULL COMMENT '更新时间',
    `create_time`     datetime                        NOT NULL COMMENT '创建时间',
    PRIMARY KEY (`form_id`) USING BTREE,
    UNIQUE KEY `uk_page_id_form_code` (`page_id`, `form_code`) USING BTREE
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_bin COMMENT ='在线表单表单表';

-- ----------------------------
-- 在线表单表单和数据源关联中间表
-- ----------------------------
DROP TABLE IF EXISTS `zz_online_form_datasource`;
CREATE TABLE `zz_online_form_datasource`
(
    `id`            bigint(20) NOT NULL COMMENT '主键Id',
    `form_id`       bigint(20) NOT NULL COMMENT '表单Id',
    `datasource_id` bigint(20) NOT NULL COMMENT '数据源Id',
    PRIMARY KEY (`id`),
    KEY `idx_form_id` (`form_id`) USING BTREE,
    KEY `idx_datasource_id` (`datasource_id`) USING BTREE
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_bin COMMENT ='在线表单表单和数据源关联中间表';

-- ----------------------------
-- 在线表单页面表
-- ----------------------------
DROP TABLE IF EXISTS `zz_online_page`;
CREATE TABLE `zz_online_page`
(
    `page_id`     bigint(20)                      NOT NULL COMMENT '主键Id',
    `page_code`   varchar(32) COLLATE utf8mb4_bin          DEFAULT NULL COMMENT '页面编码',
    `page_name`   varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '页面名称',
    `page_type`   int(11)                         NOT NULL COMMENT '页面类型',
    `status`      int(11)                         NOT NULL COMMENT '页面编辑状态',
    `published`   bit(1)                          NOT NULL DEFAULT b'0' COMMENT '是否发布',
    `update_time` datetime                        NOT NULL COMMENT '更新时间',
    `create_time` datetime                        NOT NULL COMMENT '创建时间',
    PRIMARY KEY (`page_id`) USING BTREE
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_bin COMMENT ='在线表单页面表';

-- ----------------------------
-- 在线表单页面和数据源关联中间表
-- ----------------------------
DROP TABLE IF EXISTS `zz_online_page_datasource`;
CREATE TABLE `zz_online_page_datasource`
(
    `id`            bigint(20) NOT NULL COMMENT '主键Id',
    `page_id`       bigint(20) NOT NULL COMMENT '页面主键Id',
    `datasource_id` bigint(20) NOT NULL COMMENT '数据源主键Id',
    PRIMARY KEY (`id`),
    KEY `idx_page_id` (`page_id`) USING BTREE,
    KEY `idx_datasource_id` (`datasource_id`) USING BTREE
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_bin COMMENT ='在线表单页面和数据源关联中间表';

-- ----------------------------
-- 在线表单字段规则表
-- ----------------------------
DROP TABLE IF EXISTS `zz_online_rule`;
CREATE TABLE `zz_online_rule`
(
    `rule_id`      bigint(20)                      NOT NULL COMMENT '主键Id',
    `rule_name`    varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '规则名称',
    `rule_type`    int(11)                         NOT NULL COMMENT '规则类型',
    `builtin`      bit(1)                          NOT NULL COMMENT '内置规则标记',
    `pattern`      varchar(512) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '自定义规则的正则表达式',
    `update_time`  datetime                        NOT NULL COMMENT '更新时间',
    `create_time`  datetime                        NOT NULL COMMENT '创建时间',
    `deleted_flag` int(11)                         NOT NULL COMMENT '逻辑删除标记',
    PRIMARY KEY (`rule_id`) USING BTREE
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_bin COMMENT ='在线表单字段规则表';

INSERT INTO `zz_online_rule`
VALUES (1, '只允许整数', 1, b'1', NULL, CURDATE(), CURDATE(), 1);
INSERT INTO `zz_online_rule`
VALUES (2, '只允许数字', 2, b'1', NULL, CURDATE(), CURDATE(), 1);
INSERT INTO `zz_online_rule`
VALUES (3, '只允许英文字符', 3, b'1', NULL, CURDATE(), CURDATE(), 1);
INSERT INTO `zz_online_rule`
VALUES (4, '范围验证', 4, b'1', NULL, CURDATE(), CURDATE(), 1);
INSERT INTO `zz_online_rule`
VALUES (5, '邮箱格式验证', 5, b'1', NULL, CURDATE(), CURDATE(), 1);
INSERT INTO `zz_online_rule`
VALUES (6, '手机格式验证', 6, b'1', NULL, CURDATE(), CURDATE(), 1);

-- ----------------------------
-- 在线表单数据表
-- ----------------------------
DROP TABLE IF EXISTS `zz_online_table`;
CREATE TABLE `zz_online_table`
(
    `table_id`    bigint(20)                      NOT NULL COMMENT '主键Id',
    `table_name`  varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '表名称',
    `model_name`  varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '实体名称',
    `dblink_id`   bigint(20)                      NOT NULL COMMENT '数据库链接Id',
    `update_time` datetime                        NOT NULL COMMENT '更新时间',
    `create_time` datetime                        NOT NULL COMMENT '创建时间',
    PRIMARY KEY (`table_id`),
    KEY `idx_dblink_id` (`dblink_id`) USING BTREE
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_bin COMMENT ='在线表单数据表';

-- ----------------------------
-- 在线表单虚拟字段表
-- ----------------------------
DROP TABLE IF EXISTS `zz_online_virtual_column`;
CREATE TABLE `zz_online_virtual_column`
(
    `virtual_column_id`     bigint(20)                      NOT NULL COMMENT '主键Id',
    `table_id`              bigint(20)                      NOT NULL COMMENT '所在表Id',
    `object_field_name`     varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '字段名称',
    `object_field_type`     varchar(32) COLLATE utf8mb4_bin NOT NULL COMMENT '属性类型',
    `column_prompt`         varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '字段提示名',
    `virtual_type`          int(11)                         NOT NULL COMMENT '虚拟字段类型(0: 聚合)',
    `datasource_id`         bigint(20)                      NOT NULL COMMENT '关联数据源Id',
    `relation_id`           bigint(20)                        DEFAULT NULL COMMENT '关联Id',
    `aggregation_table_id`  bigint(20)                        DEFAULT NULL COMMENT '聚合字段所在关联表Id',
    `aggregation_column_id` bigint(20)                        DEFAULT NULL COMMENT '关联表聚合字段Id',
    `aggregation_type`      int(11)                           DEFAULT NULL COMMENT '聚合类型(0: sum 1: count 2: avg 3: min 4: max)',
    `where_clause_json`     varchar(1024) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '存储过滤条件的json',
    PRIMARY KEY (`virtual_column_id`) USING BTREE,
    KEY `idx_database_id` (`datasource_id`) USING BTREE,
    KEY `idx_relation_id` (`relation_id`) USING BTREE,
    KEY `idx_table_id` (`table_id`) USING BTREE,
    KEY `idx_aggregation_column_id` (`aggregation_column_id`) USING BTREE
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_bin COMMENT ='在线表单虚拟字段表';

SET FOREIGN_KEY_CHECKS = 1;
