CREATE TABLE IF NOT EXISTS `t_user`
(
    `id`          VARCHAR(36)  NOT NULL COMMENT '主键',
    `code`        VARCHAR(32)  NOT NULL COMMENT '编码',
    `name`        VARCHAR(100) NOT NULL COMMENT '名称',
    `type`        VARCHAR(24)  NULL COMMENT '用户类型',
    `status`      VARCHAR(24)  NULL COMMENT '用户状态',
    `phone`       VARCHAR(16)  NOT NULL COMMENT '电话号码',
    `username`    VARCHAR(50)  NOT NULL COMMENT '用户名',
    `password`    VARCHAR(128) NULL COMMENT '密码',
    `enable`      BIT(1)       NOT NULL DEFAULT b'1' COMMENT '是否启用',
    `app`         BIT(1)       NOT NULL DEFAULT b'0' COMMENT '能否登录移动端',
    `valid_date`  DATE         NULL COMMENT '有效期至',
    `open_id`     VARCHAR(64)  NULL COMMENT '微信openid',
    `authority`   VARCHAR(50)  NULL COMMENT '当前用户鉴权标记',
    `error_count` INT          NOT NULL DEFAULT 0 COMMENT '错误次数',
    `last_time`   DATETIME     NULL COMMENT '上次登录时间',
    `create_time` DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `modify_time` DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
    `creator`     VARCHAR(36)  NULL COMMENT '创建人名称',
    `creator_id`  VARCHAR(36)  NULL COMMENT '创建人id',
    `modifier`    VARCHAR(36)  NULL COMMENT '修改人名称',
    `modifier_id` VARCHAR(36)  NULL COMMENT '修改人id',
    `delete`      BIT(1)       NOT NULL DEFAULT b'0',
    PRIMARY KEY (`id`),
    UNIQUE KEY uniq_name (`username`)
) COMMENT '用户表';

CREATE TABLE IF NOT EXISTS `t_department`
(
    `id`          VARCHAR(36)  NOT NULL COMMENT '主键',
    `code`        VARCHAR(32)  NOT NULL COMMENT '编码',
    `name`        VARCHAR(100) NOT NULL COMMENT '名称',
    `full_name`   VARCHAR(300) NOT NULL COMMENT '完整名称',
    `primary`     BIT(1)       NOT NULL DEFAULT b'0' COMMENT '默认选中',
    `manager`     VARCHAR(36)  NULL COMMENT '负责人',
    `phone`       VARCHAR(15)  NULL COMMENT '联系电话',
    `address`     VARCHAR(150) NULL COMMENT '联系地址',
    `leaf`        BIT(1)       NULL COMMENT '是否是叶子节点',
    `pos`         INT          NOT NULL DEFAULT b'0' COMMENT '排序字段',
    `parent_id`   VARCHAR(36)  NULL     DEFAULT NULL COMMENT '上级id',
    `parent_ids`  JSON         NULL COMMENT '冗余的上级id集合',
    `depth`       INT          NULL COMMENT '深度',
    `create_time` DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `modify_time` DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
    `creator`     VARCHAR(36)  NULL COMMENT '创建人名称',
    `creator_id`  VARCHAR(36)  NULL COMMENT '创建人id',
    `modifier`    VARCHAR(36)  NULL COMMENT '修改人名称',
    `modifier_id` VARCHAR(36)  NULL COMMENT '修改人id',
    `delete`      BIT(1)       NOT NULL DEFAULT b'0',
    PRIMARY KEY (`id`)
) COMMENT '部门表';

CREATE TABLE IF NOT EXISTS `rel_user_depart`
(
    `user_id`   VARCHAR(36) NOT NULL COMMENT '用户id',
    `depart_id` VARCHAR(36) NOT NULL COMMENT '部门id',
    PRIMARY KEY (`user_id`, `depart_id`)
) COMMENT '用户部门关系表';

CREATE TABLE IF NOT EXISTS `t_role`
(
    `id`          VARCHAR(36)  NOT NULL COMMENT '主键',
    `code`        VARCHAR(32)  NOT NULL COMMENT '编码',
    `name`        VARCHAR(100) NOT NULL COMMENT '名称',
    `description` VARCHAR(500) NULL COMMENT '描述',
    `admin`       BIT(1)       NOT NULL DEFAULT b'0' COMMENT '是否是管理员',
    `system`      BIT(1)       NOT NULL DEFAULT b'0' COMMENT '是否是系统内置',
    `type`        VARCHAR(24)  NOT NULL COMMENT '所属平台',
    `authorities` JSON         NULL COMMENT '角色拥有的数据权限',
    `create_time` DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `modify_time` DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
    `creator`     VARCHAR(36)  NULL COMMENT '创建人名称',
    `creator_id`  VARCHAR(36)  NULL COMMENT '创建人id',
    `modifier`    VARCHAR(36)  NULL COMMENT '修改人名称',
    `modifier_id` VARCHAR(36)  NULL COMMENT '修改人id',
    `delete`      BIT(1)       NOT NULL DEFAULT b'0',
    PRIMARY KEY (`id`)
) COMMENT '角色表';

CREATE TABLE IF NOT EXISTS `rel_user_role`
(
    `user_id` VARCHAR(36) NOT NULL COMMENT '用户id',
    `role_id` VARCHAR(36) NOT NULL COMMENT '角色id',
    PRIMARY KEY (`user_id`, `role_id`)
) COMMENT '用户角色关系表';

CREATE TABLE IF NOT EXISTS `t_permission`
(
    `id`          VARCHAR(36)  NOT NULL COMMENT '主键',
    `code`        VARCHAR(32)  NOT NULL COMMENT '编码',
    `name`        VARCHAR(100) NOT NULL COMMENT '名称',
    `type`        VARCHAR(24)  NOT NULL COMMENT '权限类型',
    `admin`       BIT(1)       NOT NULL DEFAULT b'0' COMMENT '是否是管理员权限',
    `leaf`        BIT(1)       NULL COMMENT '是否是叶子节点',
    `parent_id`   VARCHAR(36)  NULL     DEFAULT NULL COMMENT '上级id',
    `parent_ids`  JSON         NULL COMMENT '冗余的上级id集合',
    `depth`       INT          NULL COMMENT '深度',
    `create_time` DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `modify_time` DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
    `creator`     VARCHAR(36)  NULL COMMENT '创建人名称',
    `creator_id`  VARCHAR(36)  NULL COMMENT '创建人id',
    `modifier`    VARCHAR(36)  NULL COMMENT '修改人名称',
    `modifier_id` VARCHAR(36)  NULL COMMENT '修改人id',
    `delete`      BIT(1)       NOT NULL DEFAULT b'0',
    PRIMARY KEY (`id`)
) COMMENT '权限定义表';

CREATE TABLE IF NOT EXISTS `rel_role_permission`
(
    `role_id`       VARCHAR(36) NOT NULL COMMENT '角色id',
    `permission_id` VARCHAR(36) NOT NULL COMMENT '权限id',
    PRIMARY KEY (`role_id`, `permission_id`)
) COMMENT '角色权限关系表';

CREATE TABLE IF NOT EXISTS `t_excel_mapping`
(
    `id`          VARCHAR(36)  NOT NULL COMMENT '主键',
    `code`        VARCHAR(32)  NOT NULL COMMENT '编码',
    `name`        VARCHAR(100) NOT NULL COMMENT '名称',
    `content`     JSON         NOT NULL COMMENT '映射关系',
    `create_time` DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `modify_time` DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
    `creator`     VARCHAR(36)  NULL COMMENT '创建人名称',
    `creator_id`  VARCHAR(36)  NULL COMMENT '创建人id',
    `modifier`    VARCHAR(36)  NULL COMMENT '修改人名称',
    `modifier_id` VARCHAR(36)  NULL COMMENT '修改人id',
    `delete`      BIT(1)       NOT NULL DEFAULT b'0',
    PRIMARY KEY (`id`)
) COMMENT 'Excel映射方案';
