Ver Fonte

添加数据管理模块 以及链接功能API

wanggaokun há 1 ano atrás
pai
commit
58f0c2ab65
21 ficheiros alterados com 3929 adições e 0 exclusões
  1. BIN
      doc/km-Flex-Guide.docx
  2. 1263 0
      km-admin/src/main/resources/db/dm/V1_0_0_0__sys-init-ddl.sql
  3. 927 0
      km-admin/src/main/resources/db/dm/V1_0_0_1__sys-init-dml.sql
  4. 210 0
      km-admin/src/main/resources/db/mysql/powerjob.sql
  5. 206 0
      km-admin/src/main/resources/db/postgresql/powerjob.sql
  6. 33 0
      km-modules/km-db/pom.xml
  7. 100 0
      km-modules/km-db/src/main/java/com/km/db/controller/DatabaseConnectionController.java
  8. 66 0
      km-modules/km-db/src/main/java/com/km/db/domain/DatabaseConnection.java
  9. 68 0
      km-modules/km-db/src/main/java/com/km/db/domain/bo/DatabaseConnectionBo.java
  10. 59 0
      km-modules/km-db/src/main/java/com/km/db/domain/vo/DatabaseConnectionImportVo.java
  11. 63 0
      km-modules/km-db/src/main/java/com/km/db/domain/vo/DatabaseConnectionVo.java
  12. 119 0
      km-modules/km-db/src/main/java/com/km/db/listener/DatabaseConnectionImportListener.java
  13. 16 0
      km-modules/km-db/src/main/java/com/km/db/mapper/DatabaseConnectionMapper.java
  14. 66 0
      km-modules/km-db/src/main/java/com/km/db/service/IDatabaseConnectionService.java
  15. 133 0
      km-modules/km-db/src/main/java/com/km/db/service/impl/DatabaseConnectionServiceImpl.java
  16. 7 0
      km-modules/km-db/src/main/resources/mapper/db/DatabaseConnectionMapper.xml
  17. 59 0
      km-modules/km-generator/src/main/resources/vm/api/api.ts.types.vm
  18. 70 0
      km-modules/km-generator/src/main/resources/vm/api/api.ts.vm
  19. 127 0
      km-modules/km-generator/src/main/resources/vm/java/listener.java.vm
  20. 70 0
      km-modules/km-generator/src/main/resources/vm/java/vo-import.java.vm
  21. 267 0
      script/sql/DM8/powerjob.sql

BIN
doc/km-Flex-Guide.docx


+ 1263 - 0
km-admin/src/main/resources/db/dm/V1_0_0_0__sys-init-ddl.sql

