Przeglądaj źródła

:zap: 拆分系统字典管和业务字典,字典键值改为string类型

smallchill 6 lat temu
rodzic
commit
2d595ee7ac
23 zmienionych plików z 1490 dodań i 493 usunięć
  1. 2 2
      doc/sql/mysql/bladex-saber-mysql.sql
  2. 11 11
      doc/sql/mysql/bladex-sword-mysql.sql
  3. 117 36
      doc/sql/oracle/bladex-saber-oracle.sql
  4. 181 100
      doc/sql/oracle/bladex-sword-oracle.sql
  5. 107 77
      doc/sql/postgresql/bladex-saber-postgresql.sql
  6. 152 123
      doc/sql/postgresql/bladex-sword-postgresql.sql
  7. 0 42
      doc/sql/update/mysql-update-2.2.0~2.2.1.sql
  8. 51 0
      doc/sql/update/mysql-update-2.2.1~2.2.2.sql
  9. 0 48
      doc/sql/update/oracle-update-2.2.0~2.2.1.sql
  10. 68 0
      doc/sql/update/oracle-update-2.2.1~2.2.2.sql
  11. 0 47
      doc/sql/update/postgresql-update-2.2.0~2.2.1.sql
  12. 59 0
      doc/sql/update/postgresql-update-2.2.1~2.2.2.sql
  13. 77 0
      src/main/java/org/springblade/common/cache/DictBizCache.java
  14. 163 0
      src/main/java/org/springblade/modules/system/controller/DictBizController.java
  15. 1 1
      src/main/java/org/springblade/modules/system/entity/Dict.java
  16. 108 0
      src/main/java/org/springblade/modules/system/entity/DictBiz.java
  17. 56 0
      src/main/java/org/springblade/modules/system/mapper/DictBizMapper.java
  18. 47 0
      src/main/java/org/springblade/modules/system/mapper/DictBizMapper.xml
  19. 0 6
      src/main/java/org/springblade/modules/system/mapper/DictMapper.xml
  20. 72 0
      src/main/java/org/springblade/modules/system/service/IDictBizService.java
  21. 84 0
      src/main/java/org/springblade/modules/system/service/impl/DictBizServiceImpl.java
  22. 71 0
      src/main/java/org/springblade/modules/system/vo/DictBizVO.java
  23. 63 0
      src/main/java/org/springblade/modules/system/wrapper/DictBizWrapper.java

Plik diff jest za duży
+ 2 - 2
doc/sql/mysql/bladex-saber-mysql.sql


Plik diff jest za duży
+ 11 - 11
doc/sql/mysql/bladex-sword-mysql.sql


+ 117 - 36
doc/sql/oracle/bladex-saber-oracle.sql

@@ -11,7 +11,7 @@
  Target Server Version : 110200
  File Encoding         : 65001
 
- Date: 17/08/2019 11:28:31
+ Date: 03/12/2019 16:43:44
 */
 
 
