This commit is contained in:
2023-06-29 17:29:02 +08:00
parent f86cc282a7
commit bbf269dcae
66 changed files with 1749 additions and 363 deletions

703
document/db/ROOT.sql Normal file
View File

@ -0,0 +1,703 @@
CREATE TABLE "SYS_CONFIG" (
"CONFIG_ID" NUMBER(20,0) NOT NULL,
"CONFIG_NAME" NVARCHAR2(100),
"CONFIG_KEY" NVARCHAR2(100),
"CONFIG_VALUE" NVARCHAR2(500),
"CONFIG_TYPE" NCHAR(1),
"CREATE_USER" NVARCHAR2(64),
"CREATE_TIME" DATE,
"UPDATE_USER" NVARCHAR2(64),
"UPDATE_TIME" DATE,
"REMARK" NVARCHAR2(500),
"TENANT_ID" NUMBER(20,0)
)
LOGGING
NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
BUFFER_POOL DEFAULT
)
PARALLEL 1
NOCACHE
DISABLE ROW MOVEMENT
;
COMMENT ON COLUMN "SYS_CONFIG"."CONFIG_ID" IS '参数主键';
COMMENT ON COLUMN "SYS_CONFIG"."CONFIG_NAME" IS '参数名称';
COMMENT ON COLUMN "SYS_CONFIG"."CONFIG_KEY" IS '参数键名';
COMMENT ON COLUMN "SYS_CONFIG"."CONFIG_VALUE" IS '参数键值';
COMMENT ON COLUMN "SYS_CONFIG"."CONFIG_TYPE" IS '系统内置Y是 N否';
COMMENT ON COLUMN "SYS_CONFIG"."CREATE_USER" IS '创建者';
COMMENT ON COLUMN "SYS_CONFIG"."CREATE_TIME" IS '创建时间';
COMMENT ON COLUMN "SYS_CONFIG"."UPDATE_USER" IS '更新者';
COMMENT ON COLUMN "SYS_CONFIG"."UPDATE_TIME" IS '更新时间';
COMMENT ON COLUMN "SYS_CONFIG"."REMARK" IS '备注';
COMMENT ON TABLE "SYS_CONFIG" IS '参数配置表';
-- ----------------------------
-- Table structure for SYS_DEPT
-- ----------------------------
CREATE TABLE "SYS_DEPT" (
"DEPT_ID" NUMBER(20,0) NOT NULL,
"PARENT_ID" NUMBER(20,0),
"ANCESTORS" NVARCHAR2(500),
"DEPT_NAME" NVARCHAR2(30),
"ORDER_NUM" NUMBER(11,0),
"LEADER" NVARCHAR2(20),
"PHONE" NVARCHAR2(30),
"EMAIL" NVARCHAR2(30),
"STATUS" NCHAR(1),
"CREATE_USER" NVARCHAR2(64),
"CREATE_TIME" DATE,
"UPDATE_USER" NVARCHAR2(64),
"UPDATE_TIME" DATE,
"REMARK" NVARCHAR2(255),
"TENANT_ID" NUMBER(20,0)
)
LOGGING
NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
BUFFER_POOL DEFAULT
)
PARALLEL 1
NOCACHE
DISABLE ROW MOVEMENT
;
COMMENT ON COLUMN "SYS_DEPT"."DEPT_ID" IS '部门id';
COMMENT ON COLUMN "SYS_DEPT"."PARENT_ID" IS '父部门id';
COMMENT ON COLUMN "SYS_DEPT"."ANCESTORS" IS '祖级列表';
COMMENT ON COLUMN "SYS_DEPT"."DEPT_NAME" IS '部门名称';
COMMENT ON COLUMN "SYS_DEPT"."ORDER_NUM" IS '显示顺序';
COMMENT ON COLUMN "SYS_DEPT"."LEADER" IS '负责人ID';
COMMENT ON COLUMN "SYS_DEPT"."PHONE" IS '手机号';
COMMENT ON COLUMN "SYS_DEPT"."EMAIL" IS '邮箱';
COMMENT ON COLUMN "SYS_DEPT"."STATUS" IS '部门状态1正常 0停用';
COMMENT ON COLUMN "SYS_DEPT"."CREATE_USER" IS '创建者';
COMMENT ON COLUMN "SYS_DEPT"."CREATE_TIME" IS '创建时间';
COMMENT ON COLUMN "SYS_DEPT"."UPDATE_USER" IS '更新者';
COMMENT ON COLUMN "SYS_DEPT"."UPDATE_TIME" IS '更新时间';
COMMENT ON COLUMN "SYS_DEPT"."REMARK" IS '备注';
COMMENT ON COLUMN "SYS_DEPT"."TENANT_ID" IS '租户ID';
COMMENT ON TABLE "SYS_DEPT" IS '部门表';
-- ----------------------------
-- Table structure for SYS_DICT_DATA
-- ----------------------------
CREATE TABLE "SYS_DICT_DATA" (
"DICT_CODE" NUMBER(20,0) NOT NULL,
"DICT_SORT" NUMBER(11,0),
"DICT_LABEL" NVARCHAR2(100),
"DICT_VALUE" NVARCHAR2(100),
"DICT_TYPE" NVARCHAR2(100),
"CSS_CLASS" NVARCHAR2(100),
"LIST_CLASS" NVARCHAR2(100),
"STATUS" NCHAR(1),
"CREATE_USER" NVARCHAR2(64),
"CREATE_TIME" DATE,
"UPDATE_USER" NVARCHAR2(64),
"UPDATE_TIME" DATE,
"REMARK" NVARCHAR2(500),
"TENANT_ID" NUMBER(20,0)
)
LOGGING
NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
BUFFER_POOL DEFAULT
)
PARALLEL 1
NOCACHE
DISABLE ROW MOVEMENT
;
COMMENT ON COLUMN "SYS_DICT_DATA"."DICT_CODE" IS '字典编码';
COMMENT ON COLUMN "SYS_DICT_DATA"."DICT_SORT" IS '字典排序';
COMMENT ON COLUMN "SYS_DICT_DATA"."DICT_LABEL" IS '字典标签';
COMMENT ON COLUMN "SYS_DICT_DATA"."DICT_VALUE" IS '字典键值';
COMMENT ON COLUMN "SYS_DICT_DATA"."DICT_TYPE" IS '字典类型';
COMMENT ON COLUMN "SYS_DICT_DATA"."CSS_CLASS" IS '样式属性(其他样式扩展)';
COMMENT ON COLUMN "SYS_DICT_DATA"."LIST_CLASS" IS '表格回显样式';
COMMENT ON COLUMN "SYS_DICT_DATA"."STATUS" IS '状态0正常 1停用';
COMMENT ON COLUMN "SYS_DICT_DATA"."CREATE_USER" IS '创建者';
COMMENT ON COLUMN "SYS_DICT_DATA"."CREATE_TIME" IS '创建时间';
COMMENT ON COLUMN "SYS_DICT_DATA"."UPDATE_USER" IS '更新者';
COMMENT ON COLUMN "SYS_DICT_DATA"."UPDATE_TIME" IS '更新时间';
COMMENT ON COLUMN "SYS_DICT_DATA"."REMARK" IS '备注';
COMMENT ON COLUMN "SYS_DICT_DATA"."TENANT_ID" IS '租户ID';
COMMENT ON TABLE "SYS_DICT_DATA" IS '字典数据表';
-- ----------------------------
-- Table structure for SYS_DICT_TYPE
-- ----------------------------
CREATE TABLE "SYS_DICT_TYPE" (
"DICT_ID" NUMBER(20,0) NOT NULL,
"DICT_NAME" NVARCHAR2(100),
"DICT_TYPE" NVARCHAR2(100),
"STATUS" NCHAR(1),
"CREATE_USER" NVARCHAR2(64),
"CREATE_TIME" DATE,
"UPDATE_USER" NVARCHAR2(64),
"UPDATE_TIME" DATE,
"REMARK" NVARCHAR2(500),
"TENANT_ID" NUMBER(20,0)
)
LOGGING
NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
BUFFER_POOL DEFAULT
)
PARALLEL 1
NOCACHE
DISABLE ROW MOVEMENT
;
COMMENT ON COLUMN "SYS_DICT_TYPE"."DICT_ID" IS '字典主键';
COMMENT ON COLUMN "SYS_DICT_TYPE"."DICT_NAME" IS '字典名称';
COMMENT ON COLUMN "SYS_DICT_TYPE"."DICT_TYPE" IS '字典类型';
COMMENT ON COLUMN "SYS_DICT_TYPE"."STATUS" IS '状态0正常 1停用';
COMMENT ON COLUMN "SYS_DICT_TYPE"."CREATE_USER" IS '创建者';
COMMENT ON COLUMN "SYS_DICT_TYPE"."CREATE_TIME" IS '创建时间';
COMMENT ON COLUMN "SYS_DICT_TYPE"."UPDATE_USER" IS '更新者';
COMMENT ON COLUMN "SYS_DICT_TYPE"."UPDATE_TIME" IS '更新时间';
COMMENT ON COLUMN "SYS_DICT_TYPE"."REMARK" IS '备注';
COMMENT ON COLUMN "SYS_DICT_TYPE"."TENANT_ID" IS '租户ID';
COMMENT ON TABLE "SYS_DICT_TYPE" IS '字典类型表';
-- ----------------------------
-- Table structure for SYS_LOGIN_LOG
-- ----------------------------
CREATE TABLE "SYS_LOGIN_LOG" (
"LOGIN_ID" NUMBER(20,0) NOT NULL,
"DEVICE_SN" NVARCHAR2(50),
"USERNAME" NVARCHAR2(50),
"NICKNAME" NVARCHAR2(30),
"IP" NVARCHAR2(30),
"ADDRESS" NVARCHAR2(255),
"BROWSER" NVARCHAR2(50),
"OS" NVARCHAR2(50),
"LOGIN_TIME" DATE,
"CREATE_USER" NVARCHAR2(64),
"CREATE_TIME" DATE,
"UPDATE_USER" NVARCHAR2(64),
"UPDATE_TIME" DATE,
"REMARK" NVARCHAR2(500),
"TENANT_ID" NUMBER(20,0)
)
LOGGING
NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
BUFFER_POOL DEFAULT
)
PARALLEL 1
NOCACHE
DISABLE ROW MOVEMENT
;
COMMENT ON COLUMN "SYS_LOGIN_LOG"."DEVICE_SN" IS '设备编码';
COMMENT ON COLUMN "SYS_LOGIN_LOG"."USERNAME" IS '登录账号';
COMMENT ON COLUMN "SYS_LOGIN_LOG"."NICKNAME" IS '用户名称';
COMMENT ON COLUMN "SYS_LOGIN_LOG"."IP" IS '访问IP';
COMMENT ON COLUMN "SYS_LOGIN_LOG"."ADDRESS" IS '登录地点';
COMMENT ON COLUMN "SYS_LOGIN_LOG"."BROWSER" IS '浏览器';
COMMENT ON COLUMN "SYS_LOGIN_LOG"."OS" IS '操作系统';
COMMENT ON COLUMN "SYS_LOGIN_LOG"."LOGIN_TIME" IS '登录时间';
COMMENT ON COLUMN "SYS_LOGIN_LOG"."CREATE_USER" IS '创建者';
COMMENT ON COLUMN "SYS_LOGIN_LOG"."CREATE_TIME" IS '创建时间';
COMMENT ON COLUMN "SYS_LOGIN_LOG"."UPDATE_USER" IS '更新者';
COMMENT ON COLUMN "SYS_LOGIN_LOG"."UPDATE_TIME" IS '更新时间';
COMMENT ON COLUMN "SYS_LOGIN_LOG"."REMARK" IS '备注';
COMMENT ON TABLE "SYS_LOGIN_LOG" IS '登录日志';
-- ----------------------------
-- Table structure for SYS_MENU
-- ----------------------------
CREATE TABLE "SYS_MENU" (
"MENU_ID" NUMBER(20,0) NOT NULL,
"MENU_NAME" NVARCHAR2(50) NOT NULL,
"PARENT_ID" NUMBER(20,0),
"ORDER_NUM" NUMBER(11,0),
"PATH" NVARCHAR2(200),
"COMPONENT" NVARCHAR2(255),
"QUERY" NVARCHAR2(255),
"IS_FRAME" NUMBER(11,0),
"IS_CACHE" NUMBER(11,0),
"MENU_TYPE" NCHAR(1),
"IS_VISIBLE" NCHAR(1),
"PERMS" NVARCHAR2(100),
"ICON" NVARCHAR2(100),
"CREATE_USER" NVARCHAR2(64),
"CREATE_TIME" DATE,
"UPDATE_USER" NVARCHAR2(64),
"UPDATE_TIME" DATE,
"REMARK" NVARCHAR2(500),
"TENANT_ID" NUMBER(20,0)
)
LOGGING
NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
BUFFER_POOL DEFAULT
)
PARALLEL 1
NOCACHE
DISABLE ROW MOVEMENT
;
COMMENT ON COLUMN "SYS_MENU"."MENU_ID" IS '菜单ID';
COMMENT ON COLUMN "SYS_MENU"."MENU_NAME" IS '菜单名称';
COMMENT ON COLUMN "SYS_MENU"."PARENT_ID" IS '父菜单ID';
COMMENT ON COLUMN "SYS_MENU"."ORDER_NUM" IS '显示顺序';
COMMENT ON COLUMN "SYS_MENU"."PATH" IS '路由地址';
COMMENT ON COLUMN "SYS_MENU"."COMPONENT" IS '组件路径';
COMMENT ON COLUMN "SYS_MENU"."QUERY" IS '路由参数';
COMMENT ON COLUMN "SYS_MENU"."IS_FRAME" IS '是否为外链1是 0否';
COMMENT ON COLUMN "SYS_MENU"."IS_CACHE" IS '是否缓存1缓存 0不缓存';
COMMENT ON COLUMN "SYS_MENU"."MENU_TYPE" IS '菜单类型M目录 C菜单 F按钮';
COMMENT ON COLUMN "SYS_MENU"."IS_VISIBLE" IS '菜单状态1显示 0隐藏';
COMMENT ON COLUMN "SYS_MENU"."PERMS" IS '权限标识';
COMMENT ON COLUMN "SYS_MENU"."ICON" IS '菜单图标';
COMMENT ON COLUMN "SYS_MENU"."CREATE_USER" IS '创建者';
COMMENT ON COLUMN "SYS_MENU"."CREATE_TIME" IS '创建时间';
COMMENT ON COLUMN "SYS_MENU"."UPDATE_USER" IS '更新者';
COMMENT ON COLUMN "SYS_MENU"."UPDATE_TIME" IS '更新时间';
COMMENT ON COLUMN "SYS_MENU"."REMARK" IS '备注';
COMMENT ON TABLE "SYS_MENU" IS '菜单权限表';
-- ----------------------------
-- Table structure for SYS_POST
-- ----------------------------
CREATE TABLE "SYS_POST" (
"POST_ID" NUMBER(20,0) NOT NULL,
"POST_CODE" NVARCHAR2(64) NOT NULL,
"POST_NAME" NVARCHAR2(50) NOT NULL,
"POST_SORT" NUMBER(11,0) NOT NULL,
"STATUS" NCHAR(1) NOT NULL,
"CREATE_USER" NVARCHAR2(64),
"CREATE_TIME" DATE,
"UPDATE_USER" NVARCHAR2(64),
"UPDATE_TIME" DATE,
"REMARK" NVARCHAR2(500),
"TENANT_ID" NUMBER(20,0)
)
LOGGING
NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
BUFFER_POOL DEFAULT
)
PARALLEL 1
NOCACHE
DISABLE ROW MOVEMENT
;
COMMENT ON COLUMN "SYS_POST"."POST_ID" IS '岗位ID';
COMMENT ON COLUMN "SYS_POST"."POST_CODE" IS '岗位编码';
COMMENT ON COLUMN "SYS_POST"."POST_NAME" IS '岗位名称';
COMMENT ON COLUMN "SYS_POST"."POST_SORT" IS '显示顺序';
COMMENT ON COLUMN "SYS_POST"."STATUS" IS '状态1正常 0停用';
COMMENT ON COLUMN "SYS_POST"."CREATE_USER" IS '创建者';
COMMENT ON COLUMN "SYS_POST"."CREATE_TIME" IS '创建时间';
COMMENT ON COLUMN "SYS_POST"."UPDATE_USER" IS '更新者';
COMMENT ON COLUMN "SYS_POST"."UPDATE_TIME" IS '更新时间';
COMMENT ON COLUMN "SYS_POST"."REMARK" IS '备注';
COMMENT ON COLUMN "SYS_POST"."TENANT_ID" IS '租户ID';
COMMENT ON TABLE "SYS_POST" IS '岗位信息表';
-- ----------------------------
-- Table structure for SYS_ROLE
-- ----------------------------
CREATE TABLE "SYS_ROLE" (
"ROLE_ID" NUMBER(20,0) NOT NULL,
"ROLE_NAME" NVARCHAR2(30) NOT NULL,
"ROLE_KEY" NVARCHAR2(100) NOT NULL,
"ROLE_SORT" NUMBER(11,0) NOT NULL,
"DATA_SCOPE" NCHAR(1),
"STATUS" NCHAR(1) NOT NULL,
"CREATE_USER" NVARCHAR2(64),
"CREATE_TIME" DATE,
"UPDATE_USER" NVARCHAR2(64),
"UPDATE_TIME" DATE,
"REMARK" NVARCHAR2(500),
"TENANT_ID" NUMBER(20,0)
)
LOGGING
NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
BUFFER_POOL DEFAULT
)
PARALLEL 1
NOCACHE
DISABLE ROW MOVEMENT
;
COMMENT ON COLUMN "SYS_ROLE"."ROLE_ID" IS '角色ID';
COMMENT ON COLUMN "SYS_ROLE"."ROLE_NAME" IS '角色名称';
COMMENT ON COLUMN "SYS_ROLE"."ROLE_KEY" IS '角色权限字符串';
COMMENT ON COLUMN "SYS_ROLE"."ROLE_SORT" IS '显示顺序';
COMMENT ON COLUMN "SYS_ROLE"."DATA_SCOPE" IS '数据范围1全部数据权限 2自定数据权限 3本部门数据权限 4本部门及以下数据权限';
COMMENT ON COLUMN "SYS_ROLE"."STATUS" IS '角色状态1正常 0停用';
COMMENT ON COLUMN "SYS_ROLE"."CREATE_USER" IS '创建者';
COMMENT ON COLUMN "SYS_ROLE"."CREATE_TIME" IS '创建时间';
COMMENT ON COLUMN "SYS_ROLE"."UPDATE_USER" IS '更新者';
COMMENT ON COLUMN "SYS_ROLE"."UPDATE_TIME" IS '更新时间';
COMMENT ON COLUMN "SYS_ROLE"."REMARK" IS '备注';
COMMENT ON COLUMN "SYS_ROLE"."TENANT_ID" IS '租户ID';
COMMENT ON TABLE "SYS_ROLE" IS '角色信息表';
-- ----------------------------
-- Table structure for SYS_ROLE_DEPT
-- ----------------------------
CREATE TABLE "SYS_ROLE_DEPT" (
"ROLE_ID" NUMBER(20,0) NOT NULL,
"DEPT_ID" NUMBER(20,0) NOT NULL,
"TENANT_ID" NUMBER(20,0) NOT NULL
)
LOGGING
NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
BUFFER_POOL DEFAULT
)
PARALLEL 1
NOCACHE
DISABLE ROW MOVEMENT
;
COMMENT ON COLUMN "SYS_ROLE_DEPT"."ROLE_ID" IS '角色ID';
COMMENT ON COLUMN "SYS_ROLE_DEPT"."DEPT_ID" IS '部门ID';
COMMENT ON COLUMN "SYS_ROLE_DEPT"."TENANT_ID" IS '租户ID';
COMMENT ON TABLE "SYS_ROLE_DEPT" IS '角色和部门关联表';
-- ----------------------------
-- Table structure for SYS_ROLE_MENU
-- ----------------------------
CREATE TABLE "SYS_ROLE_MENU" (
"ROLE_ID" NUMBER(20,0) NOT NULL,
"MENU_ID" NUMBER(20,0) NOT NULL,
"TENANT_ID" NUMBER(20,0) NOT NULL
)
LOGGING
NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
BUFFER_POOL DEFAULT
)
PARALLEL 1
NOCACHE
DISABLE ROW MOVEMENT
;
COMMENT ON COLUMN "SYS_ROLE_MENU"."ROLE_ID" IS '角色ID';
COMMENT ON COLUMN "SYS_ROLE_MENU"."MENU_ID" IS '菜单ID';
COMMENT ON COLUMN "SYS_ROLE_MENU"."TENANT_ID" IS '租户ID';
COMMENT ON TABLE "SYS_ROLE_MENU" IS '角色和菜单关联表';
-- ----------------------------
-- Table structure for SYS_USER
-- ----------------------------
CREATE TABLE "SYS_USER" (
"USER_ID" NUMBER(20,0) NOT NULL,
"DEPT_ID" NUMBER(20,0),
"USERNAME" NVARCHAR2(30) NOT NULL,
"NICKNAME" NVARCHAR2(30) NOT NULL,
"EMAIL" NVARCHAR2(50),
"PHONE" NVARCHAR2(11),
"GENDER" NCHAR(1),
"AVATAR" NVARCHAR2(100),
"PASSWORD" NVARCHAR2(100),
"STATUS" NCHAR(1),
"CREATE_USER" NVARCHAR2(64),
"CREATE_TIME" DATE,
"UPDATE_USER" NVARCHAR2(64),
"UPDATE_TIME" DATE,
"REMARK" NVARCHAR2(500),
"TENANT_ID" NUMBER(20,0)
)
LOGGING
NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
BUFFER_POOL DEFAULT
)
PARALLEL 1
NOCACHE
DISABLE ROW MOVEMENT
;
COMMENT ON COLUMN "SYS_USER"."USER_ID" IS '用户ID';
COMMENT ON COLUMN "SYS_USER"."DEPT_ID" IS '部门ID';
COMMENT ON COLUMN "SYS_USER"."USERNAME" IS '用户账号';
COMMENT ON COLUMN "SYS_USER"."NICKNAME" IS '用户昵称';
COMMENT ON COLUMN "SYS_USER"."EMAIL" IS '用户邮箱';
COMMENT ON COLUMN "SYS_USER"."PHONE" IS '手机号码';
COMMENT ON COLUMN "SYS_USER"."GENDER" IS '用户性别0男 1女 2未知';
COMMENT ON COLUMN "SYS_USER"."AVATAR" IS '头像地址';
COMMENT ON COLUMN "SYS_USER"."PASSWORD" IS '密码';
COMMENT ON COLUMN "SYS_USER"."STATUS" IS '帐号状态1正常 0停用';
COMMENT ON COLUMN "SYS_USER"."CREATE_USER" IS '创建者';
COMMENT ON COLUMN "SYS_USER"."CREATE_TIME" IS '创建时间';
COMMENT ON COLUMN "SYS_USER"."UPDATE_USER" IS '更新者';
COMMENT ON COLUMN "SYS_USER"."UPDATE_TIME" IS '更新时间';
COMMENT ON COLUMN "SYS_USER"."REMARK" IS '备注';
COMMENT ON COLUMN "SYS_USER"."TENANT_ID" IS '租户ID';
COMMENT ON TABLE "SYS_USER" IS '用户信息表';
-- ----------------------------
-- Table structure for SYS_USER_POST
-- ----------------------------
CREATE TABLE "SYS_USER_POST" (
"USER_ID" NUMBER(20,0) NOT NULL,
"POST_ID" NUMBER(20,0) NOT NULL,
"TENANT_ID" NUMBER(20,0) NOT NULL
)
LOGGING
NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
BUFFER_POOL DEFAULT
)
PARALLEL 1
NOCACHE
DISABLE ROW MOVEMENT
;
COMMENT ON COLUMN "SYS_USER_POST"."USER_ID" IS '用户ID';
COMMENT ON COLUMN "SYS_USER_POST"."POST_ID" IS '岗位ID';
COMMENT ON COLUMN "SYS_USER_POST"."TENANT_ID" IS '租户ID';
COMMENT ON TABLE "SYS_USER_POST" IS '用户与岗位关联表';
-- ----------------------------
-- Table structure for SYS_USER_ROLE
-- ----------------------------
CREATE TABLE "SYS_USER_ROLE" (
"USER_ID" NUMBER(20,0) NOT NULL,
"ROLE_ID" NUMBER(20,0) NOT NULL,
"TENANT_ID" NUMBER(20,0) NOT NULL
)
LOGGING
NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
BUFFER_POOL DEFAULT
)
PARALLEL 1
NOCACHE
DISABLE ROW MOVEMENT
;
COMMENT ON COLUMN "SYS_USER_ROLE"."USER_ID" IS '用户ID';
COMMENT ON COLUMN "SYS_USER_ROLE"."ROLE_ID" IS '角色ID';
COMMENT ON COLUMN "SYS_USER_ROLE"."TENANT_ID" IS '租户ID';
COMMENT ON TABLE "SYS_USER_ROLE" IS '用户和角色关联表';
-- ----------------------------
-- Primary Key structure for table SYS_CONFIG
-- ----------------------------
ALTER TABLE "SYS_CONFIG" ADD CONSTRAINT "SYS_C0011164" PRIMARY KEY ("CONFIG_ID");
-- ----------------------------
-- Checks structure for table SYS_CONFIG
-- ----------------------------
ALTER TABLE "SYS_CONFIG" ADD CONSTRAINT "SYS_C0011119" CHECK ("CONFIG_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
-- ----------------------------
-- Primary Key structure for table SYS_DEPT
-- ----------------------------
ALTER TABLE "SYS_DEPT" ADD CONSTRAINT "SYS_C0011162" PRIMARY KEY ("DEPT_ID");
-- ----------------------------
-- Checks structure for table SYS_DEPT
-- ----------------------------
ALTER TABLE "SYS_DEPT" ADD CONSTRAINT "SYS_C0011117" CHECK ("DEPT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
-- ----------------------------
-- Primary Key structure for table SYS_DICT_DATA
-- ----------------------------
ALTER TABLE "SYS_DICT_DATA" ADD CONSTRAINT "SYS_C0011165" PRIMARY KEY ("DICT_CODE");
-- ----------------------------
-- Checks structure for table SYS_DICT_DATA
-- ----------------------------
ALTER TABLE "SYS_DICT_DATA" ADD CONSTRAINT "SYS_C0011121" CHECK ("DICT_CODE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
-- ----------------------------
-- Primary Key structure for table SYS_DICT_TYPE
-- ----------------------------
ALTER TABLE "SYS_DICT_TYPE" ADD CONSTRAINT "SYS_C0011166" PRIMARY KEY ("DICT_ID");
-- ----------------------------
-- Checks structure for table SYS_DICT_TYPE
-- ----------------------------
ALTER TABLE "SYS_DICT_TYPE" ADD CONSTRAINT "SYS_C0011120" CHECK ("DICT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
-- ----------------------------
-- Indexes structure for table SYS_DICT_TYPE
-- ----------------------------
CREATE UNIQUE INDEX "DICT_TYPE"
ON "SYS_DICT_TYPE" ("DICT_TYPE" ASC)
LOGGING
VISIBLE
PCTFREE 10
INITRANS 2
STORAGE (
BUFFER_POOL DEFAULT
);
-- ----------------------------
-- Primary Key structure for table SYS_LOGIN_LOG
-- ----------------------------
ALTER TABLE "SYS_LOGIN_LOG" ADD CONSTRAINT "SYS_C0011167" PRIMARY KEY ("LOGIN_ID");
-- ----------------------------
-- Checks structure for table SYS_LOGIN_LOG
-- ----------------------------
ALTER TABLE "SYS_LOGIN_LOG" ADD CONSTRAINT "SYS_C0011122" CHECK ("LOGIN_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
-- ----------------------------
-- Primary Key structure for table SYS_MENU
-- ----------------------------
ALTER TABLE "SYS_MENU" ADD CONSTRAINT "SYS_C0011168" PRIMARY KEY ("MENU_ID");
-- ----------------------------
-- Checks structure for table SYS_MENU
-- ----------------------------
ALTER TABLE "SYS_MENU" ADD CONSTRAINT "SYS_C0011123" CHECK ("MENU_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
ALTER TABLE "SYS_MENU" ADD CONSTRAINT "SYS_C0011124" CHECK ("MENU_NAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
-- ----------------------------
-- Primary Key structure for table SYS_POST
-- ----------------------------
ALTER TABLE "SYS_POST" ADD CONSTRAINT "SYS_C0011169" PRIMARY KEY ("POST_ID");
-- ----------------------------
-- Checks structure for table SYS_POST
-- ----------------------------
ALTER TABLE "SYS_POST" ADD CONSTRAINT "SYS_C0011125" CHECK ("POST_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
ALTER TABLE "SYS_POST" ADD CONSTRAINT "SYS_C0011126" CHECK ("POST_CODE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
ALTER TABLE "SYS_POST" ADD CONSTRAINT "SYS_C0011127" CHECK ("POST_NAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
ALTER TABLE "SYS_POST" ADD CONSTRAINT "SYS_C0011128" CHECK ("POST_SORT" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
ALTER TABLE "SYS_POST" ADD CONSTRAINT "SYS_C0011129" CHECK ("STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
-- ----------------------------
-- Primary Key structure for table SYS_ROLE
-- ----------------------------
ALTER TABLE "SYS_ROLE" ADD CONSTRAINT "SYS_C0011170" PRIMARY KEY ("ROLE_ID");
-- ----------------------------
-- Checks structure for table SYS_ROLE
-- ----------------------------
ALTER TABLE "SYS_ROLE" ADD CONSTRAINT "SYS_C0011130" CHECK ("ROLE_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
ALTER TABLE "SYS_ROLE" ADD CONSTRAINT "SYS_C0011131" CHECK ("ROLE_NAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
ALTER TABLE "SYS_ROLE" ADD CONSTRAINT "SYS_C0011132" CHECK ("ROLE_KEY" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
ALTER TABLE "SYS_ROLE" ADD CONSTRAINT "SYS_C0011133" CHECK ("ROLE_SORT" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
ALTER TABLE "SYS_ROLE" ADD CONSTRAINT "SYS_C0011134" CHECK ("STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
-- ----------------------------
-- Primary Key structure for table SYS_ROLE_DEPT
-- ----------------------------
ALTER TABLE "SYS_ROLE_DEPT" ADD CONSTRAINT "SYS_C0011171" PRIMARY KEY ("ROLE_ID", "DEPT_ID", "TENANT_ID");
-- ----------------------------
-- Checks structure for table SYS_ROLE_DEPT
-- ----------------------------
ALTER TABLE "SYS_ROLE_DEPT" ADD CONSTRAINT "SYS_C0011135" CHECK ("ROLE_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
ALTER TABLE "SYS_ROLE_DEPT" ADD CONSTRAINT "SYS_C0011136" CHECK ("DEPT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
ALTER TABLE "SYS_ROLE_DEPT" ADD CONSTRAINT "SYS_C0011137" CHECK ("TENANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
-- ----------------------------
-- Primary Key structure for table SYS_ROLE_MENU
-- ----------------------------
ALTER TABLE "SYS_ROLE_MENU" ADD CONSTRAINT "SYS_C0011172" PRIMARY KEY ("ROLE_ID", "MENU_ID", "TENANT_ID");
-- ----------------------------
-- Checks structure for table SYS_ROLE_MENU
-- ----------------------------
ALTER TABLE "SYS_ROLE_MENU" ADD CONSTRAINT "SYS_C0011138" CHECK ("ROLE_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
ALTER TABLE "SYS_ROLE_MENU" ADD CONSTRAINT "SYS_C0011139" CHECK ("MENU_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
ALTER TABLE "SYS_ROLE_MENU" ADD CONSTRAINT "SYS_C0011140" CHECK ("TENANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
-- ----------------------------
-- Primary Key structure for table SYS_USER
-- ----------------------------
ALTER TABLE "SYS_USER" ADD CONSTRAINT "SYS_C0011175" PRIMARY KEY ("USER_ID");
-- ----------------------------
-- Checks structure for table SYS_USER
-- ----------------------------
ALTER TABLE "SYS_USER" ADD CONSTRAINT "SYS_C0011152" CHECK ("USER_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
ALTER TABLE "SYS_USER" ADD CONSTRAINT "SYS_C0011153" CHECK ("USERNAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
ALTER TABLE "SYS_USER" ADD CONSTRAINT "SYS_C0011154" CHECK ("NICKNAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
-- ----------------------------
-- Primary Key structure for table SYS_USER_POST
-- ----------------------------
ALTER TABLE "SYS_USER_POST" ADD CONSTRAINT "SYS_C0011176" PRIMARY KEY ("USER_ID", "POST_ID", "TENANT_ID");
-- ----------------------------
-- Checks structure for table SYS_USER_POST
-- ----------------------------
ALTER TABLE "SYS_USER_POST" ADD CONSTRAINT "SYS_C0011155" CHECK ("USER_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
ALTER TABLE "SYS_USER_POST" ADD CONSTRAINT "SYS_C0011156" CHECK ("POST_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
ALTER TABLE "SYS_USER_POST" ADD CONSTRAINT "SYS_C0011157" CHECK ("TENANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
-- ----------------------------
-- Primary Key structure for table SYS_USER_ROLE
-- ----------------------------
ALTER TABLE "SYS_USER_ROLE" ADD CONSTRAINT "SYS_C0011177" PRIMARY KEY ("USER_ID", "ROLE_ID", "TENANT_ID");
-- ----------------------------
-- Checks structure for table SYS_USER_ROLE
-- ----------------------------
ALTER TABLE "SYS_USER_ROLE" ADD CONSTRAINT "SYS_C0011158" CHECK ("USER_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
ALTER TABLE "SYS_USER_ROLE" ADD CONSTRAINT "SYS_C0011159" CHECK ("ROLE_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
ALTER TABLE "SYS_USER_ROLE" ADD CONSTRAINT "SYS_C0011160" CHECK ("TENANT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;

View File

@ -15,32 +15,32 @@ public enum DatasourceErrorCode {
/**
* 未找到
*/
NOT_FIND(50101, "未找到数据源信息"),
NOT_FIND(50401, "未找到数据源信息"),
/**
* 连接错误
*/
CONNECT_ERROR(50102, "数据源无法连接"),
CONNECT_ERROR(50402, "数据源无法连接"),
/**
* 切换模式错误
*/
SWITCH_SCHEMA_ERROR(50103, "切换模式错误"),
SWITCH_SCHEMA_ERROR(50403, "切换模式错误"),
/**
* 创建表错误
*/
CREATE_TABLE_ERROR(50104, "创建表错误"),
CREATE_TABLE_ERROR(50404, "创建表错误"),
/**
* 创建模式/库错误
*/
CREATE_SCHEMA_ERROR(50105, "创建模式/库错误"),
CREATE_SCHEMA_ERROR(50405, "创建模式/库错误"),
/**
* 初始化数据错误
*/
INIT_DATA_ERROR(50106, "初始化数据错误");
INIT_DATA_ERROR(50406, "初始化数据错误");
private final Integer code;
private final String msg;

View File

@ -16,6 +16,7 @@ public enum TenantErrorCode {
* 未找到
*/
NOT_FIND(5010, "未找到租户信息"),
/**
* 禁用
*/
@ -24,7 +25,12 @@ public enum TenantErrorCode {
/**
* 过期
*/
EXPIRE(5012, "租户已过期");
EXPIRE(5012, "租户已过期"),
/**
* 租户模式不存在
*/
MODE_NOT_FIND(50103, "未找到租户模式");
private final Integer code;
private final String msg;

View File

@ -1,16 +1,12 @@
package com.qiaoba.common.database.interceptors;
import cn.hutool.core.util.StrUtil;
import cn.hutool.db.sql.SqlExecutor;
import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor;
import com.qiaoba.common.base.constants.BaseConstant;
import com.qiaoba.common.base.constants.TenantConstant;
import com.qiaoba.common.base.context.BaseContext;
import com.qiaoba.common.database.context.TenantDbTypeContext;
import com.qiaoba.common.database.properties.TenantSchema;
import com.qiaoba.common.database.utils.DbUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.executor.statement.StatementHandler;
import org.springframework.beans.factory.annotation.Value;
import java.sql.Connection;
import java.sql.SQLException;
@ -26,17 +22,12 @@ import java.util.Objects;
@Slf4j
public class SchemaInterceptor implements InnerInterceptor {
@Value("${spring.application.name}")
private String schemaPrefix;
@Override
public void beforePrepare(StatementHandler sh, Connection conn, Integer transactionTimeout) {
if (Objects.nonNull(BaseContext.isSchemaMode()) && BaseContext.isSchemaMode()) {
try {
// schemaPrefix + '-' + tenantId
// eg: schema = qiaoba-boot-2
DbUtil.setSchema(TenantDbTypeContext.getDefault(), conn, schemaPrefix + BaseConstant.HYPHEN_JOIN_STR + BaseContext.getTenantId());
DbUtil.setSchema(TenantDbTypeContext.getDefault(), conn, TenantSchema.getSchema(BaseContext.getTenantId()));
} catch (SQLException e) {
log.info("切换SCHEMA失败, 原因: {}", e.getMessage());
}

View File

@ -0,0 +1,37 @@
package com.qiaoba.common.database.properties;
import com.qiaoba.common.base.constants.BaseConstant;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* 租户Schema
*
* @author ailanyin
* @version 1.0
* @since 2023/6/29 8:53
*/
@Component
public class TenantSchema {
private static String schemaPrefix;
@Value("${spring.application.name}")
public void setSchemaPrefix(String name) {
schemaPrefix = name;
}
/**
* 租户schema生成逻辑
* schemaPrefix + '-' + tenantId
* eg: schema = abc-2
*
* @param tenantId 租户ID
* @return schema
*/
public static String getSchema(String tenantId) {
return schemaPrefix + BaseConstant.HYPHEN_JOIN_STR + tenantId;
}
}

View File

@ -1,5 +1,6 @@
package com.qiaoba.common.database.utils;
import cn.hutool.core.io.IoUtil;
import com.qiaoba.common.base.enums.DataBaseEnum;
import org.apache.ibatis.jdbc.ScriptRunner;
import org.postgresql.jdbc.PgConnection;
@ -10,6 +11,7 @@ import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
/**
* @author ailanyin
@ -40,4 +42,14 @@ public class DbUtil {
scriptRunner.runScript(reader);
reader.close();
}
public static void runSql(Connection conn, String sql) throws SQLException {
Statement statement = null;
try {
statement = conn.createStatement();
statement.execute(sql);
} finally {
IoUtil.close(statement);
}
}
}

View File

@ -8,7 +8,10 @@ import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import java.sql.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
/**
* JdbcUtil
@ -100,19 +103,4 @@ public class JdbcUtil {
private String msg;
}
public static void main(String[] args) {
Connection connection = getConnection("oracle.jdbc.OracleDriver", "jdbc:oracle:thin:@//192.168.0.205:1521/ORCL", "system", "root");
try {
DbUtil.setSchema("Oracle",connection,"scott");
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
System.out.println();
}
}

View File

@ -1,3 +1,4 @@
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.qiaoba.common.database.factories.DynamicDataSourceFactory,\
com.qiaoba.common.database.properties.TenantSchema,\
com.qiaoba.common.database.config.MybatisPlusConfig

View File

@ -73,13 +73,6 @@ public class SysTenantController {
return AjaxResult.success(sysTenantService.update(BeanUtil.copyProperties(dto, SysTenant.class)));
}
@PreAuthorize("hasAuthority('tenant:init')")
@PostMapping("/init")
@Operation(summary = "初始化")
public void initData(String tenantId) throws Exception {
sysTenantService.initData(tenantId);
}
@PreAuthorize("hasAuthority('tenant:remove')")
@DeleteMapping("/refreshCache")
@Operation(summary = "刷新缓存")

View File

@ -38,4 +38,10 @@ public class SysTenantInitController {
return sysTenantInitService.createTables(tenantId);
}
@PostMapping(value = "/initData/{tenantId}")
@Operation(summary = "步骤三: 导入数据")
public TenantInitVo initData(@PathVariable String tenantId) throws Exception {
return sysTenantInitService.initData(tenantId);
}
}

View File

@ -29,21 +29,6 @@ public class SysTenant extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 字段模式
*/
public static final String COLUMN_MODE = "1";
/**
* SCHEMA 模式
*/
public static final String SCHEMA_MODE = "2";
/**
* 数据源模式
*/
public static final String DATASOURCE_MODE = "3";
@TableId
@NotNull(message = "id不能为空", groups = {EditGroup.class})
private String tenantId;

View File

@ -10,28 +10,28 @@ import lombok.Getter;
* @since 2023/6/5 16:33
*/
@Getter
public enum TenantTypeEnum {
public enum TenantModeEnum {
/**
* 字段模式-隔离级别最小
*/
COLUMN("column", "字段模式"),
COLUMN("1", "字段模式"),
/**
* SCHEMA模式-隔离级别中等
*/
SCHEMA("schema", "SCHEMA模式"),
SCHEMA("2", "SCHEMA模式"),
/**
* 数据源模式-隔离级别最大
*/
DATASOURCE("datasource", "数据源模式");
DATASOURCE("3", "数据源模式");
private final String type;
private final String mode;
private final String info;
TenantTypeEnum(String code, String info) {
this.type = code;
TenantModeEnum(String code, String info) {
this.mode = code;
this.info = info;
}
}

View File

@ -11,6 +11,7 @@ import com.qiaoba.common.database.context.TenantDbTypeContext;
import com.qiaoba.common.web.utils.ResponseUtil;
import com.qiaoba.common.web.utils.UriUtil;
import com.qiaoba.module.tenant.entity.SysTenant;
import com.qiaoba.module.tenant.enums.TenantModeEnum;
import com.qiaoba.module.tenant.enums.TenantStatusEnum;
import com.qiaoba.module.tenant.service.SysTenantService;
import lombok.extern.slf4j.Slf4j;
@ -87,9 +88,9 @@ public class DynamicDataSourceFilter extends OncePerRequestFilter {
private void before(SysTenant sysTenant) {
log.debug("设置租户信息, 租户ID: {},租户模式: {}", sysTenant.getTenantId(), sysTenant.getMode());
BaseContext.setTenantId(sysTenant.getTenantId());
BaseContext.setSchema(sysTenant.getMode().equals(SysTenant.SCHEMA_MODE));
BaseContext.setSchema(sysTenant.getMode().equals(TenantModeEnum.SCHEMA.getMode()));
// 数据源模式-设置第三方数据源
if (sysTenant.getMode().equals(SysTenant.DATASOURCE_MODE)) {
if (sysTenant.getMode().equals(TenantModeEnum.DATASOURCE.getMode())) {
//设置当前租户对应的数据源
BaseContext.setDataSource(sysTenant.getTenantId());
BaseContext.setDatabaseType(TenantDbTypeContext.get(sysTenant.getTenantId()));

View File

@ -1,24 +0,0 @@
package com.qiaoba.module.tenant.init;
import com.qiaoba.module.tenant.entity.vo.TenantInitVo;
import java.sql.Connection;
/**
* 初始化数据策略
*
* @author ailanyin
* @version 1.0
* @since 2023/6/27 13:05
*/
public interface InitDataStrategy {
/**
* 初始化数据
*
* @param conn 连接对象
* @param tenantId 租户ID
* @return 结果
*/
TenantInitVo init(Connection conn, String tenantId);
}

View File

@ -1,42 +0,0 @@
package com.qiaoba.module.tenant.init;
import com.qiaoba.common.base.enums.DataBaseEnum;
import com.qiaoba.common.base.exceptions.ServiceException;
import com.qiaoba.module.tenant.init.impl.MysqlInitDataStrategy;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
/**
* 策略工厂-租户初始化-导入数据
*
* @author ailanyin
* @version 1.0
* @since 2023/6/27 16:41
*/
@Component
@RequiredArgsConstructor
public class InitDataStrategyFactory {
private static Map<String, InitDataStrategy> FACTORY = new ConcurrentHashMap<>();
private final MysqlInitDataStrategy mysqlInitDataStrategy;
@PostConstruct
public void register() {
FACTORY.put(DataBaseEnum.MY_SQL.getType(), mysqlInitDataStrategy);
}
public static InitDataStrategy getStrategy(String name) {
InitDataStrategy strategy = FACTORY.get(name);
if (Objects.isNull(strategy)) {
throw new ServiceException("[ InitDataStrategy ]策略工厂异常, 类型:[" + name + "]找不到相对应的策略");
}
return strategy;
}
}

View File

@ -3,6 +3,7 @@ package com.qiaoba.module.tenant.init;
import com.qiaoba.common.base.enums.DataBaseEnum;
import com.qiaoba.common.base.exceptions.ServiceException;
import com.qiaoba.module.tenant.init.impl.MysqlInitTablesStrategy;
import com.qiaoba.module.tenant.init.impl.PgSqlInitTablesStrategy;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
@ -25,11 +26,13 @@ public class InitTablesStrategyFactory {
private static Map<String, InitTablesStrategy> FACTORY = new ConcurrentHashMap<>();
private final MysqlInitTablesStrategy mysqlInitTablesStrategy;
private final PgSqlInitTablesStrategy pgSqlInitTablesStrategy;
@PostConstruct
public void register() {
FACTORY.put(DataBaseEnum.MY_SQL.getType(), mysqlInitTablesStrategy);
FACTORY.put(DataBaseEnum.POSTGRE_SQL.getType(), pgSqlInitTablesStrategy);
}
public static InitTablesStrategy getStrategy(String name) {

View File

@ -1,56 +0,0 @@
package com.qiaoba.module.tenant.init.impl;
import cn.hutool.db.DbUtil;
import cn.hutool.http.HttpStatus;
import com.qiaoba.common.base.code.DatasourceErrorCode;
import com.qiaoba.module.tenant.entity.vo.TenantInitVo;
import com.qiaoba.module.tenant.init.InitDataStrategy;
import com.qiaoba.module.tenant.utils.InitDataUtil;
import org.springframework.stereotype.Component;
import java.sql.Connection;
import java.sql.SQLException;
/**
* 初始化数据策略
*
* @author ailanyin
* @version 1.0
* @since 2023/6/27 13:05
*/
@Component
public class MysqlInitDataStrategy implements InitDataStrategy {
@Override
public TenantInitVo init(Connection conn, String tenantId) {
try {
// 手动提交
conn.setAutoCommit(false);
// 处理 sys_config
InitDataUtil.handleSysConfig(conn, tenantId, "MySQL/data/sys_config_data");
// 处理 sys_post
InitDataUtil.handleSysPost(conn, tenantId, "MySQL/data/sys_post_data");
// 处理 sys_role
InitDataUtil.handleSysRole(conn, tenantId, "MySQL/data/sys_role_data");
// 处理 sys_user
InitDataUtil.handleSysUser(conn, tenantId, "MySQL/data/sys_user_data");
// 处理 sys_user_role
InitDataUtil.bindUserAndRole(conn, tenantId);
// 处理 sys_menu todo
//MenuUtil.handleMenu(conn, tenantId);
// 处理 sys_role_menu
InitDataUtil.bindRoleAndMenu(conn, tenantId);
conn.commit();
return new TenantInitVo(HttpStatus.HTTP_OK, null);
} catch (Exception e) {
try {
conn.rollback();
} catch (SQLException ex) {
ex.printStackTrace();
}
return new TenantInitVo(DatasourceErrorCode.INIT_DATA_ERROR.getCode(), e.getMessage());
} finally {
DbUtil.close(conn);
}
}
}

View File

@ -0,0 +1,42 @@
package com.qiaoba.module.tenant.init.impl;
import cn.hutool.core.io.IoUtil;
import cn.hutool.http.HttpStatus;
import com.qiaoba.common.base.code.DatasourceErrorCode;
import com.qiaoba.common.database.utils.DbUtil;
import com.qiaoba.module.tenant.entity.vo.TenantInitVo;
import com.qiaoba.module.tenant.init.InitTablesStrategy;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.sql.Connection;
/**
* 初始化表策略-Mysql
*
* @author ailanyin
* @version 1.0
* @since 2023/6/27 16:01
*/
@Service
public class PgSqlInitTablesStrategy implements InitTablesStrategy {
public static final String CREATE_MYSQL_DB_SQL = "DROP DATABASE IF EXISTS `{}`;CREATE DATABASE `{}` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci';";
@Override
public TenantInitVo create(Connection conn, String schema) {
return null;
}
@Override
public TenantInitVo create(Connection conn) {
try {
DbUtil.runScript(conn, "init/table/PostgreSQL/create_tables");
return new TenantInitVo(HttpStatus.HTTP_OK, null);
} catch (IOException e) {
return new TenantInitVo(DatasourceErrorCode.CREATE_TABLE_ERROR.getCode(), e.getMessage());
} finally {
IoUtil.close(conn);
}
}
}

View File

@ -3,6 +3,8 @@ package com.qiaoba.module.tenant.service;
import com.qiaoba.module.tenant.entity.vo.TenantInitCheckVo;
import com.qiaoba.module.tenant.entity.vo.TenantInitVo;
import java.sql.SQLException;
/**
* 租户初始化 服务层
*
@ -27,4 +29,13 @@ public interface SysTenantInitService {
* @return 结果
*/
TenantInitVo createTables(String tenantId);
/**
* 导入表数据
*
* @param tenantId 租户ID
* @return 结果
* @throws SQLException SQLException
*/
TenantInitVo initData(String tenantId) throws SQLException;
}

View File

@ -64,14 +64,6 @@ public interface SysTenantService {
*/
SysTenant selectFromCache(String tenantId);
/**
* 初始化数据
*
* @param tenantId tenantId
* @throws Exception Exception
*/
void initData(String tenantId) throws Exception;
/**
* 更改状态
*

View File

@ -4,24 +4,30 @@ import cn.hutool.core.io.IoUtil;
import cn.hutool.http.HttpStatus;
import com.alibaba.druid.pool.DruidDataSource;
import com.qiaoba.common.base.code.DatasourceErrorCode;
import com.qiaoba.common.base.constants.BaseConstant;
import com.qiaoba.common.base.code.TenantErrorCode;
import com.qiaoba.common.base.enums.DataBaseEnum;
import com.qiaoba.common.database.context.PrimaryDatasourceContext;
import com.qiaoba.common.database.context.TenantDbTypeContext;
import com.qiaoba.common.database.properties.TenantSchema;
import com.qiaoba.common.database.utils.DbUtil;
import com.qiaoba.common.database.utils.JdbcUtil;
import com.qiaoba.module.tenant.entity.SysTenant;
import com.qiaoba.module.tenant.entity.SysTenantDatasource;
import com.qiaoba.module.tenant.entity.vo.TenantInitCheckVo;
import com.qiaoba.module.tenant.entity.vo.TenantInitVo;
import com.qiaoba.module.tenant.enums.TenantModeEnum;
import com.qiaoba.module.tenant.init.InitTablesStrategyFactory;
import com.qiaoba.module.tenant.service.SysTenantDatasourceService;
import com.qiaoba.module.tenant.service.SysTenantInitService;
import com.qiaoba.module.tenant.service.SysTenantService;
import com.qiaoba.module.tenant.utils.InitDataUtil;
import com.qiaoba.module.tenant.utils.MenuUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Objects;
/**
@ -38,15 +44,12 @@ public class SysTenantInitServiceImpl implements SysTenantInitService {
private final SysTenantService sysTenantService;
private final SysTenantDatasourceService sysTenantDatasourceService;
@Value("${spring.application.name}")
private String schemaPrefix;
@Override
public TenantInitCheckVo check(String tenantId) {
// 1. 查询租户信息, 获取租户名称|租户模式
SysTenant sysTenant = sysTenantService.selectById(tenantId, false);
// 2. 租户模式 = 3 数据源模式
if (SysTenant.DATASOURCE_MODE.equals(sysTenant.getMode())) {
if (TenantModeEnum.DATASOURCE.getMode().equals(sysTenant.getMode())) {
// 3. 根据租户ID查询主要数据源(1条)
SysTenantDatasource datasource = sysTenantDatasourceService.selectPrimary(tenantId);
// 4. 若没有主要数据源, 返回 未找到数据源信息
@ -74,18 +77,17 @@ public class SysTenantInitServiceImpl implements SysTenantInitService {
public TenantInitVo createTables(String tenantId) {
SysTenant sysTenant = sysTenantService.selectById(tenantId, false);
// 字段模式
if (SysTenant.COLUMN_MODE.equals(sysTenant.getMode())) {
if (TenantModeEnum.COLUMN.getMode().equals(sysTenant.getMode())) {
return new TenantInitVo(HttpStatus.HTTP_OK, "字段模式, 无需新建表");
}
// Schema模式
if (SysTenant.SCHEMA_MODE.equals(sysTenant.getMode())) {
if (TenantModeEnum.SCHEMA.getMode().equals(sysTenant.getMode())) {
Connection connection = null;
try {
String schema = schemaPrefix + BaseConstant.HYPHEN_JOIN_STR + tenantId;
// 获取主库Connection 和 Schema
DruidDataSource dataSource = (DruidDataSource) PrimaryDatasourceContext.getDefault();
connection = dataSource.getConnection();
return InitTablesStrategyFactory.getStrategy(TenantDbTypeContext.getDefault()).create(connection, schema);
return InitTablesStrategyFactory.getStrategy(TenantDbTypeContext.getDefault()).create(connection, TenantSchema.getSchema(tenantId));
} catch (Exception e) {
e.printStackTrace();
} finally {
@ -93,15 +95,83 @@ public class SysTenantInitServiceImpl implements SysTenantInitService {
}
}
// 数据源模式
if (SysTenant.DATASOURCE_MODE.equals(sysTenant.getMode())) {
if (TenantModeEnum.DATASOURCE.getMode().equals(sysTenant.getMode())) {
SysTenantDatasource primary = sysTenantDatasourceService.selectPrimary(tenantId, false);
Connection connection = JdbcUtil.getConnection(DataBaseEnum.getDriver(primary.getType()),
DataBaseEnum.getUrl(primary.getType(), primary.getIp(), primary.getPort(), primary.getDbName(), primary.getSchemaName()),
primary.getUsername(), primary.getPassword());
return InitTablesStrategyFactory.getStrategy(primary.getType()).create(connection);
}
return new TenantInitVo(500, "未知异常");
return new TenantInitVo(TenantErrorCode.MODE_NOT_FIND.getCode(), TenantErrorCode.MODE_NOT_FIND.getMsg());
}
@Override
public TenantInitVo initData(String tenantId) throws SQLException {
SysTenant sysTenant = sysTenantService.selectById(tenantId, false);
// 字段模式
if (TenantModeEnum.COLUMN.getMode().equals(sysTenant.getMode())) {
// 获取默认租户的主数据源
DataSource dataSource = (DataSource) PrimaryDatasourceContext.getDefault();
// 获取默认租户的主数据库类型
String dbType = TenantDbTypeContext.getDefault();
// 初始化
return init(dataSource.getConnection(), tenantId);
}
// SCHEMA
else if (TenantModeEnum.SCHEMA.getMode().equals(sysTenant.getMode())) {
// 获取默认租户的主数据源
DataSource dataSource = (DataSource) PrimaryDatasourceContext.getDefault();
// 获取默认租户的主数据库类型
String dbType = TenantDbTypeContext.getDefault();
// 切换 SCHEMA
Connection connection = dataSource.getConnection();
DbUtil.setSchema(dbType, connection, TenantSchema.getSchema(tenantId));
// 初始化
return init(connection, tenantId);
}
// Datasource
else if (TenantModeEnum.DATASOURCE.getMode().equals(sysTenant.getMode())) {
SysTenantDatasource primary = sysTenantDatasourceService.selectPrimary(tenantId, false);
Connection connection = JdbcUtil.getConnection(DataBaseEnum.getDriver(primary.getType()),
DataBaseEnum.getUrl(primary.getType(), primary.getIp(), primary.getPort(), primary.getDbName(), primary.getSchemaName()),
primary.getUsername(), primary.getPassword());
// 初始化
return init(connection, tenantId);
}
return new TenantInitVo(TenantErrorCode.MODE_NOT_FIND.getCode(), TenantErrorCode.MODE_NOT_FIND.getMsg());
}
private TenantInitVo init(Connection conn, String tenantId) {
try {
// 手动提交
conn.setAutoCommit(false);
// 处理 sys_config
InitDataUtil.handleSysConfig(conn, tenantId, "init/data/sys_config_data");
// 处理 sys_post
InitDataUtil.handleSysPost(conn, tenantId, "init/data/sys_post_data");
// 处理 sys_role
InitDataUtil.handleSysRole(conn, tenantId, "init/data/sys_role_data");
// 处理 sys_user
InitDataUtil.handleSysUser(conn, tenantId, "init/data/sys_user_data");
// 处理 sys_user_role
InitDataUtil.bindUserAndRole(conn, tenantId);
// 处理 sys_menu
MenuUtil.handleMenu(conn, tenantId);
// 处理 sys_role_menu
InitDataUtil.bindRoleAndMenu(conn, tenantId);
conn.commit();
return new TenantInitVo(HttpStatus.HTTP_OK, null);
} catch (Exception e) {
try {
conn.rollback();
} catch (SQLException ex) {
ex.printStackTrace();
}
return new TenantInitVo(DatasourceErrorCode.INIT_DATA_ERROR.getCode(), e.getMessage());
} finally {
InitDataUtil.removeLocal();
cn.hutool.db.DbUtil.close(conn);
}
}
}

View File

@ -1,7 +1,6 @@
package com.qiaoba.module.tenant.service.impl;
import cn.hutool.core.util.StrUtil;
import com.alibaba.druid.pool.DruidDataSource;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.qiaoba.auth.utils.SecurityUtil;
import com.qiaoba.common.base.code.TenantErrorCode;
@ -9,25 +8,19 @@ import com.qiaoba.common.base.constants.BaseConstant;
import com.qiaoba.common.base.constants.TenantConstant;
import com.qiaoba.common.base.context.BaseContext;
import com.qiaoba.common.base.enums.BaseEnum;
import com.qiaoba.common.base.enums.DataBaseEnum;
import com.qiaoba.common.base.exceptions.ServiceException;
import com.qiaoba.common.database.config.DynamicDataSourceConfig;
import com.qiaoba.common.database.entity.PageQuery;
import com.qiaoba.common.database.entity.TableDataInfo;
import com.qiaoba.common.database.utils.JdbcUtil;
import com.qiaoba.common.redis.service.RedisService;
import com.qiaoba.module.tenant.entity.SysTenant;
import com.qiaoba.module.tenant.entity.SysTenantDatasource;
import com.qiaoba.module.tenant.entity.param.SysTenantParam;
import com.qiaoba.module.tenant.mapper.SysTenantMapper;
import com.qiaoba.module.tenant.service.SysTenantDatasourceService;
import com.qiaoba.module.tenant.service.SysTenantService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import java.sql.Connection;
import java.util.Date;
import java.util.List;
import java.util.Objects;
@ -49,9 +42,6 @@ public class SysTenantServiceImpl implements SysTenantService {
private final SysTenantDatasourceService sysTenantDatasourceService;
private final RedisService redisService;
@Value("${spring.application.name}")
private String baseDatabase;
@Override
public int insert(SysTenant sysTenant) {
sysTenant.setCreateTime(new Date());
@ -104,16 +94,6 @@ public class SysTenantServiceImpl implements SysTenantService {
return sysTenant;
}
@Override
public void initData(String tenantId) throws Exception {
SysTenant sysTenant = selectById(tenantId);
if (Objects.isNull(sysTenant)) {
throw new ServiceException("租户不存在");
}
// 初始化数据 todo
Connection connection = getConnection(sysTenant);
}
@Override
public void updateStatus(String tenantId, String status) {
@ -153,48 +133,6 @@ public class SysTenantServiceImpl implements SysTenantService {
return wrapper;
}
private Connection getConnection(SysTenant sysTenant) {
if (SysTenant.COLUMN_MODE.equals(sysTenant.getMode())) {
return column();
}
if (SysTenant.SCHEMA_MODE.equals(sysTenant.getMode())) {
return schema(sysTenant.getTenantId());
}
if (SysTenant.DATASOURCE_MODE.equals(sysTenant.getMode())) {
return datasource(sysTenant.getTenantId());
}
throw new ServiceException("未找到租户设置的数据源模式");
}
/**
* 处理字段模式
*/
private Connection column() {
DruidDataSource dataSource = DynamicDataSourceConfig.getPrimaryDataSource(TenantConstant.DEFAULT_TENANT_ID);
return JdbcUtil.getConnection(dataSource.getDriverClassName(), dataSource.getUrl(), dataSource.getUsername(), dataSource.getPassword());
}
/**
* 处理数据库模式
*/
private Connection schema(String tenantId) {
DruidDataSource dataSource = DynamicDataSourceConfig.getPrimaryDataSource(TenantConstant.DEFAULT_TENANT_ID);
String realUrl = dataSource.getUrl().replaceFirst(baseDatabase, baseDatabase + BaseConstant.HYPHEN_JOIN_STR + tenantId);
return JdbcUtil.getConnection(dataSource.getDriverClassName(), realUrl, dataSource.getUsername(), dataSource.getPassword());
}
/**
* 处理数据源模式
*/
private Connection datasource(String tenantId) {
SysTenantDatasource primary = sysTenantDatasourceService.selectPrimary(tenantId);
if (Objects.isNull(primary)) {
throw new ServiceException("未找到租户主数据源信息");
}
return JdbcUtil.getConnection(DataBaseEnum.getDriver(primary.getType()), DataBaseEnum.getUrl(primary.getType(), primary.getIp(), primary.getPort(), primary.getDbName(), primary.getSchemaName()), primary.getUsername(), primary.getPassword());
}
private void toCache(SysTenant sysTenant) {
log.debug("加载租户信息进缓存, 租户ID: {}", sysTenant.getTenantId());
redisService.set(TenantConstant.TENANT_INFO_KEY_PREFIX + sysTenant.getTenantId(), sysTenant);

View File

@ -3,7 +3,7 @@ package com.qiaoba.module.tenant.utils;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.StrUtil;
import cn.hutool.db.sql.SqlExecutor;
import com.qiaoba.common.database.utils.DbUtil;
import org.springframework.core.io.ClassPathResource;
import java.nio.charset.Charset;
@ -32,6 +32,10 @@ public class InitDataUtil {
*/
private static final ThreadLocal<Long> USER_SUPER_ADMIN_ID = new ThreadLocal<>();
public static void removeLocal() {
ROLE_SUPER_ADMIN_ID.remove();
USER_SUPER_ADMIN_ID.remove();
}
public static void handleSysConfig(Connection conn, String tenantId, String filePath) throws Exception {
handleSql(conn, tenantId, filePath);
@ -69,8 +73,9 @@ public class InitDataUtil {
}
sb.append(line);
}
if (StrUtil.isNotBlank(sb.toString())) {
SqlExecutor.execute(conn, sb.toString());
String sql = sb.toString();
if (StrUtil.isNotBlank(sql)) {
DbUtil.runSql(conn, sql);
}
}
@ -83,7 +88,7 @@ public class InitDataUtil {
String sql = StrUtil.format("INSERT INTO sys_user_role VALUES ('{}', '{}', '{}');",
USER_SUPER_ADMIN_ID.get(),
ROLE_SUPER_ADMIN_ID.get(), tenantId);
SqlExecutor.execute(conn, sql);
DbUtil.runSql(conn, sql);
}
public static void bindRoleAndMenu(Connection conn, String tenantId) throws Exception {
@ -93,8 +98,9 @@ public class InitDataUtil {
for (String menuId : menuIds) {
sb.append(StrUtil.format(sql, ROLE_SUPER_ADMIN_ID.get(), menuId, tenantId));
}
if (StrUtil.isNotBlank(sb.toString())) {
SqlExecutor.execute(conn, sb.toString());
String sbStr = sb.toString();
if (StrUtil.isNotBlank(sbStr)) {
DbUtil.runSql(conn, sbStr);
}
}
@ -109,8 +115,9 @@ public class InitDataUtil {
sb.append(line);
}
}
if (StrUtil.isNotBlank(sb.toString())) {
SqlExecutor.execute(conn, sb.toString());
String sql = sb.toString();
if (StrUtil.isNotBlank(sql)) {
DbUtil.runSql(conn, sql);
}
}
}

View File

@ -4,7 +4,7 @@ import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.StrUtil;
import cn.hutool.db.sql.SqlExecutor;
import com.qiaoba.common.database.utils.DbUtil;
import org.springframework.core.io.ClassPathResource;
import java.nio.charset.Charset;
@ -34,42 +34,42 @@ public class MenuUtil {
private static void handleMonitorMenu(Connection conn, String tenantId) throws Exception {
long monitorId = new Snowflake().nextId();
String sql = "INSERT INTO `sys_menu` VALUES ({}, '系统监控', 0, 2, 'monitor', NULL, '', 0, 0, 'M', '1', '', 'monitor', 'admin', '2023-05-27 22:25:03', '', NULL, '系统监控目录', {});";
String sql = "INSERT INTO sys_menu VALUES ('{}', '系统监控', 0, 2, 'monitor', NULL, '', 0, 0, 'M', '1', '', 'monitor', 'admin', '2023-05-27 22:25:03', '', NULL, '系统监控目录', '{}');";
sql = StrUtil.format(sql, monitorId, tenantId);
SqlExecutor.execute(conn, sql);
DbUtil.runSql(conn, sql);
// 登录用户
Long onlineUserId = handleMenu(conn, monitorId, tenantId, "MySQL/data/sys_menu/monitor/online_user/menu");
handleButton(conn, tenantId, onlineUserId, "MySQL/data/sys_menu/monitor/online_user/button");
Long onlineUserId = handleMenu(conn, monitorId, tenantId, "init/data/sys_menu/monitor/online_user/menu");
handleButton(conn, tenantId, onlineUserId, "init/data/sys_menu/monitor/online_user/button");
}
private static void handleSystemMenu(Connection conn, String tenantId) throws Exception {
long systemId = new Snowflake().nextId();
String sql = "INSERT INTO `sys_menu` VALUES ({}, '系统管理', 0, 1, 'system', NULL, '', 0, 0, 'M', '1', '', 'system', 'admin', '2023-04-23 14:35:29', '', NULL, '系统管理目录', {});";
String sql = "INSERT INTO sys_menu VALUES ('{}', '系统管理', 0, 1, 'system', NULL, '', 0, 0, 'M', '1', '', 'system', 'admin', '2023-04-23 14:35:29', '', NULL, '系统管理目录', '{}');";
sql = StrUtil.format(sql, systemId, tenantId);
SqlExecutor.execute(conn, sql);
DbUtil.runSql(conn, sql);
// 用户管理
Long userId = handleMenu(conn, systemId, tenantId, "MySQL/data/sys_menu/system/user/menu");
handleButton(conn, tenantId, userId, "MySQL/data/sys_menu/system/user/button");
Long userId = handleMenu(conn, systemId, tenantId, "init/data/sys_menu/system/user/menu");
handleButton(conn, tenantId, userId, "init/data/sys_menu/system/user/button");
// 角色管理
Long roleId = handleMenu(conn, systemId, tenantId, "MySQL/data/sys_menu/system/role/menu");
handleButton(conn, tenantId, roleId, "MySQL/data/sys_menu/system/role/button");
Long roleId = handleMenu(conn, systemId, tenantId, "init/data/sys_menu/system/role/menu");
handleButton(conn, tenantId, roleId, "init/data/sys_menu/system/role/button");
// 菜单管理
Long menuId = handleMenu(conn, systemId, tenantId, "MySQL/data/sys_menu/system/menu/menu");
handleButton(conn, tenantId, menuId, "MySQL/data/sys_menu/system/menu/button");
Long menuId = handleMenu(conn, systemId, tenantId, "init/data/sys_menu/system/menu/menu");
handleButton(conn, tenantId, menuId, "init/data/sys_menu/system/menu/button");
// 部门管理
Long deptId = handleMenu(conn, systemId, tenantId, "MySQL/data/sys_menu/system/dept/menu");
handleButton(conn, tenantId, deptId, "MySQL/data/sys_menu/system/dept/button");
Long deptId = handleMenu(conn, systemId, tenantId, "init/data/sys_menu/system/dept/menu");
handleButton(conn, tenantId, deptId, "init/data/sys_menu/system/dept/button");
// 岗位管理
Long postId = handleMenu(conn, systemId, tenantId, "MySQL/data/sys_menu/system/post/menu");
handleButton(conn, tenantId, postId, "MySQL/data/sys_menu/system/post/button");
Long postId = handleMenu(conn, systemId, tenantId, "init/data/sys_menu/system/post/menu");
handleButton(conn, tenantId, postId, "init/data/sys_menu/system/post/button");
// 字典管理
Long dictId = handleMenu(conn, systemId, tenantId, "MySQL/data/sys_menu/system/dict/menu");
handleButton(conn, tenantId, dictId, "MySQL/data/sys_menu/system/dict/button");
Long dictId = handleMenu(conn, systemId, tenantId, "init/data/sys_menu/system/dict/menu");
handleButton(conn, tenantId, dictId, "init/data/sys_menu/system/dict/button");
// 参数管理
Long configId = handleMenu(conn, systemId, tenantId, "MySQL/data/sys_menu/system/config/menu");
handleButton(conn, tenantId, configId, "MySQL/data/sys_menu/system/config/button");
Long configId = handleMenu(conn, systemId, tenantId, "init/data/sys_menu/system/config/menu");
handleButton(conn, tenantId, configId, "init/data/sys_menu/system/config/button");
}
private static Long handleMenu(Connection conn, Long systemId, String tenantId, String fileName) throws Exception {
@ -84,7 +84,7 @@ public class MenuUtil {
}
}
if (StrUtil.isNotBlank(sb.toString())) {
SqlExecutor.execute(conn, sb.toString());
DbUtil.runSql(conn, sb.toString());
}
return tempId;
}
@ -100,25 +100,23 @@ public class MenuUtil {
}
}
if (StrUtil.isNotBlank(sb.toString())) {
SqlExecutor.execute(conn, sb.toString());
DbUtil.runSql(conn, sb.toString());
}
}
public static List<String> getAllMenuIdsByTenantId(Connection conn, String tenantId) {
public static List<String> getAllMenuIdsByTenantId(Connection conn, String tenantId) throws SQLException {
List<String> menuIds = new ArrayList<>();
ResultSet resultSet = null;
Statement statement = null;
try {
statement = conn.createStatement();
resultSet = statement.executeQuery(StrUtil.format("SELECT menu_id FROM `sys_menu` where tenant_id = '{}'", tenantId));
resultSet = statement.executeQuery(StrUtil.format("SELECT menu_id FROM sys_menu where tenant_id = '{}'", tenantId));
while (resultSet.next()) {
String menuId = resultSet.getString("menu_id");
if (StrUtil.isNotBlank(menuId)) {
menuIds.add(menuId);
}
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
IoUtil.close(resultSet);
IoUtil.close(statement);

View File

@ -1,7 +1,7 @@
INSERT INTO `sys_config` VALUES ('{}', 'Token有效期', 'sys.token.expireTime', '96', 'Y', 'admin', '2023-05-25 13:22:50', 'admin', '2023-05-25 15:02:42', '单位:小时,仅支持正整数', '{}');
INSERT INTO `sys_config` VALUES ('{}', '账号黑名单开关', 'sys.account.blacklistOnOff', 'true', 'Y', 'admin', '2023-05-25 13:22:31', 'admin', '2023-05-25 13:57:14', 'true开启false关闭', '{}');
INSERT INTO `sys_config` VALUES ('{}', '账号注册开关', 'sys.account.registerUser', 'false', 'Y', 'admin', '2023-05-25 13:21:38', 'admin', '2023-05-25 15:07:00', 'true开启false关闭', '{}');
INSERT INTO `sys_config` VALUES ('{}', '登录验证码开关', 'sys.account.captchaOnOff', 'true', 'Y', 'admin', '2023-05-25 13:23:52', 'admin', '2023-06-05 13:43:00', 'true开启false关闭', '{}');
INSERT INTO `sys_config` VALUES ('{}', '主框架页-侧边栏主题', 'sys.index.sideTheme', 'theme-light', 'Y', 'admin', '2022-08-15 18:01:28', 'admin', '2023-05-25 13:26:27', '深色主题theme-dark浅色主题theme-light', '{}');
INSERT INTO `sys_config` VALUES ('{}', '主框架页-默认皮肤样式名称', 'sys.index.skinName', 'skin-blue', 'Y', 'admin', '2022-08-15 18:01:28', '', NULL, '蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow', '{}');
INSERT INTO `sys_config` VALUES ('{}', '账号允许同时在线', 'sys.account.allowBothOnline', 'true', 'Y', 'admin', '2023-05-28 14:28:05', 'admin', '2023-05-28 15:39:48', 'true允许false禁止', '{}');
INSERT INTO sys_config VALUES ('{}', 'Token有效期', 'sys.token.expireTime', '96', 'Y', 'admin', '2023-05-25 13:22:50', 'admin', '2023-05-25 15:02:42', '单位:小时,仅支持正整数', '{}');
INSERT INTO sys_config VALUES ('{}', '账号黑名单开关', 'sys.account.blacklistOnOff', 'true', 'Y', 'admin', '2023-05-25 13:22:31', 'admin', '2023-05-25 13:57:14', 'true开启false关闭', '{}');
INSERT INTO sys_config VALUES ('{}', '账号注册开关', 'sys.account.registerUser', 'false', 'Y', 'admin', '2023-05-25 13:21:38', 'admin', '2023-05-25 15:07:00', 'true开启false关闭', '{}');
INSERT INTO sys_config VALUES ('{}', '登录验证码开关', 'sys.account.captchaOnOff', 'true', 'Y', 'admin', '2023-05-25 13:23:52', 'admin', '2023-06-05 13:43:00', 'true开启false关闭', '{}');
INSERT INTO sys_config VALUES ('{}', '主框架页-侧边栏主题', 'sys.index.sideTheme', 'theme-light', 'Y', 'admin', '2022-08-15 18:01:28', 'admin', '2023-05-25 13:26:27', '深色主题theme-dark浅色主题theme-light', '{}');
INSERT INTO sys_config VALUES ('{}', '主框架页-默认皮肤样式名称', 'sys.index.skinName', 'skin-blue', 'Y', 'admin', '2022-08-15 18:01:28', '', NULL, '蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow', '{}');
INSERT INTO sys_config VALUES ('{}', '账号允许同时在线', 'sys.account.allowBothOnline', 'true', 'Y', 'admin', '2023-05-28 14:28:05', 'admin', '2023-05-28 15:39:48', 'true允许false禁止', '{}');

View File

@ -1,3 +1,3 @@
INSERT INTO `sys_menu` VALUES ({}, '在线查询', {}, 1, '#', '', '', 0, 0, 'F', '1', 'monitor:online:query', '#', 'admin', '2023-05-27 22:22:59', '', NULL, '', {});
INSERT INTO `sys_menu` VALUES ({}, '批量强退', {}, 2, '#', '', '', 0, 0, 'F', '1', 'monitor:online:batchLogout', '#', 'admin', '2023-05-27 22:22:59', '', NULL, '', {});
INSERT INTO `sys_menu` VALUES ({}, '单条强退', {}, 3, '#', '', '', 0, 0, 'F', '1', 'monitor:online:forceLogout', '#', 'admin', '2023-05-27 22:22:59', '', NULL, '', {});
INSERT INTO sys_menu VALUES ('{}', '在线查询', '{}', 1, '#', '', '', 0, 0, 'F', '1', 'monitor:online:query', '#', 'admin', '2023-05-27 22:22:59', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '批量强退', '{}', 2, '#', '', '', 0, 0, 'F', '1', 'monitor:online:batchLogout', '#', 'admin', '2023-05-27 22:22:59', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '单条强退', '{}', 3, '#', '', '', 0, 0, 'F', '1', 'monitor:online:forceLogout', '#', 'admin', '2023-05-27 22:22:59', '', NULL, '', '{}');

View File

@ -1 +1 @@
INSERT INTO `sys_menu` VALUES ({}, '登录用户', {}, 1, 'online', 'monitor/online/index', '', 0, 0, 'C', '1', 'monitor:online:list', 'online', 'admin', '2023-05-27 22:22:18', 'admin', '2023-05-30 09:49:35', '在线用户菜单', {});
INSERT INTO sys_menu VALUES ('{}', '登录用户', '{}', 1, 'online', 'monitor/online/index', '', 0, 0, 'C', '1', 'monitor:online:list', 'online', 'admin', '2023-05-27 22:22:18', 'admin', '2023-05-30 09:49:35', '在线用户菜单', '{}');

View File

@ -1,4 +1,4 @@
INSERT INTO `sys_menu` VALUES ({}, '参数查询', {}, 1, '#', '', '', 0, 0, 'F', '1', 'system:config:query', '#', 'admin', '2022-08-15 18:01:28', '', NULL, '', {});
INSERT INTO `sys_menu` VALUES ({}, '参数新增', {}, 2, '#', '', '', 0, 0, 'F', '1', 'system:config:add', '#', 'admin', '2022-08-15 18:01:28', '', NULL, '', {});
INSERT INTO `sys_menu` VALUES ({}, '参数修改', {}, 3, '#', '', '', 0, 0, 'F', '1', 'system:config:edit', '#', 'admin', '2022-08-15 18:01:28', '', NULL, '', {});
INSERT INTO `sys_menu` VALUES ({}, '参数删除', {}, 4, '#', '', '', 0, 0, 'F', '1', 'system:config:remove', '#', 'admin', '2022-08-15 18:01:28', '', NULL, '', {});
INSERT INTO sys_menu VALUES ('{}', '参数查询', '{}', 1, '#', '', '', 0, 0, 'F', '1', 'system:config:query', '#', 'admin', '2022-08-15 18:01:28', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '参数新增', '{}', 2, '#', '', '', 0, 0, 'F', '1', 'system:config:add', '#', 'admin', '2022-08-15 18:01:28', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '参数修改', '{}', 3, '#', '', '', 0, 0, 'F', '1', 'system:config:edit', '#', 'admin', '2022-08-15 18:01:28', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '参数删除', '{}', 4, '#', '', '', 0, 0, 'F', '1', 'system:config:remove', '#', 'admin', '2022-08-15 18:01:28', '', NULL, '', '{}');

View File

@ -1 +1 @@
INSERT INTO `sys_menu` VALUES ({}, '参数设置', {}, 7, 'config', 'system/config/index', '', 0, 0, 'C', '1', 'system:config:list', 'edit', 'admin', '2022-08-15 18:01:28', 'admin', '2023-05-24 21:13:11', '参数设置菜单', {});
INSERT INTO sys_menu VALUES ('{}', '参数设置', '{}', 7, 'config', 'system/config/index', '', 0, 0, 'C', '1', 'system:config:list', 'edit', 'admin', '2022-08-15 18:01:28', 'admin', '2023-05-24 21:13:11', '参数设置菜单', '{}');

View File

@ -1,4 +1,4 @@
INSERT INTO `sys_menu` VALUES ({}, '部门查询', {}, 1, '', '', '', 0, 0, 'F', '1', 'system:dept:query', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', {});
INSERT INTO `sys_menu` VALUES ({}, '部门新增', {}, 2, '', '', '', 0, 0, 'F', '1', 'system:dept:add', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', {});
INSERT INTO `sys_menu` VALUES ({}, '部门修改', {}, 3, '', '', '', 0, 0, 'F', '1', 'system:dept:edit', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', {});
INSERT INTO `sys_menu` VALUES ({}, '部门删除', {}, 4, '', '', '', 0, 0, 'F', '1', 'system:dept:remove', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', {});
INSERT INTO sys_menu VALUES ('{}', '部门查询', '{}', 1, '', '', '', 0, 0, 'F', '1', 'system:dept:query', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '部门新增', '{}', 2, '', '', '', 0, 0, 'F', '1', 'system:dept:add', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '部门修改', '{}', 3, '', '', '', 0, 0, 'F', '1', 'system:dept:edit', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '部门删除', '{}', 4, '', '', '', 0, 0, 'F', '1', 'system:dept:remove', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');

View File

@ -1 +1 @@
INSERT INTO `sys_menu` VALUES ({}, '部门管理', {}, 4, 'dept', 'system/dept/index', '', 0, 0, 'C', '1', 'system:dept:list', 'tree', 'admin', '2023-04-23 14:35:29', '', NULL, '部门管理菜单', {});
INSERT INTO sys_menu VALUES ('{}', '部门管理', '{}', 4, 'dept', 'system/dept/index', '', 0, 0, 'C', '1', 'system:dept:list', 'tree', 'admin', '2023-04-23 14:35:29', '', NULL, '部门管理菜单', '{}');

View File

@ -1,5 +1,5 @@
INSERT INTO `sys_menu` VALUES ({}, '字典查询', {}, 1, '#', '', '', 0, 0, 'F', '1', 'system:dict:query', '#', 'admin', '2022-08-15 18:01:28', '', NULL, '', {});
INSERT INTO `sys_menu` VALUES ({}, '字典新增', {}, 2, '#', '', '', 0, 0, 'F', '1', 'system:dict:add', '#', 'admin', '2022-08-15 18:01:28', '', NULL, '', {});
INSERT INTO `sys_menu` VALUES ({}, '字典修改', {}, 3, '#', '', '', 0, 0, 'F', '1', 'system:dict:edit', '#', 'admin', '2022-08-15 18:01:28', '', NULL, '', {});
INSERT INTO `sys_menu` VALUES ({}, '字典删除', {}, 4, '#', '', '', 0, 0, 'F', '1', 'system:dict:remove', '#', 'admin', '2022-08-15 18:01:28', '', NULL, '', {});
INSERT INTO `sys_menu` VALUES ({}, '字典导出', {}, 5, '#', '', '', 0, 0, 'F', '1', 'system:dict:export', '#', 'admin', '2022-08-15 18:01:28', '', NULL, '', {});
INSERT INTO sys_menu VALUES ('{}', '字典查询', '{}', 1, '#', '', '', 0, 0, 'F', '1', 'system:dict:query', '#', 'admin', '2022-08-15 18:01:28', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '字典新增', '{}', 2, '#', '', '', 0, 0, 'F', '1', 'system:dict:add', '#', 'admin', '2022-08-15 18:01:28', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '字典修改', '{}', 3, '#', '', '', 0, 0, 'F', '1', 'system:dict:edit', '#', 'admin', '2022-08-15 18:01:28', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '字典删除', '{}', 4, '#', '', '', 0, 0, 'F', '1', 'system:dict:remove', '#', 'admin', '2022-08-15 18:01:28', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '字典导出', '{}', 5, '#', '', '', 0, 0, 'F', '1', 'system:dict:export', '#', 'admin', '2022-08-15 18:01:28', '', NULL, '', '{}');

View File

@ -1 +1 @@
INSERT INTO `sys_menu` VALUES ({}, '字典管理', {}, 6, 'dict', 'system/dict/index', '', 0, 0, 'C', '1', 'system:dict:list', 'documentation', 'admin', '2022-08-15 18:01:28', 'admin', '2023-05-31 11:15:14', '字典管理菜单', {});
INSERT INTO sys_menu VALUES ('{}', '字典管理', '{}', 6, 'dict', 'system/dict/index', '', 0, 0, 'C', '1', 'system:dict:list', 'documentation', 'admin', '2022-08-15 18:01:28', 'admin', '2023-05-31 11:15:14', '字典管理菜单', '{}');

View File

@ -1,4 +1,4 @@
INSERT INTO `sys_menu` VALUES ({}, '菜单查询', {}, 1, '', '', '', 0, 0, 'F', '1', 'system:menu:query', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', {});
INSERT INTO `sys_menu` VALUES ({}, '菜单新增', {}, 2, '', '', '', 0, 0, 'F', '1', 'system:menu:add', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', {});
INSERT INTO `sys_menu` VALUES ({}, '菜单修改', {}, 3, '', '', '', 0, 0, 'F', '1', 'system:menu:edit', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', {});
INSERT INTO `sys_menu` VALUES ({}, '菜单删除', {}, 4, '', '', '', 0, 0, 'F', '1', 'system:menu:remove', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', {});
INSERT INTO sys_menu VALUES ('{}', '菜单查询', '{}', 1, '', '', '', 0, 0, 'F', '1', 'system:menu:query', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '菜单新增', '{}', 2, '', '', '', 0, 0, 'F', '1', 'system:menu:add', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '菜单修改', '{}', 3, '', '', '', 0, 0, 'F', '1', 'system:menu:edit', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '菜单删除', '{}', 4, '', '', '', 0, 0, 'F', '1', 'system:menu:remove', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');

View File

@ -1 +1 @@
INSERT INTO `sys_menu` VALUES ({}, '菜单管理', {}, 3, 'menu', 'system/menu/index', '', 0, 0, 'C', '1', 'system:menu:list', 'tree-table', 'admin', '2023-04-23 14:35:29', '', NULL, '菜单管理菜单', {});
INSERT INTO sys_menu VALUES ('{}', '菜单管理', '{}', 3, 'menu', 'system/menu/index', '', 0, 0, 'C', '1', 'system:menu:list', 'tree-table', 'admin', '2023-04-23 14:35:29', '', NULL, '菜单管理菜单', '{}');

View File

@ -1,5 +1,5 @@
INSERT INTO `sys_menu` VALUES ({}, '岗位查询', {}, 1, '', '', '', 0, 0, 'F', '1', 'system:post:query', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', {});
INSERT INTO `sys_menu` VALUES ({}, '岗位新增', {}, 2, '', '', '', 0, 0, 'F', '1', 'system:post:add', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', {});
INSERT INTO `sys_menu` VALUES ({}, '岗位修改', {}, 3, '', '', '', 0, 0, 'F', '1', 'system:post:edit', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', {});
INSERT INTO `sys_menu` VALUES ({}, '岗位删除', {}, 4, '', '', '', 0, 0, 'F', '1', 'system:post:remove', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', {});
INSERT INTO `sys_menu` VALUES ({}, '岗位导出', {}, 5, '', '', '', 0, 0, 'F', '1', 'system:post:export', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', {});
INSERT INTO sys_menu VALUES ('{}', '岗位查询', '{}', 1, '', '', '', 0, 0, 'F', '1', 'system:post:query', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '岗位新增', '{}', 2, '', '', '', 0, 0, 'F', '1', 'system:post:add', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '岗位修改', '{}', 3, '', '', '', 0, 0, 'F', '1', 'system:post:edit', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '岗位删除', '{}', 4, '', '', '', 0, 0, 'F', '1', 'system:post:remove', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '岗位导出', '{}', 5, '', '', '', 0, 0, 'F', '1', 'system:post:export', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');

View File

@ -1 +1 @@
INSERT INTO `sys_menu` VALUES ({}, '岗位管理', {}, 5, 'post', 'system/post/index', '', 0, 0, 'C', '1', 'system:post:list', 'post', 'admin', '2023-04-23 14:35:29', '', NULL, '岗位管理菜单', {});
INSERT INTO sys_menu VALUES ('{}', '岗位管理', '{}', 5, 'post', 'system/post/index', '', 0, 0, 'C', '1', 'system:post:list', 'post', 'admin', '2023-04-23 14:35:29', '', NULL, '岗位管理菜单', '{}');

View File

@ -1,5 +1,5 @@
INSERT INTO `sys_menu` VALUES ({}, '角色查询', {}, 1, '', '', '', 0, 0, 'F', '1', 'system:role:query', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', {});
INSERT INTO `sys_menu` VALUES ({}, '角色新增', {}, 2, '', '', '', 0, 0, 'F', '1', 'system:role:add', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', {});
INSERT INTO `sys_menu` VALUES ({}, '角色修改', {}, 3, '', '', '', 0, 0, 'F', '1', 'system:role:edit', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', {});
INSERT INTO `sys_menu` VALUES ({}, '角色删除', {}, 4, '', '', '', 0, 0, 'F', '1', 'system:role:remove', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', {});
INSERT INTO `sys_menu` VALUES ({}, '角色导出', {}, 5, '', '', '', 0, 0, 'F', '1', 'system:role:export', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', {});
INSERT INTO sys_menu VALUES ('{}', '角色查询', '{}', 1, '', '', '', 0, 0, 'F', '1', 'system:role:query', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '角色新增', '{}', 2, '', '', '', 0, 0, 'F', '1', 'system:role:add', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '角色修改', '{}', 3, '', '', '', 0, 0, 'F', '1', 'system:role:edit', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '角色删除', '{}', 4, '', '', '', 0, 0, 'F', '1', 'system:role:remove', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '角色导出', '{}', 5, '', '', '', 0, 0, 'F', '1', 'system:role:export', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');

View File

@ -1 +1 @@
INSERT INTO `sys_menu` VALUES ({}, '角色管理', {}, 2, 'role', 'system/role/index', '', 0, 0, 'C', '1', 'system:role:list', 'peoples', 'admin', '2023-04-23 14:35:29', '', NULL, '角色管理菜单', {});
INSERT INTO sys_menu VALUES ('{}', '角色管理', '{}', 2, 'role', 'system/role/index', '', 0, 0, 'C', '1', 'system:role:list', 'peoples', 'admin', '2023-04-23 14:35:29', '', NULL, '角色管理菜单', '{}');

View File

@ -1,7 +1,7 @@
INSERT INTO `sys_menu` VALUES ({}, '用户查询', {}, 1, '', '', '', 0, 0, 'F', '1', 'system:user:query', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', {});
INSERT INTO `sys_menu` VALUES ({}, '用户新增', {}, 2, '', '', '', 0, 0, 'F', '1', 'system:user:add', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', {});
INSERT INTO `sys_menu` VALUES ({}, '用户修改', {}, 3, '', '', '', 0, 0, 'F', '1', 'system:user:edit', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', {});
INSERT INTO `sys_menu` VALUES ({}, '用户删除', {}, 4, '', '', '', 0, 0, 'F', '1', 'system:user:remove', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', {});
INSERT INTO `sys_menu` VALUES ({}, '用户导出', {}, 5, '', '', '', 0, 0, 'F', '1', 'system:user:export', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', {});
INSERT INTO `sys_menu` VALUES ({}, '用户导入', {}, 6, '', '', '', 0, 0, 'F', '1', 'system:user:import', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', {});
INSERT INTO `sys_menu` VALUES ({}, '重置密码', {}, 7, '', '', '', 0, 0, 'F', '1', 'system:user:resetPwd', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', {});
INSERT INTO sys_menu VALUES ('{}', '用户查询', '{}', 1, '', '', '', 0, 0, 'F', '1', 'system:user:query', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '用户新增', '{}', 2, '', '', '', 0, 0, 'F', '1', 'system:user:add', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '用户修改', '{}', 3, '', '', '', 0, 0, 'F', '1', 'system:user:edit', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '用户删除', '{}', 4, '', '', '', 0, 0, 'F', '1', 'system:user:remove', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '用户导出', '{}', 5, '', '', '', 0, 0, 'F', '1', 'system:user:export', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '用户导入', '{}', 6, '', '', '', 0, 0, 'F', '1', 'system:user:import', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '重置密码', '{}', 7, '', '', '', 0, 0, 'F', '1', 'system:user:resetPwd', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');

View File

@ -1 +1 @@
INSERT INTO `sys_menu` VALUES ({}, '用户管理', {}, 1, 'user', 'system/user/index', '', 0, 0, 'C', '1', 'system:user:list', 'user', 'admin', '2023-04-23 14:35:29', '', NULL, '用户管理菜单', {});
INSERT INTO sys_menu VALUES ('{}', '用户管理', '{}', 1, 'user', 'system/user/index', '', 0, 0, 'C', '1', 'system:user:list', 'user', 'admin', '2023-04-23 14:35:29', '', NULL, '用户管理菜单', '{}');

View File

@ -1,4 +1,4 @@
INSERT INTO `sys_post` VALUES ({}, 'ceo', '总经理', 1, '1', 'admin', '2023-05-19 14:06:53', 'admin', '2023-05-22 14:56:56', NULL, {});
INSERT INTO `sys_post` VALUES ({}, 'cto', '技术总监', 2, '1', 'admin', '2023-05-19 14:07:06', 'admin', '2023-05-22 14:57:10', NULL,{});
INSERT INTO `sys_post` VALUES ({}, 'hr', '人事', 3, '1', 'admin', '2023-05-19 14:07:16', '', NULL, NULL, {});
INSERT INTO `sys_post` VALUES ({}, 'acct', '会计', 4, '1', 'admin', '2023-05-19 14:07:51', '', NULL, NULL, {});
INSERT INTO sys_post VALUES ('{}', 'ceo', '总经理', 1, '1', 'admin', '2023-05-19 14:06:53', 'admin', '2023-05-22 14:56:56', NULL, '{}');
INSERT INTO sys_post VALUES ('{}', 'cto', '技术总监', 2, '1', 'admin', '2023-05-19 14:07:06', 'admin', '2023-05-22 14:57:10', NULL,'{}');
INSERT INTO sys_post VALUES ('{}', 'hr', '人事', 3, '1', 'admin', '2023-05-19 14:07:16', '', NULL, NULL, '{}');
INSERT INTO sys_post VALUES ('{}', 'acct', '会计', 4, '1', 'admin', '2023-05-19 14:07:51', '', NULL, NULL, '{}');

View File

@ -1,2 +1,2 @@
INSERT INTO `sys_role` VALUES ({}, '超级管理员', 'admin', 1, '1', '1', 'admin', '2023-04-23 14:35:29', 'admin', '2023-05-31 11:05:52', '超级管理员', {});
INSERT INTO `sys_role` VALUES ({}, '测试', 'test', 1, '1', '1', 'admin', '2023-05-22 14:38:31', '', NULL, NULL, {});
INSERT INTO sys_role VALUES ('{}', '超级管理员', 'admin', 1, '1', '1', 'admin', '2023-04-23 14:35:29', 'admin', '2023-05-31 11:05:52', '超级管理员', '{}');
INSERT INTO sys_role VALUES ('{}', '测试', 'test', 1, '1', '1', 'admin', '2023-05-22 14:38:31', '', NULL, NULL, '{}');

View File

@ -1 +1 @@
INSERT INTO `sys_user` VALUES ({}, NULL, 'admin', '超级管理员', '', '', '0', '', '$2a$10$mDfrzPMZuxvKeKmqUPA4hOgNC2Zdgb8vOgVL8hP8IIdT6fAWpe0Bm', '1', '', NULL, '', NULL, NULL, {});
INSERT INTO sys_user VALUES ('{}', NULL, 'admin', '超级管理员', '', '', '0', '', '$2a$10$mDfrzPMZuxvKeKmqUPA4hOgNC2Zdgb8vOgVL8hP8IIdT6fAWpe0Bm', '1', '', NULL, '', NULL, NULL, '{}');

View File

@ -0,0 +1,7 @@
INSERT INTO sys_config VALUES ('{}', 'Token有效期', 'sys.token.expireTime', '96', 'Y', 'admin', '2023-05-25 13:22:50', 'admin', '2023-05-25 15:02:42', '单位:小时,仅支持正整数', '{}');
INSERT INTO sys_config VALUES ('{}', '账号黑名单开关', 'sys.account.blacklistOnOff', 'true', 'Y', 'admin', '2023-05-25 13:22:31', 'admin', '2023-05-25 13:57:14', 'true开启false关闭', '{}');
INSERT INTO sys_config VALUES ('{}', '账号注册开关', 'sys.account.registerUser', 'false', 'Y', 'admin', '2023-05-25 13:21:38', 'admin', '2023-05-25 15:07:00', 'true开启false关闭', '{}');
INSERT INTO sys_config VALUES ('{}', '登录验证码开关', 'sys.account.captchaOnOff', 'true', 'Y', 'admin', '2023-05-25 13:23:52', 'admin', '2023-06-05 13:43:00', 'true开启false关闭', '{}');
INSERT INTO sys_config VALUES ('{}', '主框架页-侧边栏主题', 'sys.index.sideTheme', 'theme-light', 'Y', 'admin', '2022-08-15 18:01:28', 'admin', '2023-05-25 13:26:27', '深色主题theme-dark浅色主题theme-light', '{}');
INSERT INTO sys_config VALUES ('{}', '主框架页-默认皮肤样式名称', 'sys.index.skinName', 'skin-blue', 'Y', 'admin', '2022-08-15 18:01:28', '', NULL, '蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow', '{}');
INSERT INTO sys_config VALUES ('{}', '账号允许同时在线', 'sys.account.allowBothOnline', 'true', 'Y', 'admin', '2023-05-28 14:28:05', 'admin', '2023-05-28 15:39:48', 'true允许false禁止', '{}');

View File

@ -0,0 +1,3 @@
INSERT INTO sys_menu VALUES ('{}', '在线查询', '{}', 1, '#', '', '', 0, 0, 'F', '1', 'monitor:online:query', '#', 'admin', '2023-05-27 22:22:59', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '批量强退', '{}', 2, '#', '', '', 0, 0, 'F', '1', 'monitor:online:batchLogout', '#', 'admin', '2023-05-27 22:22:59', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '单条强退', '{}', 3, '#', '', '', 0, 0, 'F', '1', 'monitor:online:forceLogout', '#', 'admin', '2023-05-27 22:22:59', '', NULL, '', '{}');

View File

@ -0,0 +1 @@
INSERT INTO sys_menu VALUES ('{}', '登录用户', '{}', 1, 'online', 'monitor/online/index', '', 0, 0, 'C', '1', 'monitor:online:list', 'online', 'admin', '2023-05-27 22:22:18', 'admin', '2023-05-30 09:49:35', '在线用户菜单', '{}');

View File

@ -0,0 +1,4 @@
INSERT INTO sys_menu VALUES ('{}', '参数查询', '{}', 1, '#', '', '', 0, 0, 'F', '1', 'system:config:query', '#', 'admin', '2022-08-15 18:01:28', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '参数新增', '{}', 2, '#', '', '', 0, 0, 'F', '1', 'system:config:add', '#', 'admin', '2022-08-15 18:01:28', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '参数修改', '{}', 3, '#', '', '', 0, 0, 'F', '1', 'system:config:edit', '#', 'admin', '2022-08-15 18:01:28', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '参数删除', '{}', 4, '#', '', '', 0, 0, 'F', '1', 'system:config:remove', '#', 'admin', '2022-08-15 18:01:28', '', NULL, '', '{}');

View File

@ -0,0 +1 @@
INSERT INTO sys_menu VALUES ('{}', '参数设置', '{}', 7, 'config', 'system/config/index', '', 0, 0, 'C', '1', 'system:config:list', 'edit', 'admin', '2022-08-15 18:01:28', 'admin', '2023-05-24 21:13:11', '参数设置菜单', '{}');

View File

@ -0,0 +1,4 @@
INSERT INTO sys_menu VALUES ('{}', '部门查询', '{}', 1, '', '', '', 0, 0, 'F', '1', 'system:dept:query', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '部门新增', '{}', 2, '', '', '', 0, 0, 'F', '1', 'system:dept:add', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '部门修改', '{}', 3, '', '', '', 0, 0, 'F', '1', 'system:dept:edit', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '部门删除', '{}', 4, '', '', '', 0, 0, 'F', '1', 'system:dept:remove', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');

View File

@ -0,0 +1 @@
INSERT INTO sys_menu VALUES ('{}', '部门管理', '{}', 4, 'dept', 'system/dept/index', '', 0, 0, 'C', '1', 'system:dept:list', 'tree', 'admin', '2023-04-23 14:35:29', '', NULL, '部门管理菜单', '{}');

View File

@ -0,0 +1,5 @@
INSERT INTO sys_menu VALUES ('{}', '字典查询', '{}', 1, '#', '', '', 0, 0, 'F', '1', 'system:dict:query', '#', 'admin', '2022-08-15 18:01:28', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '字典新增', '{}', 2, '#', '', '', 0, 0, 'F', '1', 'system:dict:add', '#', 'admin', '2022-08-15 18:01:28', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '字典修改', '{}', 3, '#', '', '', 0, 0, 'F', '1', 'system:dict:edit', '#', 'admin', '2022-08-15 18:01:28', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '字典删除', '{}', 4, '#', '', '', 0, 0, 'F', '1', 'system:dict:remove', '#', 'admin', '2022-08-15 18:01:28', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '字典导出', '{}', 5, '#', '', '', 0, 0, 'F', '1', 'system:dict:export', '#', 'admin', '2022-08-15 18:01:28', '', NULL, '', '{}');

View File

@ -0,0 +1 @@
INSERT INTO sys_menu VALUES ('{}', '字典管理', '{}', 6, 'dict', 'system/dict/index', '', 0, 0, 'C', '1', 'system:dict:list', 'documentation', 'admin', '2022-08-15 18:01:28', 'admin', '2023-05-31 11:15:14', '字典管理菜单', '{}');

View File

@ -0,0 +1,4 @@
INSERT INTO sys_menu VALUES ('{}', '菜单查询', '{}', 1, '', '', '', 0, 0, 'F', '1', 'system:menu:query', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '菜单新增', '{}', 2, '', '', '', 0, 0, 'F', '1', 'system:menu:add', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '菜单修改', '{}', 3, '', '', '', 0, 0, 'F', '1', 'system:menu:edit', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '菜单删除', '{}', 4, '', '', '', 0, 0, 'F', '1', 'system:menu:remove', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');

View File

@ -0,0 +1 @@
INSERT INTO sys_menu VALUES ('{}', '菜单管理', '{}', 3, 'menu', 'system/menu/index', '', 0, 0, 'C', '1', 'system:menu:list', 'tree-table', 'admin', '2023-04-23 14:35:29', '', NULL, '菜单管理菜单', '{}');

View File

@ -0,0 +1,5 @@
INSERT INTO sys_menu VALUES ('{}', '岗位查询', '{}', 1, '', '', '', 0, 0, 'F', '1', 'system:post:query', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '岗位新增', '{}', 2, '', '', '', 0, 0, 'F', '1', 'system:post:add', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '岗位修改', '{}', 3, '', '', '', 0, 0, 'F', '1', 'system:post:edit', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '岗位删除', '{}', 4, '', '', '', 0, 0, 'F', '1', 'system:post:remove', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '岗位导出', '{}', 5, '', '', '', 0, 0, 'F', '1', 'system:post:export', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');

View File

@ -0,0 +1 @@
INSERT INTO sys_menu VALUES ('{}', '岗位管理', '{}', 5, 'post', 'system/post/index', '', 0, 0, 'C', '1', 'system:post:list', 'post', 'admin', '2023-04-23 14:35:29', '', NULL, '岗位管理菜单', '{}');

View File

@ -0,0 +1,5 @@
INSERT INTO sys_menu VALUES ('{}', '角色查询', '{}', 1, '', '', '', 0, 0, 'F', '1', 'system:role:query', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '角色新增', '{}', 2, '', '', '', 0, 0, 'F', '1', 'system:role:add', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '角色修改', '{}', 3, '', '', '', 0, 0, 'F', '1', 'system:role:edit', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '角色删除', '{}', 4, '', '', '', 0, 0, 'F', '1', 'system:role:remove', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '角色导出', '{}', 5, '', '', '', 0, 0, 'F', '1', 'system:role:export', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');

View File

@ -0,0 +1 @@
INSERT INTO sys_menu VALUES ('{}', '角色管理', '{}', 2, 'role', 'system/role/index', '', 0, 0, 'C', '1', 'system:role:list', 'peoples', 'admin', '2023-04-23 14:35:29', '', NULL, '角色管理菜单', '{}');

View File

@ -0,0 +1,7 @@
INSERT INTO sys_menu VALUES ('{}', '用户查询', '{}', 1, '', '', '', 0, 0, 'F', '1', 'system:user:query', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '用户新增', '{}', 2, '', '', '', 0, 0, 'F', '1', 'system:user:add', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '用户修改', '{}', 3, '', '', '', 0, 0, 'F', '1', 'system:user:edit', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '用户删除', '{}', 4, '', '', '', 0, 0, 'F', '1', 'system:user:remove', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '用户导出', '{}', 5, '', '', '', 0, 0, 'F', '1', 'system:user:export', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '用户导入', '{}', 6, '', '', '', 0, 0, 'F', '1', 'system:user:import', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');
INSERT INTO sys_menu VALUES ('{}', '重置密码', '{}', 7, '', '', '', 0, 0, 'F', '1', 'system:user:resetPwd', '#', 'admin', '2023-04-23 14:35:29', '', NULL, '', '{}');

View File

@ -0,0 +1 @@
INSERT INTO sys_menu VALUES ('{}', '用户管理', '{}', 1, 'user', 'system/user/index', '', 0, 0, 'C', '1', 'system:user:list', 'user', 'admin', '2023-04-23 14:35:29', '', NULL, '用户管理菜单', '{}');

View File

@ -0,0 +1,4 @@
INSERT INTO sys_post VALUES ('{}', 'ceo', '总经理', 1, '1', 'admin', '2023-05-19 14:06:53', 'admin', '2023-05-22 14:56:56', NULL, '{}');
INSERT INTO sys_post VALUES ('{}', 'cto', '技术总监', 2, '1', 'admin', '2023-05-19 14:07:06', 'admin', '2023-05-22 14:57:10', NULL,'{}');
INSERT INTO sys_post VALUES ('{}', 'hr', '人事', 3, '1', 'admin', '2023-05-19 14:07:16', '', NULL, NULL, '{}');
INSERT INTO sys_post VALUES ('{}', 'acct', '会计', 4, '1', 'admin', '2023-05-19 14:07:51', '', NULL, NULL, '{}');

View File

@ -0,0 +1,2 @@
INSERT INTO sys_role VALUES ('{}', '超级管理员', 'admin', 1, '1', '1', 'admin', '2023-04-23 14:35:29', 'admin', '2023-05-31 11:05:52', '超级管理员', '{}');
INSERT INTO sys_role VALUES ('{}', '测试', 'test', 1, '1', '1', 'admin', '2023-05-22 14:38:31', '', NULL, NULL, '{}');

View File

@ -0,0 +1 @@
INSERT INTO sys_user VALUES ('{}', NULL, 'admin', '超级管理员', '', '', '0', '', '$2a$10$mDfrzPMZuxvKeKmqUPA4hOgNC2Zdgb8vOgVL8hP8IIdT6fAWpe0Bm', '1', '', NULL, '', NULL, NULL, '{}');

View File

@ -0,0 +1,664 @@
-- ----------------------------
-- Table structure for gen_table
-- ----------------------------
DROP TABLE IF EXISTS "gen_table";
CREATE TABLE "gen_table" (
"table_id" varchar(20) NOT NULL,
"table_name" varchar(200) COLLATE "pg_catalog"."default",
"table_comment" varchar(500) COLLATE "pg_catalog"."default",
"sub_table_name" varchar(64) COLLATE "pg_catalog"."default",
"sub_table_fk_name" varchar(64) COLLATE "pg_catalog"."default",
"class_name" varchar(100) COLLATE "pg_catalog"."default",
"tpl_category" varchar(200) COLLATE "pg_catalog"."default",
"package_name" varchar(100) COLLATE "pg_catalog"."default",
"module_name" varchar(30) COLLATE "pg_catalog"."default",
"business_name" varchar(30) COLLATE "pg_catalog"."default",
"function_name" varchar(50) COLLATE "pg_catalog"."default",
"function_author" varchar(50) COLLATE "pg_catalog"."default",
"gen_type" char(1) COLLATE "pg_catalog"."default",
"gen_path" varchar(200) COLLATE "pg_catalog"."default",
"options" varchar(1000) COLLATE "pg_catalog"."default",
"create_by" varchar(64) COLLATE "pg_catalog"."default",
"create_time" timestamp(6),
"update_by" varchar(64) COLLATE "pg_catalog"."default",
"update_time" timestamp(6),
"remark" varchar(500) COLLATE "pg_catalog"."default"
)
;
COMMENT ON COLUMN "gen_table"."table_id" IS '编号';
COMMENT ON COLUMN "gen_table"."table_name" IS '表名称';
COMMENT ON COLUMN "gen_table"."table_comment" IS '表描述';
COMMENT ON COLUMN "gen_table"."sub_table_name" IS '关联子表的表名';
COMMENT ON COLUMN "gen_table"."sub_table_fk_name" IS '子表关联的外键名';
COMMENT ON COLUMN "gen_table"."class_name" IS '实体类名称';
COMMENT ON COLUMN "gen_table"."tpl_category" IS '使用的模板crud单表操作 tree树表操作';
COMMENT ON COLUMN "gen_table"."package_name" IS '生成包路径';
COMMENT ON COLUMN "gen_table"."module_name" IS '生成模块名';
COMMENT ON COLUMN "gen_table"."business_name" IS '生成业务名';
COMMENT ON COLUMN "gen_table"."function_name" IS '生成功能名';
COMMENT ON COLUMN "gen_table"."function_author" IS '生成功能作者';
COMMENT ON COLUMN "gen_table"."gen_type" IS '生成代码方式0zip压缩包 1自定义路径';
COMMENT ON COLUMN "gen_table"."gen_path" IS '生成路径(不填默认项目路径)';
COMMENT ON COLUMN "gen_table"."options" IS '其它生成选项';
COMMENT ON COLUMN "gen_table"."create_by" IS '创建者';
COMMENT ON COLUMN "gen_table"."create_time" IS '创建时间';
COMMENT ON COLUMN "gen_table"."update_by" IS '更新者';
COMMENT ON COLUMN "gen_table"."update_time" IS '更新时间';
COMMENT ON COLUMN "gen_table"."remark" IS '备注';
COMMENT ON TABLE "gen_table" IS '代码生成业务表';
-- ----------------------------
-- Table structure for gen_table_column
-- ----------------------------
DROP TABLE IF EXISTS "gen_table_column";
CREATE TABLE "gen_table_column" (
"column_id" varchar(20) NOT NULL,
"table_id" varchar(64) COLLATE "pg_catalog"."default",
"column_name" varchar(200) COLLATE "pg_catalog"."default",
"column_comment" varchar(500) COLLATE "pg_catalog"."default",
"column_type" varchar(100) COLLATE "pg_catalog"."default",
"java_type" varchar(500) COLLATE "pg_catalog"."default",
"java_field" varchar(200) COLLATE "pg_catalog"."default",
"is_pk" char(1) COLLATE "pg_catalog"."default",
"is_increment" char(1) COLLATE "pg_catalog"."default",
"is_required" char(1) COLLATE "pg_catalog"."default",
"is_insert" char(1) COLLATE "pg_catalog"."default",
"is_edit" char(1) COLLATE "pg_catalog"."default",
"is_list" char(1) COLLATE "pg_catalog"."default",
"is_query" char(1) COLLATE "pg_catalog"."default",
"query_type" varchar(200) COLLATE "pg_catalog"."default",
"html_type" varchar(200) COLLATE "pg_catalog"."default",
"dict_type" varchar(200) COLLATE "pg_catalog"."default",
"sort" int4,
"create_by" varchar(64) COLLATE "pg_catalog"."default",
"create_time" timestamp(6),
"update_by" varchar(64) COLLATE "pg_catalog"."default",
"update_time" timestamp(6)
)
;
COMMENT ON COLUMN "gen_table_column"."column_id" IS '编号';
COMMENT ON COLUMN "gen_table_column"."table_id" IS '归属表编号';
COMMENT ON COLUMN "gen_table_column"."column_name" IS '列名称';
COMMENT ON COLUMN "gen_table_column"."column_comment" IS '列描述';
COMMENT ON COLUMN "gen_table_column"."column_type" IS '列类型';
COMMENT ON COLUMN "gen_table_column"."java_type" IS 'JAVA类型';
COMMENT ON COLUMN "gen_table_column"."java_field" IS 'JAVA字段名';
COMMENT ON COLUMN "gen_table_column"."is_pk" IS '是否主键1是';
COMMENT ON COLUMN "gen_table_column"."is_increment" IS '是否自增1是';
COMMENT ON COLUMN "gen_table_column"."is_required" IS '是否必填1是';
COMMENT ON COLUMN "gen_table_column"."is_insert" IS '是否为插入字段1是';
COMMENT ON COLUMN "gen_table_column"."is_edit" IS '是否编辑字段1是';
COMMENT ON COLUMN "gen_table_column"."is_list" IS '是否列表字段1是';
COMMENT ON COLUMN "gen_table_column"."is_query" IS '是否查询字段1是';
COMMENT ON COLUMN "gen_table_column"."query_type" IS '查询方式(等于、不等于、大于、小于、范围)';
COMMENT ON COLUMN "gen_table_column"."html_type" IS '显示类型(文本框、文本域、下拉框、复选框、单选框、日期控件)';
COMMENT ON COLUMN "gen_table_column"."dict_type" IS '字典类型';
COMMENT ON COLUMN "gen_table_column"."sort" IS '排序';
COMMENT ON COLUMN "gen_table_column"."create_by" IS '创建者';
COMMENT ON COLUMN "gen_table_column"."create_time" IS '创建时间';
COMMENT ON COLUMN "gen_table_column"."update_by" IS '更新者';
COMMENT ON COLUMN "gen_table_column"."update_time" IS '更新时间';
COMMENT ON TABLE "gen_table_column" IS '代码生成业务表字段';
-- ----------------------------
-- Table structure for sys_config
-- ----------------------------
DROP TABLE IF EXISTS "sys_config";
CREATE TABLE "sys_config" (
"config_id" varchar(20) NOT NULL,
"config_name" varchar(100) COLLATE "pg_catalog"."default",
"config_key" varchar(100) COLLATE "pg_catalog"."default",
"config_value" varchar(500) COLLATE "pg_catalog"."default",
"config_type" char(1) COLLATE "pg_catalog"."default",
"create_user" varchar(64) COLLATE "pg_catalog"."default",
"create_time" timestamp(6),
"update_user" varchar(64) COLLATE "pg_catalog"."default",
"update_time" timestamp(6),
"remark" varchar(500) COLLATE "pg_catalog"."default",
"tenant_id" varchar(20)
)
;
COMMENT ON COLUMN "sys_config"."config_id" IS '参数主键';
COMMENT ON COLUMN "sys_config"."config_name" IS '参数名称';
COMMENT ON COLUMN "sys_config"."config_key" IS '参数键名';
COMMENT ON COLUMN "sys_config"."config_value" IS '参数键值';
COMMENT ON COLUMN "sys_config"."config_type" IS '系统内置Y是 N否';
COMMENT ON COLUMN "sys_config"."create_user" IS '创建者';
COMMENT ON COLUMN "sys_config"."create_time" IS '创建时间';
COMMENT ON COLUMN "sys_config"."update_user" IS '更新者';
COMMENT ON COLUMN "sys_config"."update_time" IS '更新时间';
COMMENT ON COLUMN "sys_config"."remark" IS '备注';
COMMENT ON TABLE "sys_config" IS '参数配置表';
-- ----------------------------
-- Table structure for sys_dept
-- ----------------------------
DROP TABLE IF EXISTS "sys_dept";
CREATE TABLE "sys_dept" (
"dept_id" varchar(20) NOT NULL,
"parent_id" varchar(20),
"ancestors" varchar(500) COLLATE "pg_catalog"."default",
"dept_name" varchar(30) COLLATE "pg_catalog"."default",
"order_num" int4,
"leader" varchar(20) COLLATE "pg_catalog"."default",
"phone" varchar(30) COLLATE "pg_catalog"."default",
"email" varchar(30) COLLATE "pg_catalog"."default",
"status" char(1) COLLATE "pg_catalog"."default",
"create_user" varchar(64) COLLATE "pg_catalog"."default",
"create_time" timestamp(6),
"update_user" varchar(64) COLLATE "pg_catalog"."default",
"update_time" timestamp(6),
"remark" varchar(255) COLLATE "pg_catalog"."default",
"tenant_id" varchar(20)
)
;
COMMENT ON COLUMN "sys_dept"."dept_id" IS '部门id';
COMMENT ON COLUMN "sys_dept"."parent_id" IS '父部门id';
COMMENT ON COLUMN "sys_dept"."ancestors" IS '祖级列表';
COMMENT ON COLUMN "sys_dept"."dept_name" IS '部门名称';
COMMENT ON COLUMN "sys_dept"."order_num" IS '显示顺序';
COMMENT ON COLUMN "sys_dept"."leader" IS '负责人ID';
COMMENT ON COLUMN "sys_dept"."phone" IS '手机号';
COMMENT ON COLUMN "sys_dept"."email" IS '邮箱';
COMMENT ON COLUMN "sys_dept"."status" IS '部门状态1正常 0停用';
COMMENT ON COLUMN "sys_dept"."create_user" IS '创建者';
COMMENT ON COLUMN "sys_dept"."create_time" IS '创建时间';
COMMENT ON COLUMN "sys_dept"."update_user" IS '更新者';
COMMENT ON COLUMN "sys_dept"."update_time" IS '更新时间';
COMMENT ON COLUMN "sys_dept"."remark" IS '备注';
COMMENT ON COLUMN "sys_dept"."tenant_id" IS '租户ID';
COMMENT ON TABLE "sys_dept" IS '部门表';
-- ----------------------------
-- Table structure for sys_dict_data
-- ----------------------------
DROP TABLE IF EXISTS "sys_dict_data";
CREATE TABLE "sys_dict_data" (
"dict_code" varchar(20) NOT NULL,
"dict_sort" int4,
"dict_label" varchar(100) COLLATE "pg_catalog"."default",
"dict_value" varchar(100) COLLATE "pg_catalog"."default",
"dict_type" varchar(100) COLLATE "pg_catalog"."default",
"css_class" varchar(100) COLLATE "pg_catalog"."default",
"list_class" varchar(100) COLLATE "pg_catalog"."default",
"status" char(1) COLLATE "pg_catalog"."default",
"create_user" varchar(64) COLLATE "pg_catalog"."default",
"create_time" timestamp(6),
"update_user" varchar(64) COLLATE "pg_catalog"."default",
"update_time" timestamp(6),
"remark" varchar(500) COLLATE "pg_catalog"."default",
"tenant_id" varchar(20)
)
;
COMMENT ON COLUMN "sys_dict_data"."dict_code" IS '字典编码';
COMMENT ON COLUMN "sys_dict_data"."dict_sort" IS '字典排序';
COMMENT ON COLUMN "sys_dict_data"."dict_label" IS '字典标签';
COMMENT ON COLUMN "sys_dict_data"."dict_value" IS '字典键值';
COMMENT ON COLUMN "sys_dict_data"."dict_type" IS '字典类型';
COMMENT ON COLUMN "sys_dict_data"."css_class" IS '样式属性(其他样式扩展)';
COMMENT ON COLUMN "sys_dict_data"."list_class" IS '表格回显样式';
COMMENT ON COLUMN "sys_dict_data"."status" IS '状态0正常 1停用';
COMMENT ON COLUMN "sys_dict_data"."create_user" IS '创建者';
COMMENT ON COLUMN "sys_dict_data"."create_time" IS '创建时间';
COMMENT ON COLUMN "sys_dict_data"."update_user" IS '更新者';
COMMENT ON COLUMN "sys_dict_data"."update_time" IS '更新时间';
COMMENT ON COLUMN "sys_dict_data"."remark" IS '备注';
COMMENT ON COLUMN "sys_dict_data"."tenant_id" IS '租户ID';
COMMENT ON TABLE "sys_dict_data" IS '字典数据表';
-- ----------------------------
-- Table structure for sys_dict_type
-- ----------------------------
DROP TABLE IF EXISTS "sys_dict_type";
CREATE TABLE "sys_dict_type" (
"dict_id" varchar(20) NOT NULL,
"dict_name" varchar(100) COLLATE "pg_catalog"."default",
"dict_type" varchar(100) COLLATE "pg_catalog"."default",
"status" char(1) COLLATE "pg_catalog"."default",
"create_user" varchar(64) COLLATE "pg_catalog"."default",
"create_time" timestamp(6),
"update_user" varchar(64) COLLATE "pg_catalog"."default",
"update_time" timestamp(6),
"remark" varchar(500) COLLATE "pg_catalog"."default",
"tenant_id" varchar(20)
)
;
COMMENT ON COLUMN "sys_dict_type"."dict_id" IS '字典主键';
COMMENT ON COLUMN "sys_dict_type"."dict_name" IS '字典名称';
COMMENT ON COLUMN "sys_dict_type"."dict_type" IS '字典类型';
COMMENT ON COLUMN "sys_dict_type"."status" IS '状态0正常 1停用';
COMMENT ON COLUMN "sys_dict_type"."create_user" IS '创建者';
COMMENT ON COLUMN "sys_dict_type"."create_time" IS '创建时间';
COMMENT ON COLUMN "sys_dict_type"."update_user" IS '更新者';
COMMENT ON COLUMN "sys_dict_type"."update_time" IS '更新时间';
COMMENT ON COLUMN "sys_dict_type"."remark" IS '备注';
COMMENT ON COLUMN "sys_dict_type"."tenant_id" IS '租户ID';
COMMENT ON TABLE "sys_dict_type" IS '字典类型表';
-- ----------------------------
-- Table structure for sys_login_log
-- ----------------------------
DROP TABLE IF EXISTS "sys_login_log";
CREATE TABLE "sys_login_log" (
"login_id" varchar(20) NOT NULL,
"device_sn" varchar(50) COLLATE "pg_catalog"."default",
"username" varchar(50) COLLATE "pg_catalog"."default",
"nickname" varchar(30) COLLATE "pg_catalog"."default",
"ip" varchar(30) COLLATE "pg_catalog"."default",
"address" varchar(255) COLLATE "pg_catalog"."default",
"browser" varchar(50) COLLATE "pg_catalog"."default",
"os" varchar(50) COLLATE "pg_catalog"."default",
"login_time" timestamp(6),
"create_user" varchar(64) COLLATE "pg_catalog"."default",
"create_time" timestamp(6),
"update_user" varchar(64) COLLATE "pg_catalog"."default",
"update_time" timestamp(6),
"remark" varchar(500) COLLATE "pg_catalog"."default",
"tenant_id" varchar(20)
)
;
COMMENT ON COLUMN "sys_login_log"."device_sn" IS '设备编码';
COMMENT ON COLUMN "sys_login_log"."username" IS '登录账号';
COMMENT ON COLUMN "sys_login_log"."nickname" IS '用户名称';
COMMENT ON COLUMN "sys_login_log"."ip" IS '访问IP';
COMMENT ON COLUMN "sys_login_log"."address" IS '登录地点';
COMMENT ON COLUMN "sys_login_log"."browser" IS '浏览器';
COMMENT ON COLUMN "sys_login_log"."os" IS '操作系统';
COMMENT ON COLUMN "sys_login_log"."login_time" IS '登录时间';
COMMENT ON COLUMN "sys_login_log"."create_user" IS '创建者';
COMMENT ON COLUMN "sys_login_log"."create_time" IS '创建时间';
COMMENT ON COLUMN "sys_login_log"."update_user" IS '更新者';
COMMENT ON COLUMN "sys_login_log"."update_time" IS '更新时间';
COMMENT ON COLUMN "sys_login_log"."remark" IS '备注';
COMMENT ON TABLE "sys_login_log" IS '登录日志';
-- ----------------------------
-- Table structure for sys_menu
-- ----------------------------
DROP TABLE IF EXISTS "sys_menu";
CREATE TABLE "sys_menu" (
"menu_id" varchar(20) NOT NULL,
"menu_name" varchar(50) COLLATE "pg_catalog"."default" NOT NULL,
"parent_id" varchar(20),
"order_num" int4,
"path" varchar(200) COLLATE "pg_catalog"."default",
"component" varchar(255) COLLATE "pg_catalog"."default",
"query" varchar(255) COLLATE "pg_catalog"."default",
"is_frame" int4,
"is_cache" int4,
"menu_type" char(1) COLLATE "pg_catalog"."default",
"is_visible" char(1) COLLATE "pg_catalog"."default",
"perms" varchar(100) COLLATE "pg_catalog"."default",
"icon" varchar(100) COLLATE "pg_catalog"."default",
"create_user" varchar(64) COLLATE "pg_catalog"."default",
"create_time" timestamp(6),
"update_user" varchar(64) COLLATE "pg_catalog"."default",
"update_time" timestamp(6),
"remark" varchar(500) COLLATE "pg_catalog"."default",
"tenant_id" varchar(20)
)
;
COMMENT ON COLUMN "sys_menu"."menu_id" IS '菜单ID';
COMMENT ON COLUMN "sys_menu"."menu_name" IS '菜单名称';
COMMENT ON COLUMN "sys_menu"."parent_id" IS '父菜单ID';
COMMENT ON COLUMN "sys_menu"."order_num" IS '显示顺序';
COMMENT ON COLUMN "sys_menu"."path" IS '路由地址';
COMMENT ON COLUMN "sys_menu"."component" IS '组件路径';
COMMENT ON COLUMN "sys_menu"."query" IS '路由参数';
COMMENT ON COLUMN "sys_menu"."is_frame" IS '是否为外链1是 0否';
COMMENT ON COLUMN "sys_menu"."is_cache" IS '是否缓存1缓存 0不缓存';
COMMENT ON COLUMN "sys_menu"."menu_type" IS '菜单类型M目录 C菜单 F按钮';
COMMENT ON COLUMN "sys_menu"."is_visible" IS '菜单状态1显示 0隐藏';
COMMENT ON COLUMN "sys_menu"."perms" IS '权限标识';
COMMENT ON COLUMN "sys_menu"."icon" IS '菜单图标';
COMMENT ON COLUMN "sys_menu"."create_user" IS '创建者';
COMMENT ON COLUMN "sys_menu"."create_time" IS '创建时间';
COMMENT ON COLUMN "sys_menu"."update_user" IS '更新者';
COMMENT ON COLUMN "sys_menu"."update_time" IS '更新时间';
COMMENT ON COLUMN "sys_menu"."remark" IS '备注';
COMMENT ON TABLE "sys_menu" IS '菜单权限表';
-- ----------------------------
-- Table structure for sys_post
-- ----------------------------
DROP TABLE IF EXISTS "sys_post";
CREATE TABLE "sys_post" (
"post_id" varchar(20) NOT NULL,
"post_code" varchar(64) COLLATE "pg_catalog"."default" NOT NULL,
"post_name" varchar(50) COLLATE "pg_catalog"."default" NOT NULL,
"post_sort" int4 NOT NULL,
"status" char(1) COLLATE "pg_catalog"."default" NOT NULL,
"create_user" varchar(64) COLLATE "pg_catalog"."default",
"create_time" timestamp(6),
"update_user" varchar(64) COLLATE "pg_catalog"."default",
"update_time" timestamp(6),
"remark" varchar(500) COLLATE "pg_catalog"."default",
"tenant_id" varchar(20)
)
;
COMMENT ON COLUMN "sys_post"."post_id" IS '岗位ID';
COMMENT ON COLUMN "sys_post"."post_code" IS '岗位编码';
COMMENT ON COLUMN "sys_post"."post_name" IS '岗位名称';
COMMENT ON COLUMN "sys_post"."post_sort" IS '显示顺序';
COMMENT ON COLUMN "sys_post"."status" IS '状态1正常 0停用';
COMMENT ON COLUMN "sys_post"."create_user" IS '创建者';
COMMENT ON COLUMN "sys_post"."create_time" IS '创建时间';
COMMENT ON COLUMN "sys_post"."update_user" IS '更新者';
COMMENT ON COLUMN "sys_post"."update_time" IS '更新时间';
COMMENT ON COLUMN "sys_post"."remark" IS '备注';
COMMENT ON COLUMN "sys_post"."tenant_id" IS '租户ID';
COMMENT ON TABLE "sys_post" IS '岗位信息表';
-- ----------------------------
-- Table structure for sys_role
-- ----------------------------
DROP TABLE IF EXISTS "sys_role";
CREATE TABLE "sys_role" (
"role_id" varchar(20) NOT NULL,
"role_name" varchar(30) COLLATE "pg_catalog"."default" NOT NULL,
"role_key" varchar(100) COLLATE "pg_catalog"."default" NOT NULL,
"role_sort" int4 NOT NULL,
"data_scope" char(1) COLLATE "pg_catalog"."default",
"status" char(1) COLLATE "pg_catalog"."default" NOT NULL,
"create_user" varchar(64) COLLATE "pg_catalog"."default",
"create_time" timestamp(6),
"update_user" varchar(64) COLLATE "pg_catalog"."default",
"update_time" timestamp(6),
"remark" varchar(500) COLLATE "pg_catalog"."default",
"tenant_id" varchar(20)
)
;
COMMENT ON COLUMN "sys_role"."role_id" IS '角色ID';
COMMENT ON COLUMN "sys_role"."role_name" IS '角色名称';
COMMENT ON COLUMN "sys_role"."role_key" IS '角色权限字符串';
COMMENT ON COLUMN "sys_role"."role_sort" IS '显示顺序';
COMMENT ON COLUMN "sys_role"."data_scope" IS '数据范围1全部数据权限 2自定数据权限 3本部门数据权限 4本部门及以下数据权限';
COMMENT ON COLUMN "sys_role"."status" IS '角色状态1正常 0停用';
COMMENT ON COLUMN "sys_role"."create_user" IS '创建者';
COMMENT ON COLUMN "sys_role"."create_time" IS '创建时间';
COMMENT ON COLUMN "sys_role"."update_user" IS '更新者';
COMMENT ON COLUMN "sys_role"."update_time" IS '更新时间';
COMMENT ON COLUMN "sys_role"."remark" IS '备注';
COMMENT ON COLUMN "sys_role"."tenant_id" IS '租户ID';
COMMENT ON TABLE "sys_role" IS '角色信息表';
-- ----------------------------
-- Table structure for sys_role_dept
-- ----------------------------
DROP TABLE IF EXISTS "sys_role_dept";
CREATE TABLE "sys_role_dept" (
"role_id" varchar(20) NOT NULL,
"dept_id" varchar(20) NOT NULL,
"tenant_id" varchar(20) NOT NULL
)
;
COMMENT ON COLUMN "sys_role_dept"."role_id" IS '角色ID';
COMMENT ON COLUMN "sys_role_dept"."dept_id" IS '部门ID';
COMMENT ON COLUMN "sys_role_dept"."tenant_id" IS '租户ID';
COMMENT ON TABLE "sys_role_dept" IS '角色和部门关联表';
-- ----------------------------
-- Table structure for sys_role_menu
-- ----------------------------
DROP TABLE IF EXISTS "sys_role_menu";
CREATE TABLE "sys_role_menu" (
"role_id" varchar(20) NOT NULL,
"menu_id" varchar(20) NOT NULL,
"tenant_id" varchar(20) NOT NULL
)
;
COMMENT ON COLUMN "sys_role_menu"."role_id" IS '角色ID';
COMMENT ON COLUMN "sys_role_menu"."menu_id" IS '菜单ID';
COMMENT ON COLUMN "sys_role_menu"."tenant_id" IS '租户ID';
COMMENT ON TABLE "sys_role_menu" IS '角色和菜单关联表';
-- ----------------------------
-- Table structure for sys_tenant
-- ----------------------------
DROP TABLE IF EXISTS "sys_tenant";
CREATE TABLE "sys_tenant" (
"tenant_id" varchar(20) NOT NULL,
"company_name" varchar(50) COLLATE "pg_catalog"."default" NOT NULL,
"contact_name" varchar(30) COLLATE "pg_catalog"."default",
"contact_phone" varchar(20) COLLATE "pg_catalog"."default",
"address" varchar(255) COLLATE "pg_catalog"."default",
"profile" varchar(500) COLLATE "pg_catalog"."default",
"license_number" varchar(30) COLLATE "pg_catalog"."default",
"domain" varchar(50) COLLATE "pg_catalog"."default",
"expire_time" timestamp(6),
"account_count" varchar(20),
"status" char(1) COLLATE "pg_catalog"."default",
"mode" char(1) COLLATE "pg_catalog"."default",
"initialized" char(1) COLLATE "pg_catalog"."default",
"create_user" varchar(64) COLLATE "pg_catalog"."default",
"create_time" timestamp(6),
"update_user" varchar(64) COLLATE "pg_catalog"."default",
"update_time" timestamp(6),
"remark" varchar(500) COLLATE "pg_catalog"."default"
)
;
COMMENT ON COLUMN "sys_tenant"."company_name" IS '公司名称';
COMMENT ON COLUMN "sys_tenant"."contact_name" IS '联系人名称';
COMMENT ON COLUMN "sys_tenant"."contact_phone" IS '联系人电话';
COMMENT ON COLUMN "sys_tenant"."address" IS '公司地址';
COMMENT ON COLUMN "sys_tenant"."profile" IS '公司简介';
COMMENT ON COLUMN "sys_tenant"."license_number" IS '统一社会信用代码';
COMMENT ON COLUMN "sys_tenant"."domain" IS '域名';
COMMENT ON COLUMN "sys_tenant"."expire_time" IS '过期时间';
COMMENT ON COLUMN "sys_tenant"."account_count" IS '用户数量';
COMMENT ON COLUMN "sys_tenant"."status" IS '状态';
COMMENT ON COLUMN "sys_tenant"."mode" IS '模式';
COMMENT ON COLUMN "sys_tenant"."initialized" IS '是否已初始化';
COMMENT ON COLUMN "sys_tenant"."create_user" IS '创建者';
COMMENT ON COLUMN "sys_tenant"."create_time" IS '创建时间';
COMMENT ON COLUMN "sys_tenant"."update_user" IS '更新者';
COMMENT ON COLUMN "sys_tenant"."update_time" IS '更新时间';
COMMENT ON COLUMN "sys_tenant"."remark" IS '备注';
COMMENT ON TABLE "sys_tenant" IS '租户表';
-- ----------------------------
-- Table structure for sys_tenant_datasource
-- ----------------------------
DROP TABLE IF EXISTS "sys_tenant_datasource";
CREATE TABLE "sys_tenant_datasource" (
"datasource_id" varchar(20) NOT NULL,
"type" varchar(50) COLLATE "pg_catalog"."default" NOT NULL,
"ip" varchar(50) COLLATE "pg_catalog"."default" NOT NULL,
"port" varchar(20) COLLATE "pg_catalog"."default" NOT NULL,
"db_name" varchar(50) COLLATE "pg_catalog"."default" NOT NULL,
"schema_name" varchar(50) COLLATE "pg_catalog"."default",
"username" varchar(50) COLLATE "pg_catalog"."default" NOT NULL,
"password" varchar(50) COLLATE "pg_catalog"."default" NOT NULL,
"init_count" int4,
"min_count" int4,
"max_count" int4,
"is_primary" char(1) COLLATE "pg_catalog"."default" NOT NULL,
"create_user" varchar(64) COLLATE "pg_catalog"."default",
"create_time" timestamp(6),
"update_user" varchar(64) COLLATE "pg_catalog"."default",
"update_time" timestamp(6),
"remark" varchar(500) COLLATE "pg_catalog"."default",
"tenant_id" varchar(20) NOT NULL
)
;
COMMENT ON COLUMN "sys_tenant_datasource"."type" IS '类型';
COMMENT ON COLUMN "sys_tenant_datasource"."ip" IS 'IP';
COMMENT ON COLUMN "sys_tenant_datasource"."port" IS '端口';
COMMENT ON COLUMN "sys_tenant_datasource"."db_name" IS '数据库名称';
COMMENT ON COLUMN "sys_tenant_datasource"."schema_name" IS '模式名称';
COMMENT ON COLUMN "sys_tenant_datasource"."username" IS '账号';
COMMENT ON COLUMN "sys_tenant_datasource"."password" IS '密码';
COMMENT ON COLUMN "sys_tenant_datasource"."init_count" IS '初始连接数';
COMMENT ON COLUMN "sys_tenant_datasource"."min_count" IS '最小空闲数';
COMMENT ON COLUMN "sys_tenant_datasource"."max_count" IS '最大连接数';
COMMENT ON COLUMN "sys_tenant_datasource"."is_primary" IS '主要数据源';
COMMENT ON COLUMN "sys_tenant_datasource"."create_user" IS '创建者';
COMMENT ON COLUMN "sys_tenant_datasource"."create_time" IS '创建时间';
COMMENT ON COLUMN "sys_tenant_datasource"."update_user" IS '更新者';
COMMENT ON COLUMN "sys_tenant_datasource"."update_time" IS '更新时间';
COMMENT ON COLUMN "sys_tenant_datasource"."remark" IS '备注';
COMMENT ON TABLE "sys_tenant_datasource" IS '租户数据源';
-- ----------------------------
-- Table structure for sys_user
-- ----------------------------
DROP TABLE IF EXISTS "sys_user";
CREATE TABLE "sys_user" (
"user_id" varchar(20) NOT NULL,
"dept_id" varchar(20),
"username" varchar(30) COLLATE "pg_catalog"."default" NOT NULL,
"nickname" varchar(30) COLLATE "pg_catalog"."default" NOT NULL,
"email" varchar(50) COLLATE "pg_catalog"."default",
"phone" varchar(11) COLLATE "pg_catalog"."default",
"gender" char(1) COLLATE "pg_catalog"."default",
"avatar" varchar(100) COLLATE "pg_catalog"."default",
"password" varchar(100) COLLATE "pg_catalog"."default",
"status" char(1) COLLATE "pg_catalog"."default",
"create_user" varchar(64) COLLATE "pg_catalog"."default",
"create_time" timestamp(6),
"update_user" varchar(64) COLLATE "pg_catalog"."default",
"update_time" timestamp(6),
"remark" varchar(500) COLLATE "pg_catalog"."default",
"tenant_id" varchar(20)
)
;
COMMENT ON COLUMN "sys_user"."user_id" IS '用户ID';
COMMENT ON COLUMN "sys_user"."dept_id" IS '部门ID';
COMMENT ON COLUMN "sys_user"."username" IS '用户账号';
COMMENT ON COLUMN "sys_user"."nickname" IS '用户昵称';
COMMENT ON COLUMN "sys_user"."email" IS '用户邮箱';
COMMENT ON COLUMN "sys_user"."phone" IS '手机号码';
COMMENT ON COLUMN "sys_user"."gender" IS '用户性别0男 1女 2未知';
COMMENT ON COLUMN "sys_user"."avatar" IS '头像地址';
COMMENT ON COLUMN "sys_user"."password" IS '密码';
COMMENT ON COLUMN "sys_user"."status" IS '帐号状态1正常 0停用';
COMMENT ON COLUMN "sys_user"."create_user" IS '创建者';
COMMENT ON COLUMN "sys_user"."create_time" IS '创建时间';
COMMENT ON COLUMN "sys_user"."update_user" IS '更新者';
COMMENT ON COLUMN "sys_user"."update_time" IS '更新时间';
COMMENT ON COLUMN "sys_user"."remark" IS '备注';
COMMENT ON COLUMN "sys_user"."tenant_id" IS '租户ID';
COMMENT ON TABLE "sys_user" IS '用户信息表';
-- ----------------------------
-- Table structure for sys_user_post
-- ----------------------------
DROP TABLE IF EXISTS "sys_user_post";
CREATE TABLE "sys_user_post" (
"user_id" varchar(20) NOT NULL,
"post_id" varchar(20) NOT NULL,
"tenant_id" varchar(20) NOT NULL
)
;
COMMENT ON COLUMN "sys_user_post"."user_id" IS '用户ID';
COMMENT ON COLUMN "sys_user_post"."post_id" IS '岗位ID';
COMMENT ON COLUMN "sys_user_post"."tenant_id" IS '租户ID';
COMMENT ON TABLE "sys_user_post" IS '用户与岗位关联表';
-- ----------------------------
-- Table structure for sys_user_role
-- ----------------------------
DROP TABLE IF EXISTS "sys_user_role";
CREATE TABLE "sys_user_role" (
"user_id" varchar(20) NOT NULL,
"role_id" varchar(20) NOT NULL,
"tenant_id" varchar(20) NOT NULL
)
;
COMMENT ON COLUMN "sys_user_role"."user_id" IS '用户ID';
COMMENT ON COLUMN "sys_user_role"."role_id" IS '角色ID';
COMMENT ON COLUMN "sys_user_role"."tenant_id" IS '租户ID';
COMMENT ON TABLE "sys_user_role" IS '用户和角色关联表';
-- ----------------------------
-- Primary Key structure for table gen_table
-- ----------------------------
ALTER TABLE "gen_table" ADD CONSTRAINT "gen_table_pkey" PRIMARY KEY ("table_id");
-- ----------------------------
-- Primary Key structure for table gen_table_column
-- ----------------------------
ALTER TABLE "gen_table_column" ADD CONSTRAINT "gen_table_column_pkey" PRIMARY KEY ("column_id");
-- ----------------------------
-- Primary Key structure for table sys_config
-- ----------------------------
ALTER TABLE "sys_config" ADD CONSTRAINT "sys_config_pkey" PRIMARY KEY ("config_id");
-- ----------------------------
-- Primary Key structure for table sys_dept
-- ----------------------------
ALTER TABLE "sys_dept" ADD CONSTRAINT "sys_dept_pkey" PRIMARY KEY ("dept_id");
-- ----------------------------
-- Primary Key structure for table sys_dict_data
-- ----------------------------
ALTER TABLE "sys_dict_data" ADD CONSTRAINT "sys_dict_data_pkey" PRIMARY KEY ("dict_code");
-- ----------------------------
-- Indexes structure for table sys_dict_type
-- ----------------------------
CREATE INDEX "dict_type" ON "sys_dict_type" USING btree (
"dict_type" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
);
-- ----------------------------
-- Primary Key structure for table sys_dict_type
-- ----------------------------
ALTER TABLE "sys_dict_type" ADD CONSTRAINT "sys_dict_type_pkey" PRIMARY KEY ("dict_id");
-- ----------------------------
-- Primary Key structure for table sys_login_log
-- ----------------------------
ALTER TABLE "sys_login_log" ADD CONSTRAINT "sys_login_log_pkey" PRIMARY KEY ("login_id");
-- ----------------------------
-- Primary Key structure for table sys_menu
-- ----------------------------
ALTER TABLE "sys_menu" ADD CONSTRAINT "sys_menu_pkey" PRIMARY KEY ("menu_id");
-- ----------------------------
-- Primary Key structure for table sys_post
-- ----------------------------
ALTER TABLE "sys_post" ADD CONSTRAINT "sys_post_pkey" PRIMARY KEY ("post_id");
-- ----------------------------
-- Primary Key structure for table sys_role
-- ----------------------------
ALTER TABLE "sys_role" ADD CONSTRAINT "sys_role_pkey" PRIMARY KEY ("role_id");
-- ----------------------------
-- Primary Key structure for table sys_role_dept
-- ----------------------------
ALTER TABLE "sys_role_dept" ADD CONSTRAINT "sys_role_dept_pkey" PRIMARY KEY ("role_id", "dept_id", "tenant_id");
-- ----------------------------
-- Primary Key structure for table sys_role_menu
-- ----------------------------
ALTER TABLE "sys_role_menu" ADD CONSTRAINT "sys_role_menu_pkey" PRIMARY KEY ("role_id", "menu_id", "tenant_id");
-- ----------------------------
-- Primary Key structure for table sys_tenant
-- ----------------------------
ALTER TABLE "sys_tenant" ADD CONSTRAINT "sys_tenant_pkey" PRIMARY KEY ("tenant_id");
-- ----------------------------
-- Primary Key structure for table sys_tenant_datasource
-- ----------------------------
ALTER TABLE "sys_tenant_datasource" ADD CONSTRAINT "sys_tenant_datasource_pkey" PRIMARY KEY ("datasource_id");
-- ----------------------------
-- Primary Key structure for table sys_user
-- ----------------------------
ALTER TABLE "sys_user" ADD CONSTRAINT "sys_user_pkey" PRIMARY KEY ("user_id");
-- ----------------------------
-- Primary Key structure for table sys_user_post
-- ----------------------------
ALTER TABLE "sys_user_post" ADD CONSTRAINT "sys_user_post_pkey" PRIMARY KEY ("user_id", "post_id", "tenant_id");
-- ----------------------------
-- Primary Key structure for table sys_user_role
-- ----------------------------
ALTER TABLE "sys_user_role" ADD CONSTRAINT "sys_user_role_pkey" PRIMARY KEY ("user_id", "role_id", "tenant_id");