@@ -0,0 +1,1263 @@
+CREATE TABLE "km"."gen_table"
+(
+    "table_id"          BIGINT       NOT NULL,
+    "table_name"        VARCHAR(200)  DEFAULT ''
+                                     NULL,
+    "table_comment"     VARCHAR(500)  DEFAULT ''
+                                     NULL,
+    "sub_table_name"    VARCHAR(64)   DEFAULT ''
+                                     NULL,
+    "sub_table_fk_name" VARCHAR(64)   DEFAULT ''
+                                     NULL,
+    "class_name"        VARCHAR(100)  DEFAULT ''
+                                     NULL,
+    "tpl_category"      VARCHAR(200)  DEFAULT 'crud'
+                                     NULL,
+    "package_name"      VARCHAR(100)  DEFAULT NULL
+                                     NULL,
+    "module_name"       VARCHAR(30)   DEFAULT NULL
+                                     NULL,
+    "business_name"     VARCHAR(30)   DEFAULT NULL
+                                     NULL,
+    "function_name"     VARCHAR(50)   DEFAULT NULL
+                                     NULL,
+    "function_author"   VARCHAR(50)   DEFAULT NULL
+                                     NULL,
+    "gen_type"          CHAR(1)       DEFAULT '0'
+                                     NOT NULL,
+    "gen_path"          VARCHAR(200)  DEFAULT '/'
+                                     NULL,
+    "options"           VARCHAR(1000) DEFAULT NULL
+                                     NULL,
+    "version"           INT           DEFAULT 0
+                                     NULL,
+    "create_by"         BIGINT       NULL,
+    "create_time"       TIMESTAMP(6) NULL,
+    "update_by"         BIGINT       NULL,
+    "update_time"       TIMESTAMP(6) NULL,
+    "remark"            VARCHAR(500)  DEFAULT NULL
+                                     NULL
+);
+CREATE TABLE "km"."gen_table_column"
+(
+    "column_id"      BIGINT       NOT NULL,
+    "table_id"       BIGINT       NULL,
+    "column_name"    VARCHAR(200) DEFAULT NULL
+                                  NULL,
+    "column_comment" VARCHAR(500) DEFAULT NULL
+                                  NULL,
+    "column_type"    VARCHAR(100) DEFAULT NULL
+                                  NULL,
+    "java_type"      VARCHAR(500) DEFAULT NULL
+                                  NULL,
+    "java_field"     VARCHAR(200) DEFAULT NULL
+                                  NULL,
+    "is_pk"          CHAR(1)      DEFAULT NULL
+                                  NULL,
+    "is_increment"   CHAR(1)      DEFAULT NULL
+                                  NULL,
+    "is_required"    CHAR(1)      DEFAULT NULL
+                                  NULL,
+    "is_insert"      CHAR(1)      DEFAULT NULL
+                                  NULL,
+    "is_edit"        CHAR(1)      DEFAULT NULL
+                                  NULL,
+    "is_list"        CHAR(1)      DEFAULT NULL
+                                  NULL,
+    "is_query"       CHAR(1)      DEFAULT NULL
+                                  NULL,
+    "query_type"     VARCHAR(200) DEFAULT 'EQ'
+                                  NULL,
+    "html_type"      VARCHAR(200) DEFAULT NULL
+                                  NULL,
+    "dict_type"      VARCHAR(200) DEFAULT ''
+                                  NULL,
+    "sort"           INT          NULL,
+    "version"        INT          DEFAULT 0
+                                  NULL,
+    "create_by"      BIGINT       NULL,
+    "create_time"    TIMESTAMP(6) NULL,
+    "update_by"      BIGINT       NULL,
+    "update_time"    TIMESTAMP(6) NULL
+);
+
+CREATE TABLE "km"."sys_client"
+(
+    "id"             BIGINT       NOT NULL,
+    "client_id"      VARCHAR(64)  DEFAULT ''
+                                  NULL,
+    "client_key"     VARCHAR(32)  DEFAULT ''
+                                  NULL,
+    "client_secret"  VARCHAR(255) DEFAULT ''
+                                  NULL,
+    "grant_type"     VARCHAR(255) DEFAULT ''
+                                  NULL,
+    "device_type"    VARCHAR(32)  DEFAULT ''
+                                  NULL,
+    "active_timeout" INT          DEFAULT 1800
+                                  NULL,
+    "timeout"        INT          DEFAULT 604800
+                                  NULL,
+    "status"         CHAR(1)      DEFAULT '0'
+                                  NULL,
+    "version"        INT          DEFAULT 0
+                                  NULL,
+    "del_flag"       SMALLINT     DEFAULT 0
+                                  NULL,
+    "create_by"      BIGINT       NULL,
+    "create_time"    TIMESTAMP(6) NULL,
+    "update_by"      BIGINT       NULL,
+    "update_time"    TIMESTAMP(6) NULL
+);
+CREATE TABLE "km"."sys_config"
+(
+    "config_id"    BIGINT       NOT NULL,
+    "tenant_id"    BIGINT       DEFAULT '0'
+                                NOT NULL,
+    "config_name"  VARCHAR(100) DEFAULT ''
+                                NULL,
+    "config_key"   VARCHAR(100) DEFAULT ''
+                                NULL,
+    "config_value" VARCHAR(500) DEFAULT ''
+                                NULL,
+    "config_type"  CHAR(1)      DEFAULT 'N'
+                                NULL,
+    "version"      INT          DEFAULT 0
+                                NULL,
+    "create_by"    BIGINT       NULL,
+    "create_time"  TIMESTAMP(6) NULL,
+    "update_by"    BIGINT       NULL,
+    "update_time"  TIMESTAMP(6) NULL,
+    "remark"       VARCHAR(500) DEFAULT NULL
+                                NULL
+);
+CREATE TABLE "km"."sys_dept"
+(
+    "dept_id"     BIGINT       NOT NULL,
+    "tenant_id"   BIGINT       DEFAULT 0
+                               NULL,
+    "parent_id"   BIGINT       DEFAULT 0
+                               NULL,
+    "ancestors"   VARCHAR(760) DEFAULT ''
+                               NULL,
+    "dept_name"   VARCHAR(30)  DEFAULT ''
+                               NULL,
+    "order_num"   INT          DEFAULT 0
+                               NULL,
+    "leader"      VARCHAR(20)  DEFAULT ''
+                               NULL,
+    "phone"       VARCHAR(11)  DEFAULT NULL
+                               NULL,
+    "email"       VARCHAR(50)  DEFAULT NULL
+                               NULL,
+    "status"      CHAR(1)      DEFAULT '0'
+                               NULL,
+    "version"     INT          DEFAULT 0
+                               NULL,
+    "del_flag"    SMALLINT     DEFAULT 0
+                               NULL,
+    "create_by"   BIGINT       NULL,
+    "create_time" TIMESTAMP(6) NULL,
+    "update_by"   BIGINT       NULL,
+    "update_time" TIMESTAMP(6) NULL
+);
+CREATE TABLE "km"."sys_dict_data"
+(
+    "dict_code"   BIGINT       NOT NULL,
+    "tenant_id"   BIGINT       DEFAULT '0'
+                               NOT NULL,
+    "dict_sort"   INT          DEFAULT 0
+                               NULL,
+    "dict_label"  VARCHAR(100) DEFAULT ''
+                               NULL,
+    "dict_value"  VARCHAR(100) DEFAULT ''
+                               NULL,
+    "dict_type"   VARCHAR(100) DEFAULT ''
+                               NULL,
+    "css_class"   VARCHAR(100) DEFAULT NULL
+                               NULL,
+    "list_class"  VARCHAR(100) DEFAULT NULL
+                               NULL,
+    "is_default"  CHAR(1)      DEFAULT 'N'
+                               NULL,
+    "version"     INT          DEFAULT 0
+                               NULL,
+    "create_by"   BIGINT       NULL,
+    "create_time" TIMESTAMP(6) NULL,
+    "update_by"   BIGINT       NULL,
+    "update_time" TIMESTAMP(6) NULL,
+    "remark"      VARCHAR(500) DEFAULT NULL
+                               NULL
+);
+CREATE TABLE "km"."sys_dict_type"
+(
+    "dict_id"     BIGINT       NOT NULL,
+    "tenant_id"   BIGINT       DEFAULT '0'
+                               NOT NULL,
+    "dict_name"   VARCHAR(100) DEFAULT ''
+                               NULL,
+    "dict_type"   VARCHAR(100) DEFAULT ''
+                               NULL,
+    "version"     INT          DEFAULT 0
+                               NULL,
+    "create_by"   BIGINT       NULL,
+    "create_time" TIMESTAMP(6) NULL,
+    "update_by"   BIGINT       NULL,
+    "update_time" TIMESTAMP(6) NULL,
+    "remark"      VARCHAR(500) DEFAULT NULL
+                               NULL
+);
+CREATE TABLE "km"."sys_logininfor"
+(
+    "info_id"        BIGINT       NOT NULL,
+    "tenant_id"      BIGINT       DEFAULT '0'
+                                  NOT NULL,
+    "user_name"      VARCHAR(50)  DEFAULT ''
+                                  NULL,
+    "client_key"     VARCHAR(32)  DEFAULT ''
+                                  NULL,
+    "device_type"    VARCHAR(32)  DEFAULT ''
+                                  NULL,
+    "ipaddr"         VARCHAR(128) DEFAULT ''
+                                  NULL,
+    "login_location" VARCHAR(255) DEFAULT ''
+                                  NULL,
+    "browser"        VARCHAR(50)  DEFAULT ''
+                                  NULL,
+    "os"             VARCHAR(50)  DEFAULT ''
+                                  NULL,
+    "status"         CHAR(1)      DEFAULT '0'
+                                  NULL,
+    "msg"            VARCHAR(255) DEFAULT ''
+                                  NULL,
+    "login_time"     TIMESTAMP(6) NULL
+);
+CREATE TABLE "km"."sys_menu"
+(
+    "menu_id"        BIGINT       NOT NULL,
+    "menu_name"      VARCHAR(50)  NOT NULL,
+    "parent_id"      BIGINT       DEFAULT 0
+                                  NULL,
+    "order_num"      INT          DEFAULT 0
+                                  NULL,
+    "path"           VARCHAR(200) DEFAULT ''
+                                  NULL,
+    "component"      VARCHAR(255) DEFAULT NULL
+                                  NULL,
+    "component_name" VARCHAR(255) DEFAULT NULL
+                                  NULL,
+    "query_param"    VARCHAR(255) DEFAULT NULL
+                                  NULL,
+    "is_frame"       CHAR(1)      DEFAULT '1'
+                                  NULL,
+    "is_cache"       CHAR(1)      DEFAULT '0'
+                                  NULL,
+    "menu_type"      CHAR(1)      DEFAULT ''
+                                  NULL,
+    "visible"        CHAR(1)      DEFAULT '0'
+                                  NULL,
+    "status"         CHAR(1)      DEFAULT '0'
+                                  NULL,
+    "perms"          VARCHAR(100) DEFAULT NULL
+                                  NULL,
+    "icon"           VARCHAR(100) DEFAULT '#'
+                                  NULL,
+    "version"        INT          DEFAULT 0
+                                  NULL,
+    "create_by"      BIGINT       NULL,
+    "create_time"    TIMESTAMP(6) NULL,
+    "update_by"      BIGINT       NULL,
+    "update_time"    TIMESTAMP(6) NULL,
+    "remark"         VARCHAR(500) DEFAULT ''
+                                  NULL
+);
+CREATE TABLE "km"."sys_notice"
+(
+    "notice_id"      BIGINT       NOT NULL,
+    "tenant_id"      BIGINT       DEFAULT '0'
+                                  NOT NULL,
+    "notice_title"   VARCHAR(50)  NOT NULL,
+    "notice_type"    CHAR(1)      NOT NULL,
+    "notice_content" TEXT         NULL,
+    "status"         CHAR(1)      DEFAULT '0'
+                                  NULL,
+    "version"        INT          DEFAULT 0
+                                  NULL,
+    "create_by"      BIGINT       NULL,
+    "create_time"    TIMESTAMP(6) NULL,
+    "update_by"      BIGINT       NULL,
+    "update_time"    TIMESTAMP(6) NULL,
+    "remark"         VARCHAR(255) DEFAULT NULL
+                                  NULL
+);
+CREATE TABLE "km"."sys_oper_log"
+(
+    "oper_id"        BIGINT       NOT NULL,
+    "tenant_id"      BIGINT        DEFAULT '0'
+                                  NOT NULL,
+    "title"          VARCHAR(50)   DEFAULT ''
+                                  NULL,
+    "business_type"  INT           DEFAULT 0
+                                  NULL,
+    "method"         VARCHAR(100)  DEFAULT ''
+                                  NULL,
+    "request_method" VARCHAR(10)   DEFAULT ''
+                                  NULL,
+    "operator_type"  INT           DEFAULT 0
+                                  NULL,
+    "oper_name"      VARCHAR(50)   DEFAULT ''
+                                  NULL,
+    "dept_name"      VARCHAR(50)   DEFAULT ''
+                                  NULL,
+    "oper_url"       VARCHAR(255)  DEFAULT ''
+                                  NULL,
+    "oper_ip"        VARCHAR(128)  DEFAULT ''
+                                  NULL,
+    "oper_location"  VARCHAR(255)  DEFAULT ''
+                                  NULL,
+    "oper_param"     VARCHAR(2000) DEFAULT ''
+                                  NULL,
+    "json_result"    VARCHAR(2000) DEFAULT ''
+                                  NULL,
+    "status"         INT           DEFAULT 0
+                                  NULL,
+    "error_msg"      VARCHAR(2000) DEFAULT ''
+                                  NULL,
+    "oper_time"      TIMESTAMP(6) NULL,
+    "cost_time"      BIGINT        DEFAULT 0
+                                  NULL
+);
+CREATE TABLE "km"."sys_oss"
+(
+    "oss_id"        BIGINT       NOT NULL,
+    "tenant_id"     BIGINT       DEFAULT '0'
+                                 NOT NULL,
+    "file_name"     VARCHAR(255) DEFAULT ''
+                                 NOT NULL,
+    "original_name" VARCHAR(255) DEFAULT ''
+                                 NOT NULL,
+    "file_suffix"   VARCHAR(10)  DEFAULT ''
+                                 NOT NULL,
+    "url"           VARCHAR(500) DEFAULT ''
+                                 NOT NULL,
+    "service"       VARCHAR(20)  DEFAULT 'minio'
+                                 NULL,
+    "version"       INT          DEFAULT 0
+                                 NULL,
+    "create_by"     BIGINT       NULL,
+    "create_time"   TIMESTAMP(6) NULL,
+    "update_by"     BIGINT       NULL,
+    "update_time"   TIMESTAMP(6) NULL
+);
+CREATE TABLE "km"."sys_oss_config"
+(
+    "oss_config_id" BIGINT       NOT NULL,
+    "tenant_id"     BIGINT       DEFAULT '0'
+                                 NOT NULL,
+    "config_key"    VARCHAR(20)  DEFAULT ''
+                                 NOT NULL,
+    "access_key"    VARCHAR(255) DEFAULT ''
+                                 NULL,
+    "secret_key"    VARCHAR(255) DEFAULT ''
+                                 NULL,
+    "bucket_name"   VARCHAR(255) DEFAULT ''
+                                 NULL,
+    "prefix"        VARCHAR(255) DEFAULT ''
+                                 NULL,
+    "endpoint"      VARCHAR(255) DEFAULT ''
+                                 NULL,
+    "domain_name"        VARCHAR(255) DEFAULT ''
+                                 NULL,
+    "is_https"      CHAR(1)      DEFAULT 'N'
+                                 NULL,
+    "region"        VARCHAR(255) DEFAULT ''
+                                 NULL,
+    "access_policy" CHAR(1)      DEFAULT '1'
+                                 NOT NULL,
+    "status"        CHAR(1)      DEFAULT '1'
+                                 NULL,
+    "ext1"          VARCHAR(255) DEFAULT ''
+                                 NULL,
+    "version"       INT          DEFAULT 0
+                                 NULL,
+    "create_by"     BIGINT       NULL,
+    "create_time"   TIMESTAMP(6) NULL,
+    "update_by"     BIGINT       NULL,
+    "update_time"   TIMESTAMP(6) NULL,
+    "remark"        VARCHAR(500) DEFAULT ''
+                                 NULL
+);
+CREATE TABLE "km"."sys_post"
+(
+    "post_id"     BIGINT       NOT NULL,
+    "tenant_id"   BIGINT       DEFAULT '0'
+                               NOT NULL,
+    "post_code"   VARCHAR(64)  NOT NULL,
+    "post_name"   VARCHAR(50)  NOT NULL,
+    "post_sort"   INT          NOT NULL,
+    "status"      CHAR(1)      NOT NULL,
+    "version"     INT          DEFAULT 0
+                               NULL,
+    "create_by"   BIGINT       NULL,
+    "create_time" TIMESTAMP(6) NULL,
+    "update_by"   BIGINT       NULL,
+    "update_time" TIMESTAMP(6) NULL,
+    "remark"      VARCHAR(500) DEFAULT NULL
+                               NULL
+);
+CREATE TABLE "km"."sys_role"
+(
+    "role_id"             BIGINT       NOT NULL,
+    "tenant_id"           BIGINT       DEFAULT 0
+                                       NULL,
+    "role_name"           VARCHAR(30)  NOT NULL,
+    "role_key"            VARCHAR(100) NOT NULL,
+    "role_sort"           INT          NOT NULL,
+    "data_scope"          CHAR(1)      DEFAULT '1'
+                                       NULL,
+    "menu_check_strictly" BIT          DEFAULT 0
+                                       NULL,
+    "dept_check_strictly" BIT          DEFAULT 0
+                                       NULL,
+    "status"              CHAR(1)      NOT NULL,
+    "version"             INT          DEFAULT 0
+                                       NULL,
+    "del_flag"            SMALLINT     DEFAULT 0
+                                       NULL,
+    "create_by"           BIGINT       NULL,
+    "create_time"         TIMESTAMP(6) NULL,
+    "update_by"           BIGINT       NULL,
+    "update_time"         TIMESTAMP(6) NULL,
+    "remark"              VARCHAR(500) DEFAULT NULL
+                                       NULL
+);
+CREATE TABLE "km"."sys_role_dept"
+(
+    "role_id" BIGINT NOT NULL,
+    "dept_id" BIGINT NOT NULL
+);
+CREATE TABLE "km"."sys_role_menu"
+(
+    "role_id" BIGINT NOT NULL,
+    "menu_id" BIGINT NOT NULL
+);
+CREATE TABLE "km"."sys_tenant"
+(
+    "tenant_id"         BIGINT       NOT NULL,
+    "contact_user_name" VARCHAR(20)  DEFAULT NULL
+                                     NULL,
+    "contact_phone"     VARCHAR(20)  DEFAULT NULL
+                                     NULL,
+    "company_name"      VARCHAR(50)  DEFAULT NULL
+                                     NULL,
+    "license_number"    VARCHAR(30)  DEFAULT NULL
+                                     NULL,
+    "address"           VARCHAR(200) DEFAULT NULL
+                                     NULL,
+    "intro"             VARCHAR(200) DEFAULT NULL
+                                     NULL,
+    "domain_name"            VARCHAR(200) DEFAULT NULL
+                                     NULL,
+    "remark"            VARCHAR(200) DEFAULT NULL
+                                     NULL,
+    "package_id"        BIGINT       NULL,
+    "expire_time"       TIMESTAMP(6) NULL,
+    "account_count"     INT          DEFAULT '-1'
+                                     NULL,
+    "status"            CHAR(1)      DEFAULT '0'
+                                     NULL,
+    "version"           INT          DEFAULT 0
+                                     NULL,
+    "del_flag"          SMALLINT     DEFAULT 0
+                                     NULL,
+    "create_by"         BIGINT       NULL,
+    "create_time"       TIMESTAMP(6) NULL,
+    "update_by"         BIGINT       NULL,
+    "update_time"       TIMESTAMP(6) NULL
+);
+CREATE TABLE "km"."sys_tenant_package"
+(
+    "package_id"          BIGINT       NOT NULL,
+    "package_name"        VARCHAR(20)   DEFAULT ''
+                                       NULL,
+    "menu_ids"            VARCHAR(3000) DEFAULT ''
+                                       NULL,
+    "remark"              VARCHAR(200)  DEFAULT ''
+                                       NULL,
+    "menu_check_strictly" BIT           DEFAULT 0
+                                       NULL,
+    "status"              CHAR(1)       DEFAULT '0'
+                                       NULL,
+    "version"             INT           DEFAULT 0
+                                       NULL,
+    "del_flag"            SMALLINT      DEFAULT 0
+                                       NULL,
+    "create_by"           BIGINT       NULL,
+    "create_time"         TIMESTAMP(6) NULL,
+    "update_by"           BIGINT       NULL,
+    "update_time"         TIMESTAMP(6) NULL
+);
+CREATE TABLE "km"."sys_user"
+(
+    "user_id"     BIGINT       NOT NULL,
+    "tenant_id"   BIGINT       NULL,
+    "dept_id"     BIGINT       NULL,
+    "user_name"   VARCHAR(30)  NOT NULL,
+    "nick_name"   VARCHAR(30)  NOT NULL,
+    "user_type"   VARCHAR(10)  DEFAULT 'sys_user'
+                               NULL,
+    "email"       VARCHAR(50)  DEFAULT ''
+                               NOT NULL,
+    "phonenumber" VARCHAR(11)  DEFAULT ''
+                               NULL,
+    "gender"      CHAR(1)      DEFAULT '0'
+                               NULL,
+    "avatar"      BIGINT       NULL,
+    "password"    VARCHAR(100) DEFAULT ''
+                               NULL,
+    "status"      CHAR(1)      DEFAULT '0'
+                               NULL,
+    "version"     INT          DEFAULT 0
+                               NULL,
+    "del_flag"    SMALLINT     DEFAULT 0
+                               NULL,
+    "login_ip"    VARCHAR(128) DEFAULT ''
+                               NULL,
+    "login_date"  TIMESTAMP(6) NULL,
+    "create_by"   BIGINT       NULL,
+    "create_time" TIMESTAMP(6) NULL,
+    "update_by"   BIGINT       NULL,
+    "update_time" TIMESTAMP(6) NULL,
+    "remark"      VARCHAR(500) DEFAULT NULL
+                               NULL
+);
+CREATE TABLE "km"."sys_user_post"
+(
+    "user_id" BIGINT NOT NULL,
+    "post_id" BIGINT NOT NULL
+);
+CREATE TABLE "km"."sys_user_role"
+(
+    "user_id" BIGINT NOT NULL,
+    "role_id" BIGINT NOT NULL
+);
+
+ALTER TABLE "km"."gen_table"
+    ADD CONSTRAINT "gen_table_pk" PRIMARY KEY ("table_id");
+
+ALTER TABLE "km"."gen_table_column"
+    ADD CONSTRAINT "gen_table_column_pk" PRIMARY KEY ("column_id");
+
+ALTER TABLE "km"."sys_client"
+    ADD CONSTRAINT "sys_client_pk" PRIMARY KEY ("id");
+
+ALTER TABLE "km"."sys_config"
+    ADD CONSTRAINT "sys_config_pk" PRIMARY KEY ("config_id");
+
+ALTER TABLE "km"."sys_dept"
+    ADD CONSTRAINT "sys_dept_pk" PRIMARY KEY ("dept_id");
+
+ALTER TABLE "km"."sys_dict_data"
+    ADD CONSTRAINT "sys_dict_data_pk" PRIMARY KEY ("dict_code");
+
+ALTER TABLE "km"."sys_dict_type"
+    ADD CONSTRAINT "sys_dict_type_pk" PRIMARY KEY ("dict_id");
+
+ALTER TABLE "km"."sys_logininfor"
+    ADD CONSTRAINT "sys_logininfor_pk" PRIMARY KEY ("info_id");
+
+ALTER TABLE "km"."sys_menu"
+    ADD CONSTRAINT "sys_menu_pk" PRIMARY KEY ("menu_id");
+
+ALTER TABLE "km"."sys_notice"
+    ADD CONSTRAINT "sys_notice_pk" PRIMARY KEY ("notice_id");
+
+ALTER TABLE "km"."sys_oper_log"
+    ADD CONSTRAINT "sys_oper_log_pk" PRIMARY KEY ("oper_id");
+
+ALTER TABLE "km"."sys_oss"
+    ADD CONSTRAINT "sys_oss_pk" PRIMARY KEY ("oss_id");
+
+ALTER TABLE "km"."sys_oss_config"
+    ADD CONSTRAINT "sys_oss_config_pk" PRIMARY KEY ("oss_config_id");
+
+ALTER TABLE "km"."sys_post"
+    ADD CONSTRAINT "sys_post_pk" PRIMARY KEY ("post_id");
+
+ALTER TABLE "km"."sys_role"
+    ADD CONSTRAINT "sys_role_pk" PRIMARY KEY ("role_id");
+
+ALTER TABLE "km"."sys_role_dept"
+    ADD CONSTRAINT "sys_role_dept_pk" PRIMARY KEY ("role_id", "dept_id");
+
+ALTER TABLE "km"."sys_role_menu"
+    ADD CONSTRAINT "sys_role_menu_pk" PRIMARY KEY ("role_id", "menu_id");
+
+ALTER TABLE "km"."sys_tenant"
+    ADD CONSTRAINT "pk_sys_tenant" PRIMARY KEY ("tenant_id");
+
+ALTER TABLE "km"."sys_tenant_package"
+    ADD CONSTRAINT "sys_tenant_package_pkey" PRIMARY KEY ("package_id");
+
+ALTER TABLE "km"."sys_user"
+    ADD CONSTRAINT "sys_user_pk" PRIMARY KEY ("user_id");
+
+ALTER TABLE "km"."sys_user_post"
+    ADD CONSTRAINT "sys_user_post_pk" PRIMARY KEY ("user_id", "post_id");
+
+ALTER TABLE "km"."sys_user_role"
+    ADD CONSTRAINT "sys_user_role_pk" PRIMARY KEY ("user_id", "role_id");
+
+CREATE UNIQUE INDEX "sys_dict_type_index1"
+    ON "km"."sys_dict_type" ("tenant_id", "dict_type");
+
+CREATE INDEX "idx_sys_logininfor_lt"
+    ON "km"."sys_logininfor" ("login_time");
+
+CREATE INDEX "idx_sys_logininfor_s"
+    ON "km"."sys_logininfor" ("status");
+
+CREATE INDEX "idx_sys_oper_log_bt"
+    ON "km"."sys_oper_log" ("business_type");
+
+CREATE INDEX "idx_sys_oper_log_ot"
+    ON "km"."sys_oper_log" ("oper_time");
+
+CREATE INDEX "idx_sys_oper_log_s"
+    ON "km"."sys_oper_log" ("status");
+
+CREATE UNIQUE INDEX "sys_user_unqindex_tenant_username"
+    ON "km"."sys_user" ("tenant_id", "user_name");
+
+COMMENT ON TABLE "km"."gen_table" IS '代码生成业务表';
+
+COMMENT ON COLUMN "km"."gen_table"."table_id" IS '编号';
+
+COMMENT ON COLUMN "km"."gen_table"."table_name" IS '表名称';
+
+COMMENT ON COLUMN "km"."gen_table"."table_comment" IS '表描述';
+
+COMMENT ON COLUMN "km"."gen_table"."sub_table_name" IS '关联子表的表名';
+
+COMMENT ON COLUMN "km"."gen_table"."sub_table_fk_name" IS '子表关联的外键名';
+
+COMMENT ON COLUMN "km"."gen_table"."class_name" IS '实体类名称';
+
+COMMENT ON COLUMN "km"."gen_table"."tpl_category" IS '使用的模板(CRUD单表操作 TREE树表操作)';
+
+COMMENT ON COLUMN "km"."gen_table"."package_name" IS '生成包路径';
+
+COMMENT ON COLUMN "km"."gen_table"."module_name" IS '生成模块名';
+
+COMMENT ON COLUMN "km"."gen_table"."business_name" IS '生成业务名';
+
+COMMENT ON COLUMN "km"."gen_table"."function_name" IS '生成功能名';
+
+COMMENT ON COLUMN "km"."gen_table"."function_author" IS '生成功能作者';
+
+COMMENT ON COLUMN "km"."gen_table"."gen_type" IS '生成代码方式(0zip压缩包 1自定义路径)';
+
+COMMENT ON COLUMN "km"."gen_table"."gen_path" IS '生成路径(不填默认项目路径)';
+
+COMMENT ON COLUMN "km"."gen_table"."options" IS '其它生成选项';
+
+COMMENT ON COLUMN "km"."gen_table"."version" IS '乐观锁';
+
+COMMENT ON COLUMN "km"."gen_table"."create_by" IS '创建者';
+
+COMMENT ON COLUMN "km"."gen_table"."create_time" IS '创建时间';
+
+COMMENT ON COLUMN "km"."gen_table"."update_by" IS '更新者';
+
+COMMENT ON COLUMN "km"."gen_table"."update_time" IS '更新时间';
+
+COMMENT ON COLUMN "km"."gen_table"."remark" IS '备注';
+
+COMMENT ON TABLE "km"."gen_table_column" IS '代码生成业务表字段';
+
+COMMENT ON COLUMN "km"."gen_table_column"."column_id" IS '编号';
+
+COMMENT ON COLUMN "km"."gen_table_column"."table_id" IS '归属表编号';
+
+COMMENT ON COLUMN "km"."gen_table_column"."column_name" IS '列名称';
+
+COMMENT ON COLUMN "km"."gen_table_column"."column_comment" IS '列描述';
+
+COMMENT ON COLUMN "km"."gen_table_column"."column_type" IS '列类型';
+
+COMMENT ON COLUMN "km"."gen_table_column"."java_type" IS 'JAVA类型';
+
+COMMENT ON COLUMN "km"."gen_table_column"."java_field" IS 'JAVA字段名';
+
+COMMENT ON COLUMN "km"."gen_table_column"."is_pk" IS '是否主键(1是)';
+
+COMMENT ON COLUMN "km"."gen_table_column"."is_increment" IS '是否自增(1是)';
+
+COMMENT ON COLUMN "km"."gen_table_column"."is_required" IS '是否必填(1是)';
+
+COMMENT ON COLUMN "km"."gen_table_column"."is_insert" IS '是否为插入字段(1是)';
+
+COMMENT ON COLUMN "km"."gen_table_column"."is_edit" IS '是否编辑字段(1是)';
+
+COMMENT ON COLUMN "km"."gen_table_column"."is_list" IS '是否列表字段(1是)';
+
+COMMENT ON COLUMN "km"."gen_table_column"."is_query" IS '是否查询字段(1是)';
+
+COMMENT ON COLUMN "km"."gen_table_column"."query_type" IS '查询方式(等于、不等于、大于、小于、范围)';
+
+COMMENT ON COLUMN "km"."gen_table_column"."html_type" IS '显示类型(文本框、文本域、下拉框、复选框、单选框、日期控件)';
+
+COMMENT ON COLUMN "km"."gen_table_column"."dict_type" IS '字典类型';
+
+COMMENT ON COLUMN "km"."gen_table_column"."sort" IS '排序';
+
+COMMENT ON COLUMN "km"."gen_table_column"."version" IS '乐观锁';
+
+COMMENT ON COLUMN "km"."gen_table_column"."create_by" IS '创建者';
+
+COMMENT ON COLUMN "km"."gen_table_column"."create_time" IS '创建时间';
+
+COMMENT ON COLUMN "km"."gen_table_column"."update_by" IS '更新者';
+
+COMMENT ON COLUMN "km"."gen_table_column"."update_time" IS '更新时间';
+
+COMMENT ON TABLE "km"."sys_client" IS '系统授权表';
+
+COMMENT ON COLUMN "km"."sys_client"."id" IS '主建';
+
+COMMENT ON COLUMN "km"."sys_client"."client_id" IS '客户端id';
+
+COMMENT ON COLUMN "km"."sys_client"."client_key" IS '客户端key';
+
+COMMENT ON COLUMN "km"."sys_client"."client_secret" IS '客户端秘钥';
+
+COMMENT ON COLUMN "km"."sys_client"."grant_type" IS '授权类型';
+
+COMMENT ON COLUMN "km"."sys_client"."device_type" IS '设备类型';
+
+COMMENT ON COLUMN "km"."sys_client"."active_timeout" IS 'token活跃超时时间';
+
+COMMENT ON COLUMN "km"."sys_client"."timeout" IS 'token固定超时';
+
+COMMENT ON COLUMN "km"."sys_client"."status" IS '状态(0正常 1停用)';
+
+COMMENT ON COLUMN "km"."sys_client"."version" IS '乐观锁';
+
+COMMENT ON COLUMN "km"."sys_client"."del_flag" IS '删除标志(0代表存在 1代表删除)';
+
+COMMENT ON COLUMN "km"."sys_client"."create_by" IS '创建者';
+
+COMMENT ON COLUMN "km"."sys_client"."create_time" IS '创建时间';
+
+COMMENT ON COLUMN "km"."sys_client"."update_by" IS '更新者';
+
+COMMENT ON COLUMN "km"."sys_client"."update_time" IS '更新时间';
+
+COMMENT ON TABLE "km"."sys_config" IS '参数配置表';
+
+COMMENT ON COLUMN "km"."sys_config"."config_id" IS '参数主键';
+
+COMMENT ON COLUMN "km"."sys_config"."tenant_id" IS '租户编号';
+
+COMMENT ON COLUMN "km"."sys_config"."config_name" IS '参数名称';
+
+COMMENT ON COLUMN "km"."sys_config"."config_key" IS '参数键名';
+
+COMMENT ON COLUMN "km"."sys_config"."config_value" IS '参数键值';
+
+COMMENT ON COLUMN "km"."sys_config"."config_type" IS '系统内置(Y是 N否)';
+
+COMMENT ON COLUMN "km"."sys_config"."version" IS '乐观锁';
+
+COMMENT ON COLUMN "km"."sys_config"."create_by" IS '创建者';
+
+COMMENT ON COLUMN "km"."sys_config"."create_time" IS '创建时间';
+
+COMMENT ON COLUMN "km"."sys_config"."update_by" IS '更新者';
+
+COMMENT ON COLUMN "km"."sys_config"."update_time" IS '更新时间';
+
+COMMENT ON COLUMN "km"."sys_config"."remark" IS '备注';
+
+COMMENT ON TABLE "km"."sys_dept" IS '部门表';
+
+COMMENT ON COLUMN "km"."sys_dept"."dept_id" IS '部门ID';
+
+COMMENT ON COLUMN "km"."sys_dept"."tenant_id" IS '租户编号';
+
+COMMENT ON COLUMN "km"."sys_dept"."parent_id" IS '父部门ID';
+
+COMMENT ON COLUMN "km"."sys_dept"."ancestors" IS '祖级列表';
+
+COMMENT ON COLUMN "km"."sys_dept"."dept_name" IS '部门名称';
+
+COMMENT ON COLUMN "km"."sys_dept"."order_num" IS '显示顺序';
+
+COMMENT ON COLUMN "km"."sys_dept"."leader" IS '负责人';
+
+COMMENT ON COLUMN "km"."sys_dept"."phone" IS '联系电话';
+
+COMMENT ON COLUMN "km"."sys_dept"."email" IS '邮箱';
+
+COMMENT ON COLUMN "km"."sys_dept"."status" IS '部门状态(0正常 1停用)';
+
+COMMENT ON COLUMN "km"."sys_dept"."version" IS '乐观锁';
+
+COMMENT ON COLUMN "km"."sys_dept"."del_flag" IS '删除标志(0代表存在 1代表删除)';
+
+COMMENT ON COLUMN "km"."sys_dept"."create_by" IS '创建者';
+
+COMMENT ON COLUMN "km"."sys_dept"."create_time" IS '创建时间';
+
+COMMENT ON COLUMN "km"."sys_dept"."update_by" IS '更新者';
+
+COMMENT ON COLUMN "km"."sys_dept"."update_time" IS '更新时间';
+
+COMMENT ON TABLE "km"."sys_dict_data" IS '字典数据表';
+
+COMMENT ON COLUMN "km"."sys_dict_data"."dict_code" IS '字典编码';
+
+COMMENT ON COLUMN "km"."sys_dict_data"."tenant_id" IS '租户编号';
+
+COMMENT ON COLUMN "km"."sys_dict_data"."dict_sort" IS '字典排序';
+
+COMMENT ON COLUMN "km"."sys_dict_data"."dict_label" IS '字典标签';
+
+COMMENT ON COLUMN "km"."sys_dict_data"."dict_value" IS '字典键值';
+
+COMMENT ON COLUMN "km"."sys_dict_data"."dict_type" IS '字典类型';
+
+COMMENT ON COLUMN "km"."sys_dict_data"."css_class" IS '样式属性(其他样式扩展)';
+
+COMMENT ON COLUMN "km"."sys_dict_data"."list_class" IS '表格回显样式';
+
+COMMENT ON COLUMN "km"."sys_dict_data"."is_default" IS '是否默认(Y是 N否)';
+
+COMMENT ON COLUMN "km"."sys_dict_data"."version" IS '乐观锁';
+
+COMMENT ON COLUMN "km"."sys_dict_data"."create_by" IS '创建者';
+
+COMMENT ON COLUMN "km"."sys_dict_data"."create_time" IS '创建时间';
+
+COMMENT ON COLUMN "km"."sys_dict_data"."update_by" IS '更新者';
+
+COMMENT ON COLUMN "km"."sys_dict_data"."update_time" IS '更新时间';
+
+COMMENT ON COLUMN "km"."sys_dict_data"."remark" IS '备注';
+
+COMMENT ON TABLE "km"."sys_dict_type" IS '字典类型表';
+
+COMMENT ON COLUMN "km"."sys_dict_type"."dict_id" IS '字典主键';
+
+COMMENT ON COLUMN "km"."sys_dict_type"."tenant_id" IS '租户编号';
+
+COMMENT ON COLUMN "km"."sys_dict_type"."dict_name" IS '字典名称';
+
+COMMENT ON COLUMN "km"."sys_dict_type"."dict_type" IS '字典类型';
+
+COMMENT ON COLUMN "km"."sys_dict_type"."version" IS '乐观锁';
+
+COMMENT ON COLUMN "km"."sys_dict_type"."create_by" IS '创建者';
+
+COMMENT ON COLUMN "km"."sys_dict_type"."create_time" IS '创建时间';
+
+COMMENT ON COLUMN "km"."sys_dict_type"."update_by" IS '更新者';
+
+COMMENT ON COLUMN "km"."sys_dict_type"."update_time" IS '更新时间';
+
+COMMENT ON COLUMN "km"."sys_dict_type"."remark" IS '备注';
+
+COMMENT ON TABLE "km"."sys_logininfor" IS '系统访问记录';
+
+COMMENT ON COLUMN "km"."sys_logininfor"."info_id" IS '访问ID';
+
+COMMENT ON COLUMN "km"."sys_logininfor"."tenant_id" IS '租户编号';
+
+COMMENT ON COLUMN "km"."sys_logininfor"."user_name" IS '用户账号';
+
+COMMENT ON COLUMN "km"."sys_logininfor"."client_key" IS '客户端';
+
+COMMENT ON COLUMN "km"."sys_logininfor"."device_type" IS '设备类型';
+
+COMMENT ON COLUMN "km"."sys_logininfor"."ipaddr" IS '登录IP地址';
+
+COMMENT ON COLUMN "km"."sys_logininfor"."login_location" IS '登录地点';
+
+COMMENT ON COLUMN "km"."sys_logininfor"."browser" IS '浏览器类型';
+
+COMMENT ON COLUMN "km"."sys_logininfor"."os" IS '操作系统';
+
+COMMENT ON COLUMN "km"."sys_logininfor"."status" IS '登录状态(0成功 1失败)';
+
+COMMENT ON COLUMN "km"."sys_logininfor"."msg" IS '提示消息';
+
+COMMENT ON COLUMN "km"."sys_logininfor"."login_time" IS '访问时间';
+
+COMMENT ON TABLE "km"."sys_menu" IS '菜单权限表';
+
+COMMENT ON COLUMN "km"."sys_menu"."menu_id" IS '菜单ID';
+
+COMMENT ON COLUMN "km"."sys_menu"."menu_name" IS '菜单名称';
+
+COMMENT ON COLUMN "km"."sys_menu"."parent_id" IS '父菜单ID';
+
+COMMENT ON COLUMN "km"."sys_menu"."order_num" IS '显示顺序';
+
+COMMENT ON COLUMN "km"."sys_menu"."path" IS '路由地址';
+
+COMMENT ON COLUMN "km"."sys_menu"."component" IS '组件路径';
+
+COMMENT ON COLUMN "km"."sys_menu"."component_name" IS '组件名称';
+
+COMMENT ON COLUMN "km"."sys_menu"."query_param" IS '路由参数';
+
+COMMENT ON COLUMN "km"."sys_menu"."is_frame" IS '是否为外链(0是 1否)';
+
+COMMENT ON COLUMN "km"."sys_menu"."is_cache" IS '是否缓存(0缓存 1不缓存)';
+
+COMMENT ON COLUMN "km"."sys_menu"."menu_type" IS '菜单类型(M目录 C菜单 F按钮)';
+
+COMMENT ON COLUMN "km"."sys_menu"."visible" IS '显示状态(0显示 1隐藏)';
+
+COMMENT ON COLUMN "km"."sys_menu"."status" IS '菜单状态(0正常 1停用)';
+
+COMMENT ON COLUMN "km"."sys_menu"."perms" IS '权限标识';
+
+COMMENT ON COLUMN "km"."sys_menu"."icon" IS '菜单图标';
+
+COMMENT ON COLUMN "km"."sys_menu"."version" IS '乐观锁';
+
+COMMENT ON COLUMN "km"."sys_menu"."create_by" IS '创建者';
+
+COMMENT ON COLUMN "km"."sys_menu"."create_time" IS '创建时间';
+
+COMMENT ON COLUMN "km"."sys_menu"."update_by" IS '更新者';
+
+COMMENT ON COLUMN "km"."sys_menu"."update_time" IS '更新时间';
+
+COMMENT ON COLUMN "km"."sys_menu"."remark" IS '备注';
+
+COMMENT ON TABLE "km"."sys_notice" IS '通知公告表';
+
+COMMENT ON COLUMN "km"."sys_notice"."notice_id" IS '公告ID';
+
+COMMENT ON COLUMN "km"."sys_notice"."tenant_id" IS '租户编号';
+
+COMMENT ON COLUMN "km"."sys_notice"."notice_title" IS '公告标题';
+
+COMMENT ON COLUMN "km"."sys_notice"."notice_type" IS '公告类型(1通知 2公告)';
+
+COMMENT ON COLUMN "km"."sys_notice"."notice_content" IS '公告内容';
+
+COMMENT ON COLUMN "km"."sys_notice"."status" IS '公告状态(0正常 1关闭)';
+
+COMMENT ON COLUMN "km"."sys_notice"."version" IS '乐观锁';
+
+COMMENT ON COLUMN "km"."sys_notice"."create_by" IS '创建者';
+
+COMMENT ON COLUMN "km"."sys_notice"."create_time" IS '创建时间';
+
+COMMENT ON COLUMN "km"."sys_notice"."update_by" IS '更新者';
+
+COMMENT ON COLUMN "km"."sys_notice"."update_time" IS '更新时间';
+
+COMMENT ON COLUMN "km"."sys_notice"."remark" IS '备注';
+
+COMMENT ON TABLE "km"."sys_oper_log" IS '操作日志记录';
+
+COMMENT ON COLUMN "km"."sys_oper_log"."oper_id" IS '日志主键';
+
+COMMENT ON COLUMN "km"."sys_oper_log"."tenant_id" IS '租户编号';
+
+COMMENT ON COLUMN "km"."sys_oper_log"."title" IS '模块标题';
+
+COMMENT ON COLUMN "km"."sys_oper_log"."business_type" IS '业务类型(0其它 1新增 2修改 3删除)';
+
+COMMENT ON COLUMN "km"."sys_oper_log"."method" IS '方法名称';
+
+COMMENT ON COLUMN "km"."sys_oper_log"."request_method" IS '请求方式';
+
+COMMENT ON COLUMN "km"."sys_oper_log"."operator_type" IS '操作类别(0其它 1后台用户 2手机端用户)';
+
+COMMENT ON COLUMN "km"."sys_oper_log"."oper_name" IS '操作人员';
+
+COMMENT ON COLUMN "km"."sys_oper_log"."dept_name" IS '部门名称';
+
+COMMENT ON COLUMN "km"."sys_oper_log"."oper_url" IS '请求URL';
+
+COMMENT ON COLUMN "km"."sys_oper_log"."oper_ip" IS '主机地址';
+
+COMMENT ON COLUMN "km"."sys_oper_log"."oper_location" IS '操作地点';
+
+COMMENT ON COLUMN "km"."sys_oper_log"."oper_param" IS '请求参数';
+
+COMMENT ON COLUMN "km"."sys_oper_log"."json_result" IS '返回参数';
+
+COMMENT ON COLUMN "km"."sys_oper_log"."status" IS '操作状态(0正常 1异常)';
+
+COMMENT ON COLUMN "km"."sys_oper_log"."error_msg" IS '错误消息';
+
+COMMENT ON COLUMN "km"."sys_oper_log"."oper_time" IS '操作时间';
+
+COMMENT ON COLUMN "km"."sys_oper_log"."cost_time" IS '消耗时间';
+
+COMMENT ON TABLE "km"."sys_oss" IS 'OSS对象存储表';
+
+COMMENT ON COLUMN "km"."sys_oss"."oss_id" IS '对象存储主键';
+
+COMMENT ON COLUMN "km"."sys_oss"."tenant_id" IS '租户编码';
+
+COMMENT ON COLUMN "km"."sys_oss"."file_name" IS '文件名';
+
+COMMENT ON COLUMN "km"."sys_oss"."original_name" IS '原名';
+
+COMMENT ON COLUMN "km"."sys_oss"."file_suffix" IS '文件后缀名';
+
+COMMENT ON COLUMN "km"."sys_oss"."url" IS 'URL地址';
+
+COMMENT ON COLUMN "km"."sys_oss"."service" IS '服务商';
+
+COMMENT ON COLUMN "km"."sys_oss"."version" IS '乐观锁';
+
+COMMENT ON COLUMN "km"."sys_oss"."create_by" IS '上传人';
+
+COMMENT ON COLUMN "km"."sys_oss"."create_time" IS '创建时间';
+
+COMMENT ON COLUMN "km"."sys_oss"."update_by" IS '更新者';
+
+COMMENT ON COLUMN "km"."sys_oss"."update_time" IS '更新时间';
+
+COMMENT ON TABLE "km"."sys_oss_config" IS '对象存储配置表';
+
+COMMENT ON COLUMN "km"."sys_oss_config"."oss_config_id" IS '主建';
+
+COMMENT ON COLUMN "km"."sys_oss_config"."tenant_id" IS '租户编码';
+
+COMMENT ON COLUMN "km"."sys_oss_config"."config_key" IS '配置key';
+
+COMMENT ON COLUMN "km"."sys_oss_config"."access_key" IS 'accessKey';
+
+COMMENT ON COLUMN "km"."sys_oss_config"."secret_key" IS '秘钥';
+
+COMMENT ON COLUMN "km"."sys_oss_config"."bucket_name" IS '桶名称';
+
+COMMENT ON COLUMN "km"."sys_oss_config"."prefix" IS '前缀';
+
+COMMENT ON COLUMN "km"."sys_oss_config"."endpoint" IS '访问站点';
+
+COMMENT ON COLUMN "km"."sys_oss_config"."domain_name" IS '自定义域名';
+
+COMMENT ON COLUMN "km"."sys_oss_config"."is_https" IS '是否https(Y=是,N=否)';
+
+COMMENT ON COLUMN "km"."sys_oss_config"."region" IS '域';
+
+COMMENT ON COLUMN "km"."sys_oss_config"."access_policy" IS '桶权限类型(0=private 1=public 2=custom)';
+
+COMMENT ON COLUMN "km"."sys_oss_config"."status" IS '是否默认(0=是,1=否)';
+
+COMMENT ON COLUMN "km"."sys_oss_config"."ext1" IS '扩展字段';
+
+COMMENT ON COLUMN "km"."sys_oss_config"."version" IS '乐观锁';
+
+COMMENT ON COLUMN "km"."sys_oss_config"."create_by" IS '创建者';
+
+COMMENT ON COLUMN "km"."sys_oss_config"."create_time" IS '创建时间';
+
+COMMENT ON COLUMN "km"."sys_oss_config"."update_by" IS '更新者';
+
+COMMENT ON COLUMN "km"."sys_oss_config"."update_time" IS '更新时间';
+
+COMMENT ON COLUMN "km"."sys_oss_config"."remark" IS '备注';
+
+COMMENT ON TABLE "km"."sys_post" IS '岗位信息表';
+
+COMMENT ON COLUMN "km"."sys_post"."post_id" IS '岗位ID';
+
+COMMENT ON COLUMN "km"."sys_post"."tenant_id" IS '租户编号';
+
+COMMENT ON COLUMN "km"."sys_post"."post_code" IS '岗位编码';
+
+COMMENT ON COLUMN "km"."sys_post"."post_name" IS '岗位名称';
+
+COMMENT ON COLUMN "km"."sys_post"."post_sort" IS '显示顺序';
+
+COMMENT ON COLUMN "km"."sys_post"."status" IS '状态(0正常 1停用)';
+
+COMMENT ON COLUMN "km"."sys_post"."version" IS '乐观锁';
+
+COMMENT ON COLUMN "km"."sys_post"."create_by" IS '创建者';
+
+COMMENT ON COLUMN "km"."sys_post"."create_time" IS '创建时间';
+
+COMMENT ON COLUMN "km"."sys_post"."update_by" IS '更新者';
+
+COMMENT ON COLUMN "km"."sys_post"."update_time" IS '更新时间';
+
+COMMENT ON COLUMN "km"."sys_post"."remark" IS '备注';
+
+COMMENT ON TABLE "km"."sys_role" IS '角色信息表';
+
+COMMENT ON COLUMN "km"."sys_role"."role_id" IS '角色ID';
+
+COMMENT ON COLUMN "km"."sys_role"."tenant_id" IS '租户编号';
+
+COMMENT ON COLUMN "km"."sys_role"."role_name" IS '角色名称';
+
+COMMENT ON COLUMN "km"."sys_role"."role_key" IS '角色权限字符串';
+
+COMMENT ON COLUMN "km"."sys_role"."role_sort" IS '显示顺序';
+
+COMMENT ON COLUMN "km"."sys_role"."data_scope" IS '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)';
+
+COMMENT ON COLUMN "km"."sys_role"."menu_check_strictly" IS '菜单树选择项是否关联显示';
+
+COMMENT ON COLUMN "km"."sys_role"."dept_check_strictly" IS '部门树选择项是否关联显示';
+
+COMMENT ON COLUMN "km"."sys_role"."status" IS '角色状态(0正常 1停用)';
+
+COMMENT ON COLUMN "km"."sys_role"."version" IS '乐观锁';
+
+COMMENT ON COLUMN "km"."sys_role"."del_flag" IS '删除标志(0代表存在 1代表删除)';
+
+COMMENT ON COLUMN "km"."sys_role"."create_by" IS '创建者';
+
+COMMENT ON COLUMN "km"."sys_role"."create_time" IS '创建时间';
+
+COMMENT ON COLUMN "km"."sys_role"."update_by" IS '更新者';
+
+COMMENT ON COLUMN "km"."sys_role"."update_time" IS '更新时间';
+
+COMMENT ON COLUMN "km"."sys_role"."remark" IS '备注';
+
+COMMENT ON TABLE "km"."sys_role_dept" IS '角色和部门关联表';
+
+COMMENT ON COLUMN "km"."sys_role_dept"."role_id" IS '角色ID';
+
+COMMENT ON COLUMN "km"."sys_role_dept"."dept_id" IS '部门ID';
+
+COMMENT ON TABLE "km"."sys_role_menu" IS '角色和菜单关联表';
+
+COMMENT ON COLUMN "km"."sys_role_menu"."role_id" IS '角色ID';
+
+COMMENT ON COLUMN "km"."sys_role_menu"."menu_id" IS '菜单ID';
+
+COMMENT ON TABLE "km"."sys_tenant" IS '租户表';
+
+COMMENT ON COLUMN "km"."sys_tenant"."tenant_id" IS '租户编号';
+
+COMMENT ON COLUMN "km"."sys_tenant"."contact_user_name" IS '联系人';
+
+COMMENT ON COLUMN "km"."sys_tenant"."contact_phone" IS '联系电话';
+
+COMMENT ON COLUMN "km"."sys_tenant"."company_name" IS '企业名称';
+
+COMMENT ON COLUMN "km"."sys_tenant"."license_number" IS '统一社会信用代码';
+
+COMMENT ON COLUMN "km"."sys_tenant"."address" IS '地址';
+
+COMMENT ON COLUMN "km"."sys_tenant"."intro" IS '企业简介';
+
+COMMENT ON COLUMN "km"."sys_tenant"."domain_name" IS '域名';
+
+COMMENT ON COLUMN "km"."sys_tenant"."remark" IS '备注';
+
+COMMENT ON COLUMN "km"."sys_tenant"."package_id" IS '租户套餐编号';
+
+COMMENT ON COLUMN "km"."sys_tenant"."expire_time" IS '过期时间';
+
+COMMENT ON COLUMN "km"."sys_tenant"."account_count" IS '用户数量(-1不限制)';
+
+COMMENT ON COLUMN "km"."sys_tenant"."status" IS '租户状态(0正常 1停用)';
+
+COMMENT ON COLUMN "km"."sys_tenant"."version" IS '乐观锁';
+
+COMMENT ON COLUMN "km"."sys_tenant"."del_flag" IS '删除标志(0代表存在 1代表删除)';
+
+COMMENT ON COLUMN "km"."sys_tenant"."create_by" IS '创建者';
+
+COMMENT ON COLUMN "km"."sys_tenant"."create_time" IS '创建时间';
+
+COMMENT ON COLUMN "km"."sys_tenant"."update_by" IS '更新者';
+
+COMMENT ON COLUMN "km"."sys_tenant"."update_time" IS '更新时间';
+
+COMMENT ON TABLE "km"."sys_tenant_package" IS '租户套餐表';
+
+COMMENT ON COLUMN "km"."sys_tenant_package"."package_id" IS '租户套餐id';
+
+COMMENT ON COLUMN "km"."sys_tenant_package"."package_name" IS '套餐名称';
+
+COMMENT ON COLUMN "km"."sys_tenant_package"."menu_ids" IS '关联菜单id';
+
+COMMENT ON COLUMN "km"."sys_tenant_package"."remark" IS '备注';
+
+COMMENT ON COLUMN "km"."sys_tenant_package"."status" IS '状态(0正常 1停用)';
+
+COMMENT ON COLUMN "km"."sys_tenant_package"."version" IS '乐观锁';
+
+COMMENT ON COLUMN "km"."sys_tenant_package"."del_flag" IS '删除标志(0代表存在 1代表删除)';
+
+COMMENT ON COLUMN "km"."sys_tenant_package"."create_by" IS '创建者';
+
+COMMENT ON COLUMN "km"."sys_tenant_package"."create_time" IS '创建时间';
+
+COMMENT ON COLUMN "km"."sys_tenant_package"."update_by" IS '更新者';
+
+COMMENT ON COLUMN "km"."sys_tenant_package"."update_time" IS '更新时间';
+
+COMMENT ON TABLE "km"."sys_user" IS '用户信息表';
+
+COMMENT ON COLUMN "km"."sys_user"."user_id" IS '用户ID';
+
+COMMENT ON COLUMN "km"."sys_user"."tenant_id" IS '租户编号';
+
+COMMENT ON COLUMN "km"."sys_user"."dept_id" IS '部门ID';
+
+COMMENT ON COLUMN "km"."sys_user"."user_name" IS '用户账号';
+
+COMMENT ON COLUMN "km"."sys_user"."nick_name" IS '用户昵称';
+
+COMMENT ON COLUMN "km"."sys_user"."user_type" IS '用户类型(sys_user系统用户)';
+
+COMMENT ON COLUMN "km"."sys_user"."email" IS '用户邮箱';
+
+COMMENT ON COLUMN "km"."sys_user"."phonenumber" IS '手机号码';
+
+COMMENT ON COLUMN "km"."sys_user"."gender" IS '用户性别(0男 1女 2未知)';
+
+COMMENT ON COLUMN "km"."sys_user"."avatar" IS '头像地址';
+
+COMMENT ON COLUMN "km"."sys_user"."password" IS '密码';
+
+COMMENT ON COLUMN "km"."sys_user"."status" IS '帐号状态(0正常 1停用)';
+
+COMMENT ON COLUMN "km"."sys_user"."version" IS '乐观锁';
+
+COMMENT ON COLUMN "km"."sys_user"."del_flag" IS '删除标志(0代表存在 1代表删除)';
+
+COMMENT ON COLUMN "km"."sys_user"."login_ip" IS '最后登陆IP';
+
+COMMENT ON COLUMN "km"."sys_user"."login_date" IS '最后登陆时间';
+
+COMMENT ON COLUMN "km"."sys_user"."create_by" IS '创建者';
+
+COMMENT ON COLUMN "km"."sys_user"."create_time" IS '创建时间';
+
+COMMENT ON COLUMN "km"."sys_user"."update_by" IS '更新者';
+
+COMMENT ON COLUMN "km"."sys_user"."update_time" IS '更新时间';
+
+COMMENT ON COLUMN "km"."sys_user"."remark" IS '备注';
+
+COMMENT ON TABLE "km"."sys_user_post" IS '用户与岗位关联表';
+
+COMMENT ON COLUMN "km"."sys_user_post"."user_id" IS '用户ID';
+
+COMMENT ON COLUMN "km"."sys_user_post"."post_id" IS '岗位ID';
+
+COMMENT ON TABLE "km"."sys_user_role" IS '用户和角色关联表';
+
+COMMENT ON COLUMN "km"."sys_user_role"."user_id" IS '用户ID';
+
+COMMENT ON COLUMN "km"."sys_user_role"."role_id" IS '角色ID';
+

+ 927 - 0
km-admin/src/main/resources/db/dm/V1_0_0_1__sys-init-dml.sql

@@ -0,0 +1,927 @@
+
+INSERT INTO "km"."sys_client"("id", "client_id", "client_key", "client_secret", "grant_type", "device_type",
+                              "active_timeout", "timeout", "status", "version", "del_flag", "create_by", "create_time",
+                              "update_by", "update_time")
+VALUES (1, 'e5cd7e4891bf95d1d19206ce24a7b32e', 'pc', 'pc123', 'password,social', 'pc', 1800, 604800, '0', 0, 0, 1,
+        TO_DATE('2024-01-22 11:09:12.997334', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2024-01-22 11:09:12.997334', 'YYYY-MM-DD HH24:MI:SS.FF'));
+INSERT INTO "km"."sys_client"("id", "client_id", "client_key", "client_secret", "grant_type", "device_type",
+                              "active_timeout", "timeout", "status", "version", "del_flag", "create_by", "create_time",
+                              "update_by", "update_time")
+VALUES (2, '428a8310cd442757ae699df5d894f051', 'app', 'app123', 'password,sms,social', 'android', 1800, 604800, '0', 0,
+        0, 1, TO_DATE('2024-01-22 11:09:12.997334', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2024-01-22 11:09:12.997334', 'YYYY-MM-DD HH24:MI:SS.FF'));
+
+INSERT INTO "km"."sys_config"("config_id", "tenant_id", "config_name", "config_key", "config_value", "config_type",
+                              "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1, 0, '主框架页-默认皮肤样式名称', 'sys.index.skinName', 'skin-blue', 'Y', 0, 1,
+        TO_DATE('2024-01-22 11:09:12.997334', 'YYYY-MM-DD HH24:MI:SS.FF'), null, null,
+        '蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow');
+INSERT INTO "km"."sys_config"("config_id", "tenant_id", "config_name", "config_key", "config_value", "config_type",
+                              "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (2, 0, '用户管理-账号初始密码', 'sys.user.initPassword', '123456', 'Y', 0, 1,
+        TO_DATE('2024-01-22 11:09:12.997334', 'YYYY-MM-DD HH24:MI:SS.FF'), null, null, '初始化密码 123456');
+INSERT INTO "km"."sys_config"("config_id", "tenant_id", "config_name", "config_key", "config_value", "config_type",
+                              "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (3, 0, '主框架页-侧边栏主题', 'sys.index.sideTheme', 'theme-dark', 'Y', 0, 1,
+        TO_DATE('2024-01-22 11:09:12.997334', 'YYYY-MM-DD HH24:MI:SS.FF'), null, null,
+        '深色主题theme-dark,浅色主题theme-light');
+INSERT INTO "km"."sys_config"("config_id", "tenant_id", "config_name", "config_key", "config_value", "config_type",
+                              "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (5, 0, '账号自助-是否开启用户注册功能', 'sys.account.registerUser', 'false', 'Y', 0, 1,
+        TO_DATE('2024-01-22 11:09:12.997334', 'YYYY-MM-DD HH24:MI:SS.FF'), null, null,
+        '是否开启注册用户功能(true开启,false关闭)');
+INSERT INTO "km"."sys_config"("config_id", "tenant_id", "config_name", "config_key", "config_value", "config_type",
+                              "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (6, 0, 'OSS预览列表资源开关', 'sys.oss.previewListResource', 'true', 'Y', 0, 1,
+        TO_DATE('2024-01-22 11:09:12.997334', 'YYYY-MM-DD HH24:MI:SS.FF'), null, null, 'true:开启, false:关闭');
+
+INSERT INTO "km"."sys_dept"("dept_id", "tenant_id", "parent_id", "ancestors", "dept_name", "order_num", "leader",
+                            "phone", "email", "status", "version", "del_flag", "create_by", "create_time", "update_by",
+                            "update_time")
+VALUES (108150551736287232, 0, 1, '0,1', 'test2', 2, 'asd', '', null, '0', 2, 0, 1,
+        TO_DATE('2024-01-25 23:32:40.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2024-04-24 17:15:32.358000', 'YYYY-MM-DD HH24:MI:SS.FF'));
+INSERT INTO "km"."sys_dept"("dept_id", "tenant_id", "parent_id", "ancestors", "dept_name", "order_num", "leader",
+                            "phone", "email", "status", "version", "del_flag", "create_by", "create_time", "update_by",
+                            "update_time")
+VALUES (1, 0, 0, '0', 'KM', 0, 'km-flex', '18888888888', 'dataprince@foxmail.com', '0', 5, 0, 1,
+        TO_DATE('2023-06-03 21:32:28.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2024-04-24 17:19:16.446000', 'YYYY-MM-DD HH24:MI:SS.FF'));
+
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (1, 0, 1, '男', '0', 'sys_user_gender', '', '', 'Y', 0, 1,
+        TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2023-09-20 09:53:27.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), '性别男');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (2, 0, 2, '女', '1', 'sys_user_gender', '', '', 'N', 0, 1,
+        TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2023-09-20 09:53:27.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), '性别女');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (3, 0, 3, '未知', '2', 'sys_user_gender', '', '', 'N', 0, 1,
+        TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2023-09-20 09:53:27.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), '性别未知');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (4, 0, 1, '显示', '0', 'sys_show_hide', '', 'primary', 'Y', 0, 1,
+        TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '显示菜单');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (5, 0, 2, '隐藏', '1', 'sys_show_hide', '', 'danger', 'N', 0, 1,
+        TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '隐藏菜单');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (6, 0, 1, '正常', '0', 'sys_normal_disable', '', 'primary', 'Y', 0, 1,
+        TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '正常状态');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (7, 0, 2, '停用', '1', 'sys_normal_disable', '', 'danger', 'N', 0, 1,
+        TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '停用状态');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (8, 0, 1, '正常', '0', 'sys_job_status', '', 'primary', 'Y', 0, 1,
+        TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '正常状态');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (9, 0, 2, '暂停', '1', 'sys_job_status', '', 'danger', 'N', 0, 1,
+        TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '停用状态');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (10, 0, 1, '默认', 'DEFAULT', 'sys_job_group', '', '', 'Y', 0, 1,
+        TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '默认分组');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (11, 0, 2, '系统', 'SYSTEM', 'sys_job_group', '', '', 'N', 0, 1,
+        TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '系统分组');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (12, 0, 1, '是', 'Y', 'sys_yes_no', '', 'primary', 'Y', 0, 1,
+        TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '系统默认是');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (13, 0, 2, '否', 'N', 'sys_yes_no', '', 'danger', 'N', 0, 1,
+        TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '系统默认否');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (14, 0, 1, '通知', '1', 'sys_notice_type', '', 'warning', 'Y', 0, 1,
+        TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '通知');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (15, 0, 2, '公告', '2', 'sys_notice_type', '', 'success', 'N', 0, 1,
+        TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '公告');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (16, 0, 1, '正常', '0', 'sys_notice_status', '', 'primary', 'Y', 0, 1,
+        TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '正常状态');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (17, 0, 2, '关闭', '1', 'sys_notice_status', '', 'danger', 'N', 0, 1,
+        TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '关闭状态');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (18, 0, 99, '其他', '0', 'sys_oper_type', '', 'info', 'N', 0, 1,
+        TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '其他操作');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (19, 0, 1, '新增', '1', 'sys_oper_type', '', 'info', 'N', 0, 1,
+        TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '新增操作');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (20, 0, 2, '修改', '2', 'sys_oper_type', '', 'info', 'N', 0, 1,
+        TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '修改操作');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (21, 0, 3, '删除', '3', 'sys_oper_type', '', 'danger', 'N', 0, 1,
+        TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '删除操作');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (22, 0, 4, '授权', '4', 'sys_oper_type', '', 'primary', 'N', 0, 1,
+        TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '授权操作');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (23, 0, 5, '导出', '5', 'sys_oper_type', '', 'warning', 'N', 0, 1,
+        TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '导出操作');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (24, 0, 6, '导入', '6', 'sys_oper_type', '', 'warning', 'N', 0, 1,
+        TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '导入操作');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (25, 0, 7, '强退', '7', 'sys_oper_type', '', 'danger', 'N', 0, 1,
+        TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '强退操作');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (26, 0, 8, '生成代码', '8', 'sys_oper_type', '', 'warning', 'N', 0, 1,
+        TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '生成操作');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (27, 0, 9, '清空数据', '9', 'sys_oper_type', '', 'danger', 'N', 0, 1,
+        TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '清空操作');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (28, 0, 1, '成功', '0', 'sys_common_status', '', 'primary', 'N', 0, 1,
+        TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '正常状态');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (29, 0, 2, '失败', '1', 'sys_common_status', '', 'danger', 'N', 0, 1,
+        TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '停用状态');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (30, 0, 1, '密码认证', 'password', 'sys_grant_type', 'el-check-tag', 'default', 'N', 0, 1,
+        TO_DATE('2023-10-21 11:10:51.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2023-10-21 11:10:51.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), '密码认证');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (31, 0, 2, '短信认证', 'sms', 'sys_grant_type', 'el-check-tag', 'default', 'N', 0, 1,
+        TO_DATE('2023-10-21 11:10:51.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2023-10-21 11:10:51.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), '短信认证');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (32, 0, 3, '邮件认证', 'email', 'sys_grant_type', 'el-check-tag', 'default', 'N', 0, 1,
+        TO_DATE('2023-10-21 11:10:51.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2023-10-21 11:10:51.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), '邮件认证');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (33, 0, 4, '小程序认证', 'xcx', 'sys_grant_type', 'el-check-tag', 'default', 'N', 0, 1,
+        TO_DATE('2023-10-21 11:10:51.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2023-10-21 11:10:51.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), '小程序认证');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (34, 0, 5, '三方登录认证', 'social', 'sys_grant_type', 'el-check-tag', 'default', 'N', 0, 1,
+        TO_DATE('2023-10-21 11:10:51.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2023-10-21 11:10:51.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), '三方登录认证');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (35, 0, 1, 'PC', 'pc', 'sys_device_type', '', 'default', 'N', 0, 1,
+        TO_DATE('2023-10-21 11:41:10.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2023-10-21 11:41:10.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 'PC');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (36, 0, 2, '安卓', 'android', 'sys_device_type', '', 'default', 'N', 0, 1,
+        TO_DATE('2023-10-21 11:41:10.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2023-10-21 11:41:10.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), '安卓');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (37, 0, 3, 'iOS', 'ios', 'sys_device_type', '', 'default', 'N', 0, 1,
+        TO_DATE('2023-10-21 11:41:10.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2023-10-21 11:41:10.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 'iOS');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (38, 0, 4, '小程序', 'xcx', 'sys_device_type', '', 'default', 'N', 0, 1,
+        TO_DATE('2023-10-21 11:41:10.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2023-10-21 11:41:10.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), '小程序');
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (100, 0, 0, '正常', '0', 'sys_student_status', null, 'primary', 'N', 0, 1,
+        TO_DATE('2023-06-03 21:53:50.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2023-06-03 21:55:24.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), null);
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (101, 0, 0, '停用', '1', 'sys_student_status', null, 'danger', 'N', 0, 1,
+        TO_DATE('2023-06-03 21:54:11.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2023-06-03 21:55:31.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), null);
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (102, 0, 0, '代码', '0', 'sys_student_hobby', null, 'primary', 'N', 0, 1,
+        TO_DATE('2023-06-04 16:40:02.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, null);
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (103, 0, 0, '音乐', '1', 'sys_student_hobby', null, 'success', 'N', 0, 1,
+        TO_DATE('2023-06-04 16:40:24.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, null);
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (104, 0, 0, '电影', '2', 'sys_student_hobby', null, 'warning', 'N', 0, 1,
+        TO_DATE('2023-06-04 16:40:40.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2023-06-04 16:40:49.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), null);
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (105, 0, 0, '计算机', '1', 'sys_goods_type', null, 'primary', 'N', 0, 1,
+        TO_DATE('2023-06-05 07:23:48.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, null);
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (106, 0, 0, '打印设备', '2', 'sys_goods_type', null, 'success', 'N', 0, 1,
+        TO_DATE('2023-06-05 07:24:14.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, null);
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (107, 0, 3, '衣服', '3', 'sys_goods_type', null, 'info', 'N', 0, 1,
+        TO_DATE('2023-06-05 07:24:35.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, null);
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (111, 0, 4, '网络设备', '4', 'sys_goods_type', null, 'default', null, 0, 1,
+        TO_DATE('2023-09-19 17:31:46.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2023-09-19 17:31:46.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), null);
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (65923231885905920, 0, 1, '桌面微机', 'PC', 'sys_app_type', null, 'default', 'N', 0, 1,
+        TO_DATE('2023-10-01 10:56:23.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2023-10-01 10:56:23.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), null);
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (65923379802230784, 0, 2, '平板', 'pad', 'sys_app_type', null, 'default', 'N', 0, 1,
+        TO_DATE('2023-10-01 10:56:59.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2023-10-01 10:56:59.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), null);
+INSERT INTO "km"."sys_dict_data"("dict_code", "tenant_id", "dict_sort", "dict_label", "dict_value", "dict_type",
+                                 "css_class", "list_class", "is_default", "version", "create_by", "create_time",
+                                 "update_by", "update_time", "remark")
+VALUES (65923470604718080, 0, 3, '手机', 'phone', 'sys_app_type', null, 'default', 'N', 0, 1,
+        TO_DATE('2023-10-01 10:57:20.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2023-10-01 10:57:20.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), null);
+
+INSERT INTO "km"."sys_dict_type"("dict_id", "tenant_id", "dict_name", "dict_type", "version", "create_by",
+                                 "create_time", "update_by", "update_time", "remark")
+VALUES (1, 0, '用户性别', 'sys_user_gender', 0, 1, TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2023-09-20 09:53:27.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), '用户性别列表');
+INSERT INTO "km"."sys_dict_type"("dict_id", "tenant_id", "dict_name", "dict_type", "version", "create_by",
+                                 "create_time", "update_by", "update_time", "remark")
+VALUES (2, 0, '菜单状态', 'sys_show_hide', 0, 1, TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        null, '菜单状态列表');
+INSERT INTO "km"."sys_dict_type"("dict_id", "tenant_id", "dict_name", "dict_type", "version", "create_by",
+                                 "create_time", "update_by", "update_time", "remark")
+VALUES (3, 0, '系统开关', 'sys_normal_disable', 0, 1, TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'),
+        1, null, '系统开关列表');
+INSERT INTO "km"."sys_dict_type"("dict_id", "tenant_id", "dict_name", "dict_type", "version", "create_by",
+                                 "create_time", "update_by", "update_time", "remark")
+VALUES (4, 0, '任务状态', 'sys_job_status', 0, 1, TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        null, '任务状态列表');
+INSERT INTO "km"."sys_dict_type"("dict_id", "tenant_id", "dict_name", "dict_type", "version", "create_by",
+                                 "create_time", "update_by", "update_time", "remark")
+VALUES (5, 0, '任务分组', 'sys_job_group', 0, 1, TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        null, '任务分组列表');
+INSERT INTO "km"."sys_dict_type"("dict_id", "tenant_id", "dict_name", "dict_type", "version", "create_by",
+                                 "create_time", "update_by", "update_time", "remark")
+VALUES (6, 0, '系统是否', 'sys_yes_no', 0, 1, TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        null, '系统是否列表');
+INSERT INTO "km"."sys_dict_type"("dict_id", "tenant_id", "dict_name", "dict_type", "version", "create_by",
+                                 "create_time", "update_by", "update_time", "remark")
+VALUES (7, 0, '通知类型', 'sys_notice_type', 0, 1, TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        null, '通知类型列表');
+INSERT INTO "km"."sys_dict_type"("dict_id", "tenant_id", "dict_name", "dict_type", "version", "create_by",
+                                 "create_time", "update_by", "update_time", "remark")
+VALUES (8, 0, '通知状态', 'sys_notice_status', 0, 1, TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'),
+        1, null, '通知状态列表');
+INSERT INTO "km"."sys_dict_type"("dict_id", "tenant_id", "dict_name", "dict_type", "version", "create_by",
+                                 "create_time", "update_by", "update_time", "remark")
+VALUES (9, 0, '操作类型', 'sys_oper_type', 0, 1, TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        null, '操作类型列表');
+INSERT INTO "km"."sys_dict_type"("dict_id", "tenant_id", "dict_name", "dict_type", "version", "create_by",
+                                 "create_time", "update_by", "update_time", "remark")
+VALUES (10, 0, '系统状态', 'sys_common_status', 0, 1, TO_DATE('2023-06-03 21:32:30.000000', 'YYYY-MM-DD HH24:MI:SS.FF'),
+        1, null, '登录状态列表');
+INSERT INTO "km"."sys_dict_type"("dict_id", "tenant_id", "dict_name", "dict_type", "version", "create_by",
+                                 "create_time", "update_by", "update_time", "remark")
+VALUES (11, 0, '授权类型', 'sys_grant_type', 0, 1, TO_DATE('2023-10-21 11:06:33.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2023-10-21 11:06:33.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), '认证授权类型');
+INSERT INTO "km"."sys_dict_type"("dict_id", "tenant_id", "dict_name", "dict_type", "version", "create_by",
+                                 "create_time", "update_by", "update_time", "remark")
+VALUES (12, 0, '设备类型', 'sys_device_type', 0, 1, TO_DATE('2023-10-21 11:38:41.000000', 'YYYY-MM-DD HH24:MI:SS.FF'),
+        1, TO_DATE('2023-10-21 11:38:41.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), '客户端设备类型');
+INSERT INTO "km"."sys_dict_type"("dict_id", "tenant_id", "dict_name", "dict_type", "version", "create_by",
+                                 "create_time", "update_by", "update_time", "remark")
+VALUES (100, 0, '学生状态', 'sys_student_status', 0, 1,
+        TO_DATE('2023-06-03 21:52:47.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2023-06-03 21:53:09.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), null);
+INSERT INTO "km"."sys_dict_type"("dict_id", "tenant_id", "dict_name", "dict_type", "version", "create_by",
+                                 "create_time", "update_by", "update_time", "remark")
+VALUES (101, 0, '爱好', 'sys_student_hobby', 0, 1, TO_DATE('2023-06-04 16:39:16.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        null, null);
+INSERT INTO "km"."sys_dict_type"("dict_id", "tenant_id", "dict_name", "dict_type", "version", "create_by",
+                                 "create_time", "update_by", "update_time", "remark")
+VALUES (102, 0, '商品种类', 'sys_goods_type', 0, 1, TO_DATE('2023-06-05 07:23:20.000000', 'YYYY-MM-DD HH24:MI:SS.FF'),
+        1, null, null);
+INSERT INTO "km"."sys_dict_type"("dict_id", "tenant_id", "dict_name", "dict_type", "version", "create_by",
+                                 "create_time", "update_by", "update_time", "remark")
+VALUES (65922863223361536, 0, '系统类型', 'sys_app_type', 0, 1,
+        TO_DATE('2023-10-01 10:54:55.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2023-10-01 10:54:55.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), '系统类型列表');
+INSERT INTO "km"."sys_dict_type"("dict_id", "tenant_id", "dict_name", "dict_type", "version", "create_by",
+                                 "create_time", "update_by", "update_time", "remark")
+VALUES (118192295228071936, 0, '是否缓存', 'sys_cache', 0, 1,
+        TO_DATE('2024-02-22 16:34:59.090000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2024-02-22 16:34:59.090000', 'YYYY-MM-DD HH24:MI:SS.FF'), null);
+
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1011, '角色导出', 101, 5, '', '', null, '', '1', '0', 'F', '0', '0', 'system:role:export', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1022, '岗位修改', 104, 3, '', '', null, '', '1', '0', 'F', '0', '0', 'system:post:edit', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1016, '部门查询', 103, 1, '', '', null, '', '1', '0', 'F', '0', '0', 'system:dept:query', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1018, '部门修改', 103, 3, '', '', null, '', '1', '0', 'F', '0', '0', 'system:dept:edit', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1020, '岗位查询', 104, 1, '', '', null, '', '1', '0', 'F', '0', '0', 'system:post:query', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1010, '角色删除', 101, 4, '', '', null, '', '1', '0', 'F', '0', '0', 'system:role:remove', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1007, '角色查询', 101, 1, '', '', null, '', '1', '0', 'F', '0', '0', 'system:role:query', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1029, '字典导出', 105, 5, '', '', null, '', '1', '0', 'F', '0', '0', 'system:dict:export', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1015, '菜单删除', 102, 4, '', '', null, '', '1', '0', 'F', '0', '0', 'system:menu:remove', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1014, '菜单修改', 102, 3, '', '', null, '', '1', '0', 'F', '0', '0', 'system:menu:edit', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1013, '菜单新增', 102, 2, '', '', null, '', '1', '0', 'F', '0', '0', 'system:menu:add', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1023, '岗位删除', 104, 4, '', '', null, '', '1', '0', 'F', '0', '0', 'system:post:remove', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1012, '菜单查询', 102, 1, '', '', null, '', '1', '0', 'F', '0', '0', 'system:menu:query', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1024, '岗位导出', 104, 5, '', '', null, '', '1', '0', 'F', '0', '0', 'system:post:export', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1059, '预览代码', 116, 5, '', '', null, '', '1', '0', 'F', '0', '0', 'tool:gen:preview', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1060, '生成代码', 116, 6, '', '', null, '', '1', '0', 'F', '0', '0', 'tool:gen:code', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1008, '角色新增', 101, 2, '', '', null, '', '1', '0', 'F', '0', '0', 'system:role:add', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1600, '文件查询', 118, 1, '', '', null, '', '1', '0', 'F', '0', '0', 'system:oss:query', '', 0, 1,
+        TO_DATE('2023-12-25 15:09:14.342224', 'YYYY-MM-DD HH24:MI:SS.FF'), null, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1601, '文件上传', 118, 2, '', '', null, '', '1', '0', 'F', '0', '0', 'system:oss:upload', '', 0, 1,
+        TO_DATE('2023-12-25 15:09:14.342224', 'YYYY-MM-DD HH24:MI:SS.FF'), null, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1602, '文件下载', 118, 3, '', '', null, '', '1', '0', 'F', '0', '0', 'system:oss:download', '', 0, 1,
+        TO_DATE('2023-12-25 15:09:14.342224', 'YYYY-MM-DD HH24:MI:SS.FF'), null, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1017, '部门新增', 103, 2, '', '', null, '', '1', '0', 'F', '0', '0', 'system:dept:add', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1021, '岗位新增', 104, 2, '', '', null, '', '1', '0', 'F', '0', '0', 'system:post:add', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1019, '部门删除', 103, 4, '', '', null, '', '1', '0', 'F', '0', '0', 'system:dept:remove', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1009, '角色修改', 101, 3, '', '', null, '', '1', '0', 'F', '0', '0', 'system:role:edit', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1025, '字典查询', 105, 1, '', '', null, '', '1', '0', 'F', '0', '0', 'system:dict:query', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1026, '字典新增', 105, 2, '', '', null, '', '1', '0', 'F', '0', '0', 'system:dict:add', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1027, '字典修改', 105, 3, '', '', null, '', '1', '0', 'F', '0', '0', 'system:dict:edit', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1028, '字典删除', 105, 4, '', '', null, '', '1', '0', 'F', '0', '0', 'system:dict:remove', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1039, '操作查询', 500, 1, '', '', null, '', '1', '0', 'F', '0', '0', 'monitor:operlog:query', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1040, '操作删除', 500, 2, '', '', null, '', '1', '0', 'F', '0', '0', 'monitor:operlog:remove', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1041, '日志导出', 500, 3, '', '', null, '', '1', '0', 'F', '0', '0', 'monitor:operlog:export', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1042, '登录查询', 501, 1, '', '', null, '', '1', '0', 'F', '0', '0', 'monitor:logininfor:query', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1043, '登录删除', 501, 2, '', '', null, '', '1', '0', 'F', '0', '0', 'monitor:logininfor:remove', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1044, '日志导出', 501, 3, '', '', null, '', '1', '0', 'F', '0', '0', 'monitor:logininfor:export', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1045, '账户解锁', 501, 4, '', '', null, '', '1', '0', 'F', '0', '0', 'monitor:logininfor:unlock', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1000, '用户查询', 100, 1, '', '', null, '', '1', '0', 'F', '0', '0', 'system:user:query', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1055, '生成查询', 116, 1, '', '', null, '', '1', '0', 'F', '0', '0', 'tool:gen:query', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1056, '生成修改', 116, 2, '', '', null, '', '1', '0', 'F', '0', '0', 'tool:gen:edit', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1057, '生成删除', 116, 3, '', '', null, '', '1', '0', 'F', '0', '0', 'tool:gen:remove', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1001, '用户新增', 100, 2, '', '', null, '', '1', '0', 'F', '0', '0', 'system:user:add', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1002, '用户修改', 100, 3, '', '', null, '', '1', '0', 'F', '0', '0', 'system:user:edit', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1603, '文件删除', 118, 4, '', '', null, '', '1', '0', 'F', '0', '0', 'system:oss:remove', '', 0, 1,
+        TO_DATE('2023-12-25 15:09:14.342224', 'YYYY-MM-DD HH24:MI:SS.FF'), null, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1620, '配置列表', 118, 5, '', '', null, '', '1', '0', 'F', '0', '0', 'system:ossConfig:list', '', 0, 1,
+        TO_DATE('2023-12-25 15:09:14.342224', 'YYYY-MM-DD HH24:MI:SS.FF'), null, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1621, '配置添加', 118, 6, '', '', null, '', '1', '0', 'F', '0', '0', 'system:ossConfig:add', '', 0, 1,
+        TO_DATE('2023-12-25 15:09:14.342224', 'YYYY-MM-DD HH24:MI:SS.FF'), null, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1622, '配置编辑', 118, 6, '', '', null, '', '1', '0', 'F', '0', '0', 'system:ossConfig:edit', '', 0, 1,
+        TO_DATE('2023-12-25 15:09:14.342224', 'YYYY-MM-DD HH24:MI:SS.FF'), null, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1623, '配置删除', 118, 6, '', '', null, '', '1', '0', 'F', '0', '0', 'system:ossConfig:remove', '', 0, 1,
+        TO_DATE('2023-12-25 15:09:14.342224', 'YYYY-MM-DD HH24:MI:SS.FF'), null, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1003, '用户删除', 100, 4, '', '', null, '', '1', '0', 'F', '0', '0', 'system:user:remove', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1004, '用户导出', 100, 5, '', '', null, '', '1', '0', 'F', '0', '0', 'system:user:export', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1005, '用户导入', 100, 6, '', '', null, '', '1', '0', 'F', '0', '0', 'system:user:import', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1006, '重置密码', 100, 7, '', '', null, '', '1', '0', 'F', '0', '0', 'system:user:resetPwd', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1058, '导入代码', 116, 4, '', '', null, '', '1', '0', 'F', '0', '0', 'tool:gen:import', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (103, '部门管理', 1, 4, '/system/dept', 'system/dept/index', null, '', '1', '0', 'C', '0', '0',
+        'system:dept:list', '', 0, 1, TO_DATE('2023-06-03 21:32:28.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null,
+        '部门管理菜单');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (3, '系统工具', 0, 4, 'tool', null, null, '', '1', '0', 'M', '0', '0', '', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:28.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2023-12-27 21:27:08.258000', 'YYYY-MM-DD HH24:MI:SS.FF'), '系统工具目录');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (100, '用户管理', 1, 1, '/system/user', 'system/user/index', 'User', '', 'N', 'Y', 'C', '0', '0',
+        'system:user:list', '', 8, 1, TO_DATE('2023-06-03 21:32:28.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2024-02-22 19:05:30.941000', 'YYYY-MM-DD HH24:MI:SS.FF'), '用户管理菜单');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (101, '角色管理', 1, 2, '/system/role', 'system/role/index', null, '', '1', '0', 'C', '0', '0',
+        'system:role:list', '', 0, 1, TO_DATE('2023-06-03 21:32:28.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null,
+        '角色管理菜单');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (102, '菜单管理', 1, 3, '/system/menu', 'system/menu/index', null, '', '1', '0', 'C', '0', '0',
+        'system:menu:list', '', 0, 1, TO_DATE('2023-06-03 21:32:28.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null,
+        '菜单管理菜单');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1, '系统管理', 0, 1, 'system', null, null, '', '1', '0', 'M', '0', '0', '', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:28.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '系统管理目录');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (116, '代码生成', 3, 0, '/tool/gen', 'tool/gen/index', 'gen', '', 'N', 'Y', 'C', '0', '0', 'tool:gen:list', '',
+        2, 1, TO_DATE('2023-06-03 21:32:28.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2024-02-22 19:22:35.681000', 'YYYY-MM-DD HH24:MI:SS.FF'), '代码生成菜单');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (105, '字典管理', 1, 6, '/system/dict', 'system/dict/index', null, '', '1', '0', 'C', '0', '0',
+        'system:dict:list', '', 0, 1, TO_DATE('2023-06-03 21:32:28.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null,
+        '字典管理菜单');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (500, '操作日志', 108, 1, '/monitor/operlog', 'monitor/operlog/index', null, '', '1', '0', 'C', '0', '0',
+        'monitor:operlog:list', '', 0, 1, TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null,
+        '操作日志菜单');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (104, '岗位管理', 1, 5, '/system/post', 'system/post/index', null, '', '1', '0', 'C', '0', '0',
+        'system:post:list', '', 0, 1, TO_DATE('2023-06-03 21:32:28.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null,
+        '岗位管理菜单');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (108, '日志管理', 1, 9, 'log', '', null, '', '1', '0', 'M', '0', '0', '', '', 0, 1,
+        TO_DATE('2023-06-03 21:32:28.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '日志管理菜单');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (501, '登录日志', 108, 2, '/monitor/logininfor', 'monitor/logininfor/index', null, '', '1', '0', 'C', '0', '0',
+        'monitor:logininfor:list', '', 0, 1, TO_DATE('2023-06-03 21:32:29.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null,
+        '登录日志菜单');
+INSERT INTO "km"."sys_menu"("menu_id", "menu_name", "parent_id", "order_num", "path", "component", "component_name",
+                            "query_param", "is_frame", "is_cache", "menu_type", "visible", "status", "perms", "icon",
+                            "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (118, '文件管理', 1, 10, '/system/oss', 'system/oss/index', null, '', '1', '0', 'C', '0', '0', 'system:oss:list',
+        '', 0, 1, TO_DATE('2023-12-03 08:46:11.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2023-12-03 08:46:11.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), '文件管理菜单');
+
+INSERT INTO "km"."sys_oss_config"("oss_config_id", "tenant_id", "config_key", "access_key", "secret_key", "bucket_name",
+                                  "prefix", "endpoint", "domain_name", "is_https", "region", "access_policy", "status",
+                                  "ext1", "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1, 0, 'minio', 'km-flex', 'km-flex@369', 'km-flex', '', '127.0.0.1:9000', '', 'N', '', '1', '0', '', 0,
+        1, TO_DATE('2023-11-30 11:54:13.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2023-12-03 09:07:42.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), null);
+INSERT INTO "km"."sys_oss_config"("oss_config_id", "tenant_id", "config_key", "access_key", "secret_key", "bucket_name",
+                                  "prefix", "endpoint", "domain_name", "is_https", "region", "access_policy", "status",
+                                  "ext1", "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (2, 0, 'qiniu', 'XXXXXXXXXXXXXXX', 'XXXXXXXXXXXXXXX', 'km-flex', '', 's3-cn-north-1.qiniucs.com', '', 'N', '',
+        '1', '1', '', 0, 1, TO_DATE('2023-11-30 11:54:13.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2023-12-01 14:25:43.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), null);
+INSERT INTO "km"."sys_oss_config"("oss_config_id", "tenant_id", "config_key", "access_key", "secret_key", "bucket_name",
+                                  "prefix", "endpoint", "domain_name", "is_https", "region", "access_policy", "status",
+                                  "ext1", "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (3, 0, 'aliyun', 'XXXXXXXXXXXXXXX', 'XXXXXXXXXXXXXXX', 'km-flex', '', 'oss-cn-beijing.aliyuncs.com', '', 'N',
+        '', '1', '1', '', 0, 1, TO_DATE('2023-11-30 11:54:13.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2023-12-01 14:25:48.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), null);
+INSERT INTO "km"."sys_oss_config"("oss_config_id", "tenant_id", "config_key", "access_key", "secret_key", "bucket_name",
+                                  "prefix", "endpoint", "domain_name", "is_https", "region", "access_policy", "status",
+                                  "ext1", "version", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (4, 0, 'qcloud', 'XXXXXXXXXXXXXXX', 'XXXXXXXXXXXXXXX', 'km-flex', '', 'cos.ap-beijing.myqcloud.com', '', 'N',
+        '', '1', '1', '', 0, 1, TO_DATE('2023-11-30 11:54:13.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2023-12-01 14:26:02.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), null);
+
+INSERT INTO "km"."sys_post"("post_id", "tenant_id", "post_code", "post_name", "post_sort", "status", "version",
+                            "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1, 0, 'ceo', '董事长', 1, '0', 0, 1, TO_DATE('2023-06-03 21:32:28.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2023-09-02 15:43:55.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), '');
+INSERT INTO "km"."sys_post"("post_id", "tenant_id", "post_code", "post_name", "post_sort", "status", "version",
+                            "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (2, 0, 'se', '项目经理', 2, '0', 0, 1, TO_DATE('2023-06-03 21:32:28.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        null, '');
+INSERT INTO "km"."sys_post"("post_id", "tenant_id", "post_code", "post_name", "post_sort", "status", "version",
+                            "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (3, 0, 'hr', '人力资源', 3, '0', 0, 1, TO_DATE('2023-06-03 21:32:28.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        null, '');
+INSERT INTO "km"."sys_post"("post_id", "tenant_id", "post_code", "post_name", "post_sort", "status", "version",
+                            "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (4, 0, 'users', '普通员工', 4, '0', 0, 1, TO_DATE('2023-06-03 21:32:28.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2023-07-13 21:30:24.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), '');
+INSERT INTO "km"."sys_post"("post_id", "tenant_id", "post_code", "post_name", "post_sort", "status", "version",
+                            "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (5, 0, 'deptLeader', '部门管理岗', 5, '0', 0, 1,
+        TO_DATE('2023-10-01 10:33:39.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2023-10-01 10:33:39.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), '部门负责人岗位');
+
+INSERT INTO "km"."sys_role"("role_id", "tenant_id", "role_name", "role_key", "role_sort", "data_scope",
+                            "menu_check_strictly", "dept_check_strictly", "status", "version", "del_flag", "create_by",
+                            "create_time", "update_by", "update_time", "remark")
+VALUES (1, 0, '超级管理员角色', 'admin', 1, '1', 1, 1, '0', 0, 0, 1,
+        TO_DATE('2023-06-03 21:32:28.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1, null, '超级管理员');
+INSERT INTO "km"."sys_role"("role_id", "tenant_id", "role_name", "role_key", "role_sort", "data_scope",
+                            "menu_check_strictly", "dept_check_strictly", "status", "version", "del_flag", "create_by",
+                            "create_time", "update_by", "update_time", "remark")
+VALUES (140435060696010752, 0, 'test', 'common', 1, '1', 0, 0, '0', 1, 0, 1,
+        TO_DATE('2024-04-24 01:39:47.628000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2024-04-24 16:01:20.229000', 'YYYY-MM-DD HH24:MI:SS.FF'), null);
+
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 3);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 100);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 101);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 102);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 103);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 104);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 105);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 108);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 116);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 118);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 500);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 501);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1000);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1001);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1002);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1003);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1004);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1005);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1006);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1007);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1008);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1009);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1010);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1011);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1012);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1013);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1014);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1015);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1016);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1017);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1018);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1019);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1020);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1021);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1022);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1023);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1024);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1025);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1026);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1027);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1028);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1029);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1039);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1040);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1041);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1042);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1043);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1044);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1045);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1055);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1056);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1057);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1058);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1059);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1060);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1600);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1601);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1602);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1603);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1620);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1621);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1622);
+INSERT INTO "km"."sys_role_menu"("role_id", "menu_id")
+VALUES (140435060696010752, 1623);
+
+INSERT INTO "km"."sys_tenant"("tenant_id", "contact_user_name", "contact_phone", "company_name", "license_number",
+                              "address", "intro", "domain_name", "remark", "package_id", "expire_time", "account_count",
+                              "status", "version", "del_flag", "create_by", "create_time", "update_by", "update_time")
+VALUES (0, '联系人', '18888888888', 'KM', null, null, 'km多租户通用后台管理管理系统', null, null,
+        null, null, -1, '0', 0, 0, 1, TO_DATE('2023-08-13 08:08:08.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), null, null);
+
+INSERT INTO "km"."sys_user"("user_id", "tenant_id", "dept_id", "user_name", "nick_name", "user_type", "email",
+                            "phonenumber", "gender", "avatar", "password", "status", "version", "del_flag", "login_ip",
+                            "login_date", "create_by", "create_time", "update_by", "update_time", "remark")
+VALUES (1, 0, 1, 'superadmin', '超级管理员', 'sys_user', 'ry@163.com', '15888888888', '1', null,
+        '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', 83, 0, '0:0:0:0:0:0:0:1',
+        TO_DATE('2024-04-24 15:06:38.839000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2023-06-03 21:32:28.000000', 'YYYY-MM-DD HH24:MI:SS.FF'), 1,
+        TO_DATE('2024-04-24 15:06:38.845000', 'YYYY-MM-DD HH24:MI:SS.FF'), '管理员');

+ 210 - 0
km-admin/src/main/resources/db/mysql/powerjob.sql

@@ -0,0 +1,210 @@
+-- 导出  表 ruoyi-flex.pj_app_info 结构
+DROP TABLE IF EXISTS `pj_app_info`;
+CREATE TABLE IF NOT EXISTS `pj_app_info` (
+     `id` bigint NOT NULL AUTO_INCREMENT,
+     `app_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+     `current_server` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+     `gmt_create` datetime(6) DEFAULT NULL,
+     `gmt_modified` datetime(6) DEFAULT NULL,
+     `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+     PRIMARY KEY (`id`) USING BTREE,
+     UNIQUE KEY `uidx01_app_info` (`app_name`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC;
+
+-- 导出  表 ruoyi-flex.pj_container_info 结构
+DROP TABLE IF EXISTS `pj_container_info`;
+CREATE TABLE IF NOT EXISTS `pj_container_info` (
+       `id` bigint NOT NULL AUTO_INCREMENT,
+       `app_id` bigint DEFAULT NULL,
+       `container_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+       `gmt_create` datetime(6) DEFAULT NULL,
+       `gmt_modified` datetime(6) DEFAULT NULL,
+       `last_deploy_time` datetime(6) DEFAULT NULL,
+       `source_info` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+       `source_type` int DEFAULT NULL,
+       `status` int DEFAULT NULL,
+       `version` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+       PRIMARY KEY (`id`) USING BTREE,
+       KEY `idx01_container_info` (`app_id`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC;
+
+-- 导出  表 ruoyi-flex.pj_instance_info 结构
+DROP TABLE IF EXISTS `pj_instance_info`;
+CREATE TABLE IF NOT EXISTS `pj_instance_info` (
+      `id` bigint NOT NULL AUTO_INCREMENT,
+      `actual_trigger_time` bigint DEFAULT NULL,
+      `app_id` bigint DEFAULT NULL,
+      `expected_trigger_time` bigint DEFAULT NULL,
+      `finished_time` bigint DEFAULT NULL,
+      `gmt_create` datetime(6) DEFAULT NULL,
+      `gmt_modified` datetime(6) DEFAULT NULL,
+      `instance_id` bigint DEFAULT NULL,
+      `instance_params` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin,
+      `job_id` bigint DEFAULT NULL,
+      `job_params` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin,
+      `last_report_time` bigint DEFAULT NULL,
+      `result` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin,
+      `running_times` bigint DEFAULT NULL,
+      `status` int DEFAULT NULL,
+      `task_tracker_address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+      `type` int DEFAULT NULL,
+      `wf_instance_id` bigint DEFAULT NULL,
+      PRIMARY KEY (`id`) USING BTREE,
+      KEY `idx01_instance_info` (`job_id`,`status`) USING BTREE,
+      KEY `idx02_instance_info` (`app_id`,`status`) USING BTREE,
+      KEY `idx03_instance_info` (`instance_id`,`status`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC;
+
+-- 导出  表 ruoyi-flex.pj_job_info 结构
+DROP TABLE IF EXISTS `pj_job_info`;
+CREATE TABLE IF NOT EXISTS `pj_job_info` (
+     `id` bigint NOT NULL AUTO_INCREMENT,
+     `alarm_config` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+     `app_id` bigint DEFAULT NULL,
+     `concurrency` int DEFAULT NULL,
+     `designated_workers` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+     `dispatch_strategy` int DEFAULT NULL,
+     `execute_type` int DEFAULT NULL,
+     `extra` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+     `gmt_create` datetime(6) DEFAULT NULL,
+     `gmt_modified` datetime(6) DEFAULT NULL,
+     `instance_retry_num` int DEFAULT NULL,
+     `instance_time_limit` bigint DEFAULT NULL,
+     `job_description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+     `job_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+     `job_params` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin,
+     `lifecycle` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+     `log_config` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+     `max_instance_num` int DEFAULT NULL,
+     `max_worker_count` int DEFAULT NULL,
+     `min_cpu_cores` double NOT NULL,
+     `min_disk_space` double NOT NULL,
+     `min_memory_space` double NOT NULL,
+     `next_trigger_time` bigint DEFAULT NULL,
+     `notify_user_ids` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+     `processor_info` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+     `processor_type` int DEFAULT NULL,
+     `status` int DEFAULT NULL,
+     `tag` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+     `task_retry_num` int DEFAULT NULL,
+     `time_expression` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+     `time_expression_type` int DEFAULT NULL,
+     PRIMARY KEY (`id`) USING BTREE,
+     KEY `idx01_job_info` (`app_id`,`status`,`time_expression_type`,`next_trigger_time`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC;
+
+-- 导出  表 ruoyi-flex.pj_oms_lock 结构
+DROP TABLE IF EXISTS `pj_oms_lock`;
+CREATE TABLE IF NOT EXISTS `pj_oms_lock` (
+     `id` bigint NOT NULL AUTO_INCREMENT,
+     `gmt_create` datetime(6) DEFAULT NULL,
+     `gmt_modified` datetime(6) DEFAULT NULL,
+     `lock_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+     `max_lock_time` bigint DEFAULT NULL,
+     `ownerip` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+     PRIMARY KEY (`id`) USING BTREE,
+     UNIQUE KEY `uidx01_oms_lock` (`lock_name`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=70 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC;
+
+-- 正在导出表  ruoyi-flex.pj_oms_lock 的数据:~0 rows (大约)
+
+-- 导出  表 ruoyi-flex.pj_server_info 结构
+DROP TABLE IF EXISTS `pj_server_info`;
+CREATE TABLE IF NOT EXISTS `pj_server_info` (
+    `id` bigint NOT NULL AUTO_INCREMENT,
+    `gmt_create` datetime(6) DEFAULT NULL,
+    `gmt_modified` datetime(6) DEFAULT NULL,
+    `ip` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+    PRIMARY KEY (`id`) USING BTREE,
+    UNIQUE KEY `uidx01_server_info` (`ip`) USING BTREE,
+    KEY `idx01_server_info` (`gmt_modified`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC;
+
+-- 导出  表 ruoyi-flex.pj_user_info 结构
+DROP TABLE IF EXISTS `pj_user_info`;
+CREATE TABLE IF NOT EXISTS `pj_user_info` (
+      `id` bigint NOT NULL AUTO_INCREMENT,
+      `email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+      `extra` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+      `gmt_create` datetime(6) DEFAULT NULL,
+      `gmt_modified` datetime(6) DEFAULT NULL,
+      `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+      `phone` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+      `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+      `web_hook` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+      PRIMARY KEY (`id`) USING BTREE,
+      KEY `uidx01_user_info` (`username`) USING BTREE,
+      KEY `uidx02_user_info` (`email`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC;
+
+-- 正在导出表  ruoyi-flex.pj_user_info 的数据:~0 rows (大约)
+
+-- 导出  表 ruoyi-flex.pj_workflow_info 结构
+DROP TABLE IF EXISTS `pj_workflow_info`;
+CREATE TABLE IF NOT EXISTS `pj_workflow_info` (
+      `id` bigint NOT NULL AUTO_INCREMENT,
+      `app_id` bigint DEFAULT NULL,
+      `extra` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+      `gmt_create` datetime(6) DEFAULT NULL,
+      `gmt_modified` datetime(6) DEFAULT NULL,
+      `lifecycle` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+      `max_wf_instance_num` int DEFAULT NULL,
+      `next_trigger_time` bigint DEFAULT NULL,
+      `notify_user_ids` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+      `pedag` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin,
+      `status` int DEFAULT NULL,
+      `time_expression` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+      `time_expression_type` int DEFAULT NULL,
+      `wf_description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+      `wf_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+      PRIMARY KEY (`id`) USING BTREE,
+      KEY `idx01_workflow_info` (`app_id`,`status`,`time_expression_type`,`next_trigger_time`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC;
+
+-- 正在导出表  ruoyi-flex.pj_workflow_info 的数据:~0 rows (大约)
+
+-- 导出  表 ruoyi-flex.pj_workflow_instance_info 结构
+DROP TABLE IF EXISTS `pj_workflow_instance_info`;
+CREATE TABLE IF NOT EXISTS `pj_workflow_instance_info` (
+       `id` bigint NOT NULL AUTO_INCREMENT,
+       `actual_trigger_time` bigint DEFAULT NULL,
+       `app_id` bigint DEFAULT NULL,
+       `dag` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin,
+       `expected_trigger_time` bigint DEFAULT NULL,
+       `finished_time` bigint DEFAULT NULL,
+       `gmt_create` datetime(6) DEFAULT NULL,
+       `gmt_modified` datetime(6) DEFAULT NULL,
+       `parent_wf_instance_id` bigint DEFAULT NULL,
+       `result` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin,
+       `status` int DEFAULT NULL,
+       `wf_context` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin,
+       `wf_init_params` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin,
+       `wf_instance_id` bigint DEFAULT NULL,
+       `workflow_id` bigint DEFAULT NULL,
+       PRIMARY KEY (`id`) USING BTREE,
+       UNIQUE KEY `uidx01_wf_instance` (`wf_instance_id`) USING BTREE,
+       KEY `idx01_wf_instance` (`workflow_id`,`status`,`app_id`,`expected_trigger_time`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC;
+
+-- 正在导出表  ruoyi-flex.pj_workflow_instance_info 的数据:~0 rows (大约)
+
+-- 导出  表 ruoyi-flex.pj_workflow_node_info 结构
+DROP TABLE IF EXISTS `pj_workflow_node_info`;
+CREATE TABLE IF NOT EXISTS `pj_workflow_node_info` (
+       `id` bigint NOT NULL AUTO_INCREMENT,
+       `app_id` bigint NOT NULL,
+       `enable` bit(1) NOT NULL,
+       `extra` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin,
+       `gmt_create` datetime(6) DEFAULT NULL,
+       `gmt_modified` datetime(6) DEFAULT NULL,
+       `job_id` bigint DEFAULT NULL,
+       `node_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
+       `node_params` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin,
+       `skip_when_failed` bit(1) NOT NULL,
+       `type` int DEFAULT NULL,
+       `workflow_id` bigint DEFAULT NULL,
+       PRIMARY KEY (`id`) USING BTREE,
+       KEY `idx01_workflow_node_info` (`workflow_id`,`gmt_create`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC;
+
+-- 正在导出表  ruoyi-flex.pj_workflow_node_info 的数据:~0 rows (大约)

+ 206 - 0
km-admin/src/main/resources/db/postgresql/powerjob.sql

@@ -0,0 +1,206 @@
+-- 导出  表 public.pj_app_info 结构
+DROP TABLE IF EXISTS "pj_app_info";
+CREATE TABLE IF NOT EXISTS "pj_app_info" (
+     "id" BIGINT NOT NULL,
+     "app_name" VARCHAR(255) NULL DEFAULT NULL,
+    "current_server" VARCHAR(255) NULL DEFAULT NULL,
+    "gmt_create" TIMESTAMP NULL DEFAULT NULL,
+    "gmt_modified" TIMESTAMP NULL DEFAULT NULL,
+    "password" VARCHAR(255) NULL DEFAULT NULL,
+    CONSTRAINT pj_app_info_pkey PRIMARY KEY (id),
+    CONSTRAINT uidx01_app_info UNIQUE (app_name)
+    );
+
+-- 导出  表 public.pj_container_info 结构
+DROP TABLE IF EXISTS "pj_container_info";
+CREATE TABLE IF NOT EXISTS "pj_container_info" (
+   "id" BIGINT NOT NULL,
+   "app_id" BIGINT NULL DEFAULT NULL,
+   "container_name" VARCHAR(255) NULL DEFAULT NULL,
+    "gmt_create" TIMESTAMP NULL DEFAULT NULL,
+    "gmt_modified" TIMESTAMP NULL DEFAULT NULL,
+    "last_deploy_time" TIMESTAMP NULL DEFAULT NULL,
+    "source_info" VARCHAR(255) NULL DEFAULT NULL,
+    "source_type" INTEGER NULL DEFAULT NULL,
+    "status" INTEGER NULL DEFAULT NULL,
+    "version" VARCHAR(255) NULL DEFAULT NULL,
+    CONSTRAINT pj_container_info_pkey PRIMARY KEY (id)
+    );
+CREATE INDEX idx01_container_info ON pj_container_info USING btree (app_id);
+
+-- 导出  表 public.pj_instance_info 结构
+DROP TABLE IF EXISTS "pj_instance_info";
+CREATE TABLE IF NOT EXISTS "pj_instance_info" (
+  "id" BIGINT NOT NULL,
+  "actual_trigger_time" BIGINT NULL DEFAULT NULL,
+  "app_id" BIGINT NULL DEFAULT NULL,
+  "expected_trigger_time" BIGINT NULL DEFAULT NULL,
+  "finished_time" BIGINT NULL DEFAULT NULL,
+  "gmt_create" TIMESTAMP NULL DEFAULT NULL,
+  "gmt_modified" TIMESTAMP NULL DEFAULT NULL,
+  "instance_id" BIGINT NULL DEFAULT NULL,
+  "instance_params" text NULL DEFAULT NULL,
+  "job_id" BIGINT NULL DEFAULT NULL,
+  "job_params" text NULL DEFAULT NULL,
+  "last_report_time" BIGINT NULL DEFAULT NULL,
+  "result" text NULL DEFAULT NULL,
+  "running_times" BIGINT NULL DEFAULT NULL,
+  "status" INTEGER NULL DEFAULT NULL,
+  "task_tracker_address" VARCHAR(255) NULL DEFAULT NULL,
+    "type" INTEGER NULL DEFAULT NULL,
+    "wf_instance_id" BIGINT NULL DEFAULT NULL,
+    CONSTRAINT pj_instance_info_pkey PRIMARY KEY (id)
+    );
+CREATE INDEX idx01_instance_info ON pj_instance_info USING btree (job_id, status);
+CREATE INDEX idx02_instance_info ON pj_instance_info USING btree (app_id, status);
+CREATE INDEX idx03_instance_info ON pj_instance_info USING btree (instance_id, status);
+
+-- 导出  表 public.pj_job_info 结构
+DROP TABLE IF EXISTS "pj_job_info";
+CREATE TABLE IF NOT EXISTS "pj_job_info" (
+     "id" BIGINT NOT NULL,
+     "alarm_config" VARCHAR(255) NULL DEFAULT NULL,
+    "app_id" BIGINT NULL DEFAULT NULL,
+    "concurrency" INTEGER NULL DEFAULT NULL,
+    "designated_workers" VARCHAR(255) NULL DEFAULT NULL,
+    "dispatch_strategy" INTEGER NULL DEFAULT NULL,
+    "execute_type" INTEGER NULL DEFAULT NULL,
+    "extra" VARCHAR(255) NULL DEFAULT NULL,
+    "gmt_create" TIMESTAMP NULL DEFAULT NULL,
+    "gmt_modified" TIMESTAMP NULL DEFAULT NULL,
+    "instance_retry_num" INTEGER NULL DEFAULT NULL,
+    "instance_time_limit" BIGINT NULL DEFAULT NULL,
+    "job_description" VARCHAR(255) NULL DEFAULT NULL,
+    "job_name" VARCHAR(255) NULL DEFAULT NULL,
+    "job_params" text NULL DEFAULT NULL,
+    "lifecycle" VARCHAR(255) NULL DEFAULT NULL,
+    "log_config" VARCHAR(255) NULL DEFAULT NULL,
+    "max_instance_num" INTEGER NULL DEFAULT NULL,
+    "max_worker_count" INTEGER NULL DEFAULT NULL,
+    "min_cpu_cores" DOUBLE PRECISION NOT NULL,
+    "min_disk_space" DOUBLE PRECISION NOT NULL,
+    "min_memory_space" DOUBLE PRECISION NOT NULL,
+    "next_trigger_time" BIGINT NULL DEFAULT NULL,
+    "notify_user_ids" VARCHAR(255) NULL DEFAULT NULL,
+    "processor_info" VARCHAR(255) NULL DEFAULT NULL,
+    "processor_type" INTEGER NULL DEFAULT NULL,
+    "status" INTEGER NULL DEFAULT NULL,
+    "tag" VARCHAR(255) NULL DEFAULT NULL,
+    "task_retry_num" INTEGER NULL DEFAULT NULL,
+    "time_expression" VARCHAR(255) NULL DEFAULT NULL,
+    "time_expression_type" INTEGER NULL DEFAULT NULL,
+    CONSTRAINT pj_job_info_pkey PRIMARY KEY (id)
+    );
+CREATE INDEX idx01_job_info ON pj_job_info USING btree (app_id, status, time_expression_type, next_trigger_time);
+
+-- 导出  表 public.pj_oms_lock 结构
+DROP TABLE IF EXISTS "pj_oms_lock";
+CREATE TABLE IF NOT EXISTS "pj_oms_lock" (
+     "id" BIGINT NOT NULL,
+     "gmt_create" TIMESTAMP NULL DEFAULT NULL,
+     "gmt_modified" TIMESTAMP NULL DEFAULT NULL,
+     "lock_name" VARCHAR(255) NULL DEFAULT NULL,
+    "max_lock_time" BIGINT NULL DEFAULT NULL,
+    "ownerip" VARCHAR(255) NULL DEFAULT NULL,
+    CONSTRAINT pj_oms_lock_pkey PRIMARY KEY (id),
+    CONSTRAINT uidx01_oms_lock UNIQUE (lock_name)
+    );
+
+-- 导出  表 public.pj_server_info 结构
+DROP TABLE IF EXISTS "pj_server_info";
+CREATE TABLE IF NOT EXISTS "pj_server_info" (
+    "id" BIGINT NOT NULL,
+    "gmt_create" TIMESTAMP NULL DEFAULT NULL,
+    "gmt_modified" TIMESTAMP NULL DEFAULT NULL,
+    "ip" VARCHAR(255) NULL DEFAULT NULL,
+    CONSTRAINT pj_server_info_pkey PRIMARY KEY (id),
+    CONSTRAINT uidx01_server_info UNIQUE (ip)
+    );
+CREATE INDEX idx01_server_info ON pj_server_info USING btree (gmt_modified);
+
+-- 导出  表 public.pj_user_info 结构
+DROP TABLE IF EXISTS "pj_user_info";
+CREATE TABLE IF NOT EXISTS "pj_user_info" (
+  "id" BIGINT NOT NULL,
+  "email" VARCHAR(255) NULL DEFAULT NULL,
+    "extra" VARCHAR(255) NULL DEFAULT NULL,
+    "gmt_create" TIMESTAMP NULL DEFAULT NULL,
+    "gmt_modified" TIMESTAMP NULL DEFAULT NULL,
+    "password" VARCHAR(255) NULL DEFAULT NULL,
+    "phone" VARCHAR(255) NULL DEFAULT NULL,
+    "username" VARCHAR(255) NULL DEFAULT NULL,
+    "web_hook" VARCHAR(255) NULL DEFAULT NULL,
+    CONSTRAINT pj_user_info_pkey PRIMARY KEY (id)
+    );
+CREATE INDEX uidx01_user_info ON pj_user_info USING btree (username);
+CREATE INDEX uidx02_user_info ON pj_user_info USING btree (email);
+
+-- 导出  表 public.pj_workflow_info 结构
+DROP TABLE IF EXISTS "pj_workflow_info";
+CREATE TABLE IF NOT EXISTS "pj_workflow_info" (
+      "id" BIGINT NOT NULL,
+      "app_id" BIGINT NULL DEFAULT NULL,
+      "extra" VARCHAR(255) NULL DEFAULT NULL,
+    "gmt_create" TIMESTAMP NULL DEFAULT NULL,
+    "gmt_modified" TIMESTAMP NULL DEFAULT NULL,
+    "lifecycle" VARCHAR(255) NULL DEFAULT NULL,
+    "max_wf_instance_num" INTEGER NULL DEFAULT NULL,
+    "next_trigger_time" BIGINT NULL DEFAULT NULL,
+    "notify_user_ids" VARCHAR(255) NULL DEFAULT NULL,
+    "pedag" TEXT NULL DEFAULT NULL,
+    "status" INTEGER NULL DEFAULT NULL,
+    "time_expression" VARCHAR(255) NULL DEFAULT NULL,
+    "time_expression_type" INTEGER NULL DEFAULT NULL,
+    "wf_description" VARCHAR(255) NULL DEFAULT NULL,
+    "wf_name" VARCHAR(255) NULL DEFAULT NULL,
+    CONSTRAINT pj_workflow_info_pkey PRIMARY KEY (id)
+    );
+CREATE INDEX idx01_workflow_info ON pj_workflow_info USING btree (app_id, status, time_expression_type, next_trigger_time);
+
+
+-- 导出  表 public.pj_workflow_instance_info 结构
+DROP TABLE IF EXISTS "pj_workflow_instance_info";
+CREATE TABLE IF NOT EXISTS "pj_workflow_instance_info" (
+   "id" BIGINT NOT NULL,
+   "actual_trigger_time" BIGINT NULL DEFAULT NULL,
+   "app_id" BIGINT NULL DEFAULT NULL,
+   "dag" TEXT NULL DEFAULT NULL,
+   "expected_trigger_time" BIGINT NULL DEFAULT NULL,
+   "finished_time" BIGINT NULL DEFAULT NULL,
+   "gmt_create" TIMESTAMP NULL DEFAULT NULL,
+   "gmt_modified" TIMESTAMP NULL DEFAULT NULL,
+   "parent_wf_instance_id" BIGINT NULL DEFAULT NULL,
+   "result" TEXT NULL DEFAULT NULL,
+   "status" INTEGER NULL DEFAULT NULL,
+   "wf_context" TEXT NULL DEFAULT NULL,
+   "wf_init_params" TEXT NULL DEFAULT NULL,
+   "wf_instance_id" BIGINT NULL DEFAULT NULL,
+   "workflow_id" BIGINT NULL DEFAULT NULL,
+   CONSTRAINT pj_workflow_instance_info_pkey PRIMARY KEY (id),
+    CONSTRAINT uidx01_wf_instance UNIQUE (wf_instance_id)
+    );
+CREATE INDEX idx01_wf_instance ON pj_workflow_instance_info USING btree (workflow_id, status, app_id, expected_trigger_time);
+
+
+-- 正在导出表  public.pj_workflow_instance_info 的数据:-1 rows
+/*!40000 ALTER TABLE "pj_workflow_instance_info" DISABLE KEYS */;
+/*!40000 ALTER TABLE "pj_workflow_instance_info" ENABLE KEYS */;
+
+-- 导出  表 public.pj_workflow_node_info 结构
+DROP TABLE IF EXISTS "pj_workflow_node_info";
+CREATE TABLE IF NOT EXISTS "pj_workflow_node_info" (
+   "id" BIGINT NOT NULL,
+   "app_id" BIGINT NOT NULL,
+   "enable" BOOLEAN NOT NULL,
+   "extra" TEXT NULL DEFAULT NULL,
+   "gmt_create" TIMESTAMP NOT NULL,
+   "gmt_modified" TIMESTAMP NOT NULL,
+   "job_id" BIGINT NULL DEFAULT NULL,
+   "node_name" VARCHAR(255) NULL DEFAULT NULL,
+    "node_params" TEXT NULL DEFAULT NULL,
+    "skip_when_failed" BOOLEAN NOT NULL,
+    "type" INTEGER NULL DEFAULT NULL,
+    "workflow_id" BIGINT NULL DEFAULT NULL,
+    CONSTRAINT pj_workflow_node_info_pkey PRIMARY KEY (id)
+    );
+CREATE INDEX idx01_workflow_node_info ON pj_workflow_node_info USING btree (workflow_id, gmt_create);

+ 33 - 0
km-modules/km-db/pom.xml

@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <groupId>com.km</groupId>
+        <artifactId>km-modules</artifactId>
+        <version>${revision}</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>km-db</artifactId>
+    <packaging>jar</packaging>
+    <description>数据库管理模块</description>
+    <dependencies>
+        <!-- 通用工具-->
+        <dependency>
+            <groupId>com.km</groupId>
+            <artifactId>km-common-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.km</groupId>
+            <artifactId>km-common-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.km</groupId>
+            <artifactId>km-common-log</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.km</groupId>
+            <artifactId>km-common-excel</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>

+ 100 - 0
km-modules/km-db/src/main/java/com/km/db/controller/DatabaseConnectionController.java

@@ -0,0 +1,100 @@
+package com.km.db.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.km.common.core.core.domain.CommonResult;
+import com.km.common.core.core.page.PageResult;
+import com.km.common.log.annotation.Log;
+import com.km.common.log.enums.BusinessType;
+import com.km.common.web.annotation.RepeatSubmit;
+import com.km.common.web.core.BaseController;
+import com.km.db.domain.bo.DatabaseConnectionBo;
+import com.km.db.domain.vo.DatabaseConnectionVo;
+import com.km.db.service.IDatabaseConnectionService;
+import jakarta.annotation.Resource;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 数据库链接Controller
+ *
+ * @author km
+ * 2024-05-04
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/db/connection")
+public class DatabaseConnectionController extends BaseController {
+    @Resource
+    private IDatabaseConnectionService databaseConnectionService;
+
+    /**
+     * 查询数据库链接列表
+     */
+    @SaCheckPermission("db:connection:list")
+    @GetMapping("/list")
+    public CommonResult<PageResult<DatabaseConnectionVo>> list(DatabaseConnectionBo databaseConnectionBo) {
+        return CommonResult.success(databaseConnectionService.selectPage(databaseConnectionBo));
+    }
+
+    /**
+     * 获取数据库链接详细信息
+     */
+    @SaCheckPermission("db:connection:query")
+    @GetMapping(value = "/{id}")
+    public CommonResult<DatabaseConnectionVo> getInfo(@PathVariable Long id) {
+        return CommonResult.success(databaseConnectionService.selectById(id));
+    }
+
+    /**
+     * 新增数据库链接
+     */
+    @SaCheckPermission("db:connection:add")
+    @Log(title = "数据库链接", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping
+    public CommonResult<Void> add(@Validated @RequestBody DatabaseConnectionBo databaseConnectionBo) {
+        boolean inserted = databaseConnectionService.insert(databaseConnectionBo);
+        if (!inserted) {
+            return CommonResult.fail("新增数据库链接记录失败!");
+        }
+        return CommonResult.success();
+    }
+
+    /**
+     * 修改数据库链接
+     */
+    @SaCheckPermission("db:connection:edit")
+    @Log(title = "数据库链接", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping
+    public CommonResult<Void> edit(@Validated @RequestBody DatabaseConnectionBo databaseConnectionBo) {
+        boolean updated = databaseConnectionService.update(databaseConnectionBo);
+        if (!updated) {
+            return CommonResult.fail("修改数据库链接记录失败!");
+        }
+        return CommonResult.success();
+    }
+
+    /**
+     * 删除数据库链接
+     */
+    @SaCheckPermission("db:connection:remove")
+    @Log(title = "数据库链接", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public CommonResult<Void> remove(@PathVariable Long[] ids) {
+        boolean deleted = databaseConnectionService.deleteByIds(ids);
+        if (!deleted) {
+            return CommonResult.fail("删除数据库链接记录失败!");
+        }
+        return CommonResult.success();
+    }
+}

+ 66 - 0
km-modules/km-db/src/main/java/com/km/db/domain/DatabaseConnection.java

@@ -0,0 +1,66 @@
+package com.km.db.domain;
+
+import com.km.common.orm.core.domain.BaseEntity;
+import com.mybatisflex.annotation.Id;
+import com.mybatisflex.annotation.Table;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 数据库链接对象 database_connection
+ *
+ * @author km
+ * 2024-05-04
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Table(value = "database_connection")
+public class DatabaseConnection extends BaseEntity {
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 唯一主键
+     */
+    @Id
+    private Long id;
+
+    /**
+     * 链接名称
+     */
+    private String name;
+
+    /**
+     * 数据库类型
+     */
+    private String type;
+
+    /**
+     * 驱动版本
+     */
+    private String driverVersion;
+
+    /**
+     * 驱动类名
+     */
+    private String driver;
+
+    /**
+     * jdbc-url连接串
+     */
+    private String url;
+
+    /**
+     * 数据库账号
+     */
+    private String userName;
+
+    /**
+     * 账号密码
+     */
+    private String password;
+
+
+}

+ 68 - 0
km-modules/km-db/src/main/java/com/km/db/domain/bo/DatabaseConnectionBo.java

@@ -0,0 +1,68 @@
+package com.km.db.domain.bo;
+
+import com.km.common.orm.core.domain.BaseEntity;
+import com.km.db.domain.DatabaseConnection;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+/**
+ * 数据库链接业务对象 database_connection
+ *
+ * @author km
+ * @date 2024-05-04
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = DatabaseConnection.class, reverseConvertGenerate = false)
+public class DatabaseConnectionBo extends BaseEntity {
+    /**
+     * 唯一主键
+     */
+    private Long id;
+
+    /**
+     * 链接名称
+     */
+    @NotBlank(message = "链接名称不能为空")
+    private String name;
+
+    /**
+     * 数据库类型
+     */
+    @NotBlank(message = "数据库类型不能为空")
+    private String type;
+
+    /**
+     * 驱动版本
+     */
+    @NotBlank(message = "驱动版本不能为空")
+    private String driverVersion;
+
+    /**
+     * 驱动类名
+     */
+    @NotBlank(message = "驱动类名不能为空")
+    private String driver;
+
+    /**
+     * jdbc-url连接串
+     */
+    @NotBlank(message = "jdbc-url连接串不能为空")
+    private String url;
+
+    /**
+     * 数据库账号
+     */
+    @NotBlank(message = "数据库账号不能为空")
+    private String userName;
+
+    /**
+     * 账号密码
+     */
+    @NotBlank(message = "账号密码不能为空")
+    private String password;
+
+
+}

+ 59 - 0
km-modules/km-db/src/main/java/com/km/db/domain/vo/DatabaseConnectionImportVo.java

@@ -0,0 +1,59 @@
+package com.km.db.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 数据库链接导入视图对象 database_connection
+ *
+ * @author km
+ * @date 2024-05-04
+ */
+
+@Data
+@NoArgsConstructor
+public class DatabaseConnectionImportVo implements Serializable
+{
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+
+     /** 唯一主键 */
+    @ExcelProperty(value = "唯一主键")
+    private Long id;
+
+     /** 链接名称 */
+    @ExcelProperty(value = "链接名称")
+    private String name;
+
+     /** 数据库类型 */
+    @ExcelProperty(value = "数据库类型")
+    private String type;
+
+     /** 驱动版本 */
+    @ExcelProperty(value = "驱动版本")
+    private String driverVersion;
+
+     /** 驱动类名 */
+    @ExcelProperty(value = "驱动类名")
+    private String driver;
+
+     /** jdbc-url连接串 */
+    @ExcelProperty(value = "jdbc-url连接串")
+    private String url;
+
+     /** 数据库账号 */
+    @ExcelProperty(value = "数据库账号")
+    private String userName;
+
+     /** 账号密码 */
+    @ExcelProperty(value = "账号密码")
+    private String password;
+
+
+}

+ 63 - 0
km-modules/km-db/src/main/java/com/km/db/domain/vo/DatabaseConnectionVo.java

@@ -0,0 +1,63 @@
+package com.km.db.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.km.common.orm.core.domain.BaseEntity;
+import com.km.db.domain.DatabaseConnection;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 数据库链接视图对象 database_connection
+ *
+ * @author km
+ * @date 2024-05-04
+ */
+@Data
+@ExcelIgnoreUnannotated
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = DatabaseConnection.class)
+public class DatabaseConnectionVo extends BaseEntity implements Serializable {
+
+@Serial
+private static final long serialVersionUID = 1L;
+
+    /** 唯一主键 */
+    @ExcelProperty(value = "唯一主键")
+    private Long id;
+
+    /** 链接名称 */
+    @ExcelProperty(value = "链接名称")
+    private String name;
+
+    /** 数据库类型 */
+    @ExcelProperty(value = "数据库类型")
+    private String type;
+
+    /** 驱动版本 */
+    @ExcelProperty(value = "驱动版本")
+    private String driverVersion;
+
+    /** 驱动类名 */
+    @ExcelProperty(value = "驱动类名")
+    private String driver;
+
+    /** jdbc-url连接串 */
+    @ExcelProperty(value = "jdbc-url连接串")
+    private String url;
+
+    /** 数据库账号 */
+    @ExcelProperty(value = "数据库账号")
+    private String userName;
+
+    /** 账号密码 */
+    @ExcelProperty(value = "账号密码")
+    private String password;
+
+
+
+}

+ 119 - 0
km-modules/km-db/src/main/java/com/km/db/listener/DatabaseConnectionImportListener.java

@@ -0,0 +1,119 @@
+package com.km.db.listener;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.km.common.core.exception.ServiceException;
+import com.km.common.core.utils.SpringUtils;
+import com.km.common.core.utils.ValidatorUtils;
+import com.km.common.excel.core.ExcelListener;
+import com.km.common.excel.core.ExcelResult;
+import com.km.db.domain.bo.DatabaseConnectionBo;
+import com.km.db.domain.vo.DatabaseConnectionImportVo;
+import com.km.db.domain.vo.DatabaseConnectionVo;
+import com.km.db.service.IDatabaseConnectionService;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.List;
+
+/**
+ * 数据库链接自定义导入
+ *
+ * @author km
+ */
+@Slf4j
+public class DatabaseConnectionImportListener extends AnalysisEventListener<DatabaseConnectionImportVo> implements ExcelListener<DatabaseConnectionImportVo> {
+    private final IDatabaseConnectionService databaseConnectionService;
+
+    private final Boolean isUpdateSupport;
+    private int successNum = 0;
+    private int failureNum = 0;
+    private final StringBuilder successMsg = new StringBuilder();
+    private final StringBuilder failureMsg = new StringBuilder();
+
+    public DatabaseConnectionImportListener(Boolean isUpdateSupport) {
+        this.databaseConnectionService = SpringUtils.getBean(IDatabaseConnectionService.class);
+        this.isUpdateSupport = isUpdateSupport;
+    }
+
+    @Override
+    public void invoke(DatabaseConnectionImportVo databaseConnectionVo, AnalysisContext context) {
+        try {
+
+            DatabaseConnectionBo databaseConnectionBo = BeanUtil.toBean(databaseConnectionVo, DatabaseConnectionBo.class);
+
+            //TODO:根据某个字段,查询数据库表中是否存在记录,不存在就新增,存在就更新
+            DatabaseConnectionVo databaseConnectionVo1 = null;
+
+            //databaseConnectionVo1 = databaseConnectionService.selectBySomefield(databaseConnectionVo.getSomefield());
+            if (ObjectUtil.isNull(databaseConnectionVo1)) {
+                //不存在就新增
+                databaseConnectionBo.setVersion(0);
+                ValidatorUtils.validate(databaseConnectionBo);
+                boolean inserted = databaseConnectionService.insert(databaseConnectionBo);
+
+                if (inserted) {
+                    successNum++;
+                    successMsg.append("<br/>").append(successNum).append("、数据库链接 记录导入成功");
+                    return;
+                } else {
+                    failureNum++;
+                    failureMsg.append("<br/>").append(failureNum).append("、数据库链接 记录导入失败");
+                    return;
+                }
+            } else if (isUpdateSupport) {
+                //存在就更新
+                databaseConnectionBo.setId(databaseConnectionVo1.getId());//主键
+                databaseConnectionBo.setVersion(databaseConnectionVo1.getVersion());
+                boolean updated = databaseConnectionService.update(databaseConnectionBo);
+                if (updated) {
+                    successNum++;
+                    successMsg.append("<br/>").append(successNum).append("、数据库链接 记录更新成功");
+                    return;
+                } else {
+                    failureNum++;
+                    failureMsg.append("<br/>").append(failureNum).append("、数据库链接 记录更新失败");
+                    return;
+                }
+            }
+        } catch (Exception e) {
+            failureNum++;
+            String msg = "<br/>" + failureNum + "、数据库链接 记录导入失败:";
+            failureMsg.append(msg).append(e.getMessage());
+            log.error(msg, e);
+        }
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext context) {
+
+    }
+
+    @Override
+    public ExcelResult<DatabaseConnectionImportVo> getExcelResult() {
+        return new ExcelResult<>() {
+
+            @Override
+            public String getAnalysis() {
+                if (failureNum > 0) {
+                    failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据没有成功导入,错误如下:");
+                    throw new ServiceException(failureMsg.toString());
+                } else {
+                    successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+                }
+                return successMsg.toString();
+            }
+
+            @Override
+            public List<DatabaseConnectionImportVo> getList() {
+                return null;
+            }
+
+            @Override
+            public List<String> getErrorList() {
+                return null;
+            }
+        };
+    }
+}

+ 16 - 0
km-modules/km-db/src/main/java/com/km/db/mapper/DatabaseConnectionMapper.java

@@ -0,0 +1,16 @@
+package com.km.db.mapper;
+
+import com.mybatisflex.core.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import com.km.db.domain.DatabaseConnection;
+
+/**
+ * 数据库链接Mapper接口
+ *
+ * @author km
+ * 2024-05-04
+ */
+@Mapper
+public interface DatabaseConnectionMapper extends BaseMapper<DatabaseConnection> {
+
+}

+ 66 - 0
km-modules/km-db/src/main/java/com/km/db/service/IDatabaseConnectionService.java

@@ -0,0 +1,66 @@
+package com.km.db.service;
+
+import java.util.List;
+
+import com.km.common.core.core.page.PageResult;
+import com.km.db.domain.DatabaseConnection;
+import com.km.db.domain.vo.DatabaseConnectionVo;
+import com.km.db.domain.bo.DatabaseConnectionBo;
+import com.km.common.orm.core.service.IBaseService;
+
+/**
+ * 数据库链接Service接口
+ *
+ * @author km
+ * 2024-05-04
+ */
+public interface IDatabaseConnectionService extends IBaseService<DatabaseConnection> {
+    /**
+     * 查询数据库链接
+     *
+     * @param id 数据库链接主键
+     * @return 数据库链接
+     */
+        DatabaseConnectionVo selectById(Long id);
+
+    /**
+     * 查询数据库链接列表
+     *
+     * @param databaseConnectionBo 数据库链接Bo
+     * @return 数据库链接集合
+     */
+    List<DatabaseConnectionVo> selectList(DatabaseConnectionBo databaseConnectionBo);
+
+    /**
+     * 分页查询数据库链接列表
+     *
+     * @param databaseConnectionBo 数据库链接Bo
+     * @return 分页数据库链接集合
+     */
+    PageResult<DatabaseConnectionVo> selectPage(DatabaseConnectionBo databaseConnectionBo);
+
+    /**
+     * 新增数据库链接
+     *
+     * @param databaseConnectionBo 数据库链接Bo
+     * @return 结果:true 操作成功,false 操作失败
+     */
+    boolean insert(DatabaseConnectionBo databaseConnectionBo);
+
+    /**
+     * 修改数据库链接
+     *
+     * @param databaseConnectionBo 数据库链接Bo
+     * @return 结果:true 更新成功,false 更新失败
+     */
+    boolean update(DatabaseConnectionBo databaseConnectionBo);
+
+    /**
+     * 批量删除数据库链接
+     *
+     * @param ids 需要删除的数据库链接主键集合
+     * @return 结果:true 删除成功,false 删除失败
+     */
+    boolean deleteByIds(Long[] ids);
+
+}

+ 133 - 0
km-modules/km-db/src/main/java/com/km/db/service/impl/DatabaseConnectionServiceImpl.java

@@ -0,0 +1,133 @@
+package com.km.db.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.km.common.core.core.page.PageResult;
+import com.km.common.core.utils.MapstructUtils;
+import com.km.common.orm.core.page.PageQuery;
+import com.km.common.orm.core.service.impl.BaseServiceImpl;
+import com.km.db.domain.DatabaseConnection;
+import com.km.db.domain.bo.DatabaseConnectionBo;
+import com.km.db.domain.vo.DatabaseConnectionVo;
+import com.km.db.mapper.DatabaseConnectionMapper;
+import com.km.db.service.IDatabaseConnectionService;
+import com.mybatisflex.core.paginate.Page;
+import com.mybatisflex.core.query.QueryWrapper;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Arrays;
+import java.util.List;
+
+import static com.km.db.domain.table.DatabaseConnectionTableDef.DATABASE_CONNECTION;
+
+/**
+ * 数据库链接Service业务层处理
+ *
+ * @author km
+ * 2024-05-04
+ */
+@Service
+public class DatabaseConnectionServiceImpl extends BaseServiceImpl<DatabaseConnectionMapper, DatabaseConnection> implements IDatabaseConnectionService {
+
+    @Override
+    public QueryWrapper query() {
+        return super.query().from(DATABASE_CONNECTION);
+    }
+
+    private QueryWrapper buildQueryWrapper(DatabaseConnectionBo databaseConnectionBo) {
+        QueryWrapper queryWrapper = super.buildBaseQueryWrapper();
+        queryWrapper.and(DATABASE_CONNECTION.NAME.like
+            (databaseConnectionBo.getName()));
+        queryWrapper.and(DATABASE_CONNECTION.TYPE.eq
+            (databaseConnectionBo.getType()));
+        queryWrapper.and(DATABASE_CONNECTION.DRIVER_VERSION.eq
+            (databaseConnectionBo.getDriverVersion()));
+        queryWrapper.and(DATABASE_CONNECTION.DRIVER.eq
+            (databaseConnectionBo.getDriver()));
+        queryWrapper.and(DATABASE_CONNECTION.URL.eq
+            (databaseConnectionBo.getUrl()));
+        queryWrapper.and(DATABASE_CONNECTION.USER_NAME.like
+            (databaseConnectionBo.getUserName()));
+        queryWrapper.and(DATABASE_CONNECTION.PASSWORD.eq
+            (databaseConnectionBo.getPassword()));
+
+        return queryWrapper;
+    }
+
+    /**
+     * 查询数据库链接
+     *
+     * @param id 数据库链接主键
+     * @return 数据库链接
+     */
+    @Override
+    public DatabaseConnectionVo selectById(Long id) {
+        return this.getOneAs(query().where(DATABASE_CONNECTION.ID.eq(id)), DatabaseConnectionVo.class);
+
+    }
+
+    /**
+     * 查询数据库链接列表
+     *
+     * @param databaseConnectionBo 数据库链接Bo
+     * @return 数据库链接集合
+     */
+    @Override
+    public List<DatabaseConnectionVo> selectList(DatabaseConnectionBo databaseConnectionBo) {
+        QueryWrapper queryWrapper = buildQueryWrapper(databaseConnectionBo);
+        return this.listAs(queryWrapper, DatabaseConnectionVo.class);
+    }
+
+    /**
+     * 分页查询数据库链接列表
+     *
+     * @param databaseConnectionBo 数据库链接Bo
+     * @return 分页数据库链接集合
+     */
+    @Override
+    public PageResult<DatabaseConnectionVo> selectPage(DatabaseConnectionBo databaseConnectionBo) {
+        QueryWrapper queryWrapper = buildQueryWrapper(databaseConnectionBo);
+        Page<DatabaseConnectionVo> page = this.pageAs(PageQuery.build(), queryWrapper, DatabaseConnectionVo.class);
+        return PageResult.build(page);
+    }
+
+    /**
+     * 新增数据库链接
+     *
+     * @param databaseConnectionBo 数据库链接Bo
+     * @return 结果:true 操作成功,false 操作失败
+     */
+    @Override
+    public boolean insert(DatabaseConnectionBo databaseConnectionBo) {
+        DatabaseConnection databaseConnection = MapstructUtils.convert(databaseConnectionBo, DatabaseConnection.class);
+        return this.save(databaseConnection);//使用全局配置的雪花算法主键生成器生成ID值
+    }
+
+    /**
+     * 修改数据库链接
+     *
+     * @param databaseConnectionBo 数据库链接Bo
+     * @return 结果:true 更新成功,false 更新失败
+     */
+    @Override
+    public boolean update(DatabaseConnectionBo databaseConnectionBo) {
+        DatabaseConnection databaseConnection = MapstructUtils.convert(databaseConnectionBo, DatabaseConnection.class);
+        if (ObjectUtil.isNotNull(databaseConnection) && ObjectUtil.isNotNull(databaseConnection.getId())) {
+            return this.updateById(databaseConnection);
+        }
+        return false;
+    }
+
+    /**
+     * 批量删除数据库链接
+     *
+     * @param ids 需要删除的数据库链接主键集合
+     * @return 结果:true 删除成功,false 删除失败
+     */
+    @Transactional
+    @Override
+    public boolean deleteByIds(Long[] ids) {
+        return this.removeByIds(Arrays.asList(ids));
+    }
+
+}

+ 7 - 0
km-modules/km-db/src/main/resources/mapper/db/DatabaseConnectionMapper.xml

@@ -0,0 +1,7 @@
+<?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="com.km.db.mapper.DatabaseConnectionMapper">
+
+</mapper>

+ 59 - 0
km-modules/km-generator/src/main/resources/vm/api/api.ts.types.vm

@@ -0,0 +1,59 @@
+import { PageQuery, BaseEntity } from '@/api/interface/index'
+export interface ${BusinessName}VO extends BaseEntity {
+#foreach ($column in $columns)
+    #if($column.list)
+    /**
+    * $column.columnComment
+    */
+        $column.javaField:#if($column.javaField.indexOf("id") != -1 || $column.javaField.indexOf("Id") != -1) string | number;
+    #elseif($column.javaType == 'Long' || $column.javaType == 'Integer' || $column.javaType == 'Double' || $column.javaType == 'Float' || $column.javaType == 'BigDecimal') number;
+    #elseif($column.javaType == 'Boolean') boolean;
+    #else string;
+    #end
+    #end
+#end
+#if ($table.tree)
+/**
+* 子树对象
+*/
+children: ${BusinessName}VO[];
+#end
+#if($table.sub)
+/** $table.subTable.functionName信息 */
+    ${subclassName}List: Array<${subClassName}VO>;
+#end
+    }
+
+    export interface ${BusinessName}Form {
+#foreach ($column in $columns)
+    #if($column.insert || $column.edit)
+        /**
+        * $column.columnComment
+        */
+        $column.javaField?:#if($column.javaField.indexOf("id") != -1 || $column.javaField.indexOf("Id") != -1) string | number;
+    #elseif($column.javaType == 'Long' || $column.javaType == 'Integer' || $column.javaType == 'Double' || $column.javaType == 'Float' || $column.javaType == 'BigDecimal') number;
+    #elseif($column.javaType == 'Boolean') boolean;
+    #else string;
+    #end
+    #end
+#end
+    }
+
+    export interface ${BusinessName}Query #if(!${treeCode})extends PageQuery #end{
+#foreach ($column in $columns)
+    #if($column.query)
+        /**
+        * $column.columnComment
+        */
+        $column.javaField?:#if($column.javaField.indexOf("id") != -1 || $column.javaField.indexOf("Id") != -1) string | number;
+    #elseif($column.javaType == 'Long' || $column.javaType == 'Integer' || $column.javaType == 'Double' || $column.javaType == 'Float' || $column.javaType == 'BigDecimal') number;
+    #elseif($column.javaType == 'Boolean') boolean;
+    #else string;
+    #end
+    #end
+#end
+    /**
+    * 日期范围参数
+    */
+    params?: any;
+    }

+ 70 - 0
km-modules/km-generator/src/main/resources/vm/api/api.ts.vm

@@ -0,0 +1,70 @@
+import http from '@/api'
+import { ${BusinessName}VO, ${BusinessName}Form, ${BusinessName}Query  } from '@/api/interface/${moduleName}/${businessName}'
+/**
+ * @name 查询${functionName}列表
+ * @param query 参数
+ * @returns 返回列表
+ */
+export const list${BusinessName}Api = (query: ${BusinessName}Query) => {
+    return http.get<${BusinessName}VO[]>('/${moduleName}/${businessName}/list', query, { loading: true })
+}
+
+/**
+ * @name 查询${functionName}详细
+ * @param ${pkColumn.javaField} ${pkColumn.javaField}
+ * @returns returns
+ */
+export const get${BusinessName}Api = (${pkColumn.javaField}: string | number) => {
+    return http.get<${BusinessName}VO>(`/${moduleName}/${businessName}/${${pkColumn.javaField}}`)
+}
+
+/**
+ * @name 新增${functionName}
+ * @param data data
+ * @returns returns
+ */
+export const add${BusinessName}Api = (data: ${BusinessName}Form) => {
+    return http.post<any>('/${moduleName}/${businessName}', data, { loading: false })
+}
+
+/**
+ * @name 修改${functionName}
+ * @param data data
+ * @returns returns
+ */
+export const update${BusinessName}Api = (data: ${BusinessName}Form) => {
+    return http.put<any>('/${moduleName}/${businessName}', data, { loading: false })
+}
+
+/**
+ * @name 删除${functionName}
+ * @param ${pkColumn.javaField} ${pkColumn.javaField}
+ * @returns returns
+ */
+export const del${BusinessName}Api = (${pkColumn.javaField}: string | number | Array<string | number>) => {
+    return http.delete<any>(`/${moduleName}/${businessName}/${${pkColumn.javaField}}`)
+}
+
+/**
+ * @name 下载模板
+ * @returns returns
+ */
+export const importTemplateApi = () => {
+    return http.downloadPost('/${moduleName}/${businessName}/importTemplate', {})
+}
+
+/**
+ * @name 导入数据
+ * @returns returns
+ */
+export const import${BusinessName}DataApi = (data: any) => {
+    return http.post('/${moduleName}/${businessName}/importData', data)
+}
+
+/**
+ * @name 导出数据
+ * @returns returns
+ */
+export const export${BusinessName}Api = (data: any) => {
+    return http.downloadPost('/${moduleName}/${businessName}/export', data)
+}

+ 127 - 0
km-modules/km-generator/src/main/resources/vm/java/listener.java.vm

@@ -0,0 +1,127 @@
+package ${packageName}.listener;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.km.common.core.exception.ServiceException;
+import com.km.common.core.utils.SpringUtils;
+import com.km.common.core.utils.ValidatorUtils;
+import com.km.common.excel.core.ExcelListener;
+import com.km.common.excel.core.ExcelResult;
+import ${packageName}.domain.bo.${ClassName}Bo;
+import ${packageName}.domain.vo.${ClassName}ImportVo;
+import ${packageName}.domain.vo.${ClassName}Vo;
+import ${packageName}.service.I${ClassName}Service;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.List;
+
+/**
+ * ${functionName}自定义导入
+ *
+ * @author ${author}
+ */
+@Slf4j
+public class ${ClassName}ImportListener extends AnalysisEventListener<${ClassName}ImportVo> implements ExcelListener<${ClassName}ImportVo> {
+    private final I${ClassName}Service ${className}Service;
+
+    private final Boolean isUpdateSupport;
+    private int successNum = 0;
+    private int failureNum = 0;
+    private final StringBuilder successMsg = new StringBuilder();
+    private final StringBuilder failureMsg = new StringBuilder();
+
+    public ${ClassName}ImportListener(Boolean isUpdateSupport) {
+        this.${className}Service = SpringUtils.getBean(I${ClassName}Service.class);
+        this.isUpdateSupport = isUpdateSupport;
+    }
+
+    @Override
+    public void invoke(${ClassName}ImportVo ${className}Vo, AnalysisContext context) {
+        try {
+
+            ${ClassName}Bo ${className}Bo = BeanUtil.toBean(${className}Vo, ${ClassName}Bo.class);
+
+            //TODO:根据某个字段,查询数据库表中是否存在记录,不存在就新增,存在就更新
+            ${ClassName}Vo ${className}Vo1 = null;
+
+            #if($table.tree)
+            ${className}Vo1 = ${className}Service.selectById(${className}Vo.get${pkColumn.capJavaField}());
+            #else
+            //${className}Vo1 = ${className}Service.selectBySomefield(${className}Vo.getSomefield());
+            #end
+            if (ObjectUtil.isNull(${className}Vo1)) {
+                //不存在就新增
+                ${className}Bo.setVersion(0);
+                ValidatorUtils.validate(${className}Bo);
+              #if($table.tree)
+                boolean inserted = ${className}Service.insertWithPk(${className}Bo);//树表需要前台传来主键值
+              #else
+                boolean inserted = ${className}Service.insert(${className}Bo);
+              #end
+
+                if (inserted) {
+                    successNum++;
+                    successMsg.append("<br/>").append(successNum).append("、${functionName} 记录导入成功");
+                    return;
+                } else {
+                    failureNum++;
+                    failureMsg.append("<br/>").append(failureNum).append("、${functionName} 记录导入失败");
+                    return;
+                }
+            } else if (isUpdateSupport) {
+                //存在就更新
+                ${className}Bo.set${pkColumn.capJavaField}(${className}Vo1.get${pkColumn.capJavaField}());//主键
+                ${className}Bo.setVersion(${className}Vo1.getVersion());
+                boolean updated = ${className}Service.update(${className}Bo);
+                if (updated) {
+                    successNum++;
+                    successMsg.append("<br/>").append(successNum).append("、${functionName} 记录更新成功");
+                    return;
+                } else {
+                    failureNum++;
+                    failureMsg.append("<br/>").append(failureNum).append("、${functionName} 记录更新失败");
+                    return;
+                }
+            }
+        } catch (Exception e) {
+            failureNum++;
+            String msg = "<br/>" + failureNum + "、${functionName} 记录导入失败:";
+            failureMsg.append(msg).append(e.getMessage());
+            log.error(msg, e);
+        }
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext context) {
+
+    }
+
+    @Override
+    public ExcelResult<${ClassName}ImportVo> getExcelResult() {
+        return new ExcelResult<>() {
+
+            @Override
+            public String getAnalysis() {
+                if (failureNum > 0) {
+                    failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据没有成功导入,错误如下:");
+                    throw new ServiceException(failureMsg.toString());
+                } else {
+                    successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+                }
+                return successMsg.toString();
+            }
+
+            @Override
+            public List<${ClassName}ImportVo> getList() {
+                return null;
+            }
+
+            @Override
+            public List<String> getErrorList() {
+                return null;
+            }
+        };
+    }
+}

+ 70 - 0
km-modules/km-generator/src/main/resources/vm/java/vo-import.java.vm

@@ -0,0 +1,70 @@
+package ${packageName}.domain.vo;
+
+#foreach ($import in $importList)
+import ${import};
+#end
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.km.common.excel.annotation.ExcelDictFormat;
+import com.km.common.excel.convert.ExcelDictConvert;
+import lombok.Data;
+import java.io.Serial;
+import java.io.Serializable;
+import lombok.NoArgsConstructor;
+
+/**
+ * ${functionName}导入视图对象 ${tableName}
+ *
+ * @author ${author}
+ * @date ${datetime}
+ */
+
+@Data
+@NoArgsConstructor
+public class ${ClassName}ImportVo implements Serializable
+{
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+#foreach ($column in $columns)
+ #if($column.isPk=='1')
+    #if($table.tree)
+     /** $column.columnComment */
+     @ExcelProperty(value = "${column.columnComment}")
+     private $column.javaType $column.javaField;
+    #end
+ #end
+#end
+
+    #foreach ($column in $columns)
+#if($column.isPk!='1')
+#if(!$table.isSuperColumn($column.javaField)  || ($column.javaField.equals("parentId"))  || ($column.javaField.equals("orderNum")))
+     /** $column.columnComment */
+#if($column.list)
+#set($parentheseIndex=$column.columnComment.indexOf("("))
+#if($parentheseIndex != -1)
+#set($comment=$column.columnComment.substring(0, $parentheseIndex))
+#else
+#set($comment=$column.columnComment)
+#end
+#if(${column.dictType} && ${column.dictType} != '')
+    @ExcelProperty(value = "${comment}", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(dictType = "${column.dictType}")
+#elseif($parentheseIndex != -1)
+    @ExcelProperty(value = "${comment}", converter = ExcelDictConvert.class)
+    @ExcelDictFormat(readConverterExp = "$column.readConverterExp()")
+#else
+    @ExcelProperty(value = "${comment}")
+#end
+    private $column.javaType $column.javaField;
+
+#else
+    @ExcelProperty(value = "${column.columnComment}")
+    private $column.javaType $column.javaField;
+
+#end
+#end
+#end
+#end
+
+}

+ 267 - 0
script/sql/DM8/powerjob.sql

@@ -0,0 +1,267 @@
+CREATE TABLE "km"."pj_app_info"
+(
+    "id"             BIGINT       NOT NULL,
+    "app_name"       VARCHAR(255) DEFAULT NULL
+                                  NULL,
+    "current_server" VARCHAR(255) DEFAULT NULL
+                                  NULL,
+    "gmt_create"     TIMESTAMP(6) NULL,
+    "gmt_modified"   TIMESTAMP(6) NULL,
+    "password"       VARCHAR(255) DEFAULT NULL
+                                  NULL
+);
+CREATE TABLE "km"."pj_container_info"
+(
+    "id"               BIGINT       NOT NULL,
+    "app_id"           BIGINT       NULL,
+    "container_name"   VARCHAR(255) DEFAULT NULL
+                                    NULL,
+    "gmt_create"       TIMESTAMP(6) NULL,
+    "gmt_modified"     TIMESTAMP(6) NULL,
+    "last_deploy_time" TIMESTAMP(6) NULL,
+    "source_info"      VARCHAR(255) DEFAULT NULL
+                                    NULL,
+    "source_type"      INT          NULL,
+    "status"           INT          NULL,
+    "version"          VARCHAR(255) DEFAULT NULL
+                                    NULL
+);
+CREATE TABLE "km"."pj_instance_info"
+(
+    "id"                    BIGINT       NOT NULL,
+    "actual_trigger_time"   BIGINT       NULL,
+    "app_id"                BIGINT       NULL,
+    "expected_trigger_time" BIGINT       NULL,
+    "finished_time"         BIGINT       NULL,
+    "gmt_create"            TIMESTAMP(6) NULL,
+    "gmt_modified"          TIMESTAMP(6) NULL,
+    "instance_id"           BIGINT       NULL,
+    "instance_params"       TEXT         NULL,
+    "job_id"                BIGINT       NULL,
+    "job_params"            TEXT         NULL,
+    "last_report_time"      BIGINT       NULL,
+    "result"                TEXT         NULL,
+    "running_times"         BIGINT       NULL,
+    "status"                INT          NULL,
+    "task_tracker_address"  VARCHAR(255) DEFAULT NULL
+                                         NULL,
+    "type"                  INT          NULL,
+    "wf_instance_id"        BIGINT       NULL
+);
+CREATE TABLE "km"."pj_job_info"
+(
+    "id"                   BIGINT       NOT NULL,
+    "alarm_config"         VARCHAR(255) DEFAULT NULL
+                                        NULL,
+    "app_id"               BIGINT       NULL,
+    "concurrency"          INT          NULL,
+    "designated_workers"   VARCHAR(255) DEFAULT NULL
+                                        NULL,
+    "dispatch_strategy"    INT          NULL,
+    "execute_type"         INT          NULL,
+    "extra"                VARCHAR(255) DEFAULT NULL
+                                        NULL,
+    "gmt_create"           TIMESTAMP(6) NULL,
+    "gmt_modified"         TIMESTAMP(6) NULL,
+    "instance_retry_num"   INT          NULL,
+    "instance_time_limit"  BIGINT       NULL,
+    "job_description"      VARCHAR(255) DEFAULT NULL
+                                        NULL,
+    "job_name"             VARCHAR(255) DEFAULT NULL
+                                        NULL,
+    "job_params"           TEXT         NULL,
+    "lifecycle"            VARCHAR(255) DEFAULT NULL
+                                        NULL,
+    "log_config"           VARCHAR(255) DEFAULT NULL
+                                        NULL,
+    "max_instance_num"     INT          NULL,
+    "max_worker_count"     INT          NULL,
+    "min_cpu_cores"        REAL         NOT NULL,
+    "min_disk_space"       REAL         NOT NULL,
+    "min_memory_space"     REAL         NOT NULL,
+    "next_trigger_time"    BIGINT       NULL,
+    "notify_user_ids"      VARCHAR(255) DEFAULT NULL
+                                        NULL,
+    "processor_info"       VARCHAR(255) DEFAULT NULL
+                                        NULL,
+    "processor_type"       INT          NULL,
+    "status"               INT          NULL,
+    "tag"                  VARCHAR(255) DEFAULT NULL
+                                        NULL,
+    "task_retry_num"       INT          NULL,
+    "time_expression"      VARCHAR(255) DEFAULT NULL
+                                        NULL,
+    "time_expression_type" INT          NULL
+);
+CREATE TABLE "km"."pj_oms_lock"
+(
+    "id"            BIGINT       NOT NULL,
+    "gmt_create"    TIMESTAMP(6) NULL,
+    "gmt_modified"  TIMESTAMP(6) NULL,
+    "lock_name"     VARCHAR(255) DEFAULT NULL
+                                 NULL,
+    "max_lock_time" BIGINT       NULL,
+    "ownerip"       VARCHAR(255) DEFAULT NULL
+                                 NULL
+);
+CREATE TABLE "km"."pj_server_info"
+(
+    "id"           BIGINT       NOT NULL,
+    "gmt_create"   TIMESTAMP(6) NULL,
+    "gmt_modified" TIMESTAMP(6) NULL,
+    "ip"           VARCHAR(255) DEFAULT NULL
+                                NULL
+);
+CREATE TABLE "km"."pj_user_info"
+(
+    "id"           BIGINT       NOT NULL,
+    "email"        VARCHAR(255) DEFAULT NULL
+                                NULL,
+    "extra"        VARCHAR(255) DEFAULT NULL
+                                NULL,
+    "gmt_create"   TIMESTAMP(6) NULL,
+    "gmt_modified" TIMESTAMP(6) NULL,
+    "password"     VARCHAR(255) DEFAULT NULL
+                                NULL,
+    "phone"        VARCHAR(255) DEFAULT NULL
+                                NULL,
+    "username"     VARCHAR(255) DEFAULT NULL
+                                NULL,
+    "web_hook"     VARCHAR(255) DEFAULT NULL
+                                NULL
+);
+CREATE TABLE "km"."pj_workflow_info"
+(
+    "id"                   BIGINT       NOT NULL,
+    "app_id"               BIGINT       NULL,
+    "extra"                VARCHAR(255) DEFAULT NULL
+                                        NULL,
+    "gmt_create"           TIMESTAMP(6) NULL,
+    "gmt_modified"         TIMESTAMP(6) NULL,
+    "lifecycle"            VARCHAR(255) DEFAULT NULL
+                                        NULL,
+    "max_wf_instance_num"  INT          NULL,
+    "next_trigger_time"    BIGINT       NULL,
+    "notify_user_ids"      VARCHAR(255) DEFAULT NULL
+                                        NULL,
+    "pedag"                TEXT         NULL,
+    "status"               INT          NULL,
+    "time_expression"      VARCHAR(255) DEFAULT NULL
+                                        NULL,
+    "time_expression_type" INT          NULL,
+    "wf_description"       VARCHAR(255) DEFAULT NULL
+                                        NULL,
+    "wf_name"              VARCHAR(255) DEFAULT NULL
+                                        NULL
+);
+CREATE TABLE "km"."pj_workflow_instance_info"
+(
+    "id"                    BIGINT       NOT NULL,
+    "actual_trigger_time"   BIGINT       NULL,
+    "app_id"                BIGINT       NULL,
+    "dag"                   TEXT         NULL,
+    "expected_trigger_time" BIGINT       NULL,
+    "finished_time"         BIGINT       NULL,
+    "gmt_create"            TIMESTAMP(6) NULL,
+    "gmt_modified"          TIMESTAMP(6) NULL,
+    "parent_wf_instance_id" BIGINT       NULL,
+    "result"                TEXT         NULL,
+    "status"                INT          NULL,
+    "wf_context"            TEXT         NULL,
+    "wf_init_params"        TEXT         NULL,
+    "wf_instance_id"        BIGINT       NULL,
+    "workflow_id"           BIGINT       NULL
+);
+CREATE TABLE "km"."pj_workflow_node_info"
+(
+    "id"               BIGINT       NOT NULL,
+    "app_id"           BIGINT       NOT NULL,
+    "enable"           BIT          NOT NULL,
+    "extra"            TEXT         NULL,
+    "gmt_create"       TIMESTAMP(6) NOT NULL,
+    "gmt_modified"     TIMESTAMP(6) NOT NULL,
+    "job_id"           BIGINT       NULL,
+    "node_name"        VARCHAR(255) DEFAULT NULL
+                                    NULL,
+    "node_params"      TEXT         NULL,
+    "skip_when_failed" BIT          NOT NULL,
+    "type"             INT          NULL,
+    "workflow_id"      BIGINT       NULL
+);
+
+
+ALTER TABLE "km"."pj_app_info"
+    ADD CONSTRAINT "pj_app_info_pkey" PRIMARY KEY ("id");
+
+ALTER TABLE "km"."pj_container_info"
+    ADD CONSTRAINT "pj_container_info_pkey" PRIMARY KEY ("id");
+
+ALTER TABLE "km"."pj_instance_info"
+    ADD CONSTRAINT "pj_instance_info_pkey" PRIMARY KEY ("id");
+
+ALTER TABLE "km"."pj_job_info"
+    ADD CONSTRAINT "pj_job_info_pkey" PRIMARY KEY ("id");
+
+ALTER TABLE "km"."pj_oms_lock"
+    ADD CONSTRAINT "pj_oms_lock_pkey" PRIMARY KEY ("id");
+
+ALTER TABLE "km"."pj_server_info"
+    ADD CONSTRAINT "pj_server_info_pkey" PRIMARY KEY ("id");
+
+ALTER TABLE "km"."pj_user_info"
+    ADD CONSTRAINT "pj_user_info_pkey" PRIMARY KEY ("id");
+
+ALTER TABLE "km"."pj_workflow_info"
+    ADD CONSTRAINT "pj_workflow_info_pkey" PRIMARY KEY ("id");
+
+ALTER TABLE "km"."pj_workflow_instance_info"
+    ADD CONSTRAINT "pj_workflow_instance_info_pkey" PRIMARY KEY ("id");
+
+ALTER TABLE "km"."pj_workflow_node_info"
+    ADD CONSTRAINT "pj_workflow_node_info_pkey" PRIMARY KEY ("id");
+
+
+CREATE UNIQUE INDEX "uidx01_app_info"
+    ON "km"."pj_app_info" ("app_name");
+
+CREATE INDEX "idx01_container_info"
+    ON "km"."pj_container_info" ("app_id");
+
+CREATE INDEX "idx01_instance_info"
+    ON "km"."pj_instance_info" ("job_id", "status");
+
+CREATE INDEX "idx02_instance_info"
+    ON "km"."pj_instance_info" ("app_id", "status");
+
+CREATE INDEX "idx03_instance_info"
+    ON "km"."pj_instance_info" ("instance_id", "status");
+
+CREATE INDEX "idx01_job_info"
+    ON "km"."pj_job_info" ("app_id", "status", "time_expression_type", "next_trigger_time");
+
+CREATE UNIQUE INDEX "uidx01_oms_lock"
+    ON "km"."pj_oms_lock" ("lock_name");
+
+CREATE INDEX "idx01_server_info"
+    ON "km"."pj_server_info" ("gmt_modified");
+
+CREATE UNIQUE INDEX "uidx01_server_info"
+    ON "km"."pj_server_info" ("ip");
+
+CREATE INDEX "uidx01_user_info"
+    ON "km"."pj_user_info" ("username");
+
+CREATE INDEX "uidx02_user_info"
+    ON "km"."pj_user_info" ("email");
+
+CREATE INDEX "idx01_workflow_info"
+    ON "km"."pj_workflow_info" ("app_id", "status", "time_expression_type", "next_trigger_time");
+
+CREATE INDEX "idx01_wf_instance"
+    ON "km"."pj_workflow_instance_info" ("workflow_id", "status", "app_id", "expected_trigger_time");
+
+CREATE UNIQUE INDEX "uidx01_wf_instance"
+    ON "km"."pj_workflow_instance_info" ("wf_instance_id");
+
+CREATE INDEX "idx01_workflow_node_info"
+    ON "km"."pj_workflow_node_info" ("workflow_id", "gmt_create");