-- 用户表
CREATE TABLE IF NOT EXISTS `user` (
  `id` int UNSIGNED AUTO_INCREMENT COMMENT '用户id' ,
  `account` varchar(64) NOT NULL COMMENT '用户账号',
  `name` varchar(255) DEFAULT '' COMMENT '姓名',
  `mobile` varchar(64) DEFAULT NULL COMMENT '手机',
  `email` varchar(64) DEFAULT NULL COMMENT '邮箱',
  `pwd` varchar(255) DEFAULT NULL COMMENT '密码',
  `salt` varchar(32) NOT NULL COMMENT '盐',
  `sex` TINYINT DEFAULT 0 COMMENT '性别:0-女,1-男',
  `status` TINYINT DEFAULT 1 NOT NULL COMMENT '状态:0-禁用,1-启用',
  `direct_leaders` VARCHAR(64) DEFAULT'' COMMENT '直属领导账号',  
  `created_by` VARCHAR(64) DEFAULT '' COMMENT '创建人',
  `created_on`  DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '记录创建时间',
  `modified_by` VARCHAR(64) DEFAULT '' COMMENT '修改人',
  `modified_on` DATETIME DEFAULT CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP COMMENT '记录修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_account`(`account`),
  UNIQUE KEY `uk_mobile`(`mobile`),
  UNIQUE KEY `uk_email`(`email`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb3 COMMENT='用户表';


-- 组织表
CREATE TABLE IF NOT EXISTS `organization` (  
  `id` int UNSIGNED AUTO_INCREMENT COMMENT 'id',  
  `name` VARCHAR(256) NOT NULL COMMENT '组织名',
  `parent_id` int UNSIGNED DEFAULT 0 COMMENT '上级组织id',
  `sort` SMALLINT UNSIGNED DEFAULT 0 COMMENT '层级序号',
  `status` TINYINT DEFAULT 1 COMMENT '状态:0-无效,1-有效',
  `path` VARCHAR(1024) COMMENT '全路径',  
  `leaders` VARCHAR(1024) COMMENT '领导账号列表:["user1","user2"]',
  `created_by` VARCHAR(64) DEFAULT '' COMMENT '创建人',
  `created_on`  DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '记录创建时间',
  `modified_by` VARCHAR(64) DEFAULT '' COMMENT '修改人',
  `modified_on` DATETIME DEFAULT CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP COMMENT '记录修改时间',
  PRIMARY KEY (`id`),
  KEY `idx_path`(`path`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb3 COMMENT='组织表';

-- 用户组织表
CREATE TABLE IF NOT EXISTS `user_organization` (  
  `id` int UNSIGNED AUTO_INCREMENT NOT NULL COMMENT 'id',
  `user_id` int UNSIGNED NOT NULL COMMENT '用户id',
  `org_id` int UNSIGNED NOT NULL COMMENT '组织id',
  `leader` bool DEFAULT FALSE COMMENT '是否是组织领导:一个组织只能有一个领导人',
  `created_by` VARCHAR(64) DEFAULT '' COMMENT '创建人',
  `created_on` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '记录创建时间',
  `modified_by` VARCHAR(64) DEFAULT '' COMMENT '修改人',
  `modified_on` DATETIME DEFAULT CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP COMMENT '记录修改时间',
  PRIMARY KEY (`id`),
  KEY `idx_user_id`(`user_id`),
  KEY `idx_org_id`(`org_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb3 COMMENT='用户组织表';


-- 角色表
CREATE TABLE IF NOT EXISTS `role` (
  `id` int UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id' ,
  `code` VARCHAR(64) NOT NULL COMMENT 'code',
  `name` VARCHAR(255) NOT NULL COMMENT '名称',
  `created_by` VARCHAR(64) DEFAULT '' COMMENT '创建人',
  `created_on`  DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '记录创建时间',
  `modified_by` VARCHAR(64) DEFAULT '' COMMENT '修改人',
  `modified_on` DATETIME DEFAULT CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP COMMENT '记录修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_code` (`code`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb3 COMMENT='角色表';

-- 用户角色表
CREATE TABLE IF NOT EXISTS `user_role` (
  `id` int UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id' ,
  `user_account` VARCHAR(64) NOT NULL COMMENT '用户账号',
  `role_code` VARCHAR(64) NOT NULL COMMENT '名称',
  `created_by` VARCHAR(64) DEFAULT '' COMMENT '创建人',
  `created_on`  DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '记录创建时间',
  `modified_by` VARCHAR(64) DEFAULT '' COMMENT '修改人',
  `modified_on` DATETIME DEFAULT CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP COMMENT '记录修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_user_role` (`user_account`,`role_code`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb3 COMMENT='用户角色表';

-- 组织角色表
CREATE TABLE IF NOT EXISTS `organization_role` (  
  `id` int UNSIGNED AUTO_INCREMENT NOT NULL COMMENT 'id',
  `org_id` int UNSIGNED NOT NULL COMMENT '组织id',
  `role_id` int UNSIGNED NOT NULL COMMENT '角色id',  
  `created_by`  VARCHAR(64) DEFAULT '' COMMENT '创建人',
  `created_on`  DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '记录创建时间',
  `modified_by` VARCHAR(64) DEFAULT '' COMMENT '修改人',
  `modified_on` DATETIME DEFAULT CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP COMMENT '记录修改时间',
  PRIMARY KEY (`id`),
  KEY `idx_org_id`(`org_id`),
  KEY `idx_role_id`(`role_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb3 COMMENT='组织角色表';


-- 组织角色授权表
CREATE TABLE IF NOT EXISTS `organization_role_author`(
  `id` int UNSIGNED AUTO_INCREMENT NOT NULL COMMENT 'id',
  `org_id` int UNSIGNED NOT NULL COMMENT '组织id',
  `role_id` int UNSIGNED NOT NULL COMMENT '角色id',
  `option` TINYINT NOT NULL DEFAULT 0 COMMENT '选择:0-选择组织,1-选择组织含下级',
  `created_by`  VARCHAR(64) DEFAULT '' COMMENT '创建人',
  `created_on`  DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '记录创建时间',
  `modified_by` VARCHAR(64) DEFAULT '' COMMENT '修改人',
  `modified_on` DATETIME DEFAULT CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP COMMENT '记录修改时间',
  PRIMARY KEY (`id`),
  KEY `idx_org_id`(`org_id`),
  KEY `idx_role_id`(`role_id`)
)ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb3 COMMENT='组织角色授权表';

-- 应用表
CREATE TABLE IF NOT EXISTS `application`(
  `id` int UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id' ,
  `code` VARCHAR(64) NOT NULL COMMENT 'code' ,
  `secret` VARCHAR(64) NOT NULL COMMENT 'secret' ,
  `name` VARCHAR(64) NOT NULL COMMENT 'name' ,
  `description` VARCHAR(512) DEFAULT '' COMMENT '描述' ,
  `created_by` VARCHAR(64) DEFAULT '' COMMENT '创建人',
  `created_on`  DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '记录创建时间',
  `modified_by` VARCHAR(64) DEFAULT '' COMMENT '修改人',
  `modified_on` DATETIME DEFAULT CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP COMMENT '记录修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_code`(`code`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb3 COMMENT='应用表';


-- 菜单表
CREATE TABLE IF NOT EXISTS `menu`(
  `id` int UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id' ,
  `app_code` VARCHAR(64) NOT NULL COMMENT '应用code',
  `code` varchar(512) NOT NULL DEFAULT '' COMMENT '编码',
  `name` varchar(50) NOT NULL DEFAULT '' COMMENT '名称',
  `parent_code` varchar(64) NOT NULL DEFAULT '' COMMENT '父级菜单编码',
  `type` int(5) NOT NULL DEFAULT 0 COMMENT '类型（1：一级导航；2：二级导航；3：三级导航）',
  `order` int(5) NOT NULL DEFAULT 0 COMMENT '排序',
  `icon` varchar(255) NOT NULL DEFAULT '' COMMENT '图标',
  `path` varchar(512) NOT NULL DEFAULT '' COMMENT '访问路径',
  `child_path` varchar(255) NOT NULL DEFAULT '' COMMENT '子级路径（前端用）',
  `go_first_child` tinyint(1) NOT NULL DEFAULT 0 COMMENT '前端用',
  `is_show` int(5) NOT NULL DEFAULT 0 COMMENT '是否显示（0：否；1：是）',
  `created_by` VARCHAR(64) DEFAULT '' COMMENT '创建人',
  `created_on`  DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '记录创建时间',
  `modified_by` VARCHAR(64) DEFAULT '' COMMENT '修改人',
  `modified_on` DATETIME DEFAULT CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP COMMENT '记录修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_menu_code`(`app_code`,`code`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb3 COMMENT='菜单表';

-- 角色菜单权限表
CREATE TABLE IF NOT EXISTS `role_menu_permission`(
  `id` int UNSIGNED AUTO_INCREMENT NOT NULL COMMENT 'id' ,
  `menu_id` int UNSIGNED NOT NULL COMMENT '菜单id',
  `role_id` int UNSIGNED NOT NULL COMMENT '角色id',
  `created_by` VARCHAR(64) DEFAULT '' COMMENT '创建人',
  `created_on`  DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '记录创建时间',
  `modified_by` VARCHAR(64) DEFAULT '' COMMENT '修改人',
  `modified_on` DATETIME DEFAULT CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP COMMENT '记录修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_role_menu`(`role_id`,`menu_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb3 COMMENT='角色菜单权限表';


-- 职位表
CREATE TABLE IF NOT EXISTS `post`(
  `id` int UNSIGNED AUTO_INCREMENT NOT NULL COMMENT 'id' ,
  `created_by` VARCHAR(64) DEFAULT '' COMMENT '创建人',
  `created_on`  DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '记录创建时间',
  `modified_by` VARCHAR(64) DEFAULT '' COMMENT '修改人',
  `modified_on` DATETIME DEFAULT CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP COMMENT '记录修改时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb3 COMMENT='职位表';

-- 用户信息
CREATE TABLE IF NOT EXISTS `user_info`(
  `id` int UNSIGNED AUTO_INCREMENT NOT NULL COMMENT 'id' ,
  `user_id` int UNSIGNED COMMENT '用户id' ,
  `avator` VARCHAR(512) COMMENT '头像',
  `created_by` VARCHAR(64) DEFAULT '' COMMENT '创建人',
  `created_on`  DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '记录创建时间',
  `modified_by` VARCHAR(64) DEFAULT '' COMMENT '修改人',
  `modified_on` DATETIME DEFAULT CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP COMMENT '记录修改时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb3 COMMENT='用户信息表';

-- 默认管理员 pwd:Passw0rd@20240703
REPLACE INTO `user`(`account`,`name`,`mobile`,`email`,`pwd`,`salt`,`created_by`) values ('admin','admin','13077164722','puff.guo@foxmail.com','5b5b2a3ddd62790986676e50e6c4a31b4516ab8387a3a2421df8ebe13b5f4d37','12345678900987654321','admin');

-- init application
REPLACE INTO `application` (`code`,`secret`,`name`,`description`,`created_by`) VALUES('user-busniss-center','146E5EA66B4B6036C6BBF395CC90C30E','用户中心','用户,统一登陆等','admin');

--init menu
REPLACE INTO `menu`(`app_code`,`code`,`name`,`parent_code`,`type`,`order`,`icon`,`path`,`child_path`,`is_show`,`created_by`) VALUES('user-busniss-center','index','首页','',1,0,'home','/home','',1,'admin');
REPLACE INTO `menu`(`app_code`,`code`,`name`,`parent_code`,`type`,`order`,`icon`,`path`,`child_path`,`is_show`,`created_by`) VALUES('user-busniss-center','user','用户','',1,1,'user','/user','',1,'admin');
REPLACE INTO `menu`(`app_code`,`code`,`name`,`parent_code`,`type`,`order`,`icon`,`path`,`child_path`,`is_show`,`created_by`) VALUES('user-busniss-center','organization','组织','',1,2,'organization','/organization','',1,'admin');
REPLACE INTO `menu`(`app_code`,`code`,`name`,`parent_code`,`type`,`order`,`icon`,`path`,`child_path`,`is_show`,`created_by`) VALUES('user-busniss-center','role','角色','',1,3,'role','/role','',1,'admin');
REPLACE INTO `menu`(`app_code`,`code`,`name`,`parent_code`,`type`,`order`,`icon`,`path`,`child_path`,`is_show`,`created_by`) VALUES('user-busniss-center','application','应用','',1,4,'application','/application','',1,'admin');

-- init role
REPLACE INTO `role` (`code`,`name`,`created_by`) VALUES('super_admin','超级管理员','admin');
REPLACE INTO `role` (`code`,`name`,`created_by`) VALUES('admin','管理员','admin');
REPLACE INTO `role` (`code`,`name`,`created_by`) VALUES('develop','开发者','admin');


REPLACE INTO `user_role` (`user_account`,`role_code`,`created_by`) VALUES('admin','super_admin','admin');