-- ----------------------------
-- 一定要在与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;