@@ -98,7 +98,7 @@ CREATE TABLE "BLADE_CODE" (
   "PK_NAME" NVARCHAR2(32) ,
   "PACKAGE_NAME" NVARCHAR2(500) ,
   "BASE_MODE" NUMBER(11) ,
-  "WRAP_MODE" NUMBER(11),
+  "WRAP_MODE" NUMBER(11) ,
   "API_PATH" NCLOB ,
   "WEB_PATH" NCLOB ,
   "IS_DELETED" NUMBER(11)
@@ -120,18 +120,18 @@ NOCACHE
 DISABLE ROW MOVEMENT
 ;
 COMMENT ON COLUMN "BLADE_CODE"."ID" IS '主键';
+COMMENT ON COLUMN "BLADE_CODE"."DATASOURCE_ID" IS '数据源主键';
 COMMENT ON COLUMN "BLADE_CODE"."SERVICE_NAME" IS '服务名称';
 COMMENT ON COLUMN "BLADE_CODE"."CODE_NAME" IS '模块名称';
 COMMENT ON COLUMN "BLADE_CODE"."TABLE_NAME" IS '表名';
 COMMENT ON COLUMN "BLADE_CODE"."TABLE_PREFIX" IS '表前缀';
 COMMENT ON COLUMN "BLADE_CODE"."PK_NAME" IS '主键名';
 COMMENT ON COLUMN "BLADE_CODE"."PACKAGE_NAME" IS '后端包名';
+COMMENT ON COLUMN "BLADE_CODE"."BASE_MODE" IS '基础业务模式';
+COMMENT ON COLUMN "BLADE_CODE"."WRAP_MODE" IS '包装器模式';
 COMMENT ON COLUMN "BLADE_CODE"."API_PATH" IS '后端路径';
 COMMENT ON COLUMN "BLADE_CODE"."WEB_PATH" IS '前端路径';
 COMMENT ON COLUMN "BLADE_CODE"."IS_DELETED" IS '是否已删除';
-COMMENT ON COLUMN "BLADE_CODE"."DATASOURCE_ID" IS '数据源主键';
-COMMENT ON COLUMN "BLADE_CODE"."BASE_MODE" IS '基础业务模式';
-COMMENT ON COLUMN "BLADE_CODE"."WRAP_MODE" IS '包装器模式';
 COMMENT ON TABLE "BLADE_CODE" IS '代码生成表';
 
 -- ----------------------------
@@ -260,7 +260,7 @@ CREATE TABLE "BLADE_DICT" (
   "ID" NUMBER(20) NOT NULL ,
   "PARENT_ID" NUMBER(20) ,
   "CODE" NVARCHAR2(255) ,
-  "DICT_KEY" NUMBER(11) ,
+  "DICT_KEY" NVARCHAR2(255) ,
   "DICT_VALUE" NVARCHAR2(255) ,
   "SORT" NUMBER(11) ,
   "REMARK" NVARCHAR2(255) ,
@@ -290,7 +290,7 @@ COMMENT ON COLUMN "BLADE_DICT"."DICT_KEY" IS '字典值';
 COMMENT ON COLUMN "BLADE_DICT"."DICT_VALUE" IS '字典名称';
 COMMENT ON COLUMN "BLADE_DICT"."SORT" IS '排序';
 COMMENT ON COLUMN "BLADE_DICT"."REMARK" IS '字典备注';
-COMMENT ON COLUMN "BLADE_DICT"."IS_SEALED" IS '是否已删除';
+COMMENT ON COLUMN "BLADE_DICT"."IS_SEALED" IS '是否已封存';
 COMMENT ON COLUMN "BLADE_DICT"."IS_DELETED" IS '是否已删除';
 COMMENT ON TABLE "BLADE_DICT" IS '字典表';
 
@@ -342,6 +342,50 @@ INSERT INTO "BLADE_DICT" VALUES ('1123598814738676226', '1123598814738676224', '
 INSERT INTO "BLADE_DICT" VALUES ('1123598814738676227', '1123598814738676224', 'oss', '3', 'ali', '3', NULL, '0', '0');
 COMMIT;
 
+-- ----------------------------
+-- Table structure for BLADE_DICT_BIZ
+-- ----------------------------
+-- DROP TABLE "BLADE_DICT_BIZ";
+CREATE TABLE "BLADE_DICT_BIZ" (
+  "ID" NUMBER(20) NOT NULL ,
+  "TENANT_ID" NVARCHAR2(12) ,
+  "PARENT_ID" NUMBER(20) ,
+  "CODE" NVARCHAR2(255) ,
+  "DICT_KEY" NUMBER(11) ,
+  "DICT_VALUE" NVARCHAR2(255) ,
+  "SORT" NUMBER(11) ,
+  "REMARK" NVARCHAR2(255) ,
+  "IS_SEALED" NUMBER(11) ,
+  "IS_DELETED" NUMBER(11)
+)
+TABLESPACE "BLADEX"
+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 "BLADE_DICT_BIZ"."ID" IS '主键';
+COMMENT ON COLUMN "BLADE_DICT_BIZ"."TENANT_ID" IS '租户ID';
+COMMENT ON COLUMN "BLADE_DICT_BIZ"."PARENT_ID" IS '父主键';
+COMMENT ON COLUMN "BLADE_DICT_BIZ"."CODE" IS '字典码';
+COMMENT ON COLUMN "BLADE_DICT_BIZ"."DICT_KEY" IS '字典值';
+COMMENT ON COLUMN "BLADE_DICT_BIZ"."DICT_VALUE" IS '字典名称';
+COMMENT ON COLUMN "BLADE_DICT_BIZ"."SORT" IS '排序';
+COMMENT ON COLUMN "BLADE_DICT_BIZ"."REMARK" IS '字典备注';
+COMMENT ON COLUMN "BLADE_DICT_BIZ"."IS_SEALED" IS '是否已封存';
+COMMENT ON COLUMN "BLADE_DICT_BIZ"."IS_DELETED" IS '是否已删除';
+COMMENT ON TABLE "BLADE_DICT_BIZ" IS '数据源配置表';
+
 -- ----------------------------
 -- Table structure for BLADE_LOG_API
 -- ----------------------------
@@ -584,7 +628,7 @@ INSERT INTO "BLADE_MENU" VALUES ('1123598815738675202', '1123598815738675201', '
 INSERT INTO "BLADE_MENU" VALUES ('1123598815738675203', '0', 'system', '系统管理', 'menu', '/system', 'iconfont iconicon_setting', '99', '1', '0', '1', NULL, '0');
 INSERT INTO "BLADE_MENU" VALUES ('1123598815738675204', '1123598815738675203', 'user', '用户管理', 'menu', '/system/user', 'iconfont iconicon_principal', '1', '1', '0', '1', NULL, '0');
 INSERT INTO "BLADE_MENU" VALUES ('1123598815738675205', '1123598815738675203', 'dept', '机构管理', 'menu', '/system/dept', 'iconfont iconicon_group', '2', '1', '0', '1', NULL, '0');
-INSERT INTO "BLADE_MENU" VALUES ('1123598815738675206', '1123598815738675203', 'dict', '字典管理', 'menu', '/system/dict', 'iconfont iconicon_addresslist', '3', '1', '0', '1', NULL, '0');
+INSERT INTO "BLADE_MENU" VALUES ('1123598815738675206', '1123598815738675203', 'dict', '系统字典', 'menu', '/system/dict', 'iconfont iconicon_addresslist', '3', '1', '0', '1', NULL, '0');
 INSERT INTO "BLADE_MENU" VALUES ('1123598815738675207', '1123598815738675203', 'menu', '菜单管理', 'menu', '/system/menu', 'iconfont iconicon_subordinate', '4', '1', '0', '1', NULL, '0');
 INSERT INTO "BLADE_MENU" VALUES ('1123598815738675208', '1123598815738675203', 'topmenu', '顶部菜单', 'menu', '/system/topmenu', 'iconfont icon-canshu', '5', '1', '0', '1', NULL, '0');
 INSERT INTO "BLADE_MENU" VALUES ('1123598815738675209', '1123598815738675203', 'param', '参数管理', 'menu', '/system/param', 'iconfont iconicon_community_line', '6', '1', '0', '1', NULL, '0');
@@ -699,20 +743,18 @@ INSERT INTO "BLADE_MENU" VALUES ('1161272593873321992', '1161272593873321991', '
 INSERT INTO "BLADE_MENU" VALUES ('1161272593873321993', '1161272593873321991', 'datasource_edit', '修改', 'edit', '/tool/datasource/edit', 'form', '2', '2', '2', '2', NULL, '0');
 INSERT INTO "BLADE_MENU" VALUES ('1161272593873321994', '1161272593873321991', 'datasource_delete', '删除', 'delete', '/api/blade-develop/datasource/remove', 'delete', '3', '2', '3', '3', NULL, '0');
 INSERT INTO "BLADE_MENU" VALUES ('1161272593873321995', '1161272593873321991', 'datasource_view', '查看', 'view', '/tool/datasource/view', 'file-text', '4', '2', '2', '2', NULL, '0');
-INSERT INTO "BLADE_MENU"("ID", "PARENT_ID", "CODE", "NAME", "ALIAS", "PATH", "SOURCE", "SORT", "CATEGORY", "ACTION", "IS_OPEN", "REMARK", "IS_DELETED")
-VALUES ('1164733121140551682', '1123598815738675217', 'form', '表单设计', 'form', 'https://form.avuejs.com/', 'iconfont iconicon_compile', 3, 1, 0, 2, '', 0);
-INSERT INTO "BLADE_MENU"("ID", "PARENT_ID", "CODE", "NAME", "ALIAS", "PATH", "SOURCE", "SORT", "CATEGORY", "ACTION", "IS_OPEN", "REMARK", "IS_DELETED")
-VALUES ('1164733349637844993', '1123598815738675217', 'crud', '表格设计', 'crud', 'https://crud.avuejs.com/', 'iconfont iconicon_work', 4, 1, 0, 2, '', 0);
-INSERT INTO "BLADE_MENU"("ID", "PARENT_ID", "CODE", "NAME", "ALIAS", "PATH", "SOURCE", "SORT", "CATEGORY", "ACTION", "IS_OPEN", "REMARK", "IS_DELETED")
-VALUES ('1164733369658963251', '1123598815738675210', 'elk', 'ELK监控', 'menu', 'http://localhost:5601/', 'iconfont iconicon_cspace', 3, 1, 0, 2, '', 0);
-INSERT INTO "BLADE_MENU"("ID", "PARENT_ID", "CODE", "NAME", "ALIAS", "PATH", "SOURCE", "SORT", "CATEGORY", "ACTION", "IS_OPEN", "REMARK", "IS_DELETED")
-VALUES ('1164733369658963252', '1123598815738675210', 'zipkin', 'Zipkin监控', 'menu', 'http://localhost:9411/', 'iconfont iconicon_task', 4, 1, 0, 2, '', 0);
-INSERT INTO "BLADE_MENU"("ID", "PARENT_ID", "CODE", "NAME", "ALIAS", "PATH", "SOURCE", "SORT", "CATEGORY", "ACTION", "IS_OPEN", "REMARK", "IS_DELETED")
-VALUES ('1164733369658963253', '1123598815738675210', 'turbine', 'Turbine监控', 'menu', 'http://localhost:7003/hystrix', 'iconfont iconicon_subordinate', 5, 1, 0, 2, '', 0);
-INSERT INTO "BLADE_MENU"("ID", "PARENT_ID", "CODE", "NAME", "ALIAS", "PATH", "SOURCE", "SORT", "CATEGORY", "ACTION", "IS_OPEN", "REMARK", "IS_DELETED")
-VALUES ('1164733369658963254', '1123598815738675210', 'sentinel', 'Sentinel管理', 'menu', 'http://localhost:8858', 'iconfont iconicon_safety', 6, 1, 0, 2, '', 0);
-INSERT INTO "BLADE_MENU"("ID", "PARENT_ID", "CODE", "NAME", "ALIAS", "PATH", "SOURCE", "SORT", "CATEGORY", "ACTION", "IS_OPEN", "REMARK", "IS_DELETED")
-VALUES ('1164733369658963255', '1123598815738675210', 'es', 'Elasticsearch管理', 'menu', 'http://localhost:9100/', 'iconfont iconfont iconicon_search', 7, 1, 0, 2, '', 0);
+INSERT INTO "BLADE_MENU" VALUES ('1164733121140551682', '1123598815738675217', 'form', '表单设计', 'form', 'https://form.avuejs.com/', 'iconfont iconicon_compile', '3', '1', '0', '2', NULL, '0');
+INSERT INTO "BLADE_MENU" VALUES ('1164733349637844993', '1123598815738675217', 'crud', '表格设计', 'crud', 'https://crud.avuejs.com/', 'iconfont iconicon_work', '4', '1', '0', '2', NULL, '0');
+INSERT INTO "BLADE_MENU" VALUES ('1164733369658963251', '1123598815738675210', 'elk', 'ELK监控', 'menu', 'http://localhost:5601/', 'iconfont iconicon_cspace', '3', '1', '0', '2', NULL, '0');
+INSERT INTO "BLADE_MENU" VALUES ('1164733369658963252', '1123598815738675210', 'zipkin', 'Zipkin监控', 'menu', 'http://localhost:9411/', 'iconfont iconicon_task', '4', '1', '0', '2', NULL, '0');
+INSERT INTO "BLADE_MENU" VALUES ('1164733369658963253', '1123598815738675210', 'turbine', 'Turbine监控', 'menu', 'http://localhost:7003/hystrix', 'iconfont iconicon_subordinate', '5', '1', '0', '2', NULL, '0');
+INSERT INTO "BLADE_MENU" VALUES ('1164733369658963254', '1123598815738675210', 'sentinel', 'Sentinel管理', 'menu', 'http://localhost:8858', 'iconfont iconicon_safety', '6', '1', '0', '2', NULL, '0');
+INSERT INTO "BLADE_MENU" VALUES ('1164733369658963255', '1123598815738675210', 'es', 'Elasticsearch管理', 'menu', 'http://localhost:9100/', 'iconfont iconfont iconicon_search', '7', '1', '0', '2', NULL, '0');
+INSERT INTO "BLADE_MENU" VALUES ('1164733379658963251', '1123598815738675203', 'dictbiz', '业务字典', 'menu', '/system/dictbiz', 'iconfont iconicon_study', '3', '1', '0', '1', NULL, '0');
+INSERT INTO "BLADE_MENU" VALUES ('1164733379658963252', '1164733379658963251', 'dictbiz_add', '新增', 'add', '/system/dictbiz/add', 'plus', '1', '2', '2', '1', NULL, '0');
+INSERT INTO "BLADE_MENU" VALUES ('1164733379658963253', '1164733379658963251', 'dictbiz_edit', '修改', 'edit', '/system/dictbiz/edit', 'form', '2', '2', '1', '1', NULL, '0');
+INSERT INTO "BLADE_MENU" VALUES ('1164733379658963254', '1164733379658963251', 'dictbiz_delete', '删除', 'delete', '/api/blade-system/dict-biz/remove', 'delete', '3', '2', '0', '1', NULL, '0');
+INSERT INTO "BLADE_MENU" VALUES ('1164733379658963255', '1164733379658963251', 'dictbiz_view', '查看', 'view', '/system/dictbiz/view', 'file-text', '4', '2', '3', '1', NULL, '0');
 COMMIT;
 
 -- ----------------------------
@@ -1241,20 +1283,18 @@ INSERT INTO "BLADE_ROLE_MENU" VALUES ('1161272593873322992', '116127259387332199
 INSERT INTO "BLADE_ROLE_MENU" VALUES ('1161272593873322993', '1161272593873321993', '1123598816738675201');
 INSERT INTO "BLADE_ROLE_MENU" VALUES ('1161272593873322994', '1161272593873321994', '1123598816738675201');
 INSERT INTO "BLADE_ROLE_MENU" VALUES ('1161272593873322995', '1161272593873321995', '1123598816738675201');
-INSERT INTO "BLADE_ROLE_MENU"(ID,MENU_ID,ROLE_ID)
-VALUES ('1161272593873322996', '1164733121140551682', '1123598816738675201');
-INSERT INTO "BLADE_ROLE_MENU"(ID,MENU_ID,ROLE_ID)
-VALUES ('1161272593873322997', '1164733349637844993', '1123598816738675201');
-INSERT INTO "BLADE_ROLE_MENU"(ID,MENU_ID,ROLE_ID)
-VALUES ('1161272693873322991', '1164733369658963251', '1123598816738675201');
-INSERT INTO "BLADE_ROLE_MENU"(ID,MENU_ID,ROLE_ID)
-VALUES ('1161272693873322992', '1164733369658963252', '1123598816738675201');
-INSERT INTO "BLADE_ROLE_MENU"(ID,MENU_ID,ROLE_ID)
-VALUES ('1161272693873322993', '1164733369658963253', '1123598816738675201');
-INSERT INTO "BLADE_ROLE_MENU"(ID,MENU_ID,ROLE_ID)
-VALUES ('1161272693873322994', '1164733369658963254', '1123598816738675201');
-INSERT INTO "BLADE_ROLE_MENU"(ID,MENU_ID,ROLE_ID)
-VALUES ('1161272693873322995', '1164733369658963255', '1123598816738675201');
+INSERT INTO "BLADE_ROLE_MENU" VALUES ('1161272593873322996', '1164733121140551682', '1123598816738675201');
+INSERT INTO "BLADE_ROLE_MENU" VALUES ('1161272593873322997', '1164733349637844993', '1123598816738675201');
+INSERT INTO "BLADE_ROLE_MENU" VALUES ('1161272693873322991', '1164733369658963251', '1123598816738675201');
+INSERT INTO "BLADE_ROLE_MENU" VALUES ('1161272693873322992', '1164733369658963252', '1123598816738675201');
+INSERT INTO "BLADE_ROLE_MENU" VALUES ('1161272693873322993', '1164733369658963253', '1123598816738675201');
+INSERT INTO "BLADE_ROLE_MENU" VALUES ('1161272693873322994', '1164733369658963254', '1123598816738675201');
+INSERT INTO "BLADE_ROLE_MENU" VALUES ('1161272693873322995', '1164733369658963255', '1123598816738675201');
+INSERT INTO "BLADE_ROLE_MENU" VALUES ('1161272793873322991', '1164733379658963251', '1123598816738675201');
+INSERT INTO "BLADE_ROLE_MENU" VALUES ('1161272793873322992', '116473337658963252', '1123598816738675201');
+INSERT INTO "BLADE_ROLE_MENU" VALUES ('1161272793873322993', '1164733379658963253', '1123598816738675201');
+INSERT INTO "BLADE_ROLE_MENU" VALUES ('1161272793873322994', '1164733379658963254', '1123598816738675201');
+INSERT INTO "BLADE_ROLE_MENU" VALUES ('1161272793873322995', '1164733379658963255', '1123598816738675201');
 COMMIT;
 
 -- ----------------------------
@@ -1633,6 +1673,15 @@ ALTER TABLE "BLADE_CLIENT" ADD CONSTRAINT "SYS_C0017044" CHECK ("ACCESS_TOKEN_VA
 ALTER TABLE "BLADE_CLIENT" ADD CONSTRAINT "SYS_C0017045" CHECK ("REFRESH_TOKEN_VALIDITY" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_CLIENT" ADD CONSTRAINT "SYS_C0017046" CHECK ("STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_CLIENT" ADD CONSTRAINT "SYS_C0017047" CHECK ("IS_DELETED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_CLIENT" ADD CONSTRAINT "SYS_C0019181" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_CLIENT" ADD CONSTRAINT "SYS_C0019182" CHECK ("CLIENT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_CLIENT" ADD CONSTRAINT "SYS_C0019183" CHECK ("CLIENT_SECRET" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_CLIENT" ADD CONSTRAINT "SYS_C0019184" CHECK ("SCOPE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_CLIENT" ADD CONSTRAINT "SYS_C0019185" CHECK ("AUTHORIZED_GRANT_TYPES" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_CLIENT" ADD CONSTRAINT "SYS_C0019186" CHECK ("ACCESS_TOKEN_VALIDITY" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_CLIENT" ADD CONSTRAINT "SYS_C0019187" CHECK ("REFRESH_TOKEN_VALIDITY" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_CLIENT" ADD CONSTRAINT "SYS_C0019188" CHECK ("STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_CLIENT" ADD CONSTRAINT "SYS_C0019189" CHECK ("IS_DELETED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_CODE
@@ -1644,6 +1693,7 @@ ALTER TABLE "BLADE_CODE" ADD CONSTRAINT "SYS_C0012758" PRIMARY KEY ("ID");
 -- ----------------------------
 ALTER TABLE "BLADE_CODE" ADD CONSTRAINT "SYS_C0012736" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_CODE" ADD CONSTRAINT "SYS_C0017048" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_CODE" ADD CONSTRAINT "SYS_C0019190" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_DATASOURCE
@@ -1654,6 +1704,7 @@ ALTER TABLE "BLADE_DATASOURCE" ADD CONSTRAINT "SYS_C0017121" PRIMARY KEY ("ID");
 -- Checks structure for table BLADE_DATASOURCE
 -- ----------------------------
 ALTER TABLE "BLADE_DATASOURCE" ADD CONSTRAINT "SYS_C0017120" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_DATASOURCE" ADD CONSTRAINT "SYS_C0019191" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_DEPT
@@ -1665,6 +1716,7 @@ ALTER TABLE "BLADE_DEPT" ADD CONSTRAINT "SYS_C0012759" PRIMARY KEY ("ID");
 -- ----------------------------
 ALTER TABLE "BLADE_DEPT" ADD CONSTRAINT "SYS_C0012737" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_DEPT" ADD CONSTRAINT "SYS_C0017049" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_DEPT" ADD CONSTRAINT "SYS_C0019192" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_DICT
@@ -1676,6 +1728,17 @@ ALTER TABLE "BLADE_DICT" ADD CONSTRAINT "SYS_C0012760" PRIMARY KEY ("ID");
 -- ----------------------------
 ALTER TABLE "BLADE_DICT" ADD CONSTRAINT "SYS_C0012738" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_DICT" ADD CONSTRAINT "SYS_C0017050" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_DICT" ADD CONSTRAINT "SYS_C0019193" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Primary Key structure for table BLADE_DICT_BIZ
+-- ----------------------------
+ALTER TABLE "BLADE_DICT_BIZ" ADD CONSTRAINT "SYS_C0019296" PRIMARY KEY ("ID");
+
+-- ----------------------------
+-- Checks structure for table BLADE_DICT_BIZ
+-- ----------------------------
+ALTER TABLE "BLADE_DICT_BIZ" ADD CONSTRAINT "SYS_C0019295" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_LOG_API
@@ -1687,6 +1750,7 @@ ALTER TABLE "BLADE_LOG_API" ADD CONSTRAINT "SYS_C0012761" PRIMARY KEY ("ID");
 -- ----------------------------
 ALTER TABLE "BLADE_LOG_API" ADD CONSTRAINT "SYS_C0012739" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_LOG_API" ADD CONSTRAINT "SYS_C0017051" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_LOG_API" ADD CONSTRAINT "SYS_C0019194" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_LOG_ERROR
@@ -1698,6 +1762,7 @@ ALTER TABLE "BLADE_LOG_ERROR" ADD CONSTRAINT "SYS_C0012762" PRIMARY KEY ("ID");
 -- ----------------------------
 ALTER TABLE "BLADE_LOG_ERROR" ADD CONSTRAINT "SYS_C0012740" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_LOG_ERROR" ADD CONSTRAINT "SYS_C0017052" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_LOG_ERROR" ADD CONSTRAINT "SYS_C0019195" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_LOG_USUAL
@@ -1709,6 +1774,7 @@ ALTER TABLE "BLADE_LOG_USUAL" ADD CONSTRAINT "SYS_C0012763" PRIMARY KEY ("ID");
 -- ----------------------------
 ALTER TABLE "BLADE_LOG_USUAL" ADD CONSTRAINT "SYS_C0012741" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_LOG_USUAL" ADD CONSTRAINT "SYS_C0017053" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_LOG_USUAL" ADD CONSTRAINT "SYS_C0019196" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_MENU
@@ -1720,6 +1786,7 @@ ALTER TABLE "BLADE_MENU" ADD CONSTRAINT "SYS_C0012764" PRIMARY KEY ("ID");
 -- ----------------------------
 ALTER TABLE "BLADE_MENU" ADD CONSTRAINT "SYS_C0012742" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_MENU" ADD CONSTRAINT "SYS_C0017054" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_MENU" ADD CONSTRAINT "SYS_C0019197" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_NOTICE
@@ -1731,6 +1798,7 @@ ALTER TABLE "BLADE_NOTICE" ADD CONSTRAINT "SYS_C0012765" PRIMARY KEY ("ID");
 -- ----------------------------
 ALTER TABLE "BLADE_NOTICE" ADD CONSTRAINT "SYS_C0012743" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_NOTICE" ADD CONSTRAINT "SYS_C0017055" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_NOTICE" ADD CONSTRAINT "SYS_C0019198" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_OSS
@@ -1742,6 +1810,7 @@ ALTER TABLE "BLADE_OSS" ADD CONSTRAINT "SYS_C0012766" PRIMARY KEY ("ID");
 -- ----------------------------
 ALTER TABLE "BLADE_OSS" ADD CONSTRAINT "SYS_C0012744" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_OSS" ADD CONSTRAINT "SYS_C0017056" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_OSS" ADD CONSTRAINT "SYS_C0019199" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_PARAM
@@ -1753,6 +1822,7 @@ ALTER TABLE "BLADE_PARAM" ADD CONSTRAINT "SYS_C0012767" PRIMARY KEY ("ID");
 -- ----------------------------
 ALTER TABLE "BLADE_PARAM" ADD CONSTRAINT "SYS_C0012745" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_PARAM" ADD CONSTRAINT "SYS_C0017057" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_PARAM" ADD CONSTRAINT "SYS_C0019200" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_PROCESS_LEAVE
@@ -1764,6 +1834,7 @@ ALTER TABLE "BLADE_PROCESS_LEAVE" ADD CONSTRAINT "SYS_C0012768" PRIMARY KEY ("ID
 -- ----------------------------
 ALTER TABLE "BLADE_PROCESS_LEAVE" ADD CONSTRAINT "SYS_C0012746" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_PROCESS_LEAVE" ADD CONSTRAINT "SYS_C0017058" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_PROCESS_LEAVE" ADD CONSTRAINT "SYS_C0019201" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_ROLE
@@ -1775,6 +1846,7 @@ ALTER TABLE "BLADE_ROLE" ADD CONSTRAINT "SYS_C0012769" PRIMARY KEY ("ID");
 -- ----------------------------
 ALTER TABLE "BLADE_ROLE" ADD CONSTRAINT "SYS_C0012747" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_ROLE" ADD CONSTRAINT "SYS_C0017059" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_ROLE" ADD CONSTRAINT "SYS_C0019202" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_ROLE_MENU
@@ -1786,6 +1858,7 @@ ALTER TABLE "BLADE_ROLE_MENU" ADD CONSTRAINT "SYS_C0012770" PRIMARY KEY ("ID");
 -- ----------------------------
 ALTER TABLE "BLADE_ROLE_MENU" ADD CONSTRAINT "SYS_C0012748" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_ROLE_MENU" ADD CONSTRAINT "SYS_C0017060" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_ROLE_MENU" ADD CONSTRAINT "SYS_C0019203" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_ROLE_SCOPE
@@ -1797,6 +1870,7 @@ ALTER TABLE "BLADE_ROLE_SCOPE" ADD CONSTRAINT "SYS_C0012771" PRIMARY KEY ("ID");
 -- ----------------------------
 ALTER TABLE "BLADE_ROLE_SCOPE" ADD CONSTRAINT "SYS_C0012749" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_ROLE_SCOPE" ADD CONSTRAINT "SYS_C0017061" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_ROLE_SCOPE" ADD CONSTRAINT "SYS_C0019204" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_SCOPE_API
@@ -1808,6 +1882,7 @@ ALTER TABLE "BLADE_SCOPE_API" ADD CONSTRAINT "SYS_C0012772" PRIMARY KEY ("ID");
 -- ----------------------------
 ALTER TABLE "BLADE_SCOPE_API" ADD CONSTRAINT "SYS_C0012750" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_SCOPE_API" ADD CONSTRAINT "SYS_C0017062" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_SCOPE_API" ADD CONSTRAINT "SYS_C0019205" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_SCOPE_DATA
@@ -1819,6 +1894,7 @@ ALTER TABLE "BLADE_SCOPE_DATA" ADD CONSTRAINT "SYS_C0012773" PRIMARY KEY ("ID");
 -- ----------------------------
 ALTER TABLE "BLADE_SCOPE_DATA" ADD CONSTRAINT "SYS_C0012751" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_SCOPE_DATA" ADD CONSTRAINT "SYS_C0017063" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_SCOPE_DATA" ADD CONSTRAINT "SYS_C0019206" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_TENANT
@@ -1832,6 +1908,8 @@ ALTER TABLE "BLADE_TENANT" ADD CONSTRAINT "SYS_C0012752" CHECK ("ID" IS NOT NULL
 ALTER TABLE "BLADE_TENANT" ADD CONSTRAINT "SYS_C0012753" CHECK ("TENANT_NAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_TENANT" ADD CONSTRAINT "SYS_C0017064" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_TENANT" ADD CONSTRAINT "SYS_C0017065" CHECK ("TENANT_NAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_TENANT" ADD CONSTRAINT "SYS_C0019207" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_TENANT" ADD CONSTRAINT "SYS_C0019208" CHECK ("TENANT_NAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_TOP_MENU
@@ -1843,6 +1921,7 @@ ALTER TABLE "BLADE_TOP_MENU" ADD CONSTRAINT "SYS_C0012775" PRIMARY KEY ("ID");
 -- ----------------------------
 ALTER TABLE "BLADE_TOP_MENU" ADD CONSTRAINT "SYS_C0012754" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_TOP_MENU" ADD CONSTRAINT "SYS_C0017066" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_TOP_MENU" ADD CONSTRAINT "SYS_C0019209" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_TOP_MENU_SETTING
@@ -1854,6 +1933,7 @@ ALTER TABLE "BLADE_TOP_MENU_SETTING" ADD CONSTRAINT "SYS_C0012776" PRIMARY KEY (
 -- ----------------------------
 ALTER TABLE "BLADE_TOP_MENU_SETTING" ADD CONSTRAINT "SYS_C0012755" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_TOP_MENU_SETTING" ADD CONSTRAINT "SYS_C0017067" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_TOP_MENU_SETTING" ADD CONSTRAINT "SYS_C0019210" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_USER
@@ -1865,3 +1945,4 @@ ALTER TABLE "BLADE_USER" ADD CONSTRAINT "SYS_C0012777" PRIMARY KEY ("ID");
 -- ----------------------------
 ALTER TABLE "BLADE_USER" ADD CONSTRAINT "SYS_C0012756" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_USER" ADD CONSTRAINT "SYS_C0017068" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_USER" ADD CONSTRAINT "SYS_C0019211" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;

+ 181 - 100
doc/sql/oracle/bladex-sword-oracle.sql

@@ -11,7 +11,7 @@
  Target Server Version : 110200
  File Encoding         : 65001
 
- Date: 17/08/2019 12:44:31
+ Date: 03/12/2019 16:46:45
 */
 
 
@@ -87,7 +87,7 @@ COMMIT;
 -- ----------------------------
 -- Table structure for BLADE_CODE
 -- ----------------------------
--- -- DROP TABLE "BLADE_CODE";
+-- DROP TABLE "BLADE_CODE";
 CREATE TABLE "BLADE_CODE" (
   "ID" NUMBER(20) NOT NULL ,
   "DATASOURCE_ID" NUMBER(20) ,
@@ -98,13 +98,13 @@ CREATE TABLE "BLADE_CODE" (
   "PK_NAME" NVARCHAR2(32) ,
   "PACKAGE_NAME" NVARCHAR2(500) ,
   "BASE_MODE" NUMBER(11) ,
-  "WRAP_MODE" NUMBER(11),
+  "WRAP_MODE" NUMBER(11) ,
   "API_PATH" NCLOB ,
   "WEB_PATH" NCLOB ,
   "IS_DELETED" NUMBER(11)
 )
-    TABLESPACE "BLADEX"
-    LOGGING
+TABLESPACE "BLADEX"
+LOGGING
 NOCOMPRESS
 PCTFREE 10
 INITRANS 1
@@ -120,18 +120,18 @@ NOCACHE
 DISABLE ROW MOVEMENT
 ;
 COMMENT ON COLUMN "BLADE_CODE"."ID" IS '主键';
+COMMENT ON COLUMN "BLADE_CODE"."DATASOURCE_ID" IS '数据源主键';
 COMMENT ON COLUMN "BLADE_CODE"."SERVICE_NAME" IS '服务名称';
 COMMENT ON COLUMN "BLADE_CODE"."CODE_NAME" IS '模块名称';
 COMMENT ON COLUMN "BLADE_CODE"."TABLE_NAME" IS '表名';
 COMMENT ON COLUMN "BLADE_CODE"."TABLE_PREFIX" IS '表前缀';
 COMMENT ON COLUMN "BLADE_CODE"."PK_NAME" IS '主键名';
 COMMENT ON COLUMN "BLADE_CODE"."PACKAGE_NAME" IS '后端包名';
+COMMENT ON COLUMN "BLADE_CODE"."BASE_MODE" IS '基础业务模式';
+COMMENT ON COLUMN "BLADE_CODE"."WRAP_MODE" IS '包装器模式';
 COMMENT ON COLUMN "BLADE_CODE"."API_PATH" IS '后端路径';
 COMMENT ON COLUMN "BLADE_CODE"."WEB_PATH" IS '前端路径';
 COMMENT ON COLUMN "BLADE_CODE"."IS_DELETED" IS '是否已删除';
-COMMENT ON COLUMN "BLADE_CODE"."DATASOURCE_ID" IS '数据源主键';
-COMMENT ON COLUMN "BLADE_CODE"."BASE_MODE" IS '基础业务模式';
-COMMENT ON COLUMN "BLADE_CODE"."WRAP_MODE" IS '包装器模式';
 COMMENT ON TABLE "BLADE_CODE" IS '代码生成表';
 
 -- ----------------------------
@@ -257,18 +257,18 @@ COMMIT;
 -- ----------------------------
 -- DROP TABLE "BLADE_DICT";
 CREATE TABLE "BLADE_DICT" (
-"ID" NUMBER(20) NOT NULL ,
-"PARENT_ID" NUMBER(20) ,
-"CODE" NVARCHAR2(255) ,
-"DICT_KEY" NUMBER(11) ,
-"DICT_VALUE" NVARCHAR2(255) ,
-"SORT" NUMBER(11) ,
-"REMARK" NVARCHAR2(255) ,
-"IS_SEALED" NUMBER(11) ,
-"IS_DELETED" NUMBER(11)
+  "ID" NUMBER(20) NOT NULL ,
+  "PARENT_ID" NUMBER(20) ,
+  "CODE" NVARCHAR2(255) ,
+  "DICT_KEY" NVARCHAR2(255) ,
+  "DICT_VALUE" NVARCHAR2(255) ,
+  "SORT" NUMBER(11) ,
+  "REMARK" NVARCHAR2(255) ,
+  "IS_SEALED" NUMBER(11) ,
+  "IS_DELETED" NUMBER(11)
 )
-    TABLESPACE "BLADEX"
-    LOGGING
+TABLESPACE "BLADEX"
+LOGGING
 NOCOMPRESS
 PCTFREE 10
 INITRANS 1
@@ -290,7 +290,7 @@ COMMENT ON COLUMN "BLADE_DICT"."DICT_KEY" IS '字典值';
 COMMENT ON COLUMN "BLADE_DICT"."DICT_VALUE" IS '字典名称';
 COMMENT ON COLUMN "BLADE_DICT"."SORT" IS '排序';
 COMMENT ON COLUMN "BLADE_DICT"."REMARK" IS '字典备注';
-COMMENT ON COLUMN "BLADE_DICT"."IS_SEALED" IS '是否已删除';
+COMMENT ON COLUMN "BLADE_DICT"."IS_SEALED" IS '是否已封存';
 COMMENT ON COLUMN "BLADE_DICT"."IS_DELETED" IS '是否已删除';
 COMMENT ON TABLE "BLADE_DICT" IS '字典表';
 
@@ -342,6 +342,50 @@ INSERT INTO "BLADE_DICT" VALUES ('1123598814738676226', '1123598814738676224', '
 INSERT INTO "BLADE_DICT" VALUES ('1123598814738676227', '1123598814738676224', 'oss', '3', 'ali', '3', NULL, '0', '0');
 COMMIT;
 
+-- ----------------------------
+-- Table structure for BLADE_DICT_BIZ
+-- ----------------------------
+-- DROP TABLE "BLADE_DICT_BIZ";
+CREATE TABLE "BLADE_DICT_BIZ" (
+  "ID" NUMBER(20) NOT NULL ,
+  "TENANT_ID" NVARCHAR2(12) ,
+  "PARENT_ID" NUMBER(20) ,
+  "CODE" NVARCHAR2(255) ,
+  "DICT_KEY" NUMBER(11) ,
+  "DICT_VALUE" NVARCHAR2(255) ,
+  "SORT" NUMBER(11) ,
+  "REMARK" NVARCHAR2(255) ,
+  "IS_SEALED" NUMBER(11) ,
+  "IS_DELETED" NUMBER(11)
+)
+TABLESPACE "BLADEX"
+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 "BLADE_DICT_BIZ"."ID" IS '主键';
+COMMENT ON COLUMN "BLADE_DICT_BIZ"."TENANT_ID" IS '租户ID';
+COMMENT ON COLUMN "BLADE_DICT_BIZ"."PARENT_ID" IS '父主键';
+COMMENT ON COLUMN "BLADE_DICT_BIZ"."CODE" IS '字典码';
+COMMENT ON COLUMN "BLADE_DICT_BIZ"."DICT_KEY" IS '字典值';
+COMMENT ON COLUMN "BLADE_DICT_BIZ"."DICT_VALUE" IS '字典名称';
+COMMENT ON COLUMN "BLADE_DICT_BIZ"."SORT" IS '排序';
+COMMENT ON COLUMN "BLADE_DICT_BIZ"."REMARK" IS '字典备注';
+COMMENT ON COLUMN "BLADE_DICT_BIZ"."IS_SEALED" IS '是否已封存';
+COMMENT ON COLUMN "BLADE_DICT_BIZ"."IS_DELETED" IS '是否已删除';
+COMMENT ON TABLE "BLADE_DICT_BIZ" IS '数据源配置表';
+
 -- ----------------------------
 -- Table structure for BLADE_LOG_API
 -- ----------------------------
@@ -407,29 +451,29 @@ COMMENT ON TABLE "BLADE_LOG_API" IS '接口日志表';
 -- ----------------------------
 -- DROP TABLE "BLADE_LOG_ERROR";
 CREATE TABLE "BLADE_LOG_ERROR" (
-   "ID" NUMBER(20) NOT NULL ,
-   "TENANT_ID" NVARCHAR2(12) ,
-   "SERVICE_ID" NVARCHAR2(32) ,
-   "SERVER_HOST" NVARCHAR2(255) ,
-   "SERVER_IP" NVARCHAR2(255) ,
-   "ENV" NVARCHAR2(255) ,
-   "METHOD" NVARCHAR2(10) ,
-   "REQUEST_URI" NVARCHAR2(255) ,
-   "USER_AGENT" NVARCHAR2(1000) ,
-   "STACK_TRACE" NCLOB ,
-   "EXCEPTION_NAME" NVARCHAR2(255) ,
-   "MESSAGE" NCLOB ,
-   "LINE_NUMBER" NUMBER(11) ,
-   "REMOTE_IP" NVARCHAR2(255) ,
-   "METHOD_CLASS" NVARCHAR2(255) ,
-   "FILE_NAME" NVARCHAR2(1000) ,
-   "METHOD_NAME" NVARCHAR2(255) ,
-   "PARAMS" NCLOB ,
-   "CREATE_BY" NVARCHAR2(64) ,
-   "CREATE_TIME" DATE
+  "ID" NUMBER(20) NOT NULL ,
+  "TENANT_ID" NVARCHAR2(12) ,
+  "SERVICE_ID" NVARCHAR2(32) ,
+  "SERVER_HOST" NVARCHAR2(255) ,
+  "SERVER_IP" NVARCHAR2(255) ,
+  "ENV" NVARCHAR2(255) ,
+  "METHOD" NVARCHAR2(10) ,
+  "REQUEST_URI" NVARCHAR2(255) ,
+  "USER_AGENT" NVARCHAR2(1000) ,
+  "STACK_TRACE" NCLOB ,
+  "EXCEPTION_NAME" NVARCHAR2(255) ,
+  "MESSAGE" NCLOB ,
+  "LINE_NUMBER" NUMBER(11) ,
+  "REMOTE_IP" NVARCHAR2(255) ,
+  "METHOD_CLASS" NVARCHAR2(255) ,
+  "FILE_NAME" NVARCHAR2(1000) ,
+  "METHOD_NAME" NVARCHAR2(255) ,
+  "PARAMS" NCLOB ,
+  "CREATE_BY" NVARCHAR2(64) ,
+  "CREATE_TIME" DATE
 )
-    TABLESPACE "BLADEX"
-    LOGGING
+TABLESPACE "BLADEX"
+LOGGING
 NOCOMPRESS
 PCTFREE 10
 INITRANS 1
@@ -471,27 +515,27 @@ COMMENT ON TABLE "BLADE_LOG_ERROR" IS '错误日志表';
 -- ----------------------------
 -- DROP TABLE "BLADE_LOG_USUAL";
 CREATE TABLE "BLADE_LOG_USUAL" (
-   "ID" NUMBER(20) NOT NULL ,
-   "TENANT_ID" NVARCHAR2(12) ,
-   "SERVICE_ID" NVARCHAR2(32) ,
-   "SERVER_HOST" NVARCHAR2(255) ,
-   "SERVER_IP" NVARCHAR2(255) ,
-   "ENV" NVARCHAR2(255) ,
-   "LOG_LEVEL" NVARCHAR2(10) ,
-   "LOG_ID" NVARCHAR2(100) ,
-   "LOG_DATA" NCLOB ,
-   "METHOD" NVARCHAR2(10) ,
-   "REQUEST_URI" NVARCHAR2(255) ,
-   "REMOTE_IP" NVARCHAR2(255) ,
-   "METHOD_CLASS" NVARCHAR2(255) ,
-   "METHOD_NAME" NVARCHAR2(255) ,
-   "USER_AGENT" NVARCHAR2(1000) ,
-   "PARAMS" NCLOB ,
-   "CREATE_BY" NVARCHAR2(64) ,
-   "CREATE_TIME" DATE
+  "ID" NUMBER(20) NOT NULL ,
+  "TENANT_ID" NVARCHAR2(12) ,
+  "SERVICE_ID" NVARCHAR2(32) ,
+  "SERVER_HOST" NVARCHAR2(255) ,
+  "SERVER_IP" NVARCHAR2(255) ,
+  "ENV" NVARCHAR2(255) ,
+  "LOG_LEVEL" NVARCHAR2(10) ,
+  "LOG_ID" NVARCHAR2(100) ,
+  "LOG_DATA" NCLOB ,
+  "METHOD" NVARCHAR2(10) ,
+  "REQUEST_URI" NVARCHAR2(255) ,
+  "REMOTE_IP" NVARCHAR2(255) ,
+  "METHOD_CLASS" NVARCHAR2(255) ,
+  "METHOD_NAME" NVARCHAR2(255) ,
+  "USER_AGENT" NVARCHAR2(1000) ,
+  "PARAMS" NCLOB ,
+  "CREATE_BY" NVARCHAR2(64) ,
+  "CREATE_TIME" DATE
 )
-    TABLESPACE "BLADEX"
-    LOGGING
+TABLESPACE "BLADEX"
+LOGGING
 NOCOMPRESS
 PCTFREE 10
 INITRANS 1
@@ -579,12 +623,26 @@ COMMENT ON TABLE "BLADE_MENU" IS '菜单表';
 -- ----------------------------
 -- Records of BLADE_MENU
 -- ----------------------------
+INSERT INTO "BLADE_MENU" VALUES ('1161272593873321994', '1161272593873321991', 'datasource_delete', '删除', 'delete', '/api/blade-develop/datasource/remove', 'delete', '3', '2', '3', '3', NULL, '0');
+INSERT INTO "BLADE_MENU" VALUES ('1161272593873321995', '1161272593873321991', 'datasource_view', '查看', 'view', '/tool/datasource/view', 'file-text', '4', '2', '2', '2', NULL, '0');
+INSERT INTO "BLADE_MENU" VALUES ('1164733121140551682', '1123598815738675217', 'form', '表单设计', 'form', 'https://form.avuejs.com/', NULL, '3', '1', '0', '2', NULL, '0');
+INSERT INTO "BLADE_MENU" VALUES ('1164733349637844993', '1123598815738675217', 'crud', '表格设计', 'crud', 'https://crud.avuejs.com/', NULL, '4', '1', '0', '2', NULL, '0');
+INSERT INTO "BLADE_MENU" VALUES ('1164733369658963251', '1123598815738675210', 'elk', 'ELK监控', 'menu', 'http://localhost:5601/', NULL, '3', '1', '0', '2', NULL, '0');
+INSERT INTO "BLADE_MENU" VALUES ('1164733369658963252', '1123598815738675210', 'zipkin', 'Zipkin监控', 'menu', 'http://localhost:9411/', NULL, '4', '1', '0', '2', NULL, '0');
+INSERT INTO "BLADE_MENU" VALUES ('1164733369658963253', '1123598815738675210', 'turbine', 'Turbine监控', 'menu', 'http://localhost:7003/hystrix', NULL, '5', '1', '0', '2', NULL, '0');
+INSERT INTO "BLADE_MENU" VALUES ('1164733369658963254', '1123598815738675210', 'sentinel', 'Sentinel管理', 'menu', 'http://localhost:8858', NULL, '6', '1', '0', '2', NULL, '0');
+INSERT INTO "BLADE_MENU" VALUES ('1164733369658963255', '1123598815738675210', 'es', 'Elasticsearch管理', 'menu', 'http://localhost:9100/', NULL, '7', '1', '0', '2', NULL, '0');
+INSERT INTO "BLADE_MENU" VALUES ('1164733379658963251', '1123598815738675203', 'dictbiz', '业务字典', 'menu', '/system/dictbiz', '', '3', '1', '0', '1', NULL, '0');
+INSERT INTO "BLADE_MENU" VALUES ('1164733379658963252', '1164733379658963251', 'dictbiz_add', '新增', 'add', '/system/dictbiz/add', 'plus', '1', '2', '2', '1', NULL, '0');
+INSERT INTO "BLADE_MENU" VALUES ('1164733379658963253', '1164733379658963251', 'dictbiz_edit', '修改', 'edit', '/system/dictbiz/edit', 'form', '2', '2', '1', '1', NULL, '0');
+INSERT INTO "BLADE_MENU" VALUES ('1164733379658963254', '1164733379658963251', 'dictbiz_delete', '删除', 'delete', '/api/blade-system/dict-biz/remove', 'delete', '3', '2', '0', '1', NULL, '0');
+INSERT INTO "BLADE_MENU" VALUES ('1164733379658963255', '1164733379658963251', 'dictbiz_view', '查看', 'view', '/system/dictbiz/view', 'file-text', '4', '2', '3', '1', NULL, '0');
 INSERT INTO "BLADE_MENU" VALUES ('1123598815738675201', '0', 'desk', '工作台', 'menu', '/desk', 'desktop', '1', '1', '0', '1', NULL, '0');
 INSERT INTO "BLADE_MENU" VALUES ('1123598815738675202', '1123598815738675201', 'notice', '通知公告', 'menu', '/desk/notice', NULL, '1', '1', '0', '1', NULL, '0');
 INSERT INTO "BLADE_MENU" VALUES ('1123598815738675203', '0', 'system', '系统管理', 'menu', '/system', 'setting', '99', '1', '0', '1', NULL, '0');
 INSERT INTO "BLADE_MENU" VALUES ('1123598815738675204', '1123598815738675203', 'user', '用户管理', 'menu', '/system/user', NULL, '1', '1', '0', '1', NULL, '0');
 INSERT INTO "BLADE_MENU" VALUES ('1123598815738675205', '1123598815738675203', 'dept', '机构管理', 'menu', '/system/dept', NULL, '2', '1', '0', '1', NULL, '0');
-INSERT INTO "BLADE_MENU" VALUES ('1123598815738675206', '1123598815738675203', 'dict', '字典管理', 'menu', '/system/dict', NULL, '3', '1', '0', '1', NULL, '0');
+INSERT INTO "BLADE_MENU" VALUES ('1123598815738675206', '1123598815738675203', 'dict', '系统字典', 'menu', '/system/dict', NULL, '3', '1', '0', '1', NULL, '0');
 INSERT INTO "BLADE_MENU" VALUES ('1123598815738675207', '1123598815738675203', 'menu', '菜单管理', 'menu', '/system/menu', NULL, '4', '1', '0', '1', NULL, '0');
 INSERT INTO "BLADE_MENU" VALUES ('1123598815738675208', '1123598815738675203', 'topmenu', '顶部菜单', 'menu', '/system/topmenu', NULL, '5', '1', '0', '1', NULL, '0');
 INSERT INTO "BLADE_MENU" VALUES ('1123598815738675209', '1123598815738675203', 'param', '参数管理', 'menu', '/system/param', NULL, '6', '1', '0', '1', NULL, '0');
@@ -676,13 +734,13 @@ INSERT INTO "BLADE_MENU" VALUES ('1123598815738675294', '1123598815738675292', '
 INSERT INTO "BLADE_MENU" VALUES ('1123598815738675295', '1123598815738675280', 'work_done', '办结事务', 'menu', '/work/done', NULL, '4', '1', '0', '1', NULL, '0');
 INSERT INTO "BLADE_MENU" VALUES ('1123598815738675296', '1123598815738675295', 'work_done_detail', '详情', 'detail', NULL, 'detail', '1', '2', '2', '1', NULL, '0');
 INSERT INTO "BLADE_MENU" VALUES ('1123598815738675297', '1123598815738675295', 'work_done_follow', '跟踪', 'follow', NULL, 'follow', '2', '2', '2', '1', NULL, '0');
-INSERT INTO "BLADE_MENU" VALUES ('1123598815738675298', '0', 'reSOURCE', '资源管理', 'menu', '/reSOURCE', 'bg-colors', '6', '1', '0', '1', NULL, '0');
-INSERT INTO "BLADE_MENU" VALUES ('1123598815738675299', '1123598815738675298', 'oss', '对象存储', 'menu', '/reSOURCE/oss', NULL, '1', '1', '0', '1', NULL, '0');
-INSERT INTO "BLADE_MENU" VALUES ('1123598815738675301', '1123598815738675299', 'oss_add', '新增', 'add', '/reSOURCE/oss/add', 'plus', '1', '2', '1', '1', NULL, '0');
-INSERT INTO "BLADE_MENU" VALUES ('1123598815738675302', '1123598815738675299', 'oss_edit', '修改', 'edit', '/reSOURCE/oss/edit', 'form', '2', '2', '2', '2', NULL, '0');
-INSERT INTO "BLADE_MENU" VALUES ('1123598815738675303', '1123598815738675299', 'oss_delete', '删除', 'delete', '/api/blade-reSOURCE/oss/remove', 'delete', '3', '2', '3', '3', NULL, '0');
-INSERT INTO "BLADE_MENU" VALUES ('1123598815738675304', '1123598815738675299', 'oss_view', '查看', 'view', '/reSOURCE/oss/view', 'file-text', '4', '2', '2', '2', NULL, '0');
-INSERT INTO "BLADE_MENU" VALUES ('1123598815738675305', '1123598815738675299', 'oss_enable', '启用', 'enable', '/api/blade-reSOURCE/oss/enable', 'key', '5', '2', '2', '2', NULL, '0');
+INSERT INTO "BLADE_MENU" VALUES ('1123598815738675298', '0', 'resource', '资源管理', 'menu', '/resource', 'bg-colors', '6', '1', '0', '1', NULL, '0');
+INSERT INTO "BLADE_MENU" VALUES ('1123598815738675299', '1123598815738675298', 'oss', '对象存储', 'menu', '/resource/oss', NULL, '1', '1', '0', '1', NULL, '0');
+INSERT INTO "BLADE_MENU" VALUES ('1123598815738675301', '1123598815738675299', 'oss_add', '新增', 'add', '/resource/oss/add', 'plus', '1', '2', '1', '1', NULL, '0');
+INSERT INTO "BLADE_MENU" VALUES ('1123598815738675302', '1123598815738675299', 'oss_edit', '修改', 'edit', '/resource/oss/edit', 'form', '2', '2', '2', '2', NULL, '0');
+INSERT INTO "BLADE_MENU" VALUES ('1123598815738675303', '1123598815738675299', 'oss_delete', '删除', 'delete', '/api/blade-resource/oss/remove', 'delete', '3', '2', '3', '3', NULL, '0');
+INSERT INTO "BLADE_MENU" VALUES ('1123598815738675304', '1123598815738675299', 'oss_view', '查看', 'view', '/resource/oss/view', 'file-text', '4', '2', '2', '2', NULL, '0');
+INSERT INTO "BLADE_MENU" VALUES ('1123598815738675305', '1123598815738675299', 'oss_enable', '启用', 'enable', '/api/blade-resource/oss/enable', 'key', '5', '2', '2', '2', NULL, '0');
 INSERT INTO "BLADE_MENU" VALUES ('1123598815738675307', '0', 'authority', '权限管理', 'menu', '/authority', 'safety-certificate', '98', '1', '0', '1', NULL, '0');
 INSERT INTO "BLADE_MENU" VALUES ('1123598815738675308', '1123598815738675307', 'role', '角色管理', 'menu', '/authority/role', NULL, '1', '1', '0', '1', NULL, '0');
 INSERT INTO "BLADE_MENU" VALUES ('1123598815738675309', '1123598815738675307', 'data_scope', '数据权限', 'menu', '/authority/datascope', NULL, '2', '1', '0', '1', NULL, '0');
@@ -697,22 +755,6 @@ INSERT INTO "BLADE_MENU" VALUES ('1123598815738675317', '1123598815738675208', '
 INSERT INTO "BLADE_MENU" VALUES ('1161272593873321991', '1123598815738675217', 'datasource', '数据源管理', 'menu', '/tool/datasource', 'iconfont icon-caidanguanli', '2', '1', '0', '1', NULL, '0');
 INSERT INTO "BLADE_MENU" VALUES ('1161272593873321992', '1161272593873321991', 'datasource_add', '新增', 'add', '/tool/datasource/add', 'plus', '1', '2', '1', '1', NULL, '0');
 INSERT INTO "BLADE_MENU" VALUES ('1161272593873321993', '1161272593873321991', 'datasource_edit', '修改', 'edit', '/tool/datasource/edit', 'form', '2', '2', '2', '2', NULL, '0');
-INSERT INTO "BLADE_MENU" VALUES ('1161272593873321994', '1161272593873321991', 'datasource_delete', '删除', 'delete', '/api/blade-develop/datasource/remove', 'delete', '3', '2', '3', '3', NULL, '0');
-INSERT INTO "BLADE_MENU" VALUES ('1161272593873321995', '1161272593873321991', 'datasource_view', '查看', 'view', '/tool/datasource/view', 'file-text', '4', '2', '2', '2', NULL, '0');
-INSERT INTO "BLADE_MENU"("ID", "PARENT_ID", "CODE", "NAME", "ALIAS", "PATH", "SOURCE", "SORT", "CATEGORY", "ACTION", "IS_OPEN", "REMARK", "IS_DELETED")
-VALUES ('1164733121140551682', '1123598815738675217', 'form', '表单设计', 'form', 'https://form.avuejs.com/', '', 3, 1, 0, 2, '', 0);
-INSERT INTO "BLADE_MENU"("ID", "PARENT_ID", "CODE", "NAME", "ALIAS", "PATH", "SOURCE", "SORT", "CATEGORY", "ACTION", "IS_OPEN", "REMARK", "IS_DELETED")
-VALUES ('1164733349637844993', '1123598815738675217', 'crud', '表格设计', 'crud', 'https://crud.avuejs.com/', '', 4, 1, 0, 2, '', 0);
-INSERT INTO "BLADE_MENU"("ID", "PARENT_ID", "CODE", "NAME", "ALIAS", "PATH", "SOURCE", "SORT", "CATEGORY", "ACTION", "IS_OPEN", "REMARK", "IS_DELETED")
-VALUES ('1164733369658963251', '1123598815738675210', 'elk', 'ELK监控', 'menu', 'http://localhost:5601/', '', 3, 1, 0, 2, '', 0);
-INSERT INTO "BLADE_MENU"("ID", "PARENT_ID", "CODE", "NAME", "ALIAS", "PATH", "SOURCE", "SORT", "CATEGORY", "ACTION", "IS_OPEN", "REMARK", "IS_DELETED")
-VALUES ('1164733369658963252', '1123598815738675210', 'zipkin', 'Zipkin监控', 'menu', 'http://localhost:9411/', '', 4, 1, 0, 2, '', 0);
-INSERT INTO "BLADE_MENU"("ID", "PARENT_ID", "CODE", "NAME", "ALIAS", "PATH", "SOURCE", "SORT", "CATEGORY", "ACTION", "IS_OPEN", "REMARK", "IS_DELETED")
-VALUES ('1164733369658963253', '1123598815738675210', 'turbine', 'Turbine监控', 'menu', 'http://localhost:7003/hystrix', '', 5, 1, 0, 2, '', 0);
-INSERT INTO "BLADE_MENU"("ID", "PARENT_ID", "CODE", "NAME", "ALIAS", "PATH", "SOURCE", "SORT", "CATEGORY", "ACTION", "IS_OPEN", "REMARK", "IS_DELETED")
-VALUES ('1164733369658963254', '1123598815738675210', 'sentinel', 'Sentinel管理', 'menu', 'http://localhost:8858', '', 6, 1, 0, 2, '', 0);
-INSERT INTO "BLADE_MENU"("ID", "PARENT_ID", "CODE", "NAME", "ALIAS", "PATH", "SOURCE", "SORT", "CATEGORY", "ACTION", "IS_OPEN", "REMARK", "IS_DELETED")
-VALUES ('1164733369658963255', '1123598815738675210', 'es', 'Elasticsearch管理', 'menu', 'http://localhost:9100/', '', 7, 1, 0, 2, '', 0);
 COMMIT;
 
 -- ----------------------------
@@ -1241,20 +1283,18 @@ INSERT INTO "BLADE_ROLE_MENU" VALUES ('1161272593873322992', '116127259387332199
 INSERT INTO "BLADE_ROLE_MENU" VALUES ('1161272593873322993', '1161272593873321993', '1123598816738675201');
 INSERT INTO "BLADE_ROLE_MENU" VALUES ('1161272593873322994', '1161272593873321994', '1123598816738675201');
 INSERT INTO "BLADE_ROLE_MENU" VALUES ('1161272593873322995', '1161272593873321995', '1123598816738675201');
-INSERT INTO "BLADE_ROLE_MENU"(ID,MENU_ID,ROLE_ID)
-VALUES ('1161272593873322996', '1164733121140551682', '1123598816738675201');
-INSERT INTO "BLADE_ROLE_MENU"(ID,MENU_ID,ROLE_ID)
-VALUES ('1161272593873322997', '1164733349637844993', '1123598816738675201');
-INSERT INTO "BLADE_ROLE_MENU"(ID,MENU_ID,ROLE_ID)
-VALUES ('1161272693873322991', '1164733369658963251', '1123598816738675201');
-INSERT INTO "BLADE_ROLE_MENU"(ID,MENU_ID,ROLE_ID)
-VALUES ('1161272693873322992', '1164733369658963252', '1123598816738675201');
-INSERT INTO "BLADE_ROLE_MENU"(ID,MENU_ID,ROLE_ID)
-VALUES ('1161272693873322993', '1164733369658963253', '1123598816738675201');
-INSERT INTO "BLADE_ROLE_MENU"(ID,MENU_ID,ROLE_ID)
-VALUES ('1161272693873322994', '1164733369658963254', '1123598816738675201');
-INSERT INTO "BLADE_ROLE_MENU"(ID,MENU_ID,ROLE_ID)
-VALUES ('1161272693873322995', '1164733369658963255', '1123598816738675201');
+INSERT INTO "BLADE_ROLE_MENU" VALUES ('1161272593873322996', '1164733121140551682', '1123598816738675201');
+INSERT INTO "BLADE_ROLE_MENU" VALUES ('1161272593873322997', '1164733349637844993', '1123598816738675201');
+INSERT INTO "BLADE_ROLE_MENU" VALUES ('1161272693873322991', '1164733369658963251', '1123598816738675201');
+INSERT INTO "BLADE_ROLE_MENU" VALUES ('1161272693873322992', '1164733369658963252', '1123598816738675201');
+INSERT INTO "BLADE_ROLE_MENU" VALUES ('1161272693873322993', '1164733369658963253', '1123598816738675201');
+INSERT INTO "BLADE_ROLE_MENU" VALUES ('1161272693873322994', '1164733369658963254', '1123598816738675201');
+INSERT INTO "BLADE_ROLE_MENU" VALUES ('1161272693873322995', '1164733369658963255', '1123598816738675201');
+INSERT INTO "BLADE_ROLE_MENU" VALUES ('1161272793873322991', '1164733379658963251', '1123598816738675201');
+INSERT INTO "BLADE_ROLE_MENU" VALUES ('1161272793873322992', '116473337658963252', '1123598816738675201');
+INSERT INTO "BLADE_ROLE_MENU" VALUES ('1161272793873322993', '1164733379658963253', '1123598816738675201');
+INSERT INTO "BLADE_ROLE_MENU" VALUES ('1161272793873322994', '1164733379658963254', '1123598816738675201');
+INSERT INTO "BLADE_ROLE_MENU" VALUES ('1161272793873322995', '1164733379658963255', '1123598816738675201');
 COMMIT;
 
 -- ----------------------------
@@ -1633,6 +1673,15 @@ ALTER TABLE "BLADE_CLIENT" ADD CONSTRAINT "SYS_C0017224" CHECK ("ACCESS_TOKEN_VA
 ALTER TABLE "BLADE_CLIENT" ADD CONSTRAINT "SYS_C0017225" CHECK ("REFRESH_TOKEN_VALIDITY" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_CLIENT" ADD CONSTRAINT "SYS_C0017226" CHECK ("STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_CLIENT" ADD CONSTRAINT "SYS_C0017227" CHECK ("IS_DELETED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_CLIENT" ADD CONSTRAINT "SYS_C0019297" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_CLIENT" ADD CONSTRAINT "SYS_C0019298" CHECK ("CLIENT_ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_CLIENT" ADD CONSTRAINT "SYS_C0019299" CHECK ("CLIENT_SECRET" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_CLIENT" ADD CONSTRAINT "SYS_C0019300" CHECK ("SCOPE" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_CLIENT" ADD CONSTRAINT "SYS_C0019301" CHECK ("AUTHORIZED_GRANT_TYPES" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_CLIENT" ADD CONSTRAINT "SYS_C0019302" CHECK ("ACCESS_TOKEN_VALIDITY" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_CLIENT" ADD CONSTRAINT "SYS_C0019303" CHECK ("REFRESH_TOKEN_VALIDITY" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_CLIENT" ADD CONSTRAINT "SYS_C0019304" CHECK ("STATUS" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_CLIENT" ADD CONSTRAINT "SYS_C0019305" CHECK ("IS_DELETED" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_CODE
@@ -1644,6 +1693,7 @@ ALTER TABLE "BLADE_CODE" ADD CONSTRAINT "SYS_C0012675" PRIMARY KEY ("ID");
 -- ----------------------------
 ALTER TABLE "BLADE_CODE" ADD CONSTRAINT "SYS_C0012653" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_CODE" ADD CONSTRAINT "SYS_C0017228" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_CODE" ADD CONSTRAINT "SYS_C0019306" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_DATASOURCE
@@ -1654,6 +1704,7 @@ ALTER TABLE "BLADE_DATASOURCE" ADD CONSTRAINT "SYS_C0017301" PRIMARY KEY ("ID");
 -- Checks structure for table BLADE_DATASOURCE
 -- ----------------------------
 ALTER TABLE "BLADE_DATASOURCE" ADD CONSTRAINT "SYS_C0017300" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_DATASOURCE" ADD CONSTRAINT "SYS_C0019307" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_DEPT
@@ -1665,6 +1716,7 @@ ALTER TABLE "BLADE_DEPT" ADD CONSTRAINT "SYS_C0012676" PRIMARY KEY ("ID");
 -- ----------------------------
 ALTER TABLE "BLADE_DEPT" ADD CONSTRAINT "SYS_C0012654" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_DEPT" ADD CONSTRAINT "SYS_C0017229" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_DEPT" ADD CONSTRAINT "SYS_C0019308" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_DICT
@@ -1676,6 +1728,17 @@ ALTER TABLE "BLADE_DICT" ADD CONSTRAINT "SYS_C0012677" PRIMARY KEY ("ID");
 -- ----------------------------
 ALTER TABLE "BLADE_DICT" ADD CONSTRAINT "SYS_C0012655" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_DICT" ADD CONSTRAINT "SYS_C0017230" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_DICT" ADD CONSTRAINT "SYS_C0019309" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+
+-- ----------------------------
+-- Primary Key structure for table BLADE_DICT_BIZ
+-- ----------------------------
+ALTER TABLE "BLADE_DICT_BIZ" ADD CONSTRAINT "SYS_C0019412" PRIMARY KEY ("ID");
+
+-- ----------------------------
+-- Checks structure for table BLADE_DICT_BIZ
+-- ----------------------------
+ALTER TABLE "BLADE_DICT_BIZ" ADD CONSTRAINT "SYS_C0019411" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_LOG_API
@@ -1687,6 +1750,7 @@ ALTER TABLE "BLADE_LOG_API" ADD CONSTRAINT "SYS_C0012678" PRIMARY KEY ("ID");
 -- ----------------------------
 ALTER TABLE "BLADE_LOG_API" ADD CONSTRAINT "SYS_C0012656" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_LOG_API" ADD CONSTRAINT "SYS_C0017231" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_LOG_API" ADD CONSTRAINT "SYS_C0019310" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_LOG_ERROR
@@ -1698,6 +1762,7 @@ ALTER TABLE "BLADE_LOG_ERROR" ADD CONSTRAINT "SYS_C0012679" PRIMARY KEY ("ID");
 -- ----------------------------
 ALTER TABLE "BLADE_LOG_ERROR" ADD CONSTRAINT "SYS_C0012657" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_LOG_ERROR" ADD CONSTRAINT "SYS_C0017232" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_LOG_ERROR" ADD CONSTRAINT "SYS_C0019311" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_LOG_USUAL
@@ -1709,6 +1774,7 @@ ALTER TABLE "BLADE_LOG_USUAL" ADD CONSTRAINT "SYS_C0012680" PRIMARY KEY ("ID");
 -- ----------------------------
 ALTER TABLE "BLADE_LOG_USUAL" ADD CONSTRAINT "SYS_C0012658" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_LOG_USUAL" ADD CONSTRAINT "SYS_C0017233" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_LOG_USUAL" ADD CONSTRAINT "SYS_C0019312" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_MENU
@@ -1720,6 +1786,7 @@ ALTER TABLE "BLADE_MENU" ADD CONSTRAINT "SYS_C0012681" PRIMARY KEY ("ID");
 -- ----------------------------
 ALTER TABLE "BLADE_MENU" ADD CONSTRAINT "SYS_C0012659" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_MENU" ADD CONSTRAINT "SYS_C0017234" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_MENU" ADD CONSTRAINT "SYS_C0019313" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_NOTICE
@@ -1731,6 +1798,7 @@ ALTER TABLE "BLADE_NOTICE" ADD CONSTRAINT "SYS_C0012682" PRIMARY KEY ("ID");
 -- ----------------------------
 ALTER TABLE "BLADE_NOTICE" ADD CONSTRAINT "SYS_C0012660" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_NOTICE" ADD CONSTRAINT "SYS_C0017235" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_NOTICE" ADD CONSTRAINT "SYS_C0019314" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_OSS
@@ -1742,6 +1810,7 @@ ALTER TABLE "BLADE_OSS" ADD CONSTRAINT "SYS_C0012683" PRIMARY KEY ("ID");
 -- ----------------------------
 ALTER TABLE "BLADE_OSS" ADD CONSTRAINT "SYS_C0012661" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_OSS" ADD CONSTRAINT "SYS_C0017236" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_OSS" ADD CONSTRAINT "SYS_C0019315" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_PARAM
@@ -1753,6 +1822,7 @@ ALTER TABLE "BLADE_PARAM" ADD CONSTRAINT "SYS_C0012684" PRIMARY KEY ("ID");
 -- ----------------------------
 ALTER TABLE "BLADE_PARAM" ADD CONSTRAINT "SYS_C0012662" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_PARAM" ADD CONSTRAINT "SYS_C0017237" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_PARAM" ADD CONSTRAINT "SYS_C0019316" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_PROCESS_LEAVE
@@ -1764,6 +1834,7 @@ ALTER TABLE "BLADE_PROCESS_LEAVE" ADD CONSTRAINT "SYS_C0012685" PRIMARY KEY ("ID
 -- ----------------------------
 ALTER TABLE "BLADE_PROCESS_LEAVE" ADD CONSTRAINT "SYS_C0012663" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_PROCESS_LEAVE" ADD CONSTRAINT "SYS_C0017238" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_PROCESS_LEAVE" ADD CONSTRAINT "SYS_C0019317" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_ROLE
@@ -1775,6 +1846,7 @@ ALTER TABLE "BLADE_ROLE" ADD CONSTRAINT "SYS_C0012686" PRIMARY KEY ("ID");
 -- ----------------------------
 ALTER TABLE "BLADE_ROLE" ADD CONSTRAINT "SYS_C0012664" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_ROLE" ADD CONSTRAINT "SYS_C0017239" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_ROLE" ADD CONSTRAINT "SYS_C0019318" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_ROLE_MENU
@@ -1786,6 +1858,7 @@ ALTER TABLE "BLADE_ROLE_MENU" ADD CONSTRAINT "SYS_C0012687" PRIMARY KEY ("ID");
 -- ----------------------------
 ALTER TABLE "BLADE_ROLE_MENU" ADD CONSTRAINT "SYS_C0012665" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_ROLE_MENU" ADD CONSTRAINT "SYS_C0017240" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_ROLE_MENU" ADD CONSTRAINT "SYS_C0019319" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_ROLE_SCOPE
@@ -1797,6 +1870,7 @@ ALTER TABLE "BLADE_ROLE_SCOPE" ADD CONSTRAINT "SYS_C0012688" PRIMARY KEY ("ID");
 -- ----------------------------
 ALTER TABLE "BLADE_ROLE_SCOPE" ADD CONSTRAINT "SYS_C0012666" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_ROLE_SCOPE" ADD CONSTRAINT "SYS_C0017241" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_ROLE_SCOPE" ADD CONSTRAINT "SYS_C0019320" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_SCOPE_API
@@ -1808,6 +1882,7 @@ ALTER TABLE "BLADE_SCOPE_API" ADD CONSTRAINT "SYS_C0012689" PRIMARY KEY ("ID");
 -- ----------------------------
 ALTER TABLE "BLADE_SCOPE_API" ADD CONSTRAINT "SYS_C0012667" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_SCOPE_API" ADD CONSTRAINT "SYS_C0017242" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_SCOPE_API" ADD CONSTRAINT "SYS_C0019321" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_SCOPE_DATA
@@ -1819,6 +1894,7 @@ ALTER TABLE "BLADE_SCOPE_DATA" ADD CONSTRAINT "SYS_C0012690" PRIMARY KEY ("ID");
 -- ----------------------------
 ALTER TABLE "BLADE_SCOPE_DATA" ADD CONSTRAINT "SYS_C0012668" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_SCOPE_DATA" ADD CONSTRAINT "SYS_C0017243" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_SCOPE_DATA" ADD CONSTRAINT "SYS_C0019322" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_TENANT
@@ -1832,6 +1908,8 @@ ALTER TABLE "BLADE_TENANT" ADD CONSTRAINT "SYS_C0012669" CHECK ("ID" IS NOT NULL
 ALTER TABLE "BLADE_TENANT" ADD CONSTRAINT "SYS_C0012670" CHECK ("TENANT_NAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_TENANT" ADD CONSTRAINT "SYS_C0017244" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_TENANT" ADD CONSTRAINT "SYS_C0017245" CHECK ("TENANT_NAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_TENANT" ADD CONSTRAINT "SYS_C0019323" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_TENANT" ADD CONSTRAINT "SYS_C0019324" CHECK ("TENANT_NAME" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_TOP_MENU
@@ -1843,6 +1921,7 @@ ALTER TABLE "BLADE_TOP_MENU" ADD CONSTRAINT "SYS_C0012692" PRIMARY KEY ("ID");
 -- ----------------------------
 ALTER TABLE "BLADE_TOP_MENU" ADD CONSTRAINT "SYS_C0012671" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_TOP_MENU" ADD CONSTRAINT "SYS_C0017246" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_TOP_MENU" ADD CONSTRAINT "SYS_C0019325" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_TOP_MENU_SETTING
@@ -1854,6 +1933,7 @@ ALTER TABLE "BLADE_TOP_MENU_SETTING" ADD CONSTRAINT "SYS_C0012693" PRIMARY KEY (
 -- ----------------------------
 ALTER TABLE "BLADE_TOP_MENU_SETTING" ADD CONSTRAINT "SYS_C0012672" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_TOP_MENU_SETTING" ADD CONSTRAINT "SYS_C0017247" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_TOP_MENU_SETTING" ADD CONSTRAINT "SYS_C0019326" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 
 -- ----------------------------
 -- Primary Key structure for table BLADE_USER
@@ -1865,3 +1945,4 @@ ALTER TABLE "BLADE_USER" ADD CONSTRAINT "SYS_C0012694" PRIMARY KEY ("ID");
 -- ----------------------------
 ALTER TABLE "BLADE_USER" ADD CONSTRAINT "SYS_C0012673" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
 ALTER TABLE "BLADE_USER" ADD CONSTRAINT "SYS_C0017248" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
+ALTER TABLE "BLADE_USER" ADD CONSTRAINT "SYS_C0019327" CHECK ("ID" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;

+ 107 - 77
doc/sql/postgresql/bladex-saber-postgresql.sql

@@ -12,7 +12,7 @@
  Target Server Version : 110001
  File Encoding         : 65001
 
- Date: 16/08/2019 23:00:21
+ Date: 03/12/2019 15:24:05
 */
 
 
@@ -92,18 +92,18 @@ CREATE TABLE "blade_code" (
 )
 ;
 COMMENT ON COLUMN "blade_code"."id" IS '主键';
+COMMENT ON COLUMN "blade_code"."datasource_id" IS '数据源主键';
 COMMENT ON COLUMN "blade_code"."service_name" IS '服务名称';
 COMMENT ON COLUMN "blade_code"."code_name" IS '模块名称';
 COMMENT ON COLUMN "blade_code"."table_name" IS '表名';
 COMMENT ON COLUMN "blade_code"."table_prefix" IS '表前缀';
 COMMENT ON COLUMN "blade_code"."pk_name" IS '主键名';
 COMMENT ON COLUMN "blade_code"."package_name" IS '后端包名';
+COMMENT ON COLUMN "blade_code"."base_mode" IS '基础业务模式';
+COMMENT ON COLUMN "blade_code"."wrap_mode" IS '包装器模式';
 COMMENT ON COLUMN "blade_code"."api_path" IS '后端路径';
 COMMENT ON COLUMN "blade_code"."web_path" IS '前端路径';
 COMMENT ON COLUMN "blade_code"."is_deleted" IS '是否已删除';
-COMMENT ON COLUMN "blade_code"."datasource_id" IS '数据源主键';
-COMMENT ON COLUMN "blade_code"."base_mode" IS '基础业务模式';
-COMMENT ON COLUMN "blade_code"."wrap_mode" IS '包装器模式';
 COMMENT ON TABLE "blade_code" IS '代码生成表';
 
 -- ----------------------------
@@ -205,7 +205,7 @@ CREATE TABLE "blade_dict" (
   "id" int8 NOT NULL,
   "parent_id" int8,
   "code" varchar(255) COLLATE "pg_catalog"."default",
-  "dict_key" int4,
+  "dict_key" varchar(255) COLLATE "pg_catalog"."default",
   "dict_value" varchar(255) COLLATE "pg_catalog"."default",
   "sort" int4,
   "remark" varchar(255) COLLATE "pg_catalog"."default",
@@ -228,51 +228,80 @@ COMMENT ON TABLE "blade_dict" IS '字典表';
 -- Records of blade_dict
 -- ----------------------------
 BEGIN;
-INSERT INTO "blade_dict" VALUES (1123598814738675201, 0, 'sex', -1, '性别', 1, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675202, 1123598814738675201, 'sex', 1, '男', 1, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675203, 1123598814738675201, 'sex', 2, '女', 2, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675204, 0, 'notice', -1, '通知类型', 2, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675205, 1123598814738675204, 'notice', 1, '发布通知', 1, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675206, 1123598814738675204, 'notice', 2, '批转通知', 2, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675207, 1123598814738675204, 'notice', 3, '转发通知', 3, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675208, 1123598814738675204, 'notice', 4, '指示通知', 4, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675209, 1123598814738675204, 'notice', 5, '任免通知', 5, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675210, 1123598814738675204, 'notice', 6, '事务通知', 6, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675211, 0, 'menu_category', -1, '菜单类型', 3, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675212, 1123598814738675211, 'menu_category', 1, '菜单', 1, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675213, 1123598814738675211, 'menu_category', 2, '按钮', 2, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675214, 0, 'button_func', -1, '按钮功能', 4, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675215, 1123598814738675214, 'button_func', 1, '工具栏', 1, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675216, 1123598814738675214, 'button_func', 2, '操作栏', 2, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675217, 1123598814738675214, 'button_func', 3, '工具操作栏', 3, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675218, 0, 'yes_no', -1, '是否', 5, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675219, 1123598814738675218, 'yes_no', 1, '否', 1, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675220, 1123598814738675218, 'yes_no', 2, '是', 2, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675221, 0, 'flow', -1, '流程类型', 5, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675222, 1123598814738675221, 'flow', 1, '请假流程', 1, 'leave', 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675223, 1123598814738675221, 'flow', 2, '报销流程', 2, 'expense', 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675227, 0, 'org_category', -1, '机构类型', 7, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675228, 1123598814738675227, 'org_category', 1, '公司', 1, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675229, 1123598814738675227, 'org_category', 2, '部门', 2, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675230, 1123598814738675227, 'org_category', 3, '小组', 3, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675231, 0, 'data_scope_type', -1, '数据权限', 8, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675232, 1123598814738675231, 'data_scope_type', 1, '全部可见', 1, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675233, 1123598814738675231, 'data_scope_type', 2, '本人可见', 2, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675234, 1123598814738675231, 'data_scope_type', 3, '所在机构可见', 3, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675235, 1123598814738675231, 'data_scope_type', 4, '所在机构及子级可见', 4, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675236, 1123598814738675231, 'data_scope_type', 5, '自定义', 5, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675237, 0, 'api_scope_type', -1, '接口权限', 10, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675238, 1123598814738675237, 'api_scope_type', 1, '系统接口', 1, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675239, 1123598814738675237, 'api_scope_type', 2, '业务接口', 2, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675240, 0, 'scope_category', -1, '权限类型', 10, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675241, 1123598814738675240, 'scope_category', 1, '数据权限', 1, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675242, 1123598814738675240, 'scope_category', 2, '接口权限', 2, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738676224, 0, 'oss', -1, '对象存储类型', 6, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738676225, 1123598814738676224, 'oss', 1, 'minio', 1, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738676226, 1123598814738676224, 'oss', 2, 'qiniu', 2, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738676227, 1123598814738676224, 'oss', 3, 'ali', 3, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675201, 0, 'sex', '-1', '性别', 1, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675202, 1123598814738675201, 'sex', '1', '男', 1, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675203, 1123598814738675201, 'sex', '2', '女', 2, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675204, 0, 'notice', '-1', '通知类型', 2, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675205, 1123598814738675204, 'notice', '1', '发布通知', 1, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675206, 1123598814738675204, 'notice', '2', '批转通知', 2, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675207, 1123598814738675204, 'notice', '3', '转发通知', 3, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675208, 1123598814738675204, 'notice', '4', '指示通知', 4, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675209, 1123598814738675204, 'notice', '5', '任免通知', 5, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675210, 1123598814738675204, 'notice', '6', '事务通知', 6, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675211, 0, 'menu_category', '-1', '菜单类型', 3, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675212, 1123598814738675211, 'menu_category', '1', '菜单', 1, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675213, 1123598814738675211, 'menu_category', '2', '按钮', 2, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675214, 0, 'button_func', '-1', '按钮功能', 4, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675215, 1123598814738675214, 'button_func', '1', '工具栏', 1, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675216, 1123598814738675214, 'button_func', '2', '操作栏', 2, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675217, 1123598814738675214, 'button_func', '3', '工具操作栏', 3, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675218, 0, 'yes_no', '-1', '是否', 5, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675219, 1123598814738675218, 'yes_no', '1', '否', 1, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675220, 1123598814738675218, 'yes_no', '2', '是', 2, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675221, 0, 'flow', '-1', '流程类型', 5, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675222, 1123598814738675221, 'flow', '1', '请假流程', 1, 'leave', 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675223, 1123598814738675221, 'flow', '2', '报销流程', 2, 'expense', 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675227, 0, 'org_category', '-1', '机构类型', 7, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675228, 1123598814738675227, 'org_category', '1', '公司', 1, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675229, 1123598814738675227, 'org_category', '2', '部门', 2, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675230, 1123598814738675227, 'org_category', '3', '小组', 3, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675231, 0, 'data_scope_type', '-1', '数据权限', 8, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675232, 1123598814738675231, 'data_scope_type', '1', '全部可见', 1, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675233, 1123598814738675231, 'data_scope_type', '2', '本人可见', 2, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675234, 1123598814738675231, 'data_scope_type', '3', '所在机构可见', 3, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675235, 1123598814738675231, 'data_scope_type', '4', '所在机构及子级可见', 4, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675236, 1123598814738675231, 'data_scope_type', '5', '自定义', 5, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675237, 0, 'api_scope_type', '-1', '接口权限', 10, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675238, 1123598814738675237, 'api_scope_type', '1', '系统接口', 1, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675239, 1123598814738675237, 'api_scope_type', '2', '业务接口', 2, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675240, 0, 'scope_category', '-1', '权限类型', 10, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675241, 1123598814738675240, 'scope_category', '1', '数据权限', 1, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675242, 1123598814738675240, 'scope_category', '2', '接口权限', 2, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738676224, 0, 'oss', '-1', '对象存储类型', 6, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738676225, 1123598814738676224, 'oss', '1', 'minio', 1, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738676226, 1123598814738676224, 'oss', '2', 'qiniu', 2, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738676227, 1123598814738676224, 'oss', '3', 'ali', 3, NULL, 0, 0);
 COMMIT;
 
+-- ----------------------------
+-- Table structure for blade_dict_biz
+-- ----------------------------
+DROP TABLE IF EXISTS "blade_dict_biz";
+CREATE TABLE "blade_dict_biz" (
+  "id" int8 NOT NULL,
+  "tenant_id" varchar(12) COLLATE "pg_catalog"."default",
+  "parent_id" int8,
+  "code" varchar(255) COLLATE "pg_catalog"."default",
+  "dict_key" varchar(255) COLLATE "pg_catalog"."default",
+  "dict_value" varchar(255) COLLATE "pg_catalog"."default",
+  "sort" int4,
+  "remark" varchar(255) COLLATE "pg_catalog"."default",
+  "is_sealed" int4,
+  "is_deleted" int4
+)
+;
+COMMENT ON COLUMN "blade_dict_biz"."id" IS '主键';
+COMMENT ON COLUMN "blade_dict_biz"."tenant_id" IS '租户ID';
+COMMENT ON COLUMN "blade_dict_biz"."parent_id" IS '父主键';
+COMMENT ON COLUMN "blade_dict_biz"."code" IS '字典码';
+COMMENT ON COLUMN "blade_dict_biz"."dict_key" IS '字典值';
+COMMENT ON COLUMN "blade_dict_biz"."dict_value" IS '字典名称';
+COMMENT ON COLUMN "blade_dict_biz"."sort" IS '排序';
+COMMENT ON COLUMN "blade_dict_biz"."remark" IS '字典备注';
+COMMENT ON COLUMN "blade_dict_biz"."is_sealed" IS '是否已封存';
+COMMENT ON COLUMN "blade_dict_biz"."is_deleted" IS '是否已删除';
+COMMENT ON TABLE "blade_dict_biz" IS '业务字典表';
+
 -- ----------------------------
 -- Table structure for blade_log_api
 -- ----------------------------
@@ -456,7 +485,7 @@ INSERT INTO "blade_menu" VALUES (1123598815738675202, 1123598815738675201, 'noti
 INSERT INTO "blade_menu" VALUES (1123598815738675203, 0, 'system', '系统管理', 'menu', '/system', 'iconfont iconicon_setting', 99, 1, 0, 1, NULL, 0);
 INSERT INTO "blade_menu" VALUES (1123598815738675204, 1123598815738675203, 'user', '用户管理', 'menu', '/system/user', 'iconfont iconicon_principal', 1, 1, 0, 1, NULL, 0);
 INSERT INTO "blade_menu" VALUES (1123598815738675205, 1123598815738675203, 'dept', '机构管理', 'menu', '/system/dept', 'iconfont iconicon_group', 2, 1, 0, 1, NULL, 0);
-INSERT INTO "blade_menu" VALUES (1123598815738675206, 1123598815738675203, 'dict', '字典管理', 'menu', '/system/dict', 'iconfont iconicon_addresslist', 3, 1, 0, 1, NULL, 0);
+INSERT INTO "blade_menu" VALUES (1123598815738675206, 1123598815738675203, 'dict', '系统字典', 'menu', '/system/dict', 'iconfont iconicon_addresslist', 3, 1, 0, 1, NULL, 0);
 INSERT INTO "blade_menu" VALUES (1123598815738675207, 1123598815738675203, 'menu', '菜单管理', 'menu', '/system/menu', 'iconfont iconicon_subordinate', 4, 1, 0, 1, NULL, 0);
 INSERT INTO "blade_menu" VALUES (1123598815738675208, 1123598815738675203, 'topmenu', '顶部菜单', 'menu', '/system/topmenu', 'iconfont icon-canshu', 5, 1, 0, 1, NULL, 0);
 INSERT INTO "blade_menu" VALUES (1123598815738675209, 1123598815738675203, 'param', '参数管理', 'menu', '/system/param', 'iconfont iconicon_community_line', 6, 1, 0, 1, NULL, 0);
@@ -571,20 +600,18 @@ INSERT INTO "blade_menu" VALUES (1161272593873321992, 1161272593873321991, 'data
 INSERT INTO "blade_menu" VALUES (1161272593873321993, 1161272593873321991, 'datasource_edit', '修改', 'edit', '/tool/datasource/edit', 'form', 2, 2, 2, 2, NULL, 0);
 INSERT INTO "blade_menu" VALUES (1161272593873321994, 1161272593873321991, 'datasource_delete', '删除', 'delete', '/api/blade-develop/datasource/remove', 'delete', 3, 2, 3, 3, NULL, 0);
 INSERT INTO "blade_menu" VALUES (1161272593873321995, 1161272593873321991, 'datasource_view', '查看', 'view', '/tool/datasource/view', 'file-text', 4, 2, 2, 2, NULL, 0);
-INSERT INTO "blade_menu"("id", "parent_id", "code", "name", "alias", "path", "source", "sort", "category", "action", "is_open", "remark", "is_deleted")
-VALUES ('1164733121140551682', '1123598815738675217', 'form', '表单设计', 'form', 'https://form.avuejs.com/', 'iconfont iconicon_compile', 3, 1, 0, 2, '', 0);
-INSERT INTO "blade_menu"("id", "parent_id", "code", "name", "alias", "path", "source", "sort", "category", "action", "is_open", "remark", "is_deleted")
-VALUES ('1164733349637844993', '1123598815738675217', 'crud', '表格设计', 'crud', 'https://crud.avuejs.com/', 'iconfont iconicon_work', 4, 1, 0, 2, '', 0);
-INSERT INTO "blade_menu"("id", "parent_id", "code", "name", "alias", "path", "source", "sort", "category", "action", "is_open", "remark", "is_deleted")
-VALUES ('1164733369658963251', '1123598815738675210', 'elk', 'ELK监控', 'menu', 'http://localhost:5601/', 'iconfont iconicon_cspace', 3, 1, 0, 2, '', 0);
-INSERT INTO "blade_menu"("id", "parent_id", "code", "name", "alias", "path", "source", "sort", "category", "action", "is_open", "remark", "is_deleted")
-VALUES ('1164733369658963252', '1123598815738675210', 'zipkin', 'Zipkin监控', 'menu', 'http://localhost:9411/', 'iconfont iconicon_task', 4, 1, 0, 2, '', 0);
-INSERT INTO "blade_menu"("id", "parent_id", "code", "name", "alias", "path", "source", "sort", "category", "action", "is_open", "remark", "is_deleted")
-VALUES ('1164733369658963253', '1123598815738675210', 'turbine', 'Turbine监控', 'menu', 'http://localhost:7003/hystrix', 'iconfont iconicon_subordinate', 5, 1, 0, 2, '', 0);
-INSERT INTO "blade_menu"("id", "parent_id", "code", "name", "alias", "path", "source", "sort", "category", "action", "is_open", "remark", "is_deleted")
-VALUES ('1164733369658963254', '1123598815738675210', 'sentinel', 'Sentinel管理', 'menu', 'http://localhost:8858', 'iconfont iconicon_safety', 6, 1, 0, 2, '', 0);
-INSERT INTO "blade_menu"("id", "parent_id", "code", "name", "alias", "path", "source", "sort", "category", "action", "is_open", "remark", "is_deleted")
-VALUES ('1164733369658963255', '1123598815738675210', 'es', 'Elasticsearch管理', 'menu', 'http://localhost:9100/', 'iconfont iconfont iconicon_search', 7, 1, 0, 2, '', 0);
+INSERT INTO "blade_menu" VALUES (1164733121140551682, 1123598815738675217, 'form', '表单设计', 'form', 'https://form.avuejs.com/', 'iconfont iconicon_compile', 3, 1, 0, 2, '', 0);
+INSERT INTO "blade_menu" VALUES (1164733349637844993, 1123598815738675217, 'crud', '表格设计', 'crud', 'https://crud.avuejs.com/', 'iconfont iconicon_work', 4, 1, 0, 2, '', 0);
+INSERT INTO "blade_menu" VALUES (1164733369658963251, 1123598815738675210, 'elk', 'ELK监控', 'menu', 'http://localhost:5601/', 'iconfont iconicon_cspace', 3, 1, 0, 2, '', 0);
+INSERT INTO "blade_menu" VALUES (1164733369658963252, 1123598815738675210, 'zipkin', 'Zipkin监控', 'menu', 'http://localhost:9411/', 'iconfont iconicon_task', 4, 1, 0, 2, '', 0);
+INSERT INTO "blade_menu" VALUES (1164733369658963253, 1123598815738675210, 'turbine', 'Turbine监控', 'menu', 'http://localhost:7003/hystrix', 'iconfont iconicon_subordinate', 5, 1, 0, 2, '', 0);
+INSERT INTO "blade_menu" VALUES (1164733369658963254, 1123598815738675210, 'sentinel', 'Sentinel管理', 'menu', 'http://localhost:8858', 'iconfont iconicon_safety', 6, 1, 0, 2, '', 0);
+INSERT INTO "blade_menu" VALUES (1164733369658963255, 1123598815738675210, 'es', 'Elasticsearch管理', 'menu', 'http://localhost:9100/', 'iconfont iconfont iconicon_search', 7, 1, 0, 2, '', 0);
+INSERT INTO "blade_menu" VALUES (1164733379658963251, 1123598815738675203, 'dictbiz', '业务字典', 'menu', '/system/dictbiz', 'iconfont iconicon_study', 3, 1, 0, 1, '', 0);
+INSERT INTO "blade_menu" VALUES (1164733379658963252, 1164733379658963251, 'dictbiz_add', '新增', 'add', '/system/dictbiz/add', 'plus', 1, 2, 2, 1, '', 0);
+INSERT INTO "blade_menu" VALUES (1164733379658963253, 1164733379658963251, 'dictbiz_edit', '修改', 'edit', '/system/dictbiz/edit', 'form', 2, 2, 1, 1, '', 0);
+INSERT INTO "blade_menu" VALUES (1164733379658963254, 1164733379658963251, 'dictbiz_delete', '删除', 'delete', '/api/blade-system/dict-biz/remove', 'delete', 3, 2, 0, 1, '', 0);
+INSERT INTO "blade_menu" VALUES (1164733379658963255, 1164733379658963251, 'dictbiz_view', '查看', 'view', '/system/dictbiz/view', 'file-text', 4, 2, 3, 1, '', 0);
 COMMIT;
 
 -- ----------------------------
@@ -1028,20 +1055,18 @@ INSERT INTO "blade_role_menu" VALUES (1161272593873322992, 1161272593873321992,
 INSERT INTO "blade_role_menu" VALUES (1161272593873322993, 1161272593873321993, 1123598816738675201);
 INSERT INTO "blade_role_menu" VALUES (1161272593873322994, 1161272593873321994, 1123598816738675201);
 INSERT INTO "blade_role_menu" VALUES (1161272593873322995, 1161272593873321995, 1123598816738675201);
-INSERT INTO "blade_role_menu"("id","menu_id","role_id")
-VALUES ('1161272593873322996', '1164733121140551682', '1123598816738675201');
-INSERT INTO "blade_role_menu"("id","menu_id","role_id")
-VALUES ('1161272593873322997', '1164733349637844993', '1123598816738675201');
-INSERT INTO "blade_role_menu"("id","menu_id","role_id")
-VALUES ('1161272693873322991', '1164733369658963251', '1123598816738675201');
-INSERT INTO "blade_role_menu"("id","menu_id","role_id")
-VALUES ('1161272693873322992', '1164733369658963252', '1123598816738675201');
-INSERT INTO "blade_role_menu"("id","menu_id","role_id")
-VALUES ('1161272693873322993', '1164733369658963253', '1123598816738675201');
-INSERT INTO "blade_role_menu"("id","menu_id","role_id")
-VALUES ('1161272693873322994', '1164733369658963254', '1123598816738675201');
-INSERT INTO "blade_role_menu"("id","menu_id","role_id")
-VALUES ('1161272693873322995', '1164733369658963255', '1123598816738675201');
+INSERT INTO "blade_role_menu" VALUES (1161272593873322996, 1164733121140551682, 1123598816738675201);
+INSERT INTO "blade_role_menu" VALUES (1161272593873322997, 1164733349637844993, 1123598816738675201);
+INSERT INTO "blade_role_menu" VALUES (1161272693873322991, 1164733369658963251, 1123598816738675201);
+INSERT INTO "blade_role_menu" VALUES (1161272693873322992, 1164733369658963252, 1123598816738675201);
+INSERT INTO "blade_role_menu" VALUES (1161272693873322993, 1164733369658963253, 1123598816738675201);
+INSERT INTO "blade_role_menu" VALUES (1161272693873322994, 1164733369658963254, 1123598816738675201);
+INSERT INTO "blade_role_menu" VALUES (1161272693873322995, 1164733369658963255, 1123598816738675201);
+INSERT INTO "blade_role_menu" VALUES (1161272793873322991, 1164733379658963251, 1123598816738675201);
+INSERT INTO "blade_role_menu" VALUES (1161272793873322992, 116473337658963252, 1123598816738675201);
+INSERT INTO "blade_role_menu" VALUES (1161272793873322993, 1164733379658963253, 1123598816738675201);
+INSERT INTO "blade_role_menu" VALUES (1161272793873322994, 1164733379658963254, 1123598816738675201);
+INSERT INTO "blade_role_menu" VALUES (1161272793873322995, 1164733379658963255, 1123598816738675201);
 COMMIT;
 
 -- ----------------------------
@@ -1317,6 +1342,11 @@ ALTER TABLE "blade_dept" ADD CONSTRAINT "blade_dept_pkey" PRIMARY KEY ("id");
 -- ----------------------------
 ALTER TABLE "blade_dict" ADD CONSTRAINT "blade_dict_pkey" PRIMARY KEY ("id");
 
+-- ----------------------------
+-- Primary Key structure for table blade_dict_biz
+-- ----------------------------
+ALTER TABLE "blade_dict_biz" ADD CONSTRAINT "blade_dict_biz_pkey" PRIMARY KEY ("id");
+
 -- ----------------------------
 -- Primary Key structure for table blade_log_api
 -- ----------------------------

+ 152 - 123
doc/sql/postgresql/bladex-sword-postgresql.sql

@@ -12,7 +12,7 @@
  Target Server Version : 110001
  File Encoding         : 65001
 
- Date: 16/08/2019 23:01:18
+ Date: 03/12/2019 15:26:43
 */
 
 
@@ -92,18 +92,18 @@ CREATE TABLE "blade_code" (
 )
 ;
 COMMENT ON COLUMN "blade_code"."id" IS '主键';
+COMMENT ON COLUMN "blade_code"."datasource_id" IS '数据源主键';
 COMMENT ON COLUMN "blade_code"."service_name" IS '服务名称';
 COMMENT ON COLUMN "blade_code"."code_name" IS '模块名称';
 COMMENT ON COLUMN "blade_code"."table_name" IS '表名';
 COMMENT ON COLUMN "blade_code"."table_prefix" IS '表前缀';
 COMMENT ON COLUMN "blade_code"."pk_name" IS '主键名';
 COMMENT ON COLUMN "blade_code"."package_name" IS '后端包名';
+COMMENT ON COLUMN "blade_code"."base_mode" IS '基础业务模式';
+COMMENT ON COLUMN "blade_code"."wrap_mode" IS '包装器模式';
 COMMENT ON COLUMN "blade_code"."api_path" IS '后端路径';
 COMMENT ON COLUMN "blade_code"."web_path" IS '前端路径';
 COMMENT ON COLUMN "blade_code"."is_deleted" IS '是否已删除';
-COMMENT ON COLUMN "blade_code"."datasource_id" IS '数据源主键';
-COMMENT ON COLUMN "blade_code"."base_mode" IS '基础业务模式';
-COMMENT ON COLUMN "blade_code"."wrap_mode" IS '包装器模式';
 COMMENT ON TABLE "blade_code" IS '代码生成表';
 
 -- ----------------------------
@@ -202,15 +202,15 @@ COMMIT;
 -- ----------------------------
 DROP TABLE IF EXISTS "blade_dict";
 CREATE TABLE "blade_dict" (
-"id" int8 NOT NULL,
-"parent_id" int8,
-"code" varchar(255) COLLATE "pg_catalog"."default",
-"dict_key" int4,
-"dict_value" varchar(255) COLLATE "pg_catalog"."default",
-"sort" int4,
-"remark" varchar(255) COLLATE "pg_catalog"."default",
-"is_sealed" int4,
-"is_deleted" int4
+  "id" int8 NOT NULL,
+  "parent_id" int8,
+  "code" varchar(255) COLLATE "pg_catalog"."default",
+  "dict_key" varchar(255) COLLATE "pg_catalog"."default",
+  "dict_value" varchar(255) COLLATE "pg_catalog"."default",
+  "sort" int4,
+  "remark" varchar(255) COLLATE "pg_catalog"."default",
+  "is_sealed" int4,
+  "is_deleted" int4
 )
 ;
 COMMENT ON COLUMN "blade_dict"."id" IS '主键';
@@ -228,51 +228,79 @@ COMMENT ON TABLE "blade_dict" IS '字典表';
 -- Records of blade_dict
 -- ----------------------------
 BEGIN;
-INSERT INTO "blade_dict" VALUES (1123598814738675201, 0, 'sex', -1, '性别', 1, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675202, 1123598814738675201, 'sex', 1, '男', 1, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675203, 1123598814738675201, 'sex', 2, '女', 2, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675204, 0, 'notice', -1, '通知类型', 2, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675205, 1123598814738675204, 'notice', 1, '发布通知', 1, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675206, 1123598814738675204, 'notice', 2, '批转通知', 2, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675207, 1123598814738675204, 'notice', 3, '转发通知', 3, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675208, 1123598814738675204, 'notice', 4, '指示通知', 4, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675209, 1123598814738675204, 'notice', 5, '任免通知', 5, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675210, 1123598814738675204, 'notice', 6, '事务通知', 6, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675211, 0, 'menu_category', -1, '菜单类型', 3, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675212, 1123598814738675211, 'menu_category', 1, '菜单', 1, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675213, 1123598814738675211, 'menu_category', 2, '按钮', 2, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675214, 0, 'button_func', -1, '按钮功能', 4, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675215, 1123598814738675214, 'button_func', 1, '工具栏', 1, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675216, 1123598814738675214, 'button_func', 2, '操作栏', 2, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675217, 1123598814738675214, 'button_func', 3, '工具操作栏', 3, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675218, 0, 'yes_no', -1, '是否', 5, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675219, 1123598814738675218, 'yes_no', 1, '否', 1, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675220, 1123598814738675218, 'yes_no', 2, '是', 2, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675221, 0, 'flow', -1, '流程类型', 5, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675222, 1123598814738675221, 'flow', 1, '请假流程', 1, 'leave', 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675223, 1123598814738675221, 'flow', 2, '报销流程', 2, 'expense', 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675227, 0, 'org_category', -1, '机构类型', 7, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675228, 1123598814738675227, 'org_category', 1, '公司', 1, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675229, 1123598814738675227, 'org_category', 2, '部门', 2, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675230, 1123598814738675227, 'org_category', 3, '小组', 3, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675231, 0, 'data_scope_type', -1, '数据权限', 8, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675232, 1123598814738675231, 'data_scope_type', 1, '全部可见', 1, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675233, 1123598814738675231, 'data_scope_type', 2, '本人可见', 2, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675234, 1123598814738675231, 'data_scope_type', 3, '所在机构可见', 3, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675235, 1123598814738675231, 'data_scope_type', 4, '所在机构及子级可见', 4, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675236, 1123598814738675231, 'data_scope_type', 5, '自定义', 5, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675237, 0, 'api_scope_type', -1, '接口权限', 10, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675238, 1123598814738675237, 'api_scope_type', 1, '系统接口', 1, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675239, 1123598814738675237, 'api_scope_type', 2, '业务接口', 2, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675240, 0, 'scope_category', -1, '权限类型', 10, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675241, 1123598814738675240, 'scope_category', 1, '数据权限', 1, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738675242, 1123598814738675240, 'scope_category', 2, '接口权限', 2, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738676224, 0, 'oss', -1, '对象存储类型', 6, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738676225, 1123598814738676224, 'oss', 1, 'minio', 1, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738676226, 1123598814738676224, 'oss', 2, 'qiniu', 2, NULL, 0, 0);
-INSERT INTO "blade_dict" VALUES (1123598814738676227, 1123598814738676224, 'oss', 3, 'ali', 3, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675201, 0, 'sex', '-1', '性别', 1, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675202, 1123598814738675201, 'sex', '1', '男', 1, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675203, 1123598814738675201, 'sex', '2', '女', 2, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675204, 0, 'notice', '-1', '通知类型', 2, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675205, 1123598814738675204, 'notice', '1', '发布通知', 1, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675206, 1123598814738675204, 'notice', '2', '批转通知', 2, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675207, 1123598814738675204, 'notice', '3', '转发通知', 3, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675208, 1123598814738675204, 'notice', '4', '指示通知', 4, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675209, 1123598814738675204, 'notice', '5', '任免通知', 5, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675210, 1123598814738675204, 'notice', '6', '事务通知', 6, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675211, 0, 'menu_category', '-1', '菜单类型', 3, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675212, 1123598814738675211, 'menu_category', '1', '菜单', 1, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675213, 1123598814738675211, 'menu_category', '2', '按钮', 2, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675214, 0, 'button_func', '-1', '按钮功能', 4, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675215, 1123598814738675214, 'button_func', '1', '工具栏', 1, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675216, 1123598814738675214, 'button_func', '2', '操作栏', 2, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675217, 1123598814738675214, 'button_func', '3', '工具操作栏', 3, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675218, 0, 'yes_no', '-1', '是否', 5, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675219, 1123598814738675218, 'yes_no', '1', '否', 1, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675220, 1123598814738675218, 'yes_no', '2', '是', 2, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675221, 0, 'flow', '-1', '流程类型', 5, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675222, 1123598814738675221, 'flow', '1', '请假流程', 1, 'leave', 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675223, 1123598814738675221, 'flow', '2', '报销流程', 2, 'expense', 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675227, 0, 'org_category', '-1', '机构类型', 7, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675228, 1123598814738675227, 'org_category', '1', '公司', 1, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675229, 1123598814738675227, 'org_category', '2', '部门', 2, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675230, 1123598814738675227, 'org_category', '3', '小组', 3, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675231, 0, 'data_scope_type', '-1', '数据权限', 8, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675232, 1123598814738675231, 'data_scope_type', '1', '全部可见', 1, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675233, 1123598814738675231, 'data_scope_type', '2', '本人可见', 2, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675234, 1123598814738675231, 'data_scope_type', '3', '所在机构可见', 3, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675235, 1123598814738675231, 'data_scope_type', '4', '所在机构及子级可见', 4, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675236, 1123598814738675231, 'data_scope_type', '5', '自定义', 5, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675237, 0, 'api_scope_type', '-1', '接口权限', 10, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675238, 1123598814738675237, 'api_scope_type', '1', '系统接口', 1, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675239, 1123598814738675237, 'api_scope_type', '2', '业务接口', 2, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675240, 0, 'scope_category', '-1', '权限类型', 10, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675241, 1123598814738675240, 'scope_category', '1', '数据权限', 1, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738675242, 1123598814738675240, 'scope_category', '2', '接口权限', 2, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738676224, 0, 'oss', '-1', '对象存储类型', 6, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738676225, 1123598814738676224, 'oss', '1', 'minio', 1, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738676226, 1123598814738676224, 'oss', '2', 'qiniu', 2, NULL, 0, 0);
+INSERT INTO "blade_dict" VALUES (1123598814738676227, 1123598814738676224, 'oss', '3', 'ali', 3, NULL, 0, 0);
 COMMIT;
 
+-- ----------------------------
+-- Table structure for blade_dict_biz
+-- ----------------------------
+DROP TABLE IF EXISTS "blade_dict_biz";
+CREATE TABLE "blade_dict_biz" (
+  "id" int8 NOT NULL,
+  "tenant_id" varchar(12) COLLATE "pg_catalog"."default",
+  "parent_id" int8,
+  "code" varchar(255) COLLATE "pg_catalog"."default",
+  "dict_key" varchar(255) COLLATE "pg_catalog"."default",
+  "dict_value" varchar(255) COLLATE "pg_catalog"."default",
+  "sort" int4,
+  "remark" varchar(255) COLLATE "pg_catalog"."default",
+  "is_sealed" int4,
+  "is_deleted" int4
+)
+;
+COMMENT ON COLUMN "blade_dict_biz"."id" IS '主键';
+COMMENT ON COLUMN "blade_dict_biz"."tenant_id" IS '租户ID';
+COMMENT ON COLUMN "blade_dict_biz"."parent_id" IS '父主键';
+COMMENT ON COLUMN "blade_dict_biz"."code" IS '字典码';
+COMMENT ON COLUMN "blade_dict_biz"."dict_key" IS '字典值';
+COMMENT ON COLUMN "blade_dict_biz"."dict_value" IS '字典名称';
+COMMENT ON COLUMN "blade_dict_biz"."sort" IS '排序';
+COMMENT ON COLUMN "blade_dict_biz"."remark" IS '字典备注';
+COMMENT ON COLUMN "blade_dict_biz"."is_sealed" IS '是否已封存';
+COMMENT ON COLUMN "blade_dict_biz"."is_deleted" IS '是否已删除';
+COMMENT ON TABLE "blade_dict_biz" IS '业务字典表';
 
 -- ----------------------------
 -- Table structure for blade_log_api
@@ -324,26 +352,26 @@ COMMENT ON TABLE "blade_log_api" IS '接口日志表';
 -- ----------------------------
 DROP TABLE IF EXISTS "blade_log_error";
 CREATE TABLE "blade_log_error" (
-   "id" int8 NOT NULL,
-   "tenant_id" varchar(12) COLLATE "pg_catalog"."default",
-   "service_id" varchar(32) COLLATE "pg_catalog"."default",
-   "server_host" varchar(255) COLLATE "pg_catalog"."default",
-   "server_ip" varchar(255) COLLATE "pg_catalog"."default",
-   "env" varchar(255) COLLATE "pg_catalog"."default",
-   "method" varchar(10) COLLATE "pg_catalog"."default",
-   "request_uri" varchar(255) COLLATE "pg_catalog"."default",
-   "user_agent" varchar(1000) COLLATE "pg_catalog"."default",
-   "stack_trace" text COLLATE "pg_catalog"."default",
-   "exception_name" varchar(255) COLLATE "pg_catalog"."default",
-   "message" text COLLATE "pg_catalog"."default",
-   "line_number" int4,
-   "remote_ip" varchar(255) COLLATE "pg_catalog"."default",
-   "method_class" varchar(255) COLLATE "pg_catalog"."default",
-   "file_name" varchar(1000) COLLATE "pg_catalog"."default",
-   "method_name" varchar(255) COLLATE "pg_catalog"."default",
-   "params" text COLLATE "pg_catalog"."default",
-   "create_by" varchar(64) COLLATE "pg_catalog"."default",
-   "create_time" timestamp(6)
+  "id" int8 NOT NULL,
+  "tenant_id" varchar(12) COLLATE "pg_catalog"."default",
+  "service_id" varchar(32) COLLATE "pg_catalog"."default",
+  "server_host" varchar(255) COLLATE "pg_catalog"."default",
+  "server_ip" varchar(255) COLLATE "pg_catalog"."default",
+  "env" varchar(255) COLLATE "pg_catalog"."default",
+  "method" varchar(10) COLLATE "pg_catalog"."default",
+  "request_uri" varchar(255) COLLATE "pg_catalog"."default",
+  "user_agent" varchar(1000) COLLATE "pg_catalog"."default",
+  "stack_trace" text COLLATE "pg_catalog"."default",
+  "exception_name" varchar(255) COLLATE "pg_catalog"."default",
+  "message" text COLLATE "pg_catalog"."default",
+  "line_number" int4,
+  "remote_ip" varchar(255) COLLATE "pg_catalog"."default",
+  "method_class" varchar(255) COLLATE "pg_catalog"."default",
+  "file_name" varchar(1000) COLLATE "pg_catalog"."default",
+  "method_name" varchar(255) COLLATE "pg_catalog"."default",
+  "params" text COLLATE "pg_catalog"."default",
+  "create_by" varchar(64) COLLATE "pg_catalog"."default",
+  "create_time" timestamp(6)
 )
 ;
 COMMENT ON COLUMN "blade_log_error"."id" IS '编号';
@@ -373,24 +401,24 @@ COMMENT ON TABLE "blade_log_error" IS '错误日志表';
 -- ----------------------------
 DROP TABLE IF EXISTS "blade_log_usual";
 CREATE TABLE "blade_log_usual" (
-   "id" int8 NOT NULL,
-   "tenant_id" varchar(12) COLLATE "pg_catalog"."default",
-   "service_id" varchar(32) COLLATE "pg_catalog"."default",
-   "server_host" varchar(255) COLLATE "pg_catalog"."default",
-   "server_ip" varchar(255) COLLATE "pg_catalog"."default",
-   "env" varchar(255) COLLATE "pg_catalog"."default",
-   "log_level" varchar(10) COLLATE "pg_catalog"."default",
-   "log_id" varchar(100) COLLATE "pg_catalog"."default",
-   "log_data" text COLLATE "pg_catalog"."default",
-   "method" varchar(10) COLLATE "pg_catalog"."default",
-   "request_uri" varchar(255) COLLATE "pg_catalog"."default",
-   "remote_ip" varchar(255) COLLATE "pg_catalog"."default",
-   "method_class" varchar(255) COLLATE "pg_catalog"."default",
-   "method_name" varchar(255) COLLATE "pg_catalog"."default",
-   "user_agent" varchar(1000) COLLATE "pg_catalog"."default",
-   "params" text COLLATE "pg_catalog"."default",
-   "create_by" varchar(64) COLLATE "pg_catalog"."default",
-   "create_time" timestamp(6)
+  "id" int8 NOT NULL,
+  "tenant_id" varchar(12) COLLATE "pg_catalog"."default",
+  "service_id" varchar(32) COLLATE "pg_catalog"."default",
+  "server_host" varchar(255) COLLATE "pg_catalog"."default",
+  "server_ip" varchar(255) COLLATE "pg_catalog"."default",
+  "env" varchar(255) COLLATE "pg_catalog"."default",
+  "log_level" varchar(10) COLLATE "pg_catalog"."default",
+  "log_id" varchar(100) COLLATE "pg_catalog"."default",
+  "log_data" text COLLATE "pg_catalog"."default",
+  "method" varchar(10) COLLATE "pg_catalog"."default",
+  "request_uri" varchar(255) COLLATE "pg_catalog"."default",
+  "remote_ip" varchar(255) COLLATE "pg_catalog"."default",
+  "method_class" varchar(255) COLLATE "pg_catalog"."default",
+  "method_name" varchar(255) COLLATE "pg_catalog"."default",
+  "user_agent" varchar(1000) COLLATE "pg_catalog"."default",
+  "params" text COLLATE "pg_catalog"."default",
+  "create_by" varchar(64) COLLATE "pg_catalog"."default",
+  "create_time" timestamp(6)
 )
 ;
 COMMENT ON COLUMN "blade_log_usual"."id" IS '编号';
@@ -457,7 +485,7 @@ INSERT INTO "blade_menu" VALUES (1123598815738675202, 1123598815738675201, 'noti
 INSERT INTO "blade_menu" VALUES (1123598815738675203, 0, 'system', '系统管理', 'menu', '/system', 'setting', 99, 1, 0, 1, NULL, 0);
 INSERT INTO "blade_menu" VALUES (1123598815738675204, 1123598815738675203, 'user', '用户管理', 'menu', '/system/user', NULL, 1, 1, 0, 1, NULL, 0);
 INSERT INTO "blade_menu" VALUES (1123598815738675205, 1123598815738675203, 'dept', '机构管理', 'menu', '/system/dept', NULL, 2, 1, 0, 1, NULL, 0);
-INSERT INTO "blade_menu" VALUES (1123598815738675206, 1123598815738675203, 'dict', '字典管理', 'menu', '/system/dict', NULL, 3, 1, 0, 1, NULL, 0);
+INSERT INTO "blade_menu" VALUES (1123598815738675206, 1123598815738675203, 'dict', '系统字典', 'menu', '/system/dict', NULL, 3, 1, 0, 1, NULL, 0);
 INSERT INTO "blade_menu" VALUES (1123598815738675207, 1123598815738675203, 'menu', '菜单管理', 'menu', '/system/menu', NULL, 4, 1, 0, 1, NULL, 0);
 INSERT INTO "blade_menu" VALUES (1123598815738675208, 1123598815738675203, 'topmenu', '顶部菜单', 'menu', '/system/topmenu', '', 5, 1, 0, 1, NULL, 0);
 INSERT INTO "blade_menu" VALUES (1123598815738675209, 1123598815738675203, 'param', '参数管理', 'menu', '/system/param', NULL, 6, 1, 0, 1, NULL, 0);
@@ -572,20 +600,18 @@ INSERT INTO "blade_menu" VALUES (1161272593873321992, 1161272593873321991, 'data
 INSERT INTO "blade_menu" VALUES (1161272593873321993, 1161272593873321991, 'datasource_edit', '修改', 'edit', '/tool/datasource/edit', 'form', 2, 2, 2, 2, NULL, 0);
 INSERT INTO "blade_menu" VALUES (1161272593873321994, 1161272593873321991, 'datasource_delete', '删除', 'delete', '/api/blade-develop/datasource/remove', 'delete', 3, 2, 3, 3, NULL, 0);
 INSERT INTO "blade_menu" VALUES (1161272593873321995, 1161272593873321991, 'datasource_view', '查看', 'view', '/tool/datasource/view', 'file-text', 4, 2, 2, 2, NULL, 0);
-INSERT INTO "blade_menu"("id", "parent_id", "code", "name", "alias", "path", "source", "sort", "category", "action", "is_open", "remark", "is_deleted")
-VALUES ('1164733121140551682', '1123598815738675217', 'form', '表单设计', 'form', 'https://form.avuejs.com/', '', 3, 1, 0, 2, '', 0);
-INSERT INTO "blade_menu"("id", "parent_id", "code", "name", "alias", "path", "source", "sort", "category", "action", "is_open", "remark", "is_deleted")
-VALUES ('1164733349637844993', '1123598815738675217', 'crud', '表格设计', 'crud', 'https://crud.avuejs.com/', '', 4, 1, 0, 2, '', 0);
-INSERT INTO "blade_menu"("id", "parent_id", "code", "name", "alias", "path", "source", "sort", "category", "action", "is_open", "remark", "is_deleted")
-VALUES ('1164733369658963251', '1123598815738675210', 'elk', 'ELK监控', 'menu', 'http://localhost:5601/', '', 3, 1, 0, 2, '', 0);
-INSERT INTO "blade_menu"("id", "parent_id", "code", "name", "alias", "path", "source", "sort", "category", "action", "is_open", "remark", "is_deleted")
-VALUES ('1164733369658963252', '1123598815738675210', 'zipkin', 'Zipkin监控', 'menu', 'http://localhost:9411/', '', 4, 1, 0, 2, '', 0);
-INSERT INTO "blade_menu"("id", "parent_id", "code", "name", "alias", "path", "source", "sort", "category", "action", "is_open", "remark", "is_deleted")
-VALUES ('1164733369658963253', '1123598815738675210', 'turbine', 'Turbine监控', 'menu', 'http://localhost:7003/hystrix', '', 5, 1, 0, 2, '', 0);
-INSERT INTO "blade_menu"("id", "parent_id", "code", "name", "alias", "path", "source", "sort", "category", "action", "is_open", "remark", "is_deleted")
-VALUES ('1164733369658963254', '1123598815738675210', 'sentinel', 'Sentinel管理', 'menu', 'http://localhost:8858', '', 6, 1, 0, 2, '', 0);
-INSERT INTO "blade_menu"("id", "parent_id", "code", "name", "alias", "path", "source", "sort", "category", "action", "is_open", "remark", "is_deleted")
-VALUES ('1164733369658963255', '1123598815738675210', 'es', 'Elasticsearch管理', 'menu', 'http://localhost:9100/', '', 7, 1, 0, 2, '', 0);
+INSERT INTO "blade_menu" VALUES (1164733121140551682, 1123598815738675217, 'form', '表单设计', 'form', 'https://form.avuejs.com/', '', 3, 1, 0, 2, '', 0);
+INSERT INTO "blade_menu" VALUES (1164733349637844993, 1123598815738675217, 'crud', '表格设计', 'crud', 'https://crud.avuejs.com/', '', 4, 1, 0, 2, '', 0);
+INSERT INTO "blade_menu" VALUES (1164733369658963251, 1123598815738675210, 'elk', 'ELK监控', 'menu', 'http://localhost:5601/', '', 3, 1, 0, 2, '', 0);
+INSERT INTO "blade_menu" VALUES (1164733369658963252, 1123598815738675210, 'zipkin', 'Zipkin监控', 'menu', 'http://localhost:9411/', '', 4, 1, 0, 2, '', 0);
+INSERT INTO "blade_menu" VALUES (1164733369658963253, 1123598815738675210, 'turbine', 'Turbine监控', 'menu', 'http://localhost:7003/hystrix', '', 5, 1, 0, 2, '', 0);
+INSERT INTO "blade_menu" VALUES (1164733369658963254, 1123598815738675210, 'sentinel', 'Sentinel管理', 'menu', 'http://localhost:8858', '', 6, 1, 0, 2, '', 0);
+INSERT INTO "blade_menu" VALUES (1164733369658963255, 1123598815738675210, 'es', 'Elasticsearch管理', 'menu', 'http://localhost:9100/', '', 7, 1, 0, 2, '', 0);
+INSERT INTO "blade_menu" VALUES (1164733379658963251, 1123598815738675203, 'dictbiz', '业务字典', 'menu', '/system/dictbiz', '', 3, 1, 0, 1, '', 0);
+INSERT INTO "blade_menu" VALUES (1164733379658963252, 1164733379658963251, 'dictbiz_add', '新增', 'add', '/system/dictbiz/add', 'plus', 1, 2, 2, 1, '', 0);
+INSERT INTO "blade_menu" VALUES (1164733379658963253, 1164733379658963251, 'dictbiz_edit', '修改', 'edit', '/system/dictbiz/edit', 'form', 2, 2, 1, 1, '', 0);
+INSERT INTO "blade_menu" VALUES (1164733379658963254, 1164733379658963251, 'dictbiz_delete', '删除', 'delete', '/api/blade-system/dict-biz/remove', 'delete', 3, 2, 0, 1, '', 0);
+INSERT INTO "blade_menu" VALUES (1164733379658963255, 1164733379658963251, 'dictbiz_view', '查看', 'view', '/system/dictbiz/view', 'file-text', 4, 2, 3, 1, '', 0);
 COMMIT;
 
 -- ----------------------------
@@ -1029,20 +1055,18 @@ INSERT INTO "blade_role_menu" VALUES (1161272593873322992, 1161272593873321992,
 INSERT INTO "blade_role_menu" VALUES (1161272593873322993, 1161272593873321993, 1123598816738675201);
 INSERT INTO "blade_role_menu" VALUES (1161272593873322994, 1161272593873321994, 1123598816738675201);
 INSERT INTO "blade_role_menu" VALUES (1161272593873322995, 1161272593873321995, 1123598816738675201);
-INSERT INTO "blade_role_menu"("id","menu_id","role_id")
-VALUES ('1161272593873322996', '1164733121140551682', '1123598816738675201');
-INSERT INTO "blade_role_menu"("id","menu_id","role_id")
-VALUES ('1161272593873322997', '1164733349637844993', '1123598816738675201');
-INSERT INTO "blade_role_menu"("id","menu_id","role_id")
-VALUES ('1161272693873322991', '1164733369658963251', '1123598816738675201');
-INSERT INTO "blade_role_menu"("id","menu_id","role_id")
-VALUES ('1161272693873322992', '1164733369658963252', '1123598816738675201');
-INSERT INTO "blade_role_menu"("id","menu_id","role_id")
-VALUES ('1161272693873322993', '1164733369658963253', '1123598816738675201');
-INSERT INTO "blade_role_menu"("id","menu_id","role_id")
-VALUES ('1161272693873322994', '1164733369658963254', '1123598816738675201');
-INSERT INTO "blade_role_menu"("id","menu_id","role_id")
-VALUES ('1161272693873322995', '1164733369658963255', '1123598816738675201');
+INSERT INTO "blade_role_menu" VALUES (1161272593873322996, 1164733121140551682, 1123598816738675201);
+INSERT INTO "blade_role_menu" VALUES (1161272593873322997, 1164733349637844993, 1123598816738675201);
+INSERT INTO "blade_role_menu" VALUES (1161272693873322991, 1164733369658963251, 1123598816738675201);
+INSERT INTO "blade_role_menu" VALUES (1161272693873322992, 1164733369658963252, 1123598816738675201);
+INSERT INTO "blade_role_menu" VALUES (1161272693873322993, 1164733369658963253, 1123598816738675201);
+INSERT INTO "blade_role_menu" VALUES (1161272693873322994, 1164733369658963254, 1123598816738675201);
+INSERT INTO "blade_role_menu" VALUES (1161272693873322995, 1164733369658963255, 1123598816738675201);
+INSERT INTO "blade_role_menu" VALUES (1161272793873322991, 1164733379658963251, 1123598816738675201);
+INSERT INTO "blade_role_menu" VALUES (1161272793873322992, 116473337658963252, 1123598816738675201);
+INSERT INTO "blade_role_menu" VALUES (1161272793873322993, 1164733379658963253, 1123598816738675201);
+INSERT INTO "blade_role_menu" VALUES (1161272793873322994, 1164733379658963254, 1123598816738675201);
+INSERT INTO "blade_role_menu" VALUES (1161272793873322995, 1164733379658963255, 1123598816738675201);
 COMMIT;
 
 -- ----------------------------
@@ -1318,6 +1342,11 @@ ALTER TABLE "blade_dept" ADD CONSTRAINT "blade_dept_pkey" PRIMARY KEY ("id");
 -- ----------------------------
 ALTER TABLE "blade_dict" ADD CONSTRAINT "blade_dict_pkey" PRIMARY KEY ("id");
 
+-- ----------------------------
+-- Primary Key structure for table blade_dict_biz
+-- ----------------------------
+ALTER TABLE "blade_dict_biz" ADD CONSTRAINT "blade_dict_biz_pkey" PRIMARY KEY ("id");
+
 -- ----------------------------
 -- Primary Key structure for table blade_log_api
 -- ----------------------------

+ 0 - 42
doc/sql/update/mysql-update-2.2.0~2.2.1.sql

@@ -1,42 +0,0 @@
--- ----------------------------
--- 增加错误日志表字段
--- ----------------------------
-ALTER TABLE `blade_log_error`
-    ADD COLUMN `remote_ip` varchar(255) NULL COMMENT '操作IP地址' AFTER `line_number`;
-
--- ----------------------------
--- 增加通用日志表字段
--- ----------------------------
-ALTER TABLE `blade_log_usual`
-    ADD COLUMN `remote_ip` varchar(255) NULL COMMENT '操作IP地址' AFTER `request_uri`,
-    ADD COLUMN `method_class` varchar(255) NULL COMMENT '方法类' AFTER `remote_ip`,
-    ADD COLUMN `method_name` varchar(255) NULL COMMENT '方法名' AFTER `method_class`;
-
-
--- ----------------------------
--- 插入菜单数据
--- ----------------------------
-INSERT INTO `blade_menu`(`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
-VALUES ('1164733369658963251', '1123598815738675210', 'elk', 'ELK监控', 'menu', 'http://localhost:5601/', 'iconfont iconicon_cspace', 4, 1, 0, 2, '', 0);
-INSERT INTO `blade_menu`(`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
-VALUES ('1164733369658963252', '1123598815738675210', 'zipkin', 'Zipkin监控', 'menu', 'http://localhost:9411/', 'iconfont iconicon_task', 5, 1, 0, 2, '', 0);
-INSERT INTO `blade_menu`(`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
-VALUES ('1164733369658963253', '1123598815738675210', 'turbine', 'Turbine监控', 'menu', 'http://localhost:7003/hystrix', 'iconfont iconicon_subordinate', 6, 1, 0, 2, '', 0);
-INSERT INTO `blade_menu`(`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
-VALUES ('1164733369658963254', '1123598815738675210', 'sentinel', 'Sentinel管理', 'menu', 'http://localhost:8858', 'iconfont iconicon_safety', 7, 1, 0, 2, '', 0);
-INSERT INTO `blade_menu`(`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
-VALUES ('1164733369658963255', '1123598815738675210', 'es', 'Elasticsearch管理', 'menu', 'http://localhost:9100/', 'iconfont iconfont iconicon_search', 8, 1, 0, 2, '', 0);
-
--- ----------------------------
--- 插入数据源角色权限数据
--- ----------------------------
-INSERT INTO `blade_role_menu`(`id`,`menu_id`,`role_id`)
-VALUES ('1161272693873322991', '1164733369658963251', '1123598816738675201');
-INSERT INTO `blade_role_menu`(`id`,`menu_id`,`role_id`)
-VALUES ('1161272693873322992', '1164733369658963252', '1123598816738675201');
-INSERT INTO `blade_role_menu`(`id`,`menu_id`,`role_id`)
-VALUES ('1161272693873322993', '1164733369658963253', '1123598816738675201');
-INSERT INTO `blade_role_menu`(`id`,`menu_id`,`role_id`)
-VALUES ('1161272693873322994', '1164733369658963254', '1123598816738675201');
-INSERT INTO `blade_role_menu`(`id`,`menu_id`,`role_id`)
-VALUES ('1161272693873322995', '1164733369658963255', '1123598816738675201');

+ 51 - 0
doc/sql/update/mysql-update-2.2.1~2.2.2.sql

@@ -0,0 +1,51 @@
+-- ----------------------------
+-- 修改字典表字段类型
+-- ----------------------------
+ALTER TABLE `blade_dict`
+    MODIFY COLUMN `dict_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '字典值' AFTER `code`;
+
+-- ----------------------------
+-- 插入菜单数据
+-- ----------------------------
+INSERT INTO `blade_menu`(`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
+VALUES ('1164733379658963251', '1123598815738675203', 'dictbiz', '业务字典', 'menu', '/system/dictbiz', 'iconfont iconicon_study', 3, 1, 0, 1, '', 0);
+INSERT INTO `blade_menu`(`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
+VALUES ('1164733379658963252', '1164733379658963251', 'dictbiz_add', '新增', 'add', '/system/dictbiz/add', 'plus', 1, 2, 2, 1, '', 0);
+INSERT INTO `blade_menu`(`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
+VALUES ('1164733379658963253', '1164733379658963251', 'dictbiz_edit', '修改', 'edit', '/system/dictbiz/edit', 'form', 2, 2, 1, 1, '', 0);
+INSERT INTO `blade_menu`(`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
+VALUES ('1164733379658963254', '1164733379658963251', 'dictbiz_delete', '删除', 'delete', '/api/blade-system/dict-biz/remove', 'delete', 3, 2, 0, 1, '', 0);
+INSERT INTO `blade_menu`(`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
+VALUES ('1164733379658963255', '1164733379658963251', 'dictbiz_view', '查看', 'view', '/system/dictbiz/view', 'file-text', 4, 2, 3, 1, '', 0);
+
+-- ----------------------------
+-- 插入数据源角色权限数据
+-- ----------------------------
+INSERT INTO `blade_role_menu`(`id`,`menu_id`,`role_id`)
+VALUES ('1161272793873322991', '1164733379658963251', '1123598816738675201');
+INSERT INTO `blade_role_menu`(`id`,`menu_id`,`role_id`)
+VALUES ('1161272793873322992', '116473337658963252', '1123598816738675201');
+INSERT INTO `blade_role_menu`(`id`,`menu_id`,`role_id`)
+VALUES ('1161272793873322993', '1164733379658963253', '1123598816738675201');
+INSERT INTO `blade_role_menu`(`id`,`menu_id`,`role_id`)
+VALUES ('1161272793873322994', '1164733379658963254', '1123598816738675201');
+INSERT INTO `blade_role_menu`(`id`,`menu_id`,`role_id`)
+VALUES ('1161272793873322995', '1164733379658963255', '1123598816738675201');
+
+
+-- ----------------------------
+-- 创建业务字典表
+-- ----------------------------
+CREATE TABLE `blade_dict_biz`  (
+   `id` bigint(64) NOT NULL COMMENT '主键',
+   `tenant_id` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '租户ID',
+   `parent_id` bigint(64) NULL DEFAULT 0 COMMENT '父主键',
+   `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '字典码',
+   `dict_key` int(2) NULL DEFAULT NULL COMMENT '字典值',
+   `dict_value` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '字典名称',
+   `sort` int(11) NULL DEFAULT NULL COMMENT '排序',
+   `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '字典备注',
+   `is_sealed` int(2) NULL DEFAULT 0 COMMENT '是否已封存',
+   `is_deleted` int(2) NULL DEFAULT 0 COMMENT '是否已删除',
+   PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '业务字典表';

+ 0 - 48
doc/sql/update/oracle-update-2.2.0~2.2.1.sql

@@ -1,48 +0,0 @@
--- ----------------------------
--- 增加错误日志表字段
--- ----------------------------
-ALTER TABLE "BLADEX"."BLADE_LOG_ERROR"
-    ADD ("REMOTE_IP" VARCHAR2(255) );
-
-COMMENT ON COLUMN "BLADEX"."BLADE_LOG_ERROR"."REMOTE_IP" IS '操作IP地址';
-
--- ----------------------------
--- 增加通用日志表字段
--- ----------------------------
-ALTER TABLE "BLADEX"."BLADE_LOG_USUAL"
-    ADD ("REMOTE_IP" VARCHAR2(255) )
-    ADD ("METHOD_CLASS" VARCHAR2(255) )
-    ADD ("METHOD_NAME" VARCHAR2(255) );
-
-COMMENT ON COLUMN "BLADEX"."BLADE_LOG_USUAL"."REMOTE_IP" IS '操作IP地址';
-COMMENT ON COLUMN "BLADEX"."BLADE_LOG_USUAL"."METHOD_CLASS" IS '方法类';
-COMMENT ON COLUMN "BLADEX"."BLADE_LOG_USUAL"."METHOD_NAME" IS '方法名';
-
-
--- ----------------------------
--- 插入菜单数据
--- ----------------------------
-INSERT INTO "BLADEX"."BLADE_MENU"("ID", "PARENT_ID", "CODE", "NAME", "ALIAS", "PATH", "SOURCE", "SORT", "CATEGORY", "ACTION", "IS_OPEN", "REMARK", "IS_DELETED")
-VALUES ('1164733369658963251', '1123598815738675210', 'elk', 'ELK监控', 'menu', 'http://localhost:5601/', 'iconfont iconicon_cspace', 4, 1, 0, 2, '', 0);
-INSERT INTO "BLADEX"."BLADE_MENU"("ID", "PARENT_ID", "CODE", "NAME", "ALIAS", "PATH", "SOURCE", "SORT", "CATEGORY", "ACTION", "IS_OPEN", "REMARK", "IS_DELETED")
-VALUES ('1164733369658963252', '1123598815738675210', 'zipkin', 'Zipkin监控', 'menu', 'http://localhost:9411/', 'iconfont iconicon_task', 5, 1, 0, 2, '', 0);
-INSERT INTO "BLADEX"."BLADE_MENU"("ID", "PARENT_ID", "CODE", "NAME", "ALIAS", "PATH", "SOURCE", "SORT", "CATEGORY", "ACTION", "IS_OPEN", "REMARK", "IS_DELETED")
-VALUES ('1164733369658963253', '1123598815738675210', 'turbine', 'Turbine监控', 'menu', 'http://localhost:7003/hystrix', 'iconfont iconicon_subordinate', 6, 1, 0, 2, '', 0);
-INSERT INTO "BLADEX"."BLADE_MENU"("ID", "PARENT_ID", "CODE", "NAME", "ALIAS", "PATH", "SOURCE", "SORT", "CATEGORY", "ACTION", "IS_OPEN", "REMARK", "IS_DELETED")
-VALUES ('1164733369658963254', '1123598815738675210', 'sentinel', 'Sentinel管理', 'menu', 'http://localhost:8858', 'iconfont iconicon_safety', 7, 1, 0, 2, '', 0);
-INSERT INTO "BLADEX"."BLADE_MENU"("ID", "PARENT_ID", "CODE", "NAME", "ALIAS", "PATH", "SOURCE", "SORT", "CATEGORY", "ACTION", "IS_OPEN", "REMARK", "IS_DELETED")
-VALUES ('1164733369658963255', '1123598815738675210', 'es', 'Elasticsearch管理', 'menu', 'http://localhost:9100/', 'iconfont iconfont iconicon_search', 8, 1, 0, 2, '', 0);
-
--- ----------------------------
--- 插入数据源角色权限数据
--- ----------------------------
-INSERT INTO "BLADEX"."BLADE_ROLE_MENU"(ID,MENU_ID,ROLE_ID)
-VALUES ('1161272693873322991', '1164733369658963251', '1123598816738675201');
-INSERT INTO "BLADEX"."BLADE_ROLE_MENU"(ID,MENU_ID,ROLE_ID)
-VALUES ('1161272693873322992', '1164733369658963252', '1123598816738675201');
-INSERT INTO "BLADEX"."BLADE_ROLE_MENU"(ID,MENU_ID,ROLE_ID)
-VALUES ('1161272693873322993', '1164733369658963253', '1123598816738675201');
-INSERT INTO "BLADEX"."BLADE_ROLE_MENU"(ID,MENU_ID,ROLE_ID)
-VALUES ('1161272693873322994', '1164733369658963254', '1123598816738675201');
-INSERT INTO "BLADEX"."BLADE_ROLE_MENU"(ID,MENU_ID,ROLE_ID)
-VALUES ('1161272693873322995', '1164733369658963255', '1123598816738675201');

+ 68 - 0
doc/sql/update/oracle-update-2.2.1~2.2.2.sql

@@ -0,0 +1,68 @@
+-- 添加临时列
+alter table "BLADEX"."BLADE_DICT" add TMP_DICT_KEY NVARCHAR2(255);
+-- 将目标字段中数据加入到临时列中
+update "BLADEX"."BLADE_DICT" set TMP_DICT_KEY = DICT_KEY ;
+-- 将目标字段数据清空
+update "BLADEX"."BLADE_DICT" set DICT_KEY = null;
+-- 更改目标字段类型
+alter table "BLADEX"."BLADE_DICT" modify ( DICT_KEY  NVARCHAR2(255));
+-- 将临时列数据加回到目标字段中
+update "BLADEX"."BLADE_DICT" set DICT_KEY = TMP_DICT_KEY;
+-- 清除临时列
+alter table "BLADEX"."BLADE_DICT" drop column TMP_DICT_KEY;
+
+-- ----------------------------
+-- 插入菜单数据
+-- ----------------------------
+INSERT INTO "BLADEX"."BLADE_MENU"("ID", "PARENT_ID", "CODE", "NAME", "ALIAS", "PATH", "SOURCE", "SORT", "CATEGORY", "ACTION", "IS_OPEN", "REMARK", "IS_DELETED")
+VALUES ('1164733379658963251', '1123598815738675203', 'dictbiz', '业务字典', 'menu', '/system/dictbiz', 'iconfont iconicon_study', 3, 1, 0, 1, '', 0);
+INSERT INTO "BLADEX"."BLADE_MENU"("ID", "PARENT_ID", "CODE", "NAME", "ALIAS", "PATH", "SOURCE", "SORT", "CATEGORY", "ACTION", "IS_OPEN", "REMARK", "IS_DELETED")
+VALUES ('1164733379658963252', '1164733379658963251', 'dictbiz_add', '新增', 'add', '/system/dictbiz/add', 'plus', 1, 2, 2, 1, '', 0);
+INSERT INTO "BLADEX"."BLADE_MENU"("ID", "PARENT_ID", "CODE", "NAME", "ALIAS", "PATH", "SOURCE", "SORT", "CATEGORY", "ACTION", "IS_OPEN", "REMARK", "IS_DELETED")
+VALUES ('1164733379658963253', '1164733379658963251', 'dictbiz_edit', '修改', 'edit', '/system/dictbiz/edit', 'form', 2, 2, 1, 1, '', 0);
+INSERT INTO "BLADEX"."BLADE_MENU"("ID", "PARENT_ID", "CODE", "NAME", "ALIAS", "PATH", "SOURCE", "SORT", "CATEGORY", "ACTION", "IS_OPEN", "REMARK", "IS_DELETED")
+VALUES ('1164733379658963254', '1164733379658963251', 'dictbiz_delete', '删除', 'delete', '/api/blade-system/dict-biz/remove', 'delete', 3, 2, 0, 1, '', 0);
+INSERT INTO "BLADEX"."BLADE_MENU"("ID", "PARENT_ID", "CODE", "NAME", "ALIAS", "PATH", "SOURCE", "SORT", "CATEGORY", "ACTION", "IS_OPEN", "REMARK", "IS_DELETED")
+VALUES ('1164733379658963255', '1164733379658963251', 'dictbiz_view', '查看', 'view', '/system/dictbiz/view', 'file-text', 4, 2, 3, 1, '', 0);
+
+-- ----------------------------
+-- 插入数据源角色权限数据
+-- ----------------------------
+INSERT INTO "BLADEX"."BLADE_ROLE_MENU"(ID,MENU_ID,ROLE_ID)
+VALUES ('1161272793873322991', '1164733379658963251', '1123598816738675201');
+INSERT INTO "BLADEX"."BLADE_ROLE_MENU"(ID,MENU_ID,ROLE_ID)
+VALUES ('1161272793873322992', '116473337658963252', '1123598816738675201');
+INSERT INTO "BLADEX"."BLADE_ROLE_MENU"(ID,MENU_ID,ROLE_ID)
+VALUES ('1161272793873322993', '1164733379658963253', '1123598816738675201');
+INSERT INTO "BLADEX"."BLADE_ROLE_MENU"(ID,MENU_ID,ROLE_ID)
+VALUES ('1161272793873322994', '1164733379658963254', '1123598816738675201');
+INSERT INTO "BLADEX"."BLADE_ROLE_MENU"(ID,MENU_ID,ROLE_ID)
+VALUES ('1161272793873322995', '1164733379658963255', '1123598816738675201');
+
+-- ----------------------------
+-- 创建业务字典表
+-- ----------------------------
+CREATE TABLE "BLADEX"."BLADE_DICT_BIZ" (
+    "ID" NUMBER(20) NOT NULL ,
+    "TENANT_ID" NVARCHAR2(12) ,
+    "PARENT_ID" NUMBER(20) ,
+    "CODE" NVARCHAR2(255) ,
+    "DICT_KEY" NUMBER(11) ,
+    "DICT_VALUE" NVARCHAR2(255) ,
+    "SORT" NUMBER(11) ,
+    "REMARK" NVARCHAR2(255) ,
+    "IS_SEALED" NUMBER(11) ,
+    "IS_DELETED" NUMBER(11) ,
+    PRIMARY KEY ("ID")
+);
+COMMENT ON COLUMN "BLADEX"."BLADE_DICT_BIZ"."ID" IS '主键';
+COMMENT ON COLUMN "BLADEX"."BLADE_DICT_BIZ"."TENANT_ID" IS '租户ID';
+COMMENT ON COLUMN "BLADEX"."BLADE_DICT_BIZ"."PARENT_ID" IS '父主键';
+COMMENT ON COLUMN "BLADEX"."BLADE_DICT_BIZ"."CODE" IS '字典码';
+COMMENT ON COLUMN "BLADEX"."BLADE_DICT_BIZ"."DICT_KEY" IS '字典值';
+COMMENT ON COLUMN "BLADEX"."BLADE_DICT_BIZ"."DICT_VALUE" IS '字典名称';
+COMMENT ON COLUMN "BLADEX"."BLADE_DICT_BIZ"."SORT" IS '排序';
+COMMENT ON COLUMN "BLADEX"."BLADE_DICT_BIZ"."REMARK" IS '字典备注';
+COMMENT ON COLUMN "BLADEX"."BLADE_DICT_BIZ"."IS_SEALED" IS '是否已封存';
+COMMENT ON COLUMN "BLADEX"."BLADE_DICT_BIZ"."IS_DELETED" IS '是否已删除';
+COMMENT ON TABLE "BLADEX"."BLADE_DICT_BIZ" IS '数据源配置表';

+ 0 - 47
doc/sql/update/postgresql-update-2.2.0~2.2.1.sql

@@ -1,47 +0,0 @@
--- ----------------------------
--- 增加错误日志表字段
--- ----------------------------
-ALTER TABLE "public"."blade_log_error"
-    ADD COLUMN "remote_ip" varchar(500);
-
-COMMENT ON COLUMN "public"."blade_dict"."remote_ip" IS '操作IP地址';
-
--- ----------------------------
--- 增加通用日志表字段
--- ----------------------------
-ALTER TABLE "public"."blade_log_usual"
-    ADD COLUMN "remote_ip" varchar(500),
-    ADD COLUMN "method_class" varchar(500),
-    ADD COLUMN "method_name" varchar(500);
-
-COMMENT ON COLUMN "public"."blade_log_usual"."remote_ip" IS '操作IP地址';
-COMMENT ON COLUMN "public"."blade_log_usual"."method_class" IS '方法类';
-COMMENT ON COLUMN "public"."blade_log_usual"."method_name" IS '方法名';
-
--- ----------------------------
--- 插入菜单数据
--- ----------------------------
-INSERT INTO "blade_menu"("id", "parent_id", "code", "name", "alias", "path", "source", "sort", "category", "action", "is_open", "remark", "is_deleted")
-VALUES ('1164733369658963251', '1123598815738675210', 'elk', 'ELK监控', 'menu', 'http://localhost:5601/', 'iconfont iconicon_cspace', 4, 1, 0, 2, '', 0);
-INSERT INTO "blade_menu"("id", "parent_id", "code", "name", "alias", "path", "source", "sort", "category", "action", "is_open", "remark", "is_deleted")
-VALUES ('1164733369658963252', '1123598815738675210', 'zipkin', 'Zipkin监控', 'menu', 'http://localhost:9411/', 'iconfont iconicon_task', 5, 1, 0, 2, '', 0);
-INSERT INTO "blade_menu"("id", "parent_id", "code", "name", "alias", "path", "source", "sort", "category", "action", "is_open", "remark", "is_deleted")
-VALUES ('1164733369658963253', '1123598815738675210', 'turbine', 'Turbine监控', 'menu', 'http://localhost:7003/hystrix', 'iconfont iconicon_subordinate', 6, 1, 0, 2, '', 0);
-INSERT INTO "blade_menu"("id", "parent_id", "code", "name", "alias", "path", "source", "sort", "category", "action", "is_open", "remark", "is_deleted")
-VALUES ('1164733369658963254', '1123598815738675210', 'sentinel', 'Sentinel管理', 'menu', 'http://localhost:8858', 'iconfont iconicon_safety', 7, 1, 0, 2, '', 0);
-INSERT INTO "blade_menu"("id", "parent_id", "code", "name", "alias", "path", "source", "sort", "category", "action", "is_open", "remark", "is_deleted")
-VALUES ('1164733369658963255', '1123598815738675210', 'es', 'Elasticsearch管理', 'menu', 'http://localhost:9100/', 'iconfont iconfont iconicon_search', 8, 1, 0, 2, '', 0);
-
--- ----------------------------
--- 插入数据源角色权限数据
--- ----------------------------
-INSERT INTO "blade_role_menu"("id","menu_id","role_id")
-VALUES ('1161272693873322991', '1164733369658963251', '1123598816738675201');
-INSERT INTO "blade_role_menu"("id","menu_id","role_id")
-VALUES ('1161272693873322992', '1164733369658963252', '1123598816738675201');
-INSERT INTO "blade_role_menu"("id","menu_id","role_id")
-VALUES ('1161272693873322993', '1164733369658963253', '1123598816738675201');
-INSERT INTO "blade_role_menu"("id","menu_id","role_id")
-VALUES ('1161272693873322994', '1164733369658963254', '1123598816738675201');
-INSERT INTO "blade_role_menu"("id","menu_id","role_id")
-VALUES ('1161272693873322995', '1164733369658963255', '1123598816738675201');

+ 59 - 0
doc/sql/update/postgresql-update-2.2.1~2.2.2.sql

@@ -0,0 +1,59 @@
+ALTER TABLE "blade_dict"
+    ALTER COLUMN "dict_key" TYPE varchar(255) USING "dict_key"::varchar(255);
+
+
+-- ----------------------------
+-- 插入菜单数据
+-- ----------------------------
+INSERT INTO "blade_menu"("id", "parent_id", "code", "name", "alias", "path", "source", "sort", "category", "action", "is_open", "remark", "is_deleted")
+VALUES ('1164733379658963251', '1123598815738675203', 'dictbiz', '业务字典', 'menu', '/system/dictbiz', 'iconfont iconicon_study', 3, 1, 0, 1, '', 0);
+INSERT INTO "blade_menu"("id", "parent_id", "code", "name", "alias", "path", "source", "sort", "category", "action", "is_open", "remark", "is_deleted")
+VALUES ('1164733379658963252', '1164733379658963251', 'dictbiz_add', '新增', 'add', '/system/dictbiz/add', 'plus', 1, 2, 2, 1, '', 0);
+INSERT INTO "blade_menu"("id", "parent_id", "code", "name", "alias", "path", "source", "sort", "category", "action", "is_open", "remark", "is_deleted")
+VALUES ('1164733379658963253', '1164733379658963251', 'dictbiz_edit', '修改', 'edit', '/system/dictbiz/edit', 'form', 2, 2, 1, 1, '', 0);
+INSERT INTO "blade_menu"("id", "parent_id", "code", "name", "alias", "path", "source", "sort", "category", "action", "is_open", "remark", "is_deleted")
+VALUES ('1164733379658963254', '1164733379658963251', 'dictbiz_delete', '删除', 'delete', '/api/blade-system/dict-biz/remove', 'delete', 3, 2, 0, 1, '', 0);
+INSERT INTO "blade_menu"("id", "parent_id", "code", "name", "alias", "path", "source", "sort", "category", "action", "is_open", "remark", "is_deleted")
+VALUES ('1164733379658963255', '1164733379658963251', 'dictbiz_view', '查看', 'view', '/system/dictbiz/view', 'file-text', 4, 2, 3, 1, '', 0);
+
+-- ----------------------------
+-- 插入数据源角色权限数据
+-- ----------------------------
+INSERT INTO "blade_role_menu"("id","menu_id","role_id")
+VALUES ('1161272793873322991', '1164733379658963251', '1123598816738675201');
+INSERT INTO "blade_role_menu"("id","menu_id","role_id")
+VALUES ('1161272793873322992', '116473337658963252', '1123598816738675201');
+INSERT INTO "blade_role_menu"("id","menu_id","role_id")
+VALUES ('1161272793873322993', '1164733379658963253', '1123598816738675201');
+INSERT INTO "blade_role_menu"("id","menu_id","role_id")
+VALUES ('1161272793873322994', '1164733379658963254', '1123598816738675201');
+INSERT INTO "blade_role_menu"("id","menu_id","role_id")
+VALUES ('1161272793873322995', '1164733379658963255', '1123598816738675201');
+
+-- ----------------------------
+-- 创建业务字典表
+-- ----------------------------
+CREATE TABLE "blade_dict_biz" (
+    "id" int8 NOT NULL,
+    "tenant_id" varchar(12) COLLATE "pg_catalog"."default",
+    "parent_id" int8,
+    "code" varchar(255) COLLATE "pg_catalog"."default",
+    "dict_key" varchar(255) COLLATE "pg_catalog"."default",
+    "dict_value" varchar(255) COLLATE "pg_catalog"."default",
+    "sort" int4,
+    "remark" varchar(255) COLLATE "pg_catalog"."default",
+    "is_sealed" int4,
+    "is_deleted" int4,
+    PRIMARY KEY ("id")
+);
+COMMENT ON COLUMN "blade_dict_biz"."id" IS '主键';
+COMMENT ON COLUMN "blade_dict_biz"."tenant_id" IS '租户ID';
+COMMENT ON COLUMN "blade_dict_biz"."parent_id" IS '父主键';
+COMMENT ON COLUMN "blade_dict_biz"."code" IS '字典码';
+COMMENT ON COLUMN "blade_dict_biz"."dict_key" IS '字典值';
+COMMENT ON COLUMN "blade_dict_biz"."dict_value" IS '字典名称';
+COMMENT ON COLUMN "blade_dict_biz"."sort" IS '排序';
+COMMENT ON COLUMN "blade_dict_biz"."remark" IS '字典备注';
+COMMENT ON COLUMN "blade_dict_biz"."is_sealed" IS '是否已封存';
+COMMENT ON COLUMN "blade_dict_biz"."is_deleted" IS '是否已删除';
+COMMENT ON TABLE "blade_dict_biz" IS '业务字典表';

+ 77 - 0
src/main/java/org/springblade/common/cache/DictBizCache.java

@@ -0,0 +1,77 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.common.cache;
+
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.tool.utils.SpringUtil;
+import org.springblade.core.tool.utils.StringPool;
+import org.springblade.modules.system.entity.DictBiz;
+import org.springblade.modules.system.service.IDictBizService;
+
+import java.util.List;
+
+import static org.springblade.core.cache.constant.CacheConstant.DICT_CACHE;
+
+/**
+ * 业务字典缓存工具类
+ *
+ * @author Chill
+ */
+public class DictBizCache {
+
+	private static final String DICT_ID = "dictBiz:id:";
+	private static final String DICT_VALUE = "dictBiz:value:";
+	private static final String DICT_LIST = "dictBiz:list:";
+
+	private static IDictBizService dictService;
+
+	static {
+		dictService = SpringUtil.getBean(IDictBizService.class);
+	}
+
+	/**
+	 * 获取字典实体
+	 *
+	 * @param id 主键
+	 * @return
+	 */
+	public static DictBiz getById(Long id) {
+		return CacheUtil.get(DICT_CACHE, DICT_ID, id, () -> dictService.getById(id));
+	}
+
+	/**
+	 * 获取字典值
+	 *
+	 * @param code    字典编号
+	 * @param dictKey 字典键
+	 * @return
+	 */
+	public static String getValue(String code, Integer dictKey) {
+		return CacheUtil.get(DICT_CACHE, DICT_VALUE + code + StringPool.COLON, dictKey, () -> dictService.getValue(code, dictKey));
+	}
+
+	/**
+	 * 获取字典集合
+	 *
+	 * @param code 字典编号
+	 * @return
+	 */
+	public static List<DictBiz> getList(String code) {
+		return CacheUtil.get(DICT_CACHE, DICT_LIST, code, () -> dictService.getList(code));
+	}
+
+}

+ 163 - 0
src/main/java/org/springblade/modules/system/controller/DictBizController.java

@@ -0,0 +1,163 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.system.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.annotations.*;
+import lombok.AllArgsConstructor;
+import org.springblade.common.constant.CommonConstant;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.launch.constant.AppConstant;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.node.INode;
+import org.springblade.modules.system.entity.DictBiz;
+import org.springblade.modules.system.service.IDictBizService;
+import org.springblade.modules.system.vo.DictBizVO;
+import org.springblade.modules.system.wrapper.DictBizWrapper;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
+
+import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
+
+/**
+ * 控制器
+ *
+ * @author Chill
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping(AppConstant.APPLICATION_SYSTEM_NAME + "/dict-biz")
+@Api(value = "业务字典", tags = "业务字典")
+public class DictBizController extends BladeController {
+
+	private IDictBizService dictService;
+
+	/**
+	 * 详情
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "详情", notes = "传入dict")
+	public R<DictBizVO> detail(DictBiz dict) {
+		DictBiz detail = dictService.getOne(Condition.getQueryWrapper(dict));
+		return R.data(DictBizWrapper.build().entityVO(detail));
+	}
+
+	/**
+	 * 列表
+	 */
+	@GetMapping("/list")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "code", value = "字典编号", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "dictValue", value = "字典名称", paramType = "query", dataType = "string")
+	})
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "列表", notes = "传入dict")
+	public R<List<INode>> list(@ApiIgnore @RequestParam Map<String, Object> dict) {
+		List<DictBiz> list = dictService.list(Condition.getQueryWrapper(dict, DictBiz.class).lambda().orderByAsc(DictBiz::getSort));
+		return R.data(DictBizWrapper.build().listNodeVO(list));
+	}
+
+	/**
+	 * 顶级列表
+	 */
+	@GetMapping("/parent-list")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "code", value = "字典编号", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "dictValue", value = "字典名称", paramType = "query", dataType = "string")
+	})
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "列表", notes = "传入dict")
+	public R<IPage<DictBizVO>> parentList(@ApiIgnore @RequestParam Map<String, Object> dict, Query query) {
+		IPage<DictBiz> page = dictService.page(Condition.getPage(query), Condition.getQueryWrapper(dict, DictBiz.class).lambda().eq(DictBiz::getParentId, CommonConstant.TOP_PARENT_ID).orderByAsc(DictBiz::getSort));
+		return R.data(DictBizWrapper.build().pageVO(page));
+	}
+
+	/**
+	 * 子列表
+	 */
+	@GetMapping("/child-list")
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "code", value = "字典编号", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "dictValue", value = "字典名称", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "parentId", value = "字典名称", paramType = "query", dataType = "string")
+	})
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "列表", notes = "传入dict")
+	public R<IPage<DictBizVO>> childList(@ApiIgnore @RequestParam Map<String, Object> dict, Query query) {
+		IPage<DictBiz> page = dictService.page(Condition.getPage(query), Condition.getQueryWrapper(dict, DictBiz.class).lambda().orderByAsc(DictBiz::getSort));
+		return R.data(DictBizWrapper.build().pageVO(page));
+	}
+
+	/**
+	 * 获取字典树形结构
+	 *
+	 * @return
+	 */
+	@GetMapping("/tree")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "树形结构", notes = "树形结构")
+	public R<List<DictBizVO>> tree() {
+		List<DictBizVO> tree = dictService.tree();
+		return R.data(tree);
+	}
+
+	/**
+	 * 新增或修改
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入dict")
+	@CacheEvict(cacheNames = {SYS_CACHE}, allEntries = true)
+	public R submit(@Valid @RequestBody DictBiz dict) {
+		return R.status(dictService.submit(dict));
+	}
+
+
+	/**
+	 * 删除
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "删除", notes = "传入ids")
+	@CacheEvict(cacheNames = {SYS_CACHE}, allEntries = true)
+	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		return R.status(dictService.removeDict(ids));
+	}
+
+	/**
+	 * 获取字典
+	 *
+	 * @return
+	 */
+	@GetMapping("/dictionary")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "获取字典", notes = "获取字典")
+	public R<List<DictBiz>> dictionary(String code) {
+		List<DictBiz> tree = dictService.getList(code);
+		return R.data(tree);
+	}
+
+
+}

+ 1 - 1
src/main/java/org/springblade/modules/system/entity/Dict.java

@@ -65,7 +65,7 @@ public class Dict implements Serializable {
 	 * 字典值
 	 */
 	@ApiModelProperty(value = "字典值")
-	private Integer dictKey;
+	private String dictKey;
 
 	/**
 	 * 字典名称

+ 108 - 0
src/main/java/org/springblade/modules/system/entity/DictBiz.java

@@ -0,0 +1,108 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 实体类
+ *
+ * @author Chill
+ */
+@Data
+@TableName("blade_dict_biz")
+@ApiModel(value = "DictBiz对象", description = "DictBiz对象")
+public class DictBiz implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 主键
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "主键")
+	@TableId(value = "id", type = IdType.ID_WORKER)
+	private Long id;
+
+	/**
+	 * 租户ID
+	 */
+	@ApiModelProperty(value = "租户ID")
+	private String tenantId;
+
+	/**
+	 * 父主键
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "父主键")
+	private Long parentId;
+
+	/**
+	 * 字典码
+	 */
+	@ApiModelProperty(value = "字典码")
+	private String code;
+
+	/**
+	 * 字典值
+	 */
+	@ApiModelProperty(value = "字典值")
+	private String dictKey;
+
+	/**
+	 * 字典名称
+	 */
+	@ApiModelProperty(value = "字典名称")
+	private String dictValue;
+
+	/**
+	 * 排序
+	 */
+	@ApiModelProperty(value = "排序")
+	private Integer sort;
+
+	/**
+	 * 字典备注
+	 */
+	@ApiModelProperty(value = "字典备注")
+	private String remark;
+
+	/**
+	 * 是否已封存
+	 */
+	@ApiModelProperty(value = "是否已封存")
+	private Integer isSealed;
+
+	/**
+	 * 是否已删除
+	 */
+	@TableLogic
+	@ApiModelProperty(value = "是否已删除")
+	private Integer isDeleted;
+
+
+}

+ 56 - 0
src/main/java/org/springblade/modules/system/mapper/DictBizMapper.java

@@ -0,0 +1,56 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.modules.system.entity.DictBiz;
+import org.springblade.modules.system.vo.DictBizVO;
+
+import java.util.List;
+
+/**
+ * Mapper 接口
+ *
+ * @author Chill
+ */
+public interface DictBizMapper extends BaseMapper<DictBiz> {
+
+	/**
+	 * 获取字典表对应中文
+	 *
+	 * @param code    字典编号
+	 * @param dictKey 字典序号
+	 * @return
+	 */
+	String getValue(String code, Integer dictKey);
+
+	/**
+	 * 获取字典表
+	 *
+	 * @param code 字典编号
+	 * @return
+	 */
+	List<DictBiz> getList(String code);
+
+	/**
+	 * 获取树形节点
+	 *
+	 * @return
+	 */
+	List<DictBizVO> tree();
+
+}

+ 47 - 0
src/main/java/org/springblade/modules/system/mapper/DictBizMapper.xml

@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.modules.system.mapper.DictBizMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="dictResultMap" type="org.springblade.modules.system.entity.DictBiz">
+        <id column="id" property="id"/>
+        <result column="tenant_id" property="tenantId"/>
+        <result column="parent_id" property="parentId"/>
+        <result column="code" property="code"/>
+        <result column="dict_key" property="dictKey"/>
+        <result column="dict_value" property="dictValue"/>
+        <result column="sort" property="sort"/>
+        <result column="remark" property="remark"/>
+        <result column="is_deleted" property="isDeleted"/>
+    </resultMap>
+
+    <resultMap id="treeNodeResultMap" type="org.springblade.core.tool.node.TreeNode">
+        <id column="id" property="id"/>
+        <result column="parent_id" property="parentId"/>
+        <result column="title" property="title"/>
+        <result column="value" property="value"/>
+        <result column="key" property="key"/>
+    </resultMap>
+
+    <select id="getValue" resultType="java.lang.String">
+        select
+            dict_value
+        from blade_dict_biz where code = #{param1} and dict_key = #{param2} and is_deleted = 0
+    </select>
+
+    <!-- oracle 版本 -->
+    <!--<select id="getValue" resultType="java.lang.String">
+        select
+            dict_value
+        from blade_dict_biz where code = #{param1, jdbcType=VARCHAR} and dict_key = #{param2} and dict_key >= 0  rownum 1
+    </select>-->
+
+    <select id="getList" resultMap="dictResultMap">
+        select code, dict_key, dict_value, sort, remark from blade_dict_biz where code = #{param1} and dict_key >= 0 and is_sealed = 0 and is_deleted = 0
+    </select>
+
+    <select id="tree" resultMap="treeNodeResultMap">
+        select id, parent_id, dict_value as title, id as "value", id as "key" from blade_dict_biz where is_deleted = 0
+    </select>
+
+</mapper>

+ 0 - 6
src/main/java/org/springblade/modules/system/mapper/DictMapper.xml

@@ -22,12 +22,6 @@
         <result column="key" property="key"/>
     </resultMap>
 
-    <!-- 通用查询结果列 -->
-    <sql id="baseColumnList">
-        select
-        id, parent_id, code, dict_key, dict_value, sort, remark, is_deleted
-    </sql>
-
     <select id="selectDictPage" resultMap="dictResultMap">
         select * from blade_dict where is_deleted = 0
     </select>

+ 72 - 0
src/main/java/org/springblade/modules/system/service/IDictBizService.java

@@ -0,0 +1,72 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springblade.modules.system.entity.DictBiz;
+import org.springblade.modules.system.vo.DictBizVO;
+
+import java.util.List;
+
+/**
+ * 服务类
+ *
+ * @author Chill
+ */
+public interface IDictBizService extends IService<DictBiz> {
+
+	/**
+	 * 树形结构
+	 *
+	 * @return
+	 */
+	List<DictBizVO> tree();
+
+	/**
+	 * 获取字典表对应中文
+	 *
+	 * @param code    字典编号
+	 * @param dictKey 字典序号
+	 * @return
+	 */
+	String getValue(String code, Integer dictKey);
+
+	/**
+	 * 获取字典表
+	 *
+	 * @param code 字典编号
+	 * @return
+	 */
+	List<DictBiz> getList(String code);
+
+	/**
+	 * 新增或修改
+	 *
+	 * @param dict
+	 * @return
+	 */
+	boolean submit(DictBiz dict);
+
+	/**
+	 * 删除字典
+	 *
+	 * @param ids
+	 * @return
+	 */
+	boolean removeDict(String ids);
+
+}

+ 84 - 0
src/main/java/org/springblade/modules/system/service/impl/DictBizServiceImpl.java

@@ -0,0 +1,84 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.system.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.exceptions.ApiException;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringPool;
+import org.springblade.modules.system.entity.DictBiz;
+import org.springblade.modules.system.mapper.DictBizMapper;
+import org.springblade.modules.system.service.IDictBizService;
+import org.springblade.modules.system.vo.DictBizVO;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+import static org.springblade.core.cache.constant.CacheConstant.DICT_CACHE;
+
+/**
+ * 服务实现类
+ *
+ * @author Chill
+ */
+@Service
+public class DictBizServiceImpl extends ServiceImpl<DictBizMapper, DictBiz> implements IDictBizService {
+
+	@Override
+	public List<DictBizVO> tree() {
+		return ForestNodeMerger.merge(baseMapper.tree());
+	}
+
+	@Override
+	public String getValue(String code, Integer dictKey) {
+		return Func.toStr(baseMapper.getValue(code, dictKey), StringPool.EMPTY);
+	}
+
+	@Override
+	public List<DictBiz> getList(String code) {
+		return baseMapper.getList(code);
+	}
+
+	@Override
+	@CacheEvict(cacheNames = {DICT_CACHE}, allEntries = true)
+	public boolean submit(DictBiz dict) {
+		LambdaQueryWrapper<DictBiz> lqw = Wrappers.<DictBiz>query().lambda().eq(DictBiz::getCode, dict.getCode()).eq(DictBiz::getDictKey, dict.getDictKey());
+		Integer cnt = baseMapper.selectCount((Func.isEmpty(dict.getId())) ? lqw : lqw.notIn(DictBiz::getId, dict.getId()));
+		if (cnt > 0) {
+			throw new ApiException("当前字典键值已存在!");
+		}
+		if (Func.isEmpty(dict.getParentId())) {
+			dict.setParentId(BladeConstant.TOP_PARENT_ID);
+		}
+		dict.setIsDeleted(BladeConstant.DB_NOT_DELETED);
+		return saveOrUpdate(dict);
+	}
+
+	@Override
+	public boolean removeDict(String ids) {
+		Integer cnt = baseMapper.selectCount(Wrappers.<DictBiz>query().lambda().in(DictBiz::getParentId, Func.toLongList(ids)));
+		if (cnt > 0) {
+			throw new ApiException("请先删除子节点!");
+		}
+		return removeByIds(Func.toLongList(ids));
+	}
+}

+ 71 - 0
src/main/java/org/springblade/modules/system/vo/DictBizVO.java

@@ -0,0 +1,71 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.system.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.tool.node.INode;
+import org.springblade.modules.system.entity.DictBiz;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 视图实体类
+ *
+ * @author Chill
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "DictBizVO对象", description = "DictBizVO对象")
+public class DictBizVO extends DictBiz implements INode {
+	private static final long serialVersionUID = 1L;
+	/**
+	 * 主键ID
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	private Long id;
+
+	/**
+	 * 父节点ID
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	private Long parentId;
+
+	/**
+	 * 子孙节点
+	 */
+	@JsonInclude(JsonInclude.Include.NON_EMPTY)
+	private List<INode> children;
+
+	@Override
+	public List<INode> getChildren() {
+		if (this.children == null) {
+			this.children = new ArrayList<>();
+		}
+		return this.children;
+	}
+
+	/**
+	 * 上级字典
+	 */
+	private String parentName;
+}

+ 63 - 0
src/main/java/org/springblade/modules/system/wrapper/DictBizWrapper.java

@@ -0,0 +1,63 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.system.wrapper;
+
+import org.springblade.common.cache.DictCache;
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.core.tool.node.INode;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.modules.system.entity.Dict;
+import org.springblade.modules.system.entity.DictBiz;
+import org.springblade.modules.system.vo.DictBizVO;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+
+/**
+ * 包装类,返回视图层所需的字段
+ *
+ * @author Chill
+ */
+public class DictBizWrapper extends BaseEntityWrapper<DictBiz, DictBizVO> {
+
+	public static DictBizWrapper build() {
+		return new DictBizWrapper();
+	}
+
+	@Override
+	public DictBizVO entityVO(DictBiz dict) {
+		DictBizVO dictVO = Objects.requireNonNull(BeanUtil.copy(dict, DictBizVO.class));
+		if (Func.equals(dict.getParentId(), BladeConstant.TOP_PARENT_ID)) {
+			dictVO.setParentName(BladeConstant.TOP_PARENT_NAME);
+		} else {
+			Dict parent = DictCache.getById(dict.getParentId());
+			dictVO.setParentName(parent.getDictValue());
+		}
+		return dictVO;
+	}
+
+	public List<INode> listNodeVO(List<DictBiz> list) {
+		List<INode> collect = list.stream().map(dict -> BeanUtil.copy(dict, DictBizVO.class)).collect(Collectors.toList());
+		return ForestNodeMerger.merge(collect);
+	}
+
+}

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików