## 人员组织权限
## 集团，岗位分类，部门分类使用code关联，id没有实际意义，其他表均以id进行关联
## 除了项目id为公司自行维护，其余id均为UUID

# 1、集团（多租户）

DROP TABLE IF EXISTS `org_group`;

CREATE TABLE org_group (
    id varchar(80) NOT NULL PRIMARY KEY,
    code varchar(80) NULL COMMENT '集团编码',
    name varchar(255) NULL COMMENT '集团名称',
    status int NOT NULL COMMENT '状态',
    create_user varchar(80) NULL COMMENT '创建用户',
    create_time timestamp NULL COMMENT '创建时间',
    update_user varchar(80) NULL COMMENT '更新用户',
    update_time timestamp NULL COMMENT '更新时间',
    remark varchar(500) NULL COMMENT '备注'
) COMMENT '集团';

# 2、公司

DROP TABLE IF EXISTS `org_company`;

CREATE TABLE org_company (
    id varchar(80) NOT NULL PRIMARY KEY,
    code varchar(80) NOT NULL COMMENT '公司编码',
    name varchar(80) NULL COMMENT '公司名称',
    group_code varchar(80) NOT NULL COMMENT '集团编码',
    parent_id varchar(80) NULL COMMENT '上级公司ID',
    status int NOT NULL COMMENT '状态',
    create_user varchar(80) NULL COMMENT '创建用户',
    create_time timestamp NULL COMMENT '创建时间',
    update_user varchar(80) NULL COMMENT '更新用户',
    update_time timestamp NULL COMMENT '更新时间',
    remark varchar(500) NULL COMMENT '备注'
) COMMENT '公司';

# 3、项目
DROP TABLE IF EXISTS `org_project`;

CREATE TABLE org_project (
    id varchar(80) NOT NULL PRIMARY KEY,
    name varchar(80) NOT NULL COMMENT '部门名称',
    group_code varchar(80) NOT NULL COMMENT '集团编码',
    status int NOT NULL COMMENT '状态',
    create_user varchar(80) NULL COMMENT '创建用户',
    create_time timestamp NULL COMMENT '创建时间',
    update_user varchar(80) NULL COMMENT '更新用户',
    update_time timestamp NULL COMMENT '更新时间',
    remark varchar(500)
) COMMENT '项目';

# 4、部门

DROP TABLE IF EXISTS `org_dept`;

CREATE TABLE org_dept (
    id varchar(80) NOT NULL PRIMARY KEY,
    dept_classify_code varchar(80) NOT NULL COMMENT '部门分类编码',
    code varchar(80) NOT NULL COMMENT '部门编码',
    name varchar(80) NOT NULL COMMENT '部门名称',
    company_id varchar(80) NOT NULL COMMENT '所属公司ID',
    parent_id varchar(80) NOT NULL COMMENT '上级部门ID,0:顶级部门',
    group_code varchar(80) NOT NULL COMMENT '集团编码',
    resource_from varchar(80) NOT NULL COMMENT '部门来源',
    manager varchar(80) NOT NULL COMMENT '部门负责人',
    status int NOT NULL COMMENT '状态',
    create_user varchar(80) NULL COMMENT '创建用户',
    create_time timestamp NULL COMMENT '创建时间',
    update_user varchar(80) NULL COMMENT '更新用户',
    update_time timestamp NULL COMMENT '更新时间',
    remark varchar(500)
) COMMENT '部门';

# 5、人员账号

DROP TABLE IF EXISTS `org_user`;

CREATE TABLE org_user (
    id varchar(80) NOT NULL PRIMARY KEY,
    name varchar(80) NULL COMMENT '姓名',
    username varchar(80) NULL COMMENT '账号',
    password varchar(80) NULL COMMENT '密码',
    gender int NULL COMMENT '性别',
    phone varchar(80) NULL COMMENT '手机号',
    mail varchar(80) NULL COMMENT '邮箱',
    birthday timestamp NULL COMMENT '生日',
    head_portrait varchar(80) NULL COMMENT '头像',
    other_account varchar(80) NULL COMMENT '第三方账号',
    user_from varchar(80) NULL COMMENT '账号来源',
    isAdmin varchar(80) NULL COMMENT '是否为PERSAGYADMIN',
    status int NOT NULL COMMENT '状态',
    create_user varchar(80) NULL COMMENT '创建用户',
    create_time timestamp NULL COMMENT '创建时间',
    update_user varchar(80) NULL COMMENT '更新用户',
    update_time timestamp NULL COMMENT '更新时间',
    remark varchar(500)
) COMMENT '人员账号';

# 6、部门分类

DROP TABLE IF EXISTS `org_dept_classify`;

CREATE TABLE org_dept_classify (
    id varchar(80) NOT NULL PRIMARY KEY,
    code varchar(200) NOT NULL COMMENT '部门分类编码',
    name varchar(200) NOT NULL COMMENT '名称',
    parent_id varchar(200) NOT NULL COMMENT '父级分类ID',
    order_num varchar(200) NOT NULL COMMENT '排序',
    group_code varchar(80) NOT NULL COMMENT '集团ID',
    status int NOT NULL COMMENT '状态',
    create_user varchar(80) NULL COMMENT '创建用户',
    create_time timestamp NULL COMMENT '创建时间',
    update_user varchar(80) NULL COMMENT '更新用户',
    update_time timestamp NULL COMMENT '更新时间',
    remark varchar(500)
) COMMENT '部门分类';

# 7、岗位分类

DROP TABLE IF EXISTS `org_job_classify`;

CREATE TABLE org_job_classify (
    id varchar(80) NOT NULL PRIMARY KEY,
    code varchar(80) NOT NULL COMMENT '岗位分类编码',
    name varchar(80) NOT NULL COMMENT '名称',
    group_code varchar(80) NOT NULL COMMENT '集团编码',
    order_num varchar(200) NOT NULL COMMENT '排序',
    status int NOT NULL COMMENT '状态',
    create_user varchar(80) NULL COMMENT '创建用户',
    create_time timestamp NULL COMMENT '创建时间',
    update_user varchar(80) NULL COMMENT '更新用户',
    update_time timestamp NULL COMMENT '更新时间',
    remark varchar(500)
) COMMENT '岗位分类';

# 8、岗位

DROP TABLE IF EXISTS `org_job`;

CREATE TABLE org_job (
    id varchar(80) NOT NULL PRIMARY KEY,
    code varchar(80) NOT NULL COMMENT '岗位编码',
    name varchar(80) NOT NULL COMMENT '岗位名称',
    group_code varchar(80) NOT NULL COMMENT '集团编码',
    user_id varchar(80) NOT NULL COMMENT '账号ID',
    dept_id varchar(80) NOT NULL COMMENT '部门ID',
    job_classify_code varchar(80) NOT NULL COMMENT '岗位类型',
    resource_from varchar(80) NULL COMMENT '部门来源',
    status int NOT NULL COMMENT '状态',
    create_user varchar(80) NULL COMMENT '创建用户',
    create_time timestamp NULL COMMENT '创建时间',
    update_user varchar(80) NULL COMMENT '更新用户',
    update_time timestamp NULL COMMENT '更新时间',
    remark varchar(500)
) COMMENT '岗位';

# 9、应用

DROP TABLE IF EXISTS `org_application`;

CREATE TABLE org_application (
    id varchar(80) NOT NULL PRIMARY KEY,
    code varchar(80) NOT NULL COMMENT '应用编码',
    name varchar(80) NOT NULL COMMENT '应用名称',
    category varchar(80) NOT NULL COMMENT '所属产品大类',
    app_order int NOT NULL COMMENT '排序',
    menu_icon_key varchar(80) NULL COMMENT '菜单小图标',
    icon_key varchar(80) NULL COMMENT '小图标的key',
    description varchar(80) NULL COMMENT '描述',
    obj_type varchar(80) NULL COMMENT '标签类型',
    status int NOT NULL COMMENT '状态',
    create_user varchar(80) NULL COMMENT '创建用户',
    create_time timestamp NULL COMMENT '创建时间',
    update_user varchar(80) NULL COMMENT '更新用户',
    update_time timestamp NULL COMMENT '更新时间',
    remark varchar(500)
) COMMENT '应用';

# 10、功能

DROP TABLE IF EXISTS `org_function`;

CREATE TABLE org_function (
    id varchar(80) NOT NULL PRIMARY KEY,
    code varchar(80) NOT NULL COMMENT '功能编码',
    name varchar(80) NOT NULL COMMENT '功能名称',
    type varchar(80) NOT NULL COMMENT '功能类型',
    parent_id varchar(80) NOT NULL COMMENT '父节级编码',
    app_id varchar(80) NOT NULL COMMENT '应用编码',
    function_url varchar(200) NULL COMMENT '功能跳转URL',
    icon varchar(50) NULL COMMENT '图标',
    description varchar(50) NULL COMMENT '描述',
    function_alias varchar(50) NULL COMMENT '功能别名',
    obj_type varchar(50) NULL COMMENT '对象类型',
    func_order int NOT NULL COMMENT '排序',
    status int NOT NULL COMMENT '状态',
    create_user varchar(80) NULL COMMENT '创建用户',
    create_time timestamp NULL COMMENT '创建时间',
    update_user varchar(80) NULL COMMENT '更新用户',
    update_time timestamp NULL COMMENT '更新时间',
    remark varchar(500)
) COMMENT '功能';


# 11、岗位分类与应用功能关系

DROP TABLE IF EXISTS `org_job_classify_rel`;

CREATE TABLE org_job_classify_rel (
    id varchar(80) NOT NULL PRIMARY KEY,
    job_classify_code varchar(80) NOT NULL COMMENT '岗位分类ID',
    app_id varchar(80) NOT NULL COMMENT '应用ID',
    function_id  varchar(80) NOT NULL COMMENT '功能ID',
    group_code varchar(80) NOT NULL COMMENT '集团编码',
    status int NOT NULL COMMENT '状态',
    create_user varchar(80) NULL COMMENT '创建用户',
    create_time timestamp NULL COMMENT '创建时间',
    update_user varchar(80) NULL COMMENT '更新用户',
    update_time timestamp NULL COMMENT '更新时间',
    remark varchar(500) NULL
) COMMENT '岗位分类与应用功能关系';
