From 2db123a855bd3bb2182714cd15a9446987b0e7ae Mon Sep 17 00:00:00 2001
From: chenhj <1263187585@qq.com>
Date: 星期六, 24 五月 2025 19:09:32 +0800
Subject: [PATCH] 1.数据库迁移工具引入 2.若依原始sql修改

---
 db/migration/V20250524151405__create_QRTZ_SCHEDULER_STATE.sql     |   28 +
 db/migration/V20250524155005__create_sys_config.sql               |   34 +
 db/migration/V20250524154305__create_sys_role_menu.sql            |  122 ++++
 db/migration/V20250524155305__create_sys_job_log.sql              |   29 +
 db/migration/V20250524152805__create_sys_role.sql                 |   63 ++
 pom.xml                                                           |    7 
 db/migration/V20250524152505__create_sys_user.sql                 |   73 ++
 db/migration/V20250524151205__create_QRTZ_PAUSED_TRIGGER_GRPS.sql |   22 
 db/migration/V20250524151505__create_QRTZ_LOCKS.sql               |   25 
 db/migration/V20250524154805__create_sys_dict_type.sql            |   32 +
 db/migration/V20250524150205__create_QRTZ_SIMPLE_TRIGGERS.sql     |   29 +
 db/migration/V20250524151705__create_QRTZ_SIMPROP_TRIGGERS.sql    |   52 ++
 db/migration/V20250524152605__create_sys_post.sql                 |   52 ++
 db/migration/V20250524150705__create_QRTZ_TRIGGERS.sql            |   48 +
 db/migration/V20250524154705__create_sys_oper_log.sql             |   28 +
 db/migration/V20250524154905__create_sys_dict_data.sql            |   63 ++
 ruoyi-admin/pom.xml                                               |   12 
 db/migration/V20250524151305__create_QRTZ_FIRED_TRIGGERS.sql      |   45 +
 db/migration/V20250524155405__create_sys_notice.sql               |   47 +
 db/migration/V20250524153205__create_sys_menu.sql                 |  274 ++++++++++
 db/migration/V20250524152105__create_sys_dept.sql                 |   75 ++
 db/migration/V20250524145505__create_QRTZ_JOB_DETAILS.sql         |   33 +
 db/migration/V20250524154505__create_sys_role_dept.sql            |   20 
 db/migration/V20250524154605__create_sys_user_post.sql            |   19 
 db/migration/V20250524154105__create_sys_user_role.sql            |   37 +
 db/migration/V20250524150805__create_QRTZ_CRON_TRIGGERS.sql       |   27 +
 db/migration/V20250524151005__create_QRTZ_BLOB_TRIGGERS.sql       |   26 +
 db/migration/V20250524155205__create_sys_job.sql                  |   49 +
 db/migration/V20250524151105__create_QRTZ_CALENDARS.sql           |   23 
 db/migration/V20250524155505__create_gen_table_column.sql         |   58 ++
 db/migration/V20250524155105__create_sys_logininfor.sql           |   43 +
 db/migration/V20250524155505__create_gen_table.sql                |   55 ++
 32 files changed, 1,547 insertions(+), 3 deletions(-)

diff --git a/db/migration/V20250524145505__create_QRTZ_JOB_DETAILS.sql b/db/migration/V20250524145505__create_QRTZ_JOB_DETAILS.sql
new file mode 100644
index 0000000..60526bf
--- /dev/null
+++ b/db/migration/V20250524145505__create_QRTZ_JOB_DETAILS.sql
@@ -0,0 +1,33 @@
+-- ----------------------------
+-- 1銆佸瓨鍌ㄦ瘡涓�涓凡閰嶇疆鐨� jobDetail 鐨勮缁嗕俊鎭�
+-- ----------------------------
+DROP TABLE IF EXISTS QRTZ_JOB_DETAILS;
+
+CREATE TABLE QRTZ_JOB_DETAILS
+(
+    sched_name        VARCHAR(120) NOT NULL,      -- 璋冨害鍚嶇О
+    job_name          VARCHAR(200) NOT NULL,      -- 浠诲姟鍚嶇О
+    job_group         VARCHAR(200) NOT NULL,      -- 浠诲姟缁勫悕
+    description       VARCHAR(250),               -- 鐩稿叧浠嬬粛
+    job_class_name    VARCHAR(250) NOT NULL,      -- 鎵ц浠诲姟绫诲悕绉�
+    is_durable        VARCHAR(1)   NOT NULL,      -- 鏄惁鎸佷箙鍖�
+    is_nonconcurrent  VARCHAR(1)   NOT NULL,      -- 鏄惁骞跺彂
+    is_update_data    VARCHAR(1)   NOT NULL,      -- 鏄惁鏇存柊鏁版嵁
+    requests_recovery VARCHAR(1)   NOT NULL,      -- 鏄惁鎺ュ彈鎭㈠鎵ц
+    job_data          BYTEA,                      -- 瀛樻斁鎸佷箙鍖杍ob瀵硅薄
+    PRIMARY KEY (sched_name, job_name, job_group) -- 涓婚敭
+);
+
+COMMENT ON TABLE QRTZ_JOB_DETAILS IS '浠诲姟璇︾粏淇℃伅琛�';
+COMMENT ON COLUMN QRTZ_JOB_DETAILS.sched_name IS '璋冨害鍚嶇О';
+COMMENT ON COLUMN QRTZ_JOB_DETAILS.job_name IS '浠诲姟鍚嶇О';
+COMMENT ON COLUMN QRTZ_JOB_DETAILS.job_group IS '浠诲姟缁勫悕';
+COMMENT ON COLUMN QRTZ_JOB_DETAILS.description IS '鐩稿叧浠嬬粛';
+COMMENT ON COLUMN QRTZ_JOB_DETAILS.job_class_name IS '鎵ц浠诲姟绫诲悕绉�';
+COMMENT ON COLUMN QRTZ_JOB_DETAILS.is_durable IS '鏄惁鎸佷箙鍖�';
+COMMENT ON COLUMN QRTZ_JOB_DETAILS.is_nonconcurrent IS '鏄惁骞跺彂';
+COMMENT ON COLUMN QRTZ_JOB_DETAILS.is_update_data IS '鏄惁鏇存柊鏁版嵁';
+COMMENT ON COLUMN QRTZ_JOB_DETAILS.requests_recovery IS '鏄惁鎺ュ彈鎭㈠鎵ц';
+COMMENT ON COLUMN QRTZ_JOB_DETAILS.job_data IS '瀛樻斁鎸佷箙鍖杍ob瀵硅薄';
+
+
diff --git a/db/migration/V20250524150205__create_QRTZ_SIMPLE_TRIGGERS.sql b/db/migration/V20250524150205__create_QRTZ_SIMPLE_TRIGGERS.sql
new file mode 100644
index 0000000..8c94175
--- /dev/null
+++ b/db/migration/V20250524150205__create_QRTZ_SIMPLE_TRIGGERS.sql
@@ -0,0 +1,29 @@
+-- ----------------------------
+-- 2銆� 瀛樺偍宸查厤缃殑 Trigger 鐨勪俊鎭�
+-- ----------------------------
+DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS;
+
+CREATE TABLE QRTZ_SIMPLE_TRIGGERS
+(
+    sched_name      VARCHAR(120) NOT NULL,                                 -- 璋冨害鍚嶇О
+    trigger_name    VARCHAR(200) NOT NULL,                                 -- qrtz_triggers琛╰rigger_name鐨勫閿�
+    trigger_group   VARCHAR(200) NOT NULL,                                 -- qrtz_triggers琛╰rigger_group鐨勫閿�
+    repeat_count    BIGINT       NOT NULL,                                 -- 閲嶅鐨勬鏁扮粺璁�
+    repeat_interval BIGINT       NOT NULL,                                 -- 閲嶅鐨勯棿闅旀椂闂�
+    times_triggered BIGINT       NOT NULL,                                 -- 宸茬粡瑙﹀彂鐨勬鏁�
+    PRIMARY KEY (sched_name, trigger_name, trigger_group),                 -- 涓婚敭
+    FOREIGN KEY (sched_name, trigger_name, trigger_group)
+        REFERENCES QRTZ_TRIGGERS (sched_name, trigger_name, trigger_group) -- 澶栭敭绾︽潫
+);
+
+COMMENT ON TABLE QRTZ_SIMPLE_TRIGGERS IS '绠�鍗曡Е鍙戝櫒鐨勪俊鎭〃';
+COMMENT ON COLUMN QRTZ_SIMPLE_TRIGGERS.sched_name IS '璋冨害鍚嶇О';
+COMMENT ON COLUMN QRTZ_SIMPLE_TRIGGERS.trigger_name IS 'qrtz_triggers琛╰rigger_name鐨勫閿�';
+COMMENT ON COLUMN QRTZ_SIMPLE_TRIGGERS.trigger_group IS 'qrtz_triggers琛╰rigger_group鐨勫閿�';
+COMMENT ON COLUMN QRTZ_SIMPLE_TRIGGERS.repeat_count IS '閲嶅鐨勬鏁扮粺璁�';
+COMMENT ON COLUMN QRTZ_SIMPLE_TRIGGERS.repeat_interval IS '閲嶅鐨勯棿闅旀椂闂�';
+COMMENT ON COLUMN QRTZ_SIMPLE_TRIGGERS.times_triggered IS '宸茬粡瑙﹀彂鐨勬鏁�';
+
+
+
+
diff --git a/db/migration/V20250524150705__create_QRTZ_TRIGGERS.sql b/db/migration/V20250524150705__create_QRTZ_TRIGGERS.sql
new file mode 100644
index 0000000..8fb3c1a
--- /dev/null
+++ b/db/migration/V20250524150705__create_QRTZ_TRIGGERS.sql
@@ -0,0 +1,48 @@
+-- ----------------------------
+-- 3銆� 瀛樺偍绠�鍗曠殑 Trigger锛屽寘鎷噸澶嶆鏁帮紝闂撮殧锛屼互鍙婂凡瑙﹀彂鐨勬鏁�
+-- ----------------------------
+DROP TABLE IF EXISTS QRTZ_TRIGGERS;
+
+CREATE TABLE QRTZ_TRIGGERS
+(
+    sched_name     VARCHAR(120) NOT NULL,                             -- 璋冨害鍚嶇О
+    trigger_name   VARCHAR(200) NOT NULL,                             -- 瑙﹀彂鍣ㄧ殑鍚嶅瓧
+    trigger_group  VARCHAR(200) NOT NULL,                             -- 瑙﹀彂鍣ㄦ墍灞炵粍鐨勫悕瀛�
+    job_name       VARCHAR(200) NOT NULL,                             -- qrtz_job_details琛╦ob_name鐨勫閿�
+    job_group      VARCHAR(200) NOT NULL,                             -- qrtz_job_details琛╦ob_group鐨勫閿�
+    description    VARCHAR(250),                                      -- 鐩稿叧浠嬬粛
+    next_fire_time BIGINT,                                            -- 涓婁竴娆¤Е鍙戞椂闂达紙姣锛�
+    prev_fire_time BIGINT,                                            -- 涓嬩竴娆¤Е鍙戞椂闂达紙榛樿涓�-1琛ㄧず涓嶈Е鍙戯級
+    priority       INTEGER,                                           -- 浼樺厛绾�
+    trigger_state  VARCHAR(16)  NOT NULL,                             -- 瑙﹀彂鍣ㄧ姸鎬�
+    trigger_type   VARCHAR(8)   NOT NULL,                             -- 瑙﹀彂鍣ㄧ殑绫诲瀷
+    start_time     BIGINT       NOT NULL,                             -- 寮�濮嬫椂闂�
+    end_time       BIGINT,                                            -- 缁撴潫鏃堕棿
+    calendar_name  VARCHAR(200),                                      -- 鏃ョ▼琛ㄥ悕绉�
+    misfire_instr  SMALLINT,                                          -- 琛ュ伩鎵ц鐨勭瓥鐣�
+    job_data       BYTEA,                                             -- 瀛樻斁鎸佷箙鍖杍ob瀵硅薄
+    PRIMARY KEY (sched_name, trigger_name, trigger_group),            -- 涓婚敭
+    FOREIGN KEY (sched_name, job_name, job_group)
+        REFERENCES QRTZ_JOB_DETAILS (sched_name, job_name, job_group) -- 澶栭敭绾︽潫
+);
+
+COMMENT ON TABLE QRTZ_TRIGGERS IS '瑙﹀彂鍣ㄨ缁嗕俊鎭〃';
+COMMENT ON COLUMN QRTZ_TRIGGERS.sched_name IS '璋冨害鍚嶇О';
+COMMENT ON COLUMN QRTZ_TRIGGERS.trigger_name IS '瑙﹀彂鍣ㄧ殑鍚嶅瓧';
+COMMENT ON COLUMN QRTZ_TRIGGERS.trigger_group IS '瑙﹀彂鍣ㄦ墍灞炵粍鐨勫悕瀛�';
+COMMENT ON COLUMN QRTZ_TRIGGERS.job_name IS 'qrtz_job_details琛╦ob_name鐨勫閿�';
+COMMENT ON COLUMN QRTZ_TRIGGERS.job_group IS 'qrtz_job_details琛╦ob_group鐨勫閿�';
+COMMENT ON COLUMN QRTZ_TRIGGERS.description IS '鐩稿叧浠嬬粛';
+COMMENT ON COLUMN QRTZ_TRIGGERS.next_fire_time IS '涓婁竴娆¤Е鍙戞椂闂达紙姣锛�';
+COMMENT ON COLUMN QRTZ_TRIGGERS.prev_fire_time IS '涓嬩竴娆¤Е鍙戞椂闂达紙榛樿涓�-1琛ㄧず涓嶈Е鍙戯級';
+COMMENT ON COLUMN QRTZ_TRIGGERS.priority IS '浼樺厛绾�';
+COMMENT ON COLUMN QRTZ_TRIGGERS.trigger_state IS '瑙﹀彂鍣ㄧ姸鎬�';
+COMMENT ON COLUMN QRTZ_TRIGGERS.trigger_type IS '瑙﹀彂鍣ㄧ殑绫诲瀷';
+COMMENT ON COLUMN QRTZ_TRIGGERS.start_time IS '寮�濮嬫椂闂�';
+COMMENT ON COLUMN QRTZ_TRIGGERS.end_time IS '缁撴潫鏃堕棿';
+COMMENT ON COLUMN QRTZ_TRIGGERS.calendar_name IS '鏃ョ▼琛ㄥ悕绉�';
+COMMENT ON COLUMN QRTZ_TRIGGERS.misfire_instr IS '琛ュ伩鎵ц鐨勭瓥鐣�';
+COMMENT ON COLUMN QRTZ_TRIGGERS.job_data IS '瀛樻斁鎸佷箙鍖杍ob瀵硅薄';
+
+
+
diff --git a/db/migration/V20250524150805__create_QRTZ_CRON_TRIGGERS.sql b/db/migration/V20250524150805__create_QRTZ_CRON_TRIGGERS.sql
new file mode 100644
index 0000000..351e861
--- /dev/null
+++ b/db/migration/V20250524150805__create_QRTZ_CRON_TRIGGERS.sql
@@ -0,0 +1,27 @@
+-- ----------------------------
+-- 4銆� 瀛樺偍 Cron Trigger锛屽寘鎷� Cron 琛ㄨ揪寮忓拰鏃跺尯淇℃伅
+-- ----------------------------
+DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS;
+
+CREATE TABLE QRTZ_CRON_TRIGGERS
+(
+    sched_name      VARCHAR(120) NOT NULL,                                 -- 璋冨害鍚嶇О
+    trigger_name    VARCHAR(200) NOT NULL,                                 -- qrtz_triggers琛╰rigger_name鐨勫閿�
+    trigger_group   VARCHAR(200) NOT NULL,                                 -- qrtz_triggers琛╰rigger_group鐨勫閿�
+    cron_expression VARCHAR(200) NOT NULL,                                 -- cron琛ㄨ揪寮�
+    time_zone_id    VARCHAR(80),                                           -- 鏃跺尯
+    PRIMARY KEY (sched_name, trigger_name, trigger_group),                 -- 涓婚敭
+    FOREIGN KEY (sched_name, trigger_name, trigger_group)
+        REFERENCES QRTZ_TRIGGERS (sched_name, trigger_name, trigger_group) -- 澶栭敭绾︽潫
+);
+
+COMMENT ON TABLE QRTZ_CRON_TRIGGERS IS 'Cron绫诲瀷鐨勮Е鍙戝櫒琛�';
+COMMENT ON COLUMN QRTZ_CRON_TRIGGERS.sched_name IS '璋冨害鍚嶇О';
+COMMENT ON COLUMN QRTZ_CRON_TRIGGERS.trigger_name IS 'qrtz_triggers琛╰rigger_name鐨勫閿�';
+COMMENT ON COLUMN QRTZ_CRON_TRIGGERS.trigger_group IS 'qrtz_triggers琛╰rigger_group鐨勫閿�';
+COMMENT ON COLUMN QRTZ_CRON_TRIGGERS.cron_expression IS 'cron琛ㄨ揪寮�';
+COMMENT ON COLUMN QRTZ_CRON_TRIGGERS.time_zone_id IS '鏃跺尯';
+
+
+
+
diff --git a/db/migration/V20250524151005__create_QRTZ_BLOB_TRIGGERS.sql b/db/migration/V20250524151005__create_QRTZ_BLOB_TRIGGERS.sql
new file mode 100644
index 0000000..65149cc
--- /dev/null
+++ b/db/migration/V20250524151005__create_QRTZ_BLOB_TRIGGERS.sql
@@ -0,0 +1,26 @@
+-- ----------------------------
+-- 5銆� Trigger 浣滀负 Blob 绫诲瀷瀛樺偍(鐢ㄤ簬 Quartz 鐢ㄦ埛鐢� JDBC 鍒涘缓浠栦滑鑷繁瀹氬埗鐨� Trigger 绫诲瀷锛孞obStore 骞朵笉鐭ラ亾濡備綍瀛樺偍瀹炰緥鐨勬椂鍊�)
+-- ----------------------------
+DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS;
+
+CREATE TABLE QRTZ_BLOB_TRIGGERS
+(
+    sched_name    VARCHAR(120) NOT NULL,                                   -- 璋冨害鍚嶇О
+    trigger_name  VARCHAR(200) NOT NULL,                                   -- qrtz_triggers琛╰rigger_name鐨勫閿�
+    trigger_group VARCHAR(200) NOT NULL,                                   -- qrtz_triggers琛╰rigger_group鐨勫閿�
+    blob_data     BYTEA,                                                   -- 瀛樻斁鎸佷箙鍖朤rigger瀵硅薄
+    PRIMARY KEY (sched_name, trigger_name, trigger_group),                 -- 涓婚敭
+    FOREIGN KEY (sched_name, trigger_name, trigger_group)
+        REFERENCES QRTZ_TRIGGERS (sched_name, trigger_name, trigger_group) -- 澶栭敭绾︽潫
+);
+
+COMMENT ON TABLE QRTZ_BLOB_TRIGGERS IS 'Blob绫诲瀷鐨勮Е鍙戝櫒琛�';
+COMMENT ON COLUMN QRTZ_BLOB_TRIGGERS.sched_name IS '璋冨害鍚嶇О';
+COMMENT ON COLUMN QRTZ_BLOB_TRIGGERS.trigger_name IS 'qrtz_triggers琛╰rigger_name鐨勫閿�';
+COMMENT ON COLUMN QRTZ_BLOB_TRIGGERS.trigger_group IS 'qrtz_triggers琛╰rigger_group鐨勫閿�';
+COMMENT ON COLUMN QRTZ_BLOB_TRIGGERS.blob_data IS '瀛樻斁鎸佷箙鍖朤rigger瀵硅薄';
+
+
+
+
+
diff --git a/db/migration/V20250524151105__create_QRTZ_CALENDARS.sql b/db/migration/V20250524151105__create_QRTZ_CALENDARS.sql
new file mode 100644
index 0000000..9bb7e77
--- /dev/null
+++ b/db/migration/V20250524151105__create_QRTZ_CALENDARS.sql
@@ -0,0 +1,23 @@
+-- ----------------------------
+-- 6銆� 浠� Blob 绫诲瀷瀛樺偍瀛樻斁鏃ュ巻淇℃伅锛� quartz鍙厤缃竴涓棩鍘嗘潵鎸囧畾涓�涓椂闂磋寖鍥�
+-- ----------------------------
+DROP TABLE IF EXISTS QRTZ_CALENDARS;
+
+CREATE TABLE QRTZ_CALENDARS
+(
+    sched_name    VARCHAR(120) NOT NULL,    -- 璋冨害鍚嶇О
+    calendar_name VARCHAR(200) NOT NULL,    -- 鏃ュ巻鍚嶇О
+    calendar      BYTEA        NOT NULL,    -- 瀛樻斁鎸佷箙鍖朿alendar瀵硅薄
+    PRIMARY KEY (sched_name, calendar_name) -- 涓婚敭
+);
+
+COMMENT ON TABLE QRTZ_CALENDARS IS '鏃ュ巻淇℃伅琛�';
+COMMENT ON COLUMN QRTZ_CALENDARS.sched_name IS '璋冨害鍚嶇О';
+COMMENT ON COLUMN QRTZ_CALENDARS.calendar_name IS '鏃ュ巻鍚嶇О';
+COMMENT ON COLUMN QRTZ_CALENDARS.calendar IS '瀛樻斁鎸佷箙鍖朿alendar瀵硅薄';
+
+
+
+
+
+
diff --git a/db/migration/V20250524151205__create_QRTZ_PAUSED_TRIGGER_GRPS.sql b/db/migration/V20250524151205__create_QRTZ_PAUSED_TRIGGER_GRPS.sql
new file mode 100644
index 0000000..fde4808
--- /dev/null
+++ b/db/migration/V20250524151205__create_QRTZ_PAUSED_TRIGGER_GRPS.sql
@@ -0,0 +1,22 @@
+-- ----------------------------
+-- 7銆� 瀛樺偍宸叉殏鍋滅殑 Trigger 缁勭殑淇℃伅
+-- ----------------------------
+DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS;
+
+CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS
+(
+    sched_name    VARCHAR(120) NOT NULL,    -- 璋冨害鍚嶇О
+    trigger_group VARCHAR(200) NOT NULL,    -- qrtz_triggers琛╰rigger_group鐨勫閿�
+    PRIMARY KEY (sched_name, trigger_group) -- 涓婚敭
+);
+
+COMMENT ON TABLE QRTZ_PAUSED_TRIGGER_GRPS IS '鏆傚仠鐨勮Е鍙戝櫒琛�';
+COMMENT ON COLUMN QRTZ_PAUSED_TRIGGER_GRPS.sched_name IS '璋冨害鍚嶇О';
+COMMENT ON COLUMN QRTZ_PAUSED_TRIGGER_GRPS.trigger_group IS 'qrtz_triggers琛╰rigger_group鐨勫閿�';
+
+
+
+
+
+
+
diff --git a/db/migration/V20250524151305__create_QRTZ_FIRED_TRIGGERS.sql b/db/migration/V20250524151305__create_QRTZ_FIRED_TRIGGERS.sql
new file mode 100644
index 0000000..c9a86e0
--- /dev/null
+++ b/db/migration/V20250524151305__create_QRTZ_FIRED_TRIGGERS.sql
@@ -0,0 +1,45 @@
+-- ----------------------------
+-- 8銆� 瀛樺偍涓庡凡瑙﹀彂鐨� Trigger 鐩稿叧鐨勭姸鎬佷俊鎭紝浠ュ強鐩歌仈 Job 鐨勬墽琛屼俊鎭�
+-- ----------------------------
+DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS;
+
+CREATE TABLE QRTZ_FIRED_TRIGGERS
+(
+    sched_name        VARCHAR(120) NOT NULL, -- 璋冨害鍚嶇О
+    entry_id          VARCHAR(95)  NOT NULL, -- 璋冨害鍣ㄥ疄渚媔d
+    trigger_name      VARCHAR(200) NOT NULL, -- qrtz_triggers琛╰rigger_name鐨勫閿�
+    trigger_group     VARCHAR(200) NOT NULL, -- qrtz_triggers琛╰rigger_group鐨勫閿�
+    instance_name     VARCHAR(200) NOT NULL, -- 璋冨害鍣ㄥ疄渚嬪悕
+    fired_time        BIGINT       NOT NULL, -- 瑙﹀彂鐨勬椂闂�
+    sched_time        BIGINT       NOT NULL, -- 瀹氭椂鍣ㄥ埗瀹氱殑鏃堕棿
+    priority          INTEGER      NOT NULL, -- 浼樺厛绾�
+    state             VARCHAR(16)  NOT NULL, -- 鐘舵��
+    job_name          VARCHAR(200),          -- 浠诲姟鍚嶇О
+    job_group         VARCHAR(200),          -- 浠诲姟缁勫悕
+    is_nonconcurrent  VARCHAR(1),            -- 鏄惁骞跺彂
+    requests_recovery VARCHAR(1),            -- 鏄惁鎺ュ彈鎭㈠鎵ц
+    PRIMARY KEY (sched_name, entry_id)       -- 涓婚敭
+);
+
+COMMENT ON TABLE QRTZ_FIRED_TRIGGERS IS '宸茶Е鍙戠殑瑙﹀彂鍣ㄨ〃';
+COMMENT ON COLUMN QRTZ_FIRED_TRIGGERS.sched_name IS '璋冨害鍚嶇О';
+COMMENT ON COLUMN QRTZ_FIRED_TRIGGERS.entry_id IS '璋冨害鍣ㄥ疄渚媔d';
+COMMENT ON COLUMN QRTZ_FIRED_TRIGGERS.trigger_name IS 'qrtz_triggers琛╰rigger_name鐨勫閿�';
+COMMENT ON COLUMN QRTZ_FIRED_TRIGGERS.trigger_group IS 'qrtz_triggers琛╰rigger_group鐨勫閿�';
+COMMENT ON COLUMN QRTZ_FIRED_TRIGGERS.instance_name IS '璋冨害鍣ㄥ疄渚嬪悕';
+COMMENT ON COLUMN QRTZ_FIRED_TRIGGERS.fired_time IS '瑙﹀彂鐨勬椂闂�';
+COMMENT ON COLUMN QRTZ_FIRED_TRIGGERS.sched_time IS '瀹氭椂鍣ㄥ埗瀹氱殑鏃堕棿';
+COMMENT ON COLUMN QRTZ_FIRED_TRIGGERS.priority IS '浼樺厛绾�';
+COMMENT ON COLUMN QRTZ_FIRED_TRIGGERS.state IS '鐘舵��';
+COMMENT ON COLUMN QRTZ_FIRED_TRIGGERS.job_name IS '浠诲姟鍚嶇О';
+COMMENT ON COLUMN QRTZ_FIRED_TRIGGERS.job_group IS '浠诲姟缁勫悕';
+COMMENT ON COLUMN QRTZ_FIRED_TRIGGERS.is_nonconcurrent IS '鏄惁骞跺彂';
+COMMENT ON COLUMN QRTZ_FIRED_TRIGGERS.requests_recovery IS '鏄惁鎺ュ彈鎭㈠鎵ц';
+
+
+
+
+
+
+
+
diff --git a/db/migration/V20250524151405__create_QRTZ_SCHEDULER_STATE.sql b/db/migration/V20250524151405__create_QRTZ_SCHEDULER_STATE.sql
new file mode 100644
index 0000000..29d9053
--- /dev/null
+++ b/db/migration/V20250524151405__create_QRTZ_SCHEDULER_STATE.sql
@@ -0,0 +1,28 @@
+-- ----------------------------
+-- 9銆� 瀛樺偍灏戦噺鐨勬湁鍏� Scheduler 鐨勭姸鎬佷俊鎭紝鍋囧鏄敤浜庨泦缇や腑锛屽彲浠ョ湅鍒板叾浠栫殑 Scheduler 瀹炰緥
+-- ----------------------------
+DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE;
+
+CREATE TABLE QRTZ_SCHEDULER_STATE
+(
+    sched_name        VARCHAR(120) NOT NULL, -- 璋冨害鍚嶇О
+    instance_name     VARCHAR(200) NOT NULL, -- 瀹炰緥鍚嶇О
+    last_checkin_time BIGINT       NOT NULL, -- 涓婃妫�鏌ユ椂闂�
+    checkin_interval  BIGINT       NOT NULL, -- 妫�鏌ラ棿闅旀椂闂�
+    PRIMARY KEY (sched_name, instance_name)  -- 涓婚敭
+);
+
+COMMENT ON TABLE QRTZ_SCHEDULER_STATE IS '璋冨害鍣ㄧ姸鎬佽〃';
+COMMENT ON COLUMN QRTZ_SCHEDULER_STATE.sched_name IS '璋冨害鍚嶇О';
+COMMENT ON COLUMN QRTZ_SCHEDULER_STATE.instance_name IS '瀹炰緥鍚嶇О';
+COMMENT ON COLUMN QRTZ_SCHEDULER_STATE.last_checkin_time IS '涓婃妫�鏌ユ椂闂�';
+COMMENT ON COLUMN QRTZ_SCHEDULER_STATE.checkin_interval IS '妫�鏌ラ棿闅旀椂闂�';
+
+
+
+
+
+
+
+
+
diff --git a/db/migration/V20250524151505__create_QRTZ_LOCKS.sql b/db/migration/V20250524151505__create_QRTZ_LOCKS.sql
new file mode 100644
index 0000000..9b7b637
--- /dev/null
+++ b/db/migration/V20250524151505__create_QRTZ_LOCKS.sql
@@ -0,0 +1,25 @@
+-- ----------------------------
+-- 10銆� 瀛樺偍绋嬪簭鐨勬偛瑙傞攣鐨勪俊鎭�(鍋囧浣跨敤浜嗘偛瑙傞攣)
+-- ----------------------------
+DROP TABLE IF EXISTS QRTZ_LOCKS;
+
+CREATE TABLE QRTZ_LOCKS
+(
+    sched_name VARCHAR(120) NOT NULL,   -- 璋冨害鍚嶇О
+    lock_name  VARCHAR(40)  NOT NULL,   -- 鎮茶閿佸悕绉�
+    PRIMARY KEY (sched_name, lock_name) -- 涓婚敭
+);
+
+COMMENT ON TABLE QRTZ_LOCKS IS '瀛樺偍鐨勬偛瑙傞攣淇℃伅琛�';
+COMMENT ON COLUMN QRTZ_LOCKS.sched_name IS '璋冨害鍚嶇О';
+COMMENT ON COLUMN QRTZ_LOCKS.lock_name IS '鎮茶閿佸悕绉�';
+
+
+
+
+
+
+
+
+
+
diff --git a/db/migration/V20250524151705__create_QRTZ_SIMPROP_TRIGGERS.sql b/db/migration/V20250524151705__create_QRTZ_SIMPROP_TRIGGERS.sql
new file mode 100644
index 0000000..1b634c6
--- /dev/null
+++ b/db/migration/V20250524151705__create_QRTZ_SIMPROP_TRIGGERS.sql
@@ -0,0 +1,52 @@
+-- ----------------------------
+-- 11銆� Quartz闆嗙兢瀹炵幇鍚屾鏈哄埗鐨勮閿佽〃
+-- ----------------------------
+DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS;
+
+CREATE TABLE QRTZ_SIMPROP_TRIGGERS
+(
+    sched_name    VARCHAR(120) NOT NULL,                                   -- 璋冨害鍚嶇О
+    trigger_name  VARCHAR(200) NOT NULL,                                   -- qrtz_triggers琛╰rigger_name鐨勫閿�
+    trigger_group VARCHAR(200) NOT NULL,                                   -- qrtz_triggers琛╰rigger_group鐨勫閿�
+    str_prop_1    VARCHAR(512),                                            -- String绫诲瀷鐨則rigger鐨勭涓�涓弬鏁�
+    str_prop_2    VARCHAR(512),                                            -- String绫诲瀷鐨則rigger鐨勭浜屼釜鍙傛暟
+    str_prop_3    VARCHAR(512),                                            -- String绫诲瀷鐨則rigger鐨勭涓変釜鍙傛暟
+    int_prop_1    INTEGER,                                                 -- int绫诲瀷鐨則rigger鐨勭涓�涓弬鏁�
+    int_prop_2    INTEGER,                                                 -- int绫诲瀷鐨則rigger鐨勭浜屼釜鍙傛暟
+    long_prop_1   BIGINT,                                                  -- long绫诲瀷鐨則rigger鐨勭涓�涓弬鏁�
+    long_prop_2   BIGINT,                                                  -- long绫诲瀷鐨則rigger鐨勭浜屼釜鍙傛暟
+    dec_prop_1    NUMERIC(13, 4),                                          -- decimal绫诲瀷鐨則rigger鐨勭涓�涓弬鏁�
+    dec_prop_2    NUMERIC(13, 4),                                          -- decimal绫诲瀷鐨則rigger鐨勭浜屼釜鍙傛暟
+    bool_prop_1   VARCHAR(1),                                              -- Boolean绫诲瀷鐨則rigger鐨勭涓�涓弬鏁�
+    bool_prop_2   VARCHAR(1),                                              -- Boolean绫诲瀷鐨則rigger鐨勭浜屼釜鍙傛暟
+    PRIMARY KEY (sched_name, trigger_name, trigger_group),                 -- 涓婚敭
+    FOREIGN KEY (sched_name, trigger_name, trigger_group)
+        REFERENCES QRTZ_TRIGGERS (sched_name, trigger_name, trigger_group) -- 澶栭敭绾︽潫
+);
+
+COMMENT ON TABLE QRTZ_SIMPROP_TRIGGERS IS '鍚屾鏈哄埗鐨勮閿佽〃';
+COMMENT ON COLUMN QRTZ_SIMPROP_TRIGGERS.sched_name IS '璋冨害鍚嶇О';
+COMMENT ON COLUMN QRTZ_SIMPROP_TRIGGERS.trigger_name IS 'qrtz_triggers琛╰rigger_name鐨勫閿�';
+COMMENT ON COLUMN QRTZ_SIMPROP_TRIGGERS.trigger_group IS 'qrtz_triggers琛╰rigger_group鐨勫閿�';
+COMMENT ON COLUMN QRTZ_SIMPROP_TRIGGERS.str_prop_1 IS 'String绫诲瀷鐨則rigger鐨勭涓�涓弬鏁�';
+COMMENT ON COLUMN QRTZ_SIMPROP_TRIGGERS.str_prop_2 IS 'String绫诲瀷鐨則rigger鐨勭浜屼釜鍙傛暟';
+COMMENT ON COLUMN QRTZ_SIMPROP_TRIGGERS.str_prop_3 IS 'String绫诲瀷鐨則rigger鐨勭涓変釜鍙傛暟';
+COMMENT ON COLUMN QRTZ_SIMPROP_TRIGGERS.int_prop_1 IS 'int绫诲瀷鐨則rigger鐨勭涓�涓弬鏁�';
+COMMENT ON COLUMN QRTZ_SIMPROP_TRIGGERS.int_prop_2 IS 'int绫诲瀷鐨則rigger鐨勭浜屼釜鍙傛暟';
+COMMENT ON COLUMN QRTZ_SIMPROP_TRIGGERS.long_prop_1 IS 'long绫诲瀷鐨則rigger鐨勭涓�涓弬鏁�';
+COMMENT ON COLUMN QRTZ_SIMPROP_TRIGGERS.long_prop_2 IS 'long绫诲瀷鐨則rigger鐨勭浜屼釜鍙傛暟';
+COMMENT ON COLUMN QRTZ_SIMPROP_TRIGGERS.dec_prop_1 IS 'decimal绫诲瀷鐨則rigger鐨勭涓�涓弬鏁�';
+COMMENT ON COLUMN QRTZ_SIMPROP_TRIGGERS.dec_prop_2 IS 'decimal绫诲瀷鐨則rigger鐨勭浜屼釜鍙傛暟';
+COMMENT ON COLUMN QRTZ_SIMPROP_TRIGGERS.bool_prop_1 IS 'Boolean绫诲瀷鐨則rigger鐨勭涓�涓弬鏁�';
+COMMENT ON COLUMN QRTZ_SIMPROP_TRIGGERS.bool_prop_2 IS 'Boolean绫诲瀷鐨則rigger鐨勭浜屼釜鍙傛暟';
+
+
+
+
+
+
+
+
+
+
+
diff --git a/db/migration/V20250524152105__create_sys_dept.sql b/db/migration/V20250524152105__create_sys_dept.sql
new file mode 100644
index 0000000..ad12ed0
--- /dev/null
+++ b/db/migration/V20250524152105__create_sys_dept.sql
@@ -0,0 +1,75 @@
+-- ----------------------------
+-- 閮ㄩ棬琛�
+-- ----------------------------
+DROP TABLE IF EXISTS sys_dept;
+
+CREATE TABLE sys_dept
+(
+    dept_id     BIGSERIAL PRIMARY KEY,    -- 閮ㄩ棬id锛岃嚜澧炲瓧娈碉紝涓婚敭
+    parent_id   BIGINT      DEFAULT 0,    -- 鐖堕儴闂╥d
+    ancestors   VARCHAR(50) DEFAULT '',   -- 绁栫骇鍒楄〃
+    dept_name   VARCHAR(30) DEFAULT '',   -- 閮ㄩ棬鍚嶇О
+    order_num   INTEGER     DEFAULT 0,    -- 鏄剧ず椤哄簭
+    leader      VARCHAR(20) DEFAULT NULL, -- 璐熻矗浜�
+    phone       VARCHAR(11) DEFAULT NULL, -- 鑱旂郴鐢佃瘽
+    email       VARCHAR(50) DEFAULT NULL, -- 閭
+    status      CHAR(1)     DEFAULT '0',  -- 閮ㄩ棬鐘舵�侊紙0姝e父 1鍋滅敤锛�
+    del_flag    CHAR(1)     DEFAULT '0',  -- 鍒犻櫎鏍囧織锛�0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛�
+    create_by   VARCHAR(64) DEFAULT '',   -- 鍒涘缓鑰�
+    create_time TIMESTAMP,                -- 鍒涘缓鏃堕棿
+    update_by   VARCHAR(64) DEFAULT '',   -- 鏇存柊鑰�
+    update_time TIMESTAMP                 -- 鏇存柊鏃堕棿
+);
+
+COMMENT ON TABLE sys_dept IS '閮ㄩ棬琛�';
+COMMENT ON COLUMN sys_dept.dept_id IS '閮ㄩ棬id';
+COMMENT ON COLUMN sys_dept.parent_id IS '鐖堕儴闂╥d';
+COMMENT ON COLUMN sys_dept.ancestors IS '绁栫骇鍒楄〃';
+COMMENT ON COLUMN sys_dept.dept_name IS '閮ㄩ棬鍚嶇О';
+COMMENT ON COLUMN sys_dept.order_num IS '鏄剧ず椤哄簭';
+COMMENT ON COLUMN sys_dept.leader IS '璐熻矗浜�';
+COMMENT ON COLUMN sys_dept.phone IS '鑱旂郴鐢佃瘽';
+COMMENT ON COLUMN sys_dept.email IS '閭';
+COMMENT ON COLUMN sys_dept.status IS '閮ㄩ棬鐘舵�侊紙0姝e父 1鍋滅敤锛�';
+COMMENT ON COLUMN sys_dept.del_flag IS '鍒犻櫎鏍囧織锛�0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛�';
+COMMENT ON COLUMN sys_dept.create_by IS '鍒涘缓鑰�';
+COMMENT ON COLUMN sys_dept.create_time IS '鍒涘缓鏃堕棿';
+COMMENT ON COLUMN sys_dept.update_by IS '鏇存柊鑰�';
+COMMENT ON COLUMN sys_dept.update_time IS '鏇存柊鏃堕棿';
+
+-- 閮ㄩ棬鏁版嵁
+INSERT INTO sys_dept
+(dept_id, parent_id, ancestors, dept_name, order_num, leader, phone, email, status, del_flag, create_by, create_time,
+ update_by, update_time)
+VALUES (100, 0, '0', '鑻ヤ緷绉戞妧', 0, '鑻ヤ緷', '15888888888', 'ry@qq.com', '0', '0', 'admin', CURRENT_TIMESTAMP, '', NULL),
+       (101, 100, '0,100', '娣卞湷鎬诲叕鍙�', 1, '鑻ヤ緷', '15888888888', 'ry@qq.com', '0', '0', 'admin', CURRENT_TIMESTAMP,
+        '', NULL),
+       (102, 100, '0,100', '闀挎矙鍒嗗叕鍙�', 2, '鑻ヤ緷', '15888888888', 'ry@qq.com', '0', '0', 'admin', CURRENT_TIMESTAMP,
+        '', NULL),
+       (103, 101, '0,100,101', '鐮斿彂閮ㄩ棬', 1, '鑻ヤ緷', '15888888888', 'ry@qq.com', '0', '0', 'admin', CURRENT_TIMESTAMP,
+        '', NULL),
+       (104, 101, '0,100,101', '甯傚満閮ㄩ棬', 2, '鑻ヤ緷', '15888888888', 'ry@qq.com', '0', '0', 'admin', CURRENT_TIMESTAMP,
+        '', NULL),
+       (105, 101, '0,100,101', '娴嬭瘯閮ㄩ棬', 3, '鑻ヤ緷', '15888888888', 'ry@qq.com', '0', '0', 'admin', CURRENT_TIMESTAMP,
+        '', NULL),
+       (106, 101, '0,100,101', '璐㈠姟閮ㄩ棬', 4, '鑻ヤ緷', '15888888888', 'ry@qq.com', '0', '0', 'admin', CURRENT_TIMESTAMP,
+        '', NULL),
+       (107, 101, '0,100,101', '杩愮淮閮ㄩ棬', 5, '鑻ヤ緷', '15888888888', 'ry@qq.com', '0', '0', 'admin', CURRENT_TIMESTAMP,
+        '', NULL),
+       (108, 102, '0,100,102', '甯傚満閮ㄩ棬', 1, '鑻ヤ緷', '15888888888', 'ry@qq.com', '0', '0', 'admin', CURRENT_TIMESTAMP,
+        '', NULL),
+       (109, 102, '0,100,102', '璐㈠姟閮ㄩ棬', 2, '鑻ヤ緷', '15888888888', 'ry@qq.com', '0', '0', 'admin', CURRENT_TIMESTAMP,
+        '', NULL);
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/db/migration/V20250524152505__create_sys_user.sql b/db/migration/V20250524152505__create_sys_user.sql
new file mode 100644
index 0000000..4ae41b9
--- /dev/null
+++ b/db/migration/V20250524152505__create_sys_user.sql
@@ -0,0 +1,73 @@
+-- ----------------------------
+-- 鐢ㄦ埛淇℃伅琛�
+-- ----------------------------
+
+DROP TABLE IF EXISTS sys_user;
+
+CREATE TABLE sys_user
+(
+    user_id     BIGSERIAL PRIMARY KEY,     -- 鐢ㄦ埛ID锛岃嚜澧炲瓧娈碉紝涓婚敭
+    dept_id     BIGINT       DEFAULT NULL, -- 閮ㄩ棬ID
+    user_name   VARCHAR(30) NOT NULL,      -- 鐢ㄦ埛璐﹀彿
+    nick_name   VARCHAR(30) NOT NULL,      -- 鐢ㄦ埛鏄电О
+    user_type   VARCHAR(2)   DEFAULT '00', -- 鐢ㄦ埛绫诲瀷锛�00绯荤粺鐢ㄦ埛锛�
+    email       VARCHAR(50)  DEFAULT '',   -- 鐢ㄦ埛閭
+    phonenumber VARCHAR(11)  DEFAULT '',   -- 鎵嬫満鍙风爜
+    sex         CHAR(1)      DEFAULT '0',  -- 鐢ㄦ埛鎬у埆锛�0鐢� 1濂� 2鏈煡锛�
+    avatar      VARCHAR(100) DEFAULT '',   -- 澶村儚鍦板潃
+    password    VARCHAR(100) DEFAULT '',   -- 瀵嗙爜
+    status      CHAR(1)      DEFAULT '0',  -- 璐﹀彿鐘舵�侊紙0姝e父 1鍋滅敤锛�
+    del_flag    CHAR(1)      DEFAULT '0',  -- 鍒犻櫎鏍囧織锛�0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛�
+    login_ip    VARCHAR(128) DEFAULT '',   -- 鏈�鍚庣櫥褰旾P
+    login_date  TIMESTAMP,                 -- 鏈�鍚庣櫥褰曟椂闂�
+    create_by   VARCHAR(64)  DEFAULT '',   -- 鍒涘缓鑰�
+    create_time TIMESTAMP,                 -- 鍒涘缓鏃堕棿
+    update_by   VARCHAR(64)  DEFAULT '',   -- 鏇存柊鑰�
+    update_time TIMESTAMP,                 -- 鏇存柊鏃堕棿
+    remark      VARCHAR(500) DEFAULT NULL, -- 澶囨敞
+);
+
+COMMENT ON TABLE sys_user IS '鐢ㄦ埛淇℃伅琛�';
+COMMENT ON COLUMN sys_user.user_id IS '鐢ㄦ埛ID';
+COMMENT ON COLUMN sys_user.dept_id IS '閮ㄩ棬ID';
+COMMENT ON COLUMN sys_user.user_name IS '鐢ㄦ埛璐﹀彿';
+COMMENT ON COLUMN sys_user.nick_name IS '鐢ㄦ埛鏄电О';
+COMMENT ON COLUMN sys_user.user_type IS '鐢ㄦ埛绫诲瀷锛�00绯荤粺鐢ㄦ埛锛�';
+COMMENT ON COLUMN sys_user.email IS '鐢ㄦ埛閭';
+COMMENT ON COLUMN sys_user.phonenumber IS '鎵嬫満鍙风爜';
+COMMENT ON COLUMN sys_user.sex IS '鐢ㄦ埛鎬у埆锛�0鐢� 1濂� 2鏈煡锛�';
+COMMENT ON COLUMN sys_user.avatar IS '澶村儚鍦板潃';
+COMMENT ON COLUMN sys_user.password IS '瀵嗙爜';
+COMMENT ON COLUMN sys_user.status IS '璐﹀彿鐘舵�侊紙0姝e父 1鍋滅敤锛�';
+COMMENT ON COLUMN sys_user.del_flag IS '鍒犻櫎鏍囧織锛�0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛�';
+COMMENT ON COLUMN sys_user.login_ip IS '鏈�鍚庣櫥褰旾P';
+COMMENT ON COLUMN sys_user.login_date IS '鏈�鍚庣櫥褰曟椂闂�';
+COMMENT ON COLUMN sys_user.create_by IS '鍒涘缓鑰�';
+COMMENT ON COLUMN sys_user.create_time IS '鍒涘缓鏃堕棿';
+COMMENT ON COLUMN sys_user.update_by IS '鏇存柊鑰�';
+COMMENT ON COLUMN sys_user.update_time IS '鏇存柊鏃堕棿';
+COMMENT ON COLUMN sys_user.remark IS '澶囨敞';
+
+-- 鍒濆鍖�-鐢ㄦ埛淇℃伅琛ㄦ暟鎹�
+INSERT INTO sys_user (dept_id, user_name, nick_name, user_type, email, phonenumber, sex, avatar, password, status,
+                      del_flag, login_ip, login_date, create_by, create_time, update_by, update_time, remark)
+VALUES (103, 'admin', '鑻ヤ緷', '00', 'ry@163.com', '15888888888', '1', '',
+        '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', CURRENT_TIMESTAMP,
+        'admin', CURRENT_TIMESTAMP, '', CURRENT_TIMESTAMP, '绠$悊鍛�'),
+       (105, 'ry', '鑻ヤ緷', '00', 'ry@qq.com', '15666666666', '1', '',
+        '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', CURRENT_TIMESTAMP,
+        'admin', CURRENT_TIMESTAMP, '', CURRENT_TIMESTAMP, '娴嬭瘯鍛�');
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/db/migration/V20250524152605__create_sys_post.sql b/db/migration/V20250524152605__create_sys_post.sql
new file mode 100644
index 0000000..9dd050a
--- /dev/null
+++ b/db/migration/V20250524152605__create_sys_post.sql
@@ -0,0 +1,52 @@
+-- ----------------------------
+-- 宀椾綅淇℃伅琛�
+-- ----------------------------
+DROP TABLE IF EXISTS sys_post;
+
+CREATE TABLE sys_post
+(
+    post_id     BIGSERIAL PRIMARY KEY,     -- 宀椾綅ID锛岃嚜澧炲瓧娈碉紝涓婚敭
+    post_code   VARCHAR(64) NOT NULL,      -- 宀椾綅缂栫爜
+    post_name   VARCHAR(50) NOT NULL,      -- 宀椾綅鍚嶇О
+    post_sort   INT         NOT NULL,      -- 鏄剧ず椤哄簭
+    status      CHAR(1)     NOT NULL,      -- 鐘舵�侊紙0姝e父 1鍋滅敤锛�
+    create_by   VARCHAR(64)  DEFAULT '',   -- 鍒涘缓鑰�
+    create_time TIMESTAMP,                 -- 鍒涘缓鏃堕棿
+    update_by   VARCHAR(64)  DEFAULT '',   -- 鏇存柊鑰�
+    update_time TIMESTAMP,                 -- 鏇存柊鏃堕棿
+    remark      VARCHAR(500) DEFAULT NULL, -- 澶囨敞
+);
+
+COMMENT ON TABLE sys_post IS '宀椾綅淇℃伅琛�';
+COMMENT ON COLUMN sys_post.post_id IS '宀椾綅ID';
+COMMENT ON COLUMN sys_post.post_code IS '宀椾綅缂栫爜';
+COMMENT ON COLUMN sys_post.post_name IS '宀椾綅鍚嶇О';
+COMMENT ON COLUMN sys_post.post_sort IS '鏄剧ず椤哄簭';
+COMMENT ON COLUMN sys_post.status IS '鐘舵�侊紙0姝e父 1鍋滅敤锛�';
+COMMENT ON COLUMN sys_post.create_by IS '鍒涘缓鑰�';
+COMMENT ON COLUMN sys_post.create_time IS '鍒涘缓鏃堕棿';
+COMMENT ON COLUMN sys_post.update_by IS '鏇存柊鑰�';
+COMMENT ON COLUMN sys_post.update_time IS '鏇存柊鏃堕棿';
+COMMENT ON COLUMN sys_post.remark IS '澶囨敞';
+
+-- 鍒濆鍖�-宀椾綅淇℃伅琛ㄦ暟鎹�
+INSERT INTO sys_post (post_code, post_name, post_sort, status, create_by, create_time, update_by, update_time, remark)
+VALUES ('ceo', '钁d簨闀�', 1, '0', 'admin', CURRENT_TIMESTAMP, '', CURRENT_TIMESTAMP, ''),
+       ('se', '椤圭洰缁忕悊', 2, '0', 'admin', CURRENT_TIMESTAMP, '', CURRENT_TIMESTAMP, ''),
+       ('hr', '浜哄姏璧勬簮', 3, '0', 'admin', CURRENT_TIMESTAMP, '', CURRENT_TIMESTAMP, ''),
+       ('user', '鏅�氬憳宸�', 4, '0', 'admin', CURRENT_TIMESTAMP, '', CURRENT_TIMESTAMP, '');
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/db/migration/V20250524152805__create_sys_role.sql b/db/migration/V20250524152805__create_sys_role.sql
new file mode 100644
index 0000000..36077d9
--- /dev/null
+++ b/db/migration/V20250524152805__create_sys_role.sql
@@ -0,0 +1,63 @@
+-- ----------------------------
+-- 瑙掕壊淇℃伅琛�
+-- ----------------------------
+DROP TABLE IF EXISTS sys_role;
+
+-- 鍒涘缓瑙掕壊淇℃伅琛�
+CREATE TABLE sys_role
+(
+    role_id             BIGSERIAL PRIMARY KEY,     -- 瑙掕壊ID锛岃嚜澧炲瓧娈碉紝涓婚敭
+    role_name           VARCHAR(30)  NOT NULL,     -- 瑙掕壊鍚嶇О
+    role_key            VARCHAR(100) NOT NULL,     -- 瑙掕壊鏉冮檺瀛楃涓�
+    role_sort           INT          NOT NULL,     -- 鏄剧ず椤哄簭
+    data_scope          CHAR(1)      DEFAULT '1',  -- 鏁版嵁鑼冨洿
+    menu_check_strictly BOOLEAN      DEFAULT TRUE, -- 鑿滃崟鏍戦�夋嫨椤规槸鍚﹀叧鑱旀樉绀�
+    dept_check_strictly BOOLEAN      DEFAULT TRUE, -- 閮ㄩ棬鏍戦�夋嫨椤规槸鍚﹀叧鑱旀樉绀�
+    status              CHAR(1)      NOT NULL,     -- 瑙掕壊鐘舵�侊紙0姝e父 1鍋滅敤锛�
+    del_flag            CHAR(1)      DEFAULT '0',  -- 鍒犻櫎鏍囧織锛�0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛�
+    create_by           VARCHAR(64)  DEFAULT '',   -- 鍒涘缓鑰�
+    create_time         TIMESTAMP,                 -- 鍒涘缓鏃堕棿
+    update_by           VARCHAR(64)  DEFAULT '',   -- 鏇存柊鑰�
+    update_time         TIMESTAMP,                 -- 鏇存柊鏃堕棿
+    remark              VARCHAR(500) DEFAULT NULL, -- 澶囨敞
+);
+
+-- 娣诲姞娉ㄩ噴
+COMMENT ON TABLE sys_role IS '瑙掕壊淇℃伅琛�';
+COMMENT ON COLUMN sys_role.role_id IS '瑙掕壊ID';
+COMMENT ON COLUMN sys_role.role_name IS '瑙掕壊鍚嶇О';
+COMMENT ON COLUMN sys_role.role_key IS '瑙掕壊鏉冮檺瀛楃涓�';
+COMMENT ON COLUMN sys_role.role_sort IS '鏄剧ず椤哄簭';
+COMMENT ON COLUMN sys_role.data_scope IS '鏁版嵁鑼冨洿';
+COMMENT ON COLUMN sys_role.menu_check_strictly IS '鑿滃崟鏍戦�夋嫨椤规槸鍚﹀叧鑱旀樉绀�';
+COMMENT ON COLUMN sys_role.dept_check_strictly IS '閮ㄩ棬鏍戦�夋嫨椤规槸鍚﹀叧鑱旀樉绀�';
+COMMENT ON COLUMN sys_role.status IS '瑙掕壊鐘舵�侊紙0姝e父 1鍋滅敤锛�';
+COMMENT ON COLUMN sys_role.del_flag IS '鍒犻櫎鏍囧織锛�0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛�';
+COMMENT ON COLUMN sys_role.create_by IS '鍒涘缓鑰�';
+COMMENT ON COLUMN sys_role.create_time IS '鍒涘缓鏃堕棿';
+COMMENT ON COLUMN sys_role.update_by IS '鏇存柊鑰�';
+COMMENT ON COLUMN sys_role.update_time IS '鏇存柊鏃堕棿';
+COMMENT ON COLUMN sys_role.remark IS '澶囨敞';
+
+-- 鍒濆鍖�-瑙掕壊淇℃伅琛ㄦ暟鎹�
+INSERT INTO sys_role (role_name, role_key, role_sort, data_scope, menu_check_strictly, dept_check_strictly, status,
+                      del_flag, create_by, create_time, update_by, update_time, remark)
+VALUES ('瓒呯骇绠$悊鍛�', 'admin', 1, '1', TRUE, TRUE, '0', '0', 'admin', CURRENT_TIMESTAMP, '', CURRENT_TIMESTAMP,
+        '瓒呯骇绠$悊鍛�'),
+       ('鏅�氳鑹�', 'common', 2, '2', TRUE, TRUE, '0', '0', 'admin', CURRENT_TIMESTAMP, '', CURRENT_TIMESTAMP,
+        '鏅�氳鑹�');
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/db/migration/V20250524153205__create_sys_menu.sql b/db/migration/V20250524153205__create_sys_menu.sql
new file mode 100644
index 0000000..9c830fa
--- /dev/null
+++ b/db/migration/V20250524153205__create_sys_menu.sql
@@ -0,0 +1,274 @@
+-- ----------------------------
+-- 鑿滃崟鏉冮檺琛�
+-- ----------------------------
+DROP TABLE IF EXISTS sys_menu;
+
+CREATE TABLE sys_menu
+(
+    menu_id     BIGSERIAL   NOT NULL PRIMARY KEY,
+    menu_name   VARCHAR(50) NOT NULL,
+    parent_id   BIGINT       DEFAULT 0,
+    order_num   INTEGER      DEFAULT 0,
+    path        VARCHAR(200) DEFAULT '',
+    component   VARCHAR(255) DEFAULT NULL,
+    query       VARCHAR(255) DEFAULT NULL,
+    route_name  VARCHAR(50)  DEFAULT '',
+    is_frame    INTEGER      DEFAULT 1,
+    is_cache    INTEGER      DEFAULT 0,
+    menu_type   CHAR(1)      DEFAULT '',
+    visible     CHAR(1)      DEFAULT '0',
+    status      CHAR(1)      DEFAULT '0',
+    perms       VARCHAR(100) DEFAULT NULL,
+    icon        VARCHAR(100) DEFAULT '#',
+    create_by   VARCHAR(64)  DEFAULT '',
+    create_time TIMESTAMP,
+    update_by   VARCHAR(64)  DEFAULT '',
+    update_time TIMESTAMP,
+    remark      VARCHAR(500) DEFAULT ''
+);
+
+COMMENT ON TABLE sys_menu IS '鑿滃崟鏉冮檺琛�';
+
+-- Optional: Set comments on the columns
+COMMENT ON COLUMN sys_menu.menu_id IS '鑿滃崟ID';
+COMMENT ON COLUMN sys_menu.menu_name IS '鑿滃崟鍚嶇О';
+COMMENT ON COLUMN sys_menu.parent_id IS '鐖惰彍鍗旾D';
+COMMENT ON COLUMN sys_menu.order_num IS '鏄剧ず椤哄簭';
+COMMENT ON COLUMN sys_menu.path IS '璺敱鍦板潃';
+COMMENT ON COLUMN sys_menu.component IS '缁勪欢璺緞';
+COMMENT ON COLUMN sys_menu.query IS '璺敱鍙傛暟';
+COMMENT ON COLUMN sys_menu.route_name IS '璺敱鍚嶇О';
+COMMENT ON COLUMN sys_menu.is_frame IS '鏄惁涓哄閾撅紙0鏄� 1鍚︼級';
+COMMENT ON COLUMN sys_menu.is_cache IS '鏄惁缂撳瓨锛�0缂撳瓨 1涓嶇紦瀛橈級';
+COMMENT ON COLUMN sys_menu.menu_type IS '鑿滃崟绫诲瀷锛圡鐩綍 C鑿滃崟 F鎸夐挳锛�';
+COMMENT ON COLUMN sys_menu.visible IS '鑿滃崟鐘舵�侊紙0鏄剧ず 1闅愯棌锛�';
+COMMENT ON COLUMN sys_menu.status IS '鑿滃崟鐘舵�侊紙0姝e父 1鍋滅敤锛�';
+COMMENT ON COLUMN sys_menu.perms IS '鏉冮檺鏍囪瘑';
+COMMENT ON COLUMN sys_menu.icon IS '鑿滃崟鍥炬爣';
+COMMENT ON COLUMN sys_menu.create_by IS '鍒涘缓鑰�';
+COMMENT ON COLUMN sys_menu.create_time IS '鍒涘缓鏃堕棿';
+COMMENT ON COLUMN sys_menu.update_by IS '鏇存柊鑰�';
+COMMENT ON COLUMN sys_menu.update_time IS '鏇存柊鏃堕棿';
+COMMENT ON COLUMN sys_menu.remark IS '澶囨敞';
+
+
+-- ----------------------------
+-- 鍒濆鍖�-鑿滃崟淇℃伅琛ㄦ暟鎹�
+-- ----------------------------
+-- 涓�绾ц彍鍗�
+insert into sys_menu (id, name, parent_id, order_num, perms, url, target, icon, visible, status, menu_type, is_frame,
+                      is_cache, code, create_by, create_time, update_by, update_time, remark)
+values ('1', '绯荤粺绠$悊', '0', '1', 'system', null, '', '', 1, 0, 'M', '0', '0', '', 'system', 'admin',
+        CURRENT_TIMESTAMP, '', null, '绯荤粺绠$悊鐩綍'),
+       ('2', '绯荤粺鐩戞帶', '0', '2', 'monitor', null, '', '', 1, 0, 'M', '0', '0', '', 'monitor', 'admin',
+        CURRENT_TIMESTAMP, '', null, '绯荤粺鐩戞帶鐩綍'),
+       ('3', '绯荤粺宸ュ叿', '0', '3', 'tool', null, '', '', 1, 0, 'M', '0', '0', '', 'tool', 'admin', CURRENT_TIMESTAMP,
+        '', null, '绯荤粺宸ュ叿鐩綍'),
+       ('4', '鑻ヤ緷瀹樼綉', '0', '4', 'http://ruoyi.vip', null, '', '', 0, 0, 'M', '0', '0', '', 'guide', 'admin',
+        CURRENT_TIMESTAMP, '', null, '鑻ヤ緷瀹樼綉鍦板潃');
+
+-- 浜岀骇鑿滃崟
+insert into sys_menu (id, name, parent_id, order_num, perms, url, target, icon, visible, status, menu_type, is_frame,
+                      is_cache, code, create_by, create_time, update_by, update_time, remark)
+values ('100', '鐢ㄦ埛绠$悊', '1', '1', 'user', 'system/user/index', '', '', 1, 0, 'C', '0', '0', 'system:user:list',
+        'user', 'admin', CURRENT_TIMESTAMP, '', null, '鐢ㄦ埛绠$悊鑿滃崟'),
+       ('101', '瑙掕壊绠$悊', '1', '2', 'role', 'system/role/index', '', '', 1, 0, 'C', '0', '0', 'system:role:list',
+        'peoples', 'admin', CURRENT_TIMESTAMP, '', null, '瑙掕壊绠$悊鑿滃崟'),
+       ('102', '鑿滃崟绠$悊', '1', '3', 'menu', 'system/menu/index', '', '', 1, 0, 'C', '0', '0', 'system:menu:list',
+        'tree-table', 'admin', CURRENT_TIMESTAMP, '', null, '鑿滃崟绠$悊鑿滃崟'),
+       ('103', '閮ㄩ棬绠$悊', '1', '4', 'dept', 'system/dept/index', '', '', 1, 0, 'C', '0', '0', 'system:dept:list',
+        'tree', 'admin', CURRENT_TIMESTAMP, '', null, '閮ㄩ棬绠$悊鑿滃崟'),
+       ('104', '宀椾綅绠$悊', '1', '5', 'post', 'system/post/index', '', '', 1, 0, 'C', '0', '0', 'system:post:list',
+        'post', 'admin', CURRENT_TIMESTAMP, '', null, '宀椾綅绠$悊鑿滃崟'),
+       ('105', '瀛楀吀绠$悊', '1', '6', 'dict', 'system/dict/index', '', '', 1, 0, 'C', '0', '0', 'system:dict:list',
+        'dict', 'admin', CURRENT_TIMESTAMP, '', null, '瀛楀吀绠$悊鑿滃崟'),
+       ('106', '鍙傛暟璁剧疆', '1', '7', 'config', 'system/config/index', '', '', 1, 0, 'C', '0', '0', 'system:config:list',
+        'edit', 'admin', CURRENT_TIMESTAMP, '', null, '鍙傛暟璁剧疆鑿滃崟'),
+       ('107', '閫氱煡鍏憡', '1', '8', 'notice', 'system/notice/index', '', '', 1, 0, 'C', '0', '0', 'system:notice:list',
+        'message', 'admin', CURRENT_TIMESTAMP, '', null, '閫氱煡鍏憡鑿滃崟'),
+       ('108', '鏃ュ織绠$悊', '1', '9', 'log', '', '', '', 1, 0, 'M', '0', '0', '', 'log', 'admin', CURRENT_TIMESTAMP, '',
+        null, '鏃ュ織绠$悊鑿滃崟'),
+       ('109', '鍦ㄧ嚎鐢ㄦ埛', '2', '1', 'online', 'monitor/online/index', '', '', 1, 0, 'C', '0', '0',
+        'monitor:online:list', 'online', 'admin', CURRENT_TIMESTAMP, '', null, '鍦ㄧ嚎鐢ㄦ埛鑿滃崟'),
+       ('110', '瀹氭椂浠诲姟', '2', '2', 'job', 'monitor/job/index', '', '', 1, 0, 'C', '0', '0', 'monitor:job:list', 'job',
+        'admin', CURRENT_TIMESTAMP, '', null, '瀹氭椂浠诲姟鑿滃崟'),
+       ('111', '鏁版嵁鐩戞帶', '2', '3', 'druid', 'monitor/druid/index', '', '', 1, 0, 'C', '0', '0', 'monitor:druid:list',
+        'druid', 'admin', CURRENT_TIMESTAMP, '', null, '鏁版嵁鐩戞帶鑿滃崟'),
+       ('112', '鏈嶅姟鐩戞帶', '2', '4', 'server', 'monitor/server/index', '', '', 1, 0, 'C', '0', '0',
+        'monitor:server:list', 'server', 'admin', CURRENT_TIMESTAMP, '', null, '鏈嶅姟鐩戞帶鑿滃崟'),
+       ('113', '缂撳瓨鐩戞帶', '2', '5', 'cache', 'monitor/cache/index', '', '', 1, 0, 'C', '0', '0', 'monitor:cache:list',
+        'redis', 'admin', CURRENT_TIMESTAMP, '', null, '缂撳瓨鐩戞帶鑿滃崟'),
+       ('114', '缂撳瓨鍒楄〃', '2', '6', 'cacheList', 'monitor/cache/list', '', '', 1, 0, 'C', '0', '0',
+        'monitor:cache:list', 'redis-list', 'admin', CURRENT_TIMESTAMP, '', null, '缂撳瓨鍒楄〃鑿滃崟'),
+       ('115', '琛ㄥ崟鏋勫缓', '3', '1', 'build', 'tool/build/index', '', '', 1, 0, 'C', '0', '0', 'tool:build:list',
+        'build', 'admin', CURRENT_TIMESTAMP, '', null, '琛ㄥ崟鏋勫缓鑿滃崟'),
+       ('116', '浠g爜鐢熸垚', '3', '2', 'gen', 'tool/gen/index', '', '', 1, 0, 'C', '0', '0', 'tool:gen:list', 'code',
+        'admin', CURRENT_TIMESTAMP, '', null, '浠g爜鐢熸垚鑿滃崟'),
+       ('117', '绯荤粺鎺ュ彛', '3', '3', 'swagger', 'tool/swagger/index', '', '', 1, 0, 'C', '0', '0', 'tool:swagger:list',
+        'swagger', 'admin', CURRENT_TIMESTAMP, '', null, '绯荤粺鎺ュ彛鑿滃崟');
+
+-- 涓夌骇鑿滃崟
+insert into sys_menu (id, name, parent_id, order_num, perms, url, target, icon, visible, status, menu_type, is_frame,
+                      is_cache, code, create_by, create_time, update_by, update_time, remark)
+values ('500', '鎿嶄綔鏃ュ織', '108', '1', 'operlog', 'monitor/operlog/index', '', '', 1, 0, 'C', '0', '0',
+        'monitor:operlog:list', 'form', 'admin', CURRENT_TIMESTAMP, '', null, '鎿嶄綔鏃ュ織鑿滃崟'),
+       ('501', '鐧诲綍鏃ュ織', '108', '2', 'logininfor', 'monitor/logininfor/index', '', '', 1, 0, 'C', '0', '0',
+        'monitor:logininfor:list', 'logininfor', 'admin', CURRENT_TIMESTAMP, '', null, '鐧诲綍鏃ュ織鑿滃崟');
+
+-- 鐢ㄦ埛绠$悊鎸夐挳
+insert into sys_menu (id, name, parent_id, order_num, perms, url, target, icon, visible, status, menu_type, is_frame,
+                      is_cache, code, create_by, create_time, update_by, update_time, remark)
+values ('1000', '鐢ㄦ埛鏌ヨ', '100', '1', '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:query', '#', 'admin',
+        CURRENT_TIMESTAMP, '', null, ''),
+       ('1001', '鐢ㄦ埛鏂板', '100', '2', '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:add', '#', 'admin',
+        CURRENT_TIMESTAMP, '', null, ''),
+       ('1002', '鐢ㄦ埛淇敼', '100', '3', '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:edit', '#', 'admin',
+        CURRENT_TIMESTAMP, '', null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, perms, url, target, icon, visible, status, is_cache,
+                      del_flag, create_by, create_time, update_by, update_time, remarks)
+values ('1003', '鐢ㄦ埛鍒犻櫎', '100', '4', '', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+       ('1004', '鐢ㄦ埛瀵煎嚭', '100', '5', '', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+       ('1005', '鐢ㄦ埛瀵煎叆', '100', '6', '', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+       ('1006', '閲嶇疆瀵嗙爜', '100', '7', '', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+-- 瑙掕壊绠$悊鎸夐挳
+       ('1007', '瑙掕壊鏌ヨ', '101', '1', '', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+       ('1008', '瑙掕壊鏂板', '101', '2', '', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+       ('1009', '瑙掕壊淇敼', '101', '3', '', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+       ('1010', '瑙掕壊鍒犻櫎', '101', '4', '', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+       ('1011', '瑙掕壊瀵煎嚭', '101', '5', '', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+-- 鑿滃崟绠$悊鎸夐挳
+       ('1012', '鑿滃崟鏌ヨ', '102', '1', '', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+       ('1013', '鑿滃崟鏂板', '102', '2', '', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+       ('1014', '鑿滃崟淇敼', '102', '3', '', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+       ('1015', '鑿滃崟鍒犻櫎', '102', '4', '', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+-- 閮ㄩ棬绠$悊鎸夐挳
+       ('1016', '閮ㄩ棬鏌ヨ', '103', '1', '', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+       ('1017', '閮ㄩ棬鏂板', '103', '2', '', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+       ('1018', '閮ㄩ棬淇敼', '103', '3', '', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+       ('1019', '閮ㄩ棬鍒犻櫎', '103', '4', '', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+-- 宀椾綅绠$悊鎸夐挳
+       ('1020', '宀椾綅鏌ヨ', '104', '1', '', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+       ('1021', '宀椾綅鏂板', '104', '2', '', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+       ('1022', '宀椾綅淇敼', '104', '3', '', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+       ('1023', '宀椾綅鍒犻櫎', '104', '4', '', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+       ('1024', '宀椾綅瀵煎嚭', '104', '5', '', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+-- 瀛楀吀绠$悊鎸夐挳
+       ('1025', '瀛楀吀鏌ヨ', '105', '1', '#', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+       ('1026', '瀛楀吀鏂板', '105', '2', '#', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+       ('1027', '瀛楀吀淇敼', '105', '3', '#', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+       ('1028', '瀛楀吀鍒犻櫎', '105', '4', '#', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+       ('1029', '瀛楀吀瀵煎嚭', '105', '5', '#', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+-- 鍙傛暟璁剧疆鎸夐挳
+       ('1030', '鍙傛暟鏌ヨ', '106', '1', '#', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+       ('1031', '鍙傛暟鏂板', '106', '2', '#', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+       ('1032', '鍙傛暟淇敼', '106', '3', '#', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+       ('1033', '鍙傛暟鍒犻櫎', '106', '4', '#', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+       ('1034', '鍙傛暟瀵煎嚭', '106', '5', '#', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+-- 閫氱煡鍏憡鎸夐挳
+       ('1035', '鍏憡鏌ヨ', '107', '1', '#', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+       ('1036', '鍏憡鏂板', '107', '2', '#', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+       ('1037', '鍏憡淇敼', '107', '3', '#', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+       ('1038', '鍏憡鍒犻櫎', '107', '4', '#', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+-- 鎿嶄綔鏃ュ織鎸夐挳
+       ('1039', '鎿嶄綔鏌ヨ', '500', '1', '#', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+       ('1040', '鎿嶄綔鍒犻櫎', '500', '2', '#', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+       ('1041', '鏃ュ織瀵煎嚭', '500', '3', '#', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+-- 鐧诲綍鏃ュ織鎸夐挳
+       ('1042', '鐧诲綍鏌ヨ', '501', '1', '#', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+       ('1043', '鐧诲綍鍒犻櫎', '501', '2', '#', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+       ('1044', '鏃ュ織瀵煎嚭', '501', '3', '#', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+       ('1045', '璐︽埛瑙i攣', '501', '4', '#', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+-- 鍦ㄧ嚎鐢ㄦ埛鎸夐挳
+       ('1046', '鍦ㄧ嚎鏌ヨ', '109', '1', '#', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, ''),
+       ('1047', '鎵归噺寮洪��', '109', '2', '#', '', '', '', 1, 0, 'F', '0', 'admin', current_timestamp, '',
+        current_timestamp, '');
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, perms, url, target, icon, visible, status, is_cache,
+                      del_flag, create_by, create_time, update_by, update_time, remarks)
+values ('1048', '鍗曟潯寮洪��', '109', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:online:forceLogout', '#',
+        'admin', CURRENT_TIMESTAMP, '', null, ''),
+       ('1049', '浠诲姟鏌ヨ', '110', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:query', '#', 'admin',
+        CURRENT_TIMESTAMP, '', null, ''),
+       ('1050', '浠诲姟鏂板', '110', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:add', '#', 'admin',
+        CURRENT_TIMESTAMP, '', null, ''),
+       ('1051', '浠诲姟淇敼', '110', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:edit', '#', 'admin',
+        CURRENT_TIMESTAMP, '', null, ''),
+       ('1052', '浠诲姟鍒犻櫎', '110', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:remove', '#', 'admin',
+        CURRENT_TIMESTAMP, '', null, ''),
+       ('1053', '鐘舵�佷慨鏀�', '110', '5', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:changeStatus', '#', 'admin',
+        CURRENT_TIMESTAMP, '', null, ''),
+       ('1054', '浠诲姟瀵煎嚭', '110', '6', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:export', '#', 'admin',
+        CURRENT_TIMESTAMP, '', null, ''),
+       ('1055', '鐢熸垚鏌ヨ', '116', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:query', '#', 'admin',
+        CURRENT_TIMESTAMP, '', null, ''),
+       ('1056', '鐢熸垚淇敼', '116', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:edit', '#', 'admin',
+        CURRENT_TIMESTAMP, '', null, ''),
+       ('1057', '鐢熸垚鍒犻櫎', '116', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:remove', '#', 'admin',
+        CURRENT_TIMESTAMP, '', null, ''),
+       ('1058', '瀵煎叆浠g爜', '116', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:import', '#', 'admin',
+        CURRENT_TIMESTAMP, '', null, ''),
+       ('1059', '棰勮浠g爜', '116', '5', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:preview', '#', 'admin',
+        CURRENT_TIMESTAMP, '', null, ''),
+       ('1060', '鐢熸垚浠g爜', '116', '6', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:code', '#', 'admin',
+        CURRENT_TIMESTAMP, '', null, '');
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/db/migration/V20250524154105__create_sys_user_role.sql b/db/migration/V20250524154105__create_sys_user_role.sql
new file mode 100644
index 0000000..59c659d
--- /dev/null
+++ b/db/migration/V20250524154105__create_sys_user_role.sql
@@ -0,0 +1,37 @@
+-- ----------------------------
+-- 鐢ㄦ埛鍜岃鑹插叧鑱旇〃  鐢ㄦ埛N-1瑙掕壊
+-- ----------------------------
+drop table if exists sys_user_role;
+
+-- 鍒涘缓琛�
+create table sys_user_role
+(
+    user_id bigint not null,       -- 鐢ㄦ埛ID
+    role_id bigint not null,       -- 瑙掕壊ID
+    primary key (user_id, role_id) -- 澶嶅悎涓婚敭
+);
+
+comment on table sys_user_role is '鐢ㄦ埛鍜岃鑹插叧鑱旇〃';
+comment on column sys_user_role.user_id is '鐢ㄦ埛ID';
+comment on column sys_user_role.role_id is '瑙掕壊ID';
+
+-- 鍒濆鍖�-鐢ㄦ埛鍜岃鑹插叧鑱旇〃鏁版嵁
+insert into sys_user_role (user_id, role_id)
+values ('1', '1'),
+       ('2', '2');
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/db/migration/V20250524154305__create_sys_role_menu.sql b/db/migration/V20250524154305__create_sys_role_menu.sql
new file mode 100644
index 0000000..32e82ef
--- /dev/null
+++ b/db/migration/V20250524154305__create_sys_role_menu.sql
@@ -0,0 +1,122 @@
+-- ----------------------------
+-- 鐢ㄦ埛鍜岃鑹插叧鑱旇〃  鐢ㄦ埛N-1瑙掕壊
+-- ----------------------------
+drop table if exists sys_role_menu;
+
+-- 鍒涘缓琛�
+create table sys_role_menu
+(
+    role_id bigint not null,       -- 瑙掕壊ID
+    menu_id bigint not null,       -- 鑿滃崟ID
+    primary key (role_id, menu_id) -- 澶嶅悎涓婚敭
+);
+
+comment on table sys_role_menu is '瑙掕壊鍜岃彍鍗曞叧鑱旇〃';
+comment on column sys_role_menu.role_id is '瑙掕壊ID';
+comment on column sys_role_menu.menu_id is '鑿滃崟ID';
+
+-- 鍒濆鍖�-瑙掕壊鍜岃彍鍗曞叧鑱旇〃鏁版嵁
+insert into sys_role_menu (role_id, menu_id)
+values ('2', '1'),
+       ('2', '2'),
+       ('2', '3'),
+       ('2', '4'),
+       ('2', '100'),
+       ('2', '101'),
+       ('2', '102'),
+       ('2', '103'),
+       ('2', '104'),
+       ('2', '105'),
+       ('2', '106'),
+       ('2', '107'),
+       ('2', '108'),
+       ('2', '109'),
+       ('2', '110'),
+       ('2', '111'),
+       ('2', '112'),
+       ('2', '113'),
+       ('2', '114'),
+       ('2', '115'),
+       ('2', '116'),
+       ('2', '117'),
+       ('2', '500'),
+       ('2', '501'),
+       ('2', '1000'),
+       ('2', '1001'),
+       ('2', '1002'),
+       ('2', '1003'),
+       ('2', '1004'),
+       ('2', '1005'),
+       ('2', '1006'),
+       ('2', '1007'),
+       ('2', '1008'),
+       ('2', '1009'),
+       ('2', '1010'),
+       ('2', '1011'),
+       ('2', '1012'),
+       ('2', '1013'),
+       ('2', '1014'),
+       ('2', '1015'),
+       ('2', '1016'),
+       ('2', '1017'),
+       ('2', '1018'),
+       ('2', '1019'),
+       ('2', '1020'),
+       ('2', '1021'),
+       ('2', '1022'),
+       ('2', '1023'),
+       ('2', '1024'),
+       ('2', '1025'),
+       ('2', '1026'),
+       ('2', '1027'),
+       ('2', '1028'),
+       ('2', '1029'),
+       ('2', '1030'),
+       ('2', '1031'),
+       ('2', '1032'),
+       ('2', '1033'),
+       ('2', '1034'),
+       ('2', '1035'),
+       ('2', '1036'),
+       ('2', '1037'),
+       ('2', '1038'),
+       ('2', '1039'),
+       ('2', '1040'),
+       ('2', '1041'),
+       ('2', '1042'),
+       ('2', '1043'),
+       ('2', '1044'),
+       ('2', '1045'),
+       ('2', '1046'),
+       ('2', '1047'),
+       ('2', '1048'),
+       ('2', '1049'),
+       ('2', '1050'),
+       ('2', '1051'),
+       ('2', '1052'),
+       ('2', '1053'),
+       ('2', '1054'),
+       ('2', '1055'),
+       ('2', '1056'),
+       ('2', '1057'),
+       ('2', '1058'),
+       ('2', '1059'),
+       ('2', '1060');
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/db/migration/V20250524154505__create_sys_role_dept.sql b/db/migration/V20250524154505__create_sys_role_dept.sql
new file mode 100644
index 0000000..b2ba922
--- /dev/null
+++ b/db/migration/V20250524154505__create_sys_role_dept.sql
@@ -0,0 +1,20 @@
+-- ----------------------------
+-- 瑙掕壊鍜岄儴闂ㄥ叧鑱旇〃  瑙掕壊1-N閮ㄩ棬
+-- ----------------------------
+
+drop table if exists sys_role_dept;
+create table sys_role_dept
+(
+    role_id bigint not null, -- PostgreSQL 鏃犻渶鎸囧畾鍒楅暱搴�
+    dept_id bigint not null,
+    primary key (role_id, dept_id)
+);
+
+-- ----------------------------
+-- 鍒濆鍖�-瑙掕壊鍜岄儴闂ㄥ叧鑱旇〃鏁版嵁
+-- ----------------------------
+
+insert into sys_role_dept (role_id, dept_id)
+values ('2', '100'),
+       ('2', '101'),
+       ('2', '105');
diff --git a/db/migration/V20250524154605__create_sys_user_post.sql b/db/migration/V20250524154605__create_sys_user_post.sql
new file mode 100644
index 0000000..2a4b62f
--- /dev/null
+++ b/db/migration/V20250524154605__create_sys_user_post.sql
@@ -0,0 +1,19 @@
+-- ----------------------------
+-- 9銆佺敤鎴蜂笌宀椾綅鍏宠仈琛�  鐢ㄦ埛1-N宀椾綅
+-- ----------------------------
+
+drop table if exists sys_user_post;
+create table sys_user_post
+(
+    user_id bigint not null, -- PostgreSQL 鏃犻渶鎸囧畾鍒楅暱搴�
+    post_id bigint not null,
+    primary key (user_id, post_id)
+);
+
+-- ----------------------------
+-- 鍒濆鍖�-鐢ㄦ埛涓庡矖浣嶅叧鑱旇〃鏁版嵁
+-- ----------------------------
+
+insert into sys_user_post (user_id, post_id)
+values ('1', '1'),
+       ('2', '2');
diff --git a/db/migration/V20250524154705__create_sys_oper_log.sql b/db/migration/V20250524154705__create_sys_oper_log.sql
new file mode 100644
index 0000000..e01f927
--- /dev/null
+++ b/db/migration/V20250524154705__create_sys_oper_log.sql
@@ -0,0 +1,28 @@
+-- ----------------------------
+-- 10銆佹搷浣滄棩蹇楄褰�
+-- ----------------------------
+
+drop table if exists sys_oper_log;
+create table sys_oper_log
+(
+    oper_id        serial primary key,       -- PostgreSQL 浣跨敤 serial 鏉ュ疄鐜拌嚜澧�
+    title          varchar(50)   default '', -- 榛樿鍊煎拰瀛楁绫诲瀷淇濇寔涓�鑷�
+    business_type  smallint      default 0,  -- PostgreSQL 浣跨敤 smallint 浠f浛 int(2)
+    method         varchar(200)  default '',
+    request_method varchar(10)   default '',
+    operator_type  smallint      default 0,  -- PostgreSQL 浣跨敤 smallint 浠f浛 int(1)
+    oper_name      varchar(50)   default '',
+    dept_name      varchar(50)   default '',
+    oper_url       varchar(255)  default '',
+    oper_ip        varchar(128)  default '',
+    oper_location  varchar(255)  default '',
+    oper_param     varchar(2000) default '',
+    json_result    varchar(2000) default '',
+    status         smallint      default 0,  -- PostgreSQL 浣跨敤 smallint 浠f浛 int(1)
+    error_msg      varchar(2000) default '',
+    oper_time      timestamp,                -- PostgreSQL 浣跨敤 timestamp 鏇夸唬 datetime
+    cost_time      bigint        default 0,
+    index          idx_sys_oper_log_bt (business_type),
+    index          idx_sys_oper_log_s (status),
+    index          idx_sys_oper_log_ot (oper_time)
+);
diff --git a/db/migration/V20250524154805__create_sys_dict_type.sql b/db/migration/V20250524154805__create_sys_dict_type.sql
new file mode 100644
index 0000000..db8842f
--- /dev/null
+++ b/db/migration/V20250524154805__create_sys_dict_type.sql
@@ -0,0 +1,32 @@
+-- ----------------------------
+-- 11銆佸瓧鍏哥被鍨嬭〃
+-- ----------------------------
+
+drop table if exists sys_dict_type;
+create table sys_dict_type
+(
+    dict_id     serial primary key,       -- PostgreSQL 浣跨敤 serial 鏉ュ疄鐜拌嚜澧�
+    dict_name   varchar(100) default '',  -- 榛樿鍊煎拰瀛楁绫诲瀷淇濇寔涓�鑷�
+    dict_type   varchar(100) default '',  -- 瀛楀吀绫诲瀷
+    status      char(1)      default '0', -- 榛樿鍊间负 '0'
+    create_by   varchar(64)  default '',  -- 鍒涘缓鑰�
+    create_time timestamp,                -- PostgreSQL 浣跨敤 timestamp 浠f浛 datetime
+    update_by   varchar(64)  default '',  -- 鏇存柊鑰�
+    update_time timestamp,                -- 鏇存柊鏃堕棿
+    remark      varchar(500),             -- 澶囨敞锛屽彲浠ヤ负 null
+    unique (dict_type)                    -- 鍞竴绾︽潫
+);
+
+-- 鍒濆鍖栨暟鎹彃鍏�
+insert into sys_dict_type (dict_id, dict_name, dict_type, status, create_by, create_time, update_by, update_time,
+                           remark)
+values (1, '鐢ㄦ埛鎬у埆', 'sys_user_sex', '0', 'admin', current_timestamp, '', null, '鐢ㄦ埛鎬у埆鍒楄〃'),
+       (2, '鑿滃崟鐘舵��', 'sys_show_hide', '0', 'admin', current_timestamp, '', null, '鑿滃崟鐘舵�佸垪琛�'),
+       (3, '绯荤粺寮�鍏�', 'sys_normal_disable', '0', 'admin', current_timestamp, '', null, '绯荤粺寮�鍏冲垪琛�'),
+       (4, '浠诲姟鐘舵��', 'sys_job_status', '0', 'admin', current_timestamp, '', null, '浠诲姟鐘舵�佸垪琛�'),
+       (5, '浠诲姟鍒嗙粍', 'sys_job_group', '0', 'admin', current_timestamp, '', null, '浠诲姟鍒嗙粍鍒楄〃'),
+       (6, '绯荤粺鏄惁', 'sys_yes_no', '0', 'admin', current_timestamp, '', null, '绯荤粺鏄惁鍒楄〃'),
+       (7, '閫氱煡绫诲瀷', 'sys_notice_type', '0', 'admin', current_timestamp, '', null, '閫氱煡绫诲瀷鍒楄〃'),
+       (8, '閫氱煡鐘舵��', 'sys_notice_status', '0', 'admin', current_timestamp, '', null, '閫氱煡鐘舵�佸垪琛�'),
+       (9, '鎿嶄綔绫诲瀷', 'sys_oper_type', '0', 'admin', current_timestamp, '', null, '鎿嶄綔绫诲瀷鍒楄〃'),
+       (10, '绯荤粺鐘舵��', 'sys_common_status', '0', 'admin', current_timestamp, '', null, '鐧诲綍鐘舵�佸垪琛�');
diff --git a/db/migration/V20250524154905__create_sys_dict_data.sql b/db/migration/V20250524154905__create_sys_dict_data.sql
new file mode 100644
index 0000000..adc2dcc
--- /dev/null
+++ b/db/migration/V20250524154905__create_sys_dict_data.sql
@@ -0,0 +1,63 @@
+-- ----------------------------
+-- 12銆佸瓧鍏告暟鎹〃
+-- ----------------------------
+
+drop table if exists sys_dict_data;
+create table sys_dict_data
+(
+    dict_code   serial primary key,        -- PostgreSQL 浣跨敤 serial 瀹炵幇鑷
+    dict_sort   int          default 0,    -- 榛樿鍊煎拰瀛楁绫诲瀷淇濇寔涓�鑷�
+    dict_label  varchar(100) default '',   -- 瀛楀吀鏍囩
+    dict_value  varchar(100) default '',   -- 瀛楀吀閿��
+    dict_type   varchar(100) default '',   -- 瀛楀吀绫诲瀷
+    css_class   varchar(100) default null, -- 鏍峰紡灞炴��
+    list_class  varchar(100) default null, -- 琛ㄦ牸鍥炴樉鏍峰紡
+    is_default  char(1)      default 'N',  -- 鏄惁榛樿
+    status      char(1)      default '0',  -- 鐘舵��
+    create_by   varchar(64)  default '',   -- 鍒涘缓鑰�
+    create_time timestamp,                 -- 浣跨敤 timestamp 绫诲瀷浠f浛 datetime
+    update_by   varchar(64)  default '',   -- 鏇存柊鑰�
+    update_time timestamp,                 -- 鏇存柊鏃堕棿
+    remark      varchar(500) default null  -- 澶囨敞
+);
+
+-- 鍒濆鍖栨暟鎹彃鍏�
+insert into sys_dict_data (dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default,
+                           status, create_by, create_time, update_by, update_time, remark)
+values (1, 1, '鐢�', '0', 'sys_user_sex', '', '', 'Y', '0', 'admin', current_timestamp, '', null, '鎬у埆鐢�'),
+       (2, 2, '濂�', '1', 'sys_user_sex', '', '', 'N', '0', 'admin', current_timestamp, '', null, '鎬у埆濂�'),
+       (3, 3, '鏈煡', '2', 'sys_user_sex', '', '', 'N', '0', 'admin', current_timestamp, '', null, '鎬у埆鏈煡'),
+       (4, 1, '鏄剧ず', '0', 'sys_show_hide', '', 'primary', 'Y', '0', 'admin', current_timestamp, '', null, '鏄剧ず鑿滃崟'),
+       (5, 2, '闅愯棌', '1', 'sys_show_hide', '', 'danger', 'N', '0', 'admin', current_timestamp, '', null, '闅愯棌鑿滃崟'),
+       (6, 1, '姝e父', '0', 'sys_normal_disable', '', 'primary', 'Y', '0', 'admin', current_timestamp, '', null,
+        '姝e父鐘舵��'),
+       (7, 2, '鍋滅敤', '1', 'sys_normal_disable', '', 'danger', 'N', '0', 'admin', current_timestamp, '', null,
+        '鍋滅敤鐘舵��'),
+       (8, 1, '姝e父', '0', 'sys_job_status', '', 'primary', 'Y', '0', 'admin', current_timestamp, '', null, '姝e父鐘舵��'),
+       (9, 2, '鏆傚仠', '1', 'sys_job_status', '', 'danger', 'N', '0', 'admin', current_timestamp, '', null, '鍋滅敤鐘舵��'),
+       (10, 1, '榛樿', 'DEFAULT', 'sys_job_group', '', '', 'Y', '0', 'admin', current_timestamp, '', null, '榛樿鍒嗙粍'),
+       (11, 2, '绯荤粺', 'SYSTEM', 'sys_job_group', '', '', 'N', '0', 'admin', current_timestamp, '', null, '绯荤粺鍒嗙粍'),
+       (12, 1, '鏄�', 'Y', 'sys_yes_no', '', 'primary', 'Y', '0', 'admin', current_timestamp, '', null, '绯荤粺榛樿鏄�'),
+       (13, 2, '鍚�', 'N', 'sys_yes_no', '', 'danger', 'N', '0', 'admin', current_timestamp, '', null, '绯荤粺榛樿鍚�'),
+       (14, 1, '閫氱煡', '1', 'sys_notice_type', '', 'warning', 'Y', '0', 'admin', current_timestamp, '', null, '閫氱煡'),
+       (15, 2, '鍏憡', '2', 'sys_notice_type', '', 'success', 'N', '0', 'admin', current_timestamp, '', null, '鍏憡'),
+       (16, 1, '姝e父', '0', 'sys_notice_status', '', 'primary', 'Y', '0', 'admin', current_timestamp, '', null,
+        '姝e父鐘舵��'),
+       (17, 2, '鍏抽棴', '1', 'sys_notice_status', '', 'danger', 'N', '0', 'admin', current_timestamp, '', null,
+        '鍏抽棴鐘舵��'),
+       (18, 99, '鍏朵粬', '0', 'sys_oper_type', '', 'info', 'N', '0', 'admin', current_timestamp, '', null, '鍏朵粬鎿嶄綔'),
+       (19, 1, '鏂板', '1', 'sys_oper_type', '', 'info', 'N', '0', 'admin', current_timestamp, '', null, '鏂板鎿嶄綔'),
+       (20, 2, '淇敼', '2', 'sys_oper_type', '', 'info', 'N', '0', 'admin', current_timestamp, '', null, '淇敼鎿嶄綔'),
+       (21, 3, '鍒犻櫎', '3', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', current_timestamp, '', null, '鍒犻櫎鎿嶄綔'),
+       (22, 4, '鎺堟潈', '4', 'sys_oper_type', '', 'primary', 'N', '0', 'admin', current_timestamp, '', null, '鎺堟潈鎿嶄綔'),
+       (23, 5, '瀵煎嚭', '5', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', current_timestamp, '', null, '瀵煎嚭鎿嶄綔'),
+       (24, 6, '瀵煎叆', '6', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', current_timestamp, '', null, '瀵煎叆鎿嶄綔'),
+       (25, 7, '寮洪��', '7', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', current_timestamp, '', null, '寮洪��鎿嶄綔'),
+       (26, 8, '鐢熸垚浠g爜', '8', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', current_timestamp, '', null,
+        '鐢熸垚鎿嶄綔'),
+       (27, 9, '娓呯┖鏁版嵁', '9', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', current_timestamp, '', null,
+        '娓呯┖鎿嶄綔'),
+       (28, 1, '鎴愬姛', '0', 'sys_common_status', '', 'primary', 'N', '0', 'admin', current_timestamp, '', null,
+        '姝e父鐘舵��'),
+       (29, 2, '澶辫触', '1', 'sys_common_status', '', 'danger', 'N', '0', 'admin', current_timestamp, '', null,
+        '鍋滅敤鐘舵��');
diff --git a/db/migration/V20250524155005__create_sys_config.sql b/db/migration/V20250524155005__create_sys_config.sql
new file mode 100644
index 0000000..1637b9c
--- /dev/null
+++ b/db/migration/V20250524155005__create_sys_config.sql
@@ -0,0 +1,34 @@
+-- ----------------------------
+-- 13銆佸弬鏁伴厤缃〃
+-- ----------------------------
+
+drop table if exists sys_config;
+create table sys_config
+(
+    config_id    serial primary key,       -- PostgreSQL 浣跨敤 serial 瀹炵幇鑷
+    config_name  varchar(100) default '',  -- 鍙傛暟鍚嶇О
+    config_key   varchar(100) default '',  -- 鍙傛暟閿悕
+    config_value varchar(500) default '',  -- 鍙傛暟閿��
+    config_type  char(1)      default 'N', -- 绯荤粺鍐呯疆锛圷鏄� N鍚︼級
+    create_by    varchar(64)  default '',  -- 鍒涘缓鑰�
+    create_time  timestamp,                -- 浣跨敤 timestamp 绫诲瀷浠f浛 datetime
+    update_by    varchar(64)  default '',  -- 鏇存柊鑰�
+    update_time  timestamp,                -- 鏇存柊鏃堕棿
+    remark       varchar(500) default null -- 澶囨敞
+);
+
+-- 鍒濆鍖栨暟鎹彃鍏�
+insert into sys_config (config_id, config_name, config_key, config_value, config_type, create_by, create_time,
+                        update_by, update_time, remark)
+values (1, '涓绘鏋堕〉-榛樿鐨偆鏍峰紡鍚嶇О', 'sys.index.skinName', 'skin-blue', 'Y', 'admin', current_timestamp, '', null,
+        '钃濊壊 skin-blue銆佺豢鑹� skin-green銆佺传鑹� skin-purple銆佺孩鑹� skin-red銆侀粍鑹� skin-yellow'),
+       (2, '鐢ㄦ埛绠$悊-璐﹀彿鍒濆瀵嗙爜', 'sys.user.initPassword', '123456', 'Y', 'admin', current_timestamp, '', null,
+        '鍒濆鍖栧瘑鐮� 123456'),
+       (3, '涓绘鏋堕〉-渚ц竟鏍忎富棰�', 'sys.index.sideTheme', 'theme-dark', 'Y', 'admin', current_timestamp, '', null,
+        '娣辫壊涓婚theme-dark锛屾祬鑹蹭富棰榯heme-light'),
+       (4, '璐﹀彿鑷姪-楠岃瘉鐮佸紑鍏�', 'sys.account.captchaEnabled', 'true', 'Y', 'admin', current_timestamp, '', null,
+        '鏄惁寮�鍚獙璇佺爜鍔熻兘锛坱rue寮�鍚紝false鍏抽棴锛�'),
+       (5, '璐﹀彿鑷姪-鏄惁寮�鍚敤鎴锋敞鍐屽姛鑳�', 'sys.account.registerUser', 'false', 'Y', 'admin', current_timestamp, '',
+        null, '鏄惁寮�鍚敞鍐岀敤鎴峰姛鑳斤紙true寮�鍚紝false鍏抽棴锛�'),
+       (6, '鐢ㄦ埛鐧诲綍-榛戝悕鍗曞垪琛�', 'sys.login.blackIPList', '', 'Y', 'admin', current_timestamp, '', null,
+        '璁剧疆鐧诲綍IP榛戝悕鍗曢檺鍒讹紝澶氫釜鍖归厤椤逛互;鍒嗛殧锛屾敮鎸佸尮閰嶏紙*閫氶厤銆佺綉娈碉級');
diff --git a/db/migration/V20250524155105__create_sys_logininfor.sql b/db/migration/V20250524155105__create_sys_logininfor.sql
new file mode 100644
index 0000000..e76f855
--- /dev/null
+++ b/db/migration/V20250524155105__create_sys_logininfor.sql
@@ -0,0 +1,43 @@
+-- ----------------------------
+-- 14銆佺郴缁熻闂褰�
+-- ----------------------------
+
+drop table if exists sys_logininfor;
+create table sys_logininfor
+(
+    info_id        serial primary key,      -- 浣跨敤 serial 瀹炵幇鑷
+    user_name      varchar(50)  default ''  -- 鐢ㄦ埛璐﹀彿
+        comment '鐢ㄦ埛璐﹀彿',
+    ipaddr         varchar(128) default ''  -- 鐧诲綍IP鍦板潃
+        comment '鐧诲綍IP鍦板潃',
+    login_location varchar(255) default ''  -- 鐧诲綍鍦扮偣
+        comment '鐧诲綍鍦扮偣',
+    browser        varchar(50)  default ''  -- 娴忚鍣ㄧ被鍨�
+        comment '娴忚鍣ㄧ被鍨�',
+    os             varchar(50)  default ''  -- 鎿嶄綔绯荤粺
+        comment '鎿嶄綔绯荤粺',
+    status         char(1)      default '0' -- 鐧诲綍鐘舵�侊紙0鎴愬姛 1澶辫触锛�
+        comment '鐧诲綍鐘舵�侊紙0鎴愬姛 1澶辫触锛�',
+    msg            varchar(255) default ''  -- 鎻愮ず娑堟伅
+        comment '鎻愮ず娑堟伅',
+    login_time     timestamp                -- 璁块棶鏃堕棿
+        comment '璁块棶鏃堕棿'
+);
+
+-- 娣诲姞绱㈠紩
+create index idx_sys_logininfor_s on sys_logininfor (status);
+create index idx_sys_logininfor_lt on sys_logininfor (login_time);
+
+-- 琛ㄦ敞閲�
+comment on table sys_logininfor is '绯荤粺璁块棶璁板綍';
+
+-- 瀛楁娉ㄩ噴
+comment on column sys_logininfor.info_id is '璁块棶ID';
+comment on column sys_logininfor.user_name is '鐢ㄦ埛璐﹀彿';
+comment on column sys_logininfor.ipaddr is '鐧诲綍IP鍦板潃';
+comment on column sys_logininfor.login_location is '鐧诲綍鍦扮偣';
+comment on column sys_logininfor.browser is '娴忚鍣ㄧ被鍨�';
+comment on column sys_logininfor.os is '鎿嶄綔绯荤粺';
+comment on column sys_logininfor.status is '鐧诲綍鐘舵�侊紙0鎴愬姛 1澶辫触锛�';
+comment on column sys_logininfor.msg is '鎻愮ず娑堟伅';
+comment on column sys_logininfor.login_time is '璁块棶鏃堕棿';
diff --git a/db/migration/V20250524155205__create_sys_job.sql b/db/migration/V20250524155205__create_sys_job.sql
new file mode 100644
index 0000000..557f5e8
--- /dev/null
+++ b/db/migration/V20250524155205__create_sys_job.sql
@@ -0,0 +1,49 @@
+-- ----------------------------
+-- 15銆佸畾鏃朵换鍔¤皟搴﹁〃
+-- ----------------------------
+
+drop table if exists sys_job;
+create table sys_job
+(
+    job_id          bigserial primary key,          -- 浣跨敤 bigserial 瀹炵幇鑷
+    job_name        varchar(64)  default '',        -- 浠诲姟鍚嶇О
+    job_group       varchar(64)  default 'DEFAULT', -- 浠诲姟缁勫悕
+    invoke_target   varchar(500) not null,          -- 璋冪敤鐩爣瀛楃涓�
+    cron_expression varchar(255) default '',        -- cron鎵ц琛ㄨ揪寮�
+    misfire_policy  varchar(20)  default '3',       -- 璁″垝鎵ц閿欒绛栫暐锛�1绔嬪嵆鎵ц 2鎵ц涓�娆� 3鏀惧純鎵ц锛�
+    concurrent      char(1)      default '1',       -- 鏄惁骞跺彂鎵ц锛�0鍏佽 1绂佹锛�
+    status          char(1)      default '0',       -- 鐘舵�侊紙0姝e父 1鏆傚仠锛�
+    create_by       varchar(64)  default '',        -- 鍒涘缓鑰�
+    create_time     timestamp,                      -- 鍒涘缓鏃堕棿
+    update_by       varchar(64)  default '',        -- 鏇存柊鑰�
+    update_time     timestamp,                      -- 鏇存柊鏃堕棿
+    remark          varchar(500) default ''         -- 澶囨敞淇℃伅
+);
+
+-- 琛ㄦ敞閲�
+comment on table sys_job is '瀹氭椂浠诲姟璋冨害琛�';
+
+-- 瀛楁娉ㄩ噴
+comment on column sys_job.job_id is '浠诲姟ID';
+comment on column sys_job.job_name is '浠诲姟鍚嶇О';
+comment on column sys_job.job_group is '浠诲姟缁勫悕';
+comment on column sys_job.invoke_target is '璋冪敤鐩爣瀛楃涓�';
+comment on column sys_job.cron_expression is 'cron鎵ц琛ㄨ揪寮�';
+comment on column sys_job.misfire_policy is '璁″垝鎵ц閿欒绛栫暐锛�1绔嬪嵆鎵ц 2鎵ц涓�娆� 3鏀惧純鎵ц锛�';
+comment on column sys_job.concurrent is '鏄惁骞跺彂鎵ц锛�0鍏佽 1绂佹锛�';
+comment on column sys_job.status is '鐘舵�侊紙0姝e父 1鏆傚仠锛�';
+comment on column sys_job.create_by is '鍒涘缓鑰�';
+comment on column sys_job.create_time is '鍒涘缓鏃堕棿';
+comment on column sys_job.update_by is '鏇存柊鑰�';
+comment on column sys_job.update_time is '鏇存柊鏃堕棿';
+comment on column sys_job.remark is '澶囨敞淇℃伅';
+
+-- 鎻掑叆鏁版嵁
+insert into sys_job (job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by,
+                     create_time, update_by, update_time, remark)
+values ('绯荤粺榛樿锛堟棤鍙傦級', 'DEFAULT', 'ryTask.ryNoParams', '0/10 * * * * ?', '3', '1', '1', 'admin', current_timestamp,
+        '', null, ''),
+       ('绯荤粺榛樿锛堟湁鍙傦級', 'DEFAULT', 'ryTask.ryParams(\'ry\')', '0/15 * * * * ?', '3', '1', '1', 'admin',
+        current_timestamp, '', null, ''),
+       ('绯荤粺榛樿锛堝鍙傦級', 'DEFAULT', 'ryTask.ryMultipleParams(\'ry\', true, 2000L, 316.50D, 100)', '0/20 * * * * ?',
+        '3', '1', '1', 'admin', current_timestamp, '', null, '');
diff --git a/db/migration/V20250524155305__create_sys_job_log.sql b/db/migration/V20250524155305__create_sys_job_log.sql
new file mode 100644
index 0000000..9ce5b71
--- /dev/null
+++ b/db/migration/V20250524155305__create_sys_job_log.sql
@@ -0,0 +1,29 @@
+-- ----------------------------
+-- 16銆佸畾鏃朵换鍔¤皟搴︽棩蹇楄〃
+-- ----------------------------
+
+drop table if exists sys_job_log;
+create table sys_job_log
+(
+    job_log_id     bigserial primary key,     -- 浣跨敤 bigserial 瀹炵幇鑷
+    job_name       varchar(64)  not null,     -- 浠诲姟鍚嶇О
+    job_group      varchar(64)  not null,     -- 浠诲姟缁勫悕
+    invoke_target  varchar(500) not null,     -- 璋冪敤鐩爣瀛楃涓�
+    job_message    varchar(500),              -- 鏃ュ織淇℃伅
+    status         char(1)       default '0', -- 鎵ц鐘舵�侊紙0姝e父 1澶辫触锛�
+    exception_info varchar(2000) default '',  -- 寮傚父淇℃伅
+    create_time    timestamp                  -- 鍒涘缓鏃堕棿
+);
+
+-- 琛ㄦ敞閲�
+comment on table sys_job_log is '瀹氭椂浠诲姟璋冨害鏃ュ織琛�';
+
+-- 瀛楁娉ㄩ噴
+comment on column sys_job_log.job_log_id is '浠诲姟鏃ュ織ID';
+comment on column sys_job_log.job_name is '浠诲姟鍚嶇О';
+comment on column sys_job_log.job_group is '浠诲姟缁勫悕';
+comment on column sys_job_log.invoke_target is '璋冪敤鐩爣瀛楃涓�';
+comment on column sys_job_log.job_message is '鏃ュ織淇℃伅';
+comment on column sys_job_log.status is '鎵ц鐘舵�侊紙0姝e父 1澶辫触锛�';
+comment on column sys_job_log.exception_info is '寮傚父淇℃伅';
+comment on column sys_job_log.create_time is '鍒涘缓鏃堕棿';
diff --git a/db/migration/V20250524155405__create_sys_notice.sql b/db/migration/V20250524155405__create_sys_notice.sql
new file mode 100644
index 0000000..0b3fd10
--- /dev/null
+++ b/db/migration/V20250524155405__create_sys_notice.sql
@@ -0,0 +1,47 @@
+-- ----------------------------
+-- 17銆侀�氱煡鍏憡琛�
+-- ----------------------------
+
+drop table if exists sys_notice;
+create table sys_notice
+(
+    notice_id      serial primary key,                     -- 浣跨敤 serial 瀹炵幇鑷
+    notice_title   varchar(50) not null,                   -- 鍏憡鏍囬
+    notice_type    char(1)     not null,                   -- 鍏憡绫诲瀷锛�1閫氱煡 2鍏憡锛�
+    notice_content bytea        default null,              -- 鍏憡鍐呭锛屼娇鐢� bytea 瀛樺偍浜岃繘鍒舵暟鎹�
+    status         char(1)      default '0',               -- 鍏憡鐘舵�侊紙0姝e父 1鍏抽棴锛�
+    create_by      varchar(64)  default '',                -- 鍒涘缓鑰�
+    create_time    timestamp    default current_timestamp, -- 鍒涘缓鏃堕棿锛屼娇鐢� PostgreSQL 鐨� current_timestamp
+    update_by      varchar(64)  default '',                -- 鏇存柊鑰�
+    update_time    timestamp,                              -- 鏇存柊鏃堕棿
+    remark         varchar(255) default null               -- 澶囨敞
+);
+
+-- 琛ㄦ敞閲�
+comment on table sys_notice is '閫氱煡鍏憡琛�';
+
+-- 瀛楁娉ㄩ噴
+comment on column sys_notice.notice_id is '鍏憡ID';
+comment on column sys_notice.notice_title is '鍏憡鏍囬';
+comment on column sys_notice.notice_type is '鍏憡绫诲瀷锛�1閫氱煡 2鍏憡锛�';
+comment on column sys_notice.notice_content is '鍏憡鍐呭';
+comment on column sys_notice.status is '鍏憡鐘舵�侊紙0姝e父 1鍏抽棴锛�';
+comment on column sys_notice.create_by is '鍒涘缓鑰�';
+comment on column sys_notice.create_time is '鍒涘缓鏃堕棿';
+comment on column sys_notice.update_by is '鏇存柊鑰�';
+comment on column sys_notice.update_time is '鏇存柊鏃堕棿';
+comment on column sys_notice.remark is '澶囨敞';
+
+-- ----------------------------
+-- 鍒濆鍖�-鍏憡淇℃伅琛ㄦ暟鎹�
+-- ----------------------------
+
+insert into sys_notice (notice_title, notice_type, notice_content, status, create_by, create_time, update_by,
+                        update_time, remark)
+values ('娓╅Θ鎻愰啋锛�2018-07-01 鑻ヤ緷鏂扮増鏈彂甯冨暒', '2', '鏂扮増鏈唴瀹�'::bytea, '0', 'admin', current_timestamp, '', null,
+        '绠$悊鍛�');
+
+insert into sys_notice (notice_title, notice_type, notice_content, status, create_by, create_time, update_by,
+                        update_time, remark)
+values ('缁存姢閫氱煡锛�2018-07-01 鑻ヤ緷绯荤粺鍑屾櫒缁存姢', '1', '缁存姢鍐呭'::bytea, '0', 'admin', current_timestamp, '', null,
+        '绠$悊鍛�');
diff --git a/db/migration/V20250524155505__create_gen_table.sql b/db/migration/V20250524155505__create_gen_table.sql
new file mode 100644
index 0000000..6d74554
--- /dev/null
+++ b/db/migration/V20250524155505__create_gen_table.sql
@@ -0,0 +1,55 @@
+-- ----------------------------
+-- 18銆佷唬鐮佺敓鎴愪笟鍔¤〃
+-- ----------------------------
+
+drop table if exists gen_table;
+create table gen_table
+(
+    table_id          serial primary key,                     -- 浣跨敤 serial 瀹炵幇鑷
+    table_name        varchar(200) default '' not null,       -- 琛ㄥ悕绉�
+    table_comment     varchar(500) default '',                -- 琛ㄦ弿杩�
+    sub_table_name    varchar(64),                            -- 鍏宠仈瀛愯〃鐨勮〃鍚�
+    sub_table_fk_name varchar(64),                            -- 瀛愯〃鍏宠仈鐨勫閿悕
+    class_name        varchar(100) default '' not null,       -- 瀹炰綋绫诲悕绉�
+    tpl_category      varchar(200) default 'crud',            -- 浣跨敤鐨勬ā鏉匡紙crud鍗曡〃鎿嶄綔 tree鏍戣〃鎿嶄綔锛�
+    tpl_web_type      varchar(30)  default '',                -- 鍓嶇妯℃澘绫诲瀷锛坋lement-ui妯$増 element-plus妯$増锛�
+    package_name      varchar(100),                           -- 鐢熸垚鍖呰矾寰�
+    module_name       varchar(30),                            -- 鐢熸垚妯″潡鍚�
+    business_name     varchar(30),                            -- 鐢熸垚涓氬姟鍚�
+    function_name     varchar(50),                            -- 鐢熸垚鍔熻兘鍚�
+    function_author   varchar(50),                            -- 鐢熸垚鍔熻兘浣滆��
+    gen_type          char(1)      default '0',               -- 鐢熸垚浠g爜鏂瑰紡锛�0zip鍘嬬缉鍖� 1鑷畾涔夎矾寰勶級
+    gen_path          varchar(200) default '/',               -- 鐢熸垚璺緞锛堜笉濉粯璁ら」鐩矾寰勶級
+    options           varchar(1000),                          -- 鍏跺畠鐢熸垚閫夐」
+    create_by         varchar(64)  default '',                -- 鍒涘缓鑰�
+    create_time       timestamp    default current_timestamp, -- 鍒涘缓鏃堕棿
+    update_by         varchar(64)  default '',                -- 鏇存柊鑰�
+    update_time       timestamp,                              -- 鏇存柊鏃堕棿
+    remark            varchar(500) default null               -- 澶囨敞
+);
+
+-- 琛ㄦ敞閲�
+comment on table gen_table is '浠g爜鐢熸垚涓氬姟琛�';
+
+-- 瀛楁娉ㄩ噴
+comment on column gen_table.table_id is '缂栧彿';
+comment on column gen_table.table_name is '琛ㄥ悕绉�';
+comment on column gen_table.table_comment is '琛ㄦ弿杩�';
+comment on column gen_table.sub_table_name is '鍏宠仈瀛愯〃鐨勮〃鍚�';
+comment on column gen_table.sub_table_fk_name is '瀛愯〃鍏宠仈鐨勫閿悕';
+comment on column gen_table.class_name is '瀹炰綋绫诲悕绉�';
+comment on column gen_table.tpl_category is '浣跨敤鐨勬ā鏉匡紙crud鍗曡〃鎿嶄綔 tree鏍戣〃鎿嶄綔锛�';
+comment on column gen_table.tpl_web_type is '鍓嶇妯℃澘绫诲瀷锛坋lement-ui妯$増 element-plus妯$増锛�';
+comment on column gen_table.package_name is '鐢熸垚鍖呰矾寰�';
+comment on column gen_table.module_name is '鐢熸垚妯″潡鍚�';
+comment on column gen_table.business_name is '鐢熸垚涓氬姟鍚�';
+comment on column gen_table.function_name is '鐢熸垚鍔熻兘鍚�';
+comment on column gen_table.function_author is '鐢熸垚鍔熻兘浣滆��';
+comment on column gen_table.gen_type is '鐢熸垚浠g爜鏂瑰紡锛�0zip鍘嬬缉鍖� 1鑷畾涔夎矾寰勶級';
+comment on column gen_table.gen_path is '鐢熸垚璺緞锛堜笉濉粯璁ら」鐩矾寰勶級';
+comment on column gen_table.options is '鍏跺畠鐢熸垚閫夐」';
+comment on column gen_table.create_by is '鍒涘缓鑰�';
+comment on column gen_table.create_time is '鍒涘缓鏃堕棿';
+comment on column gen_table.update_by is '鏇存柊鑰�';
+comment on column gen_table.update_time is '鏇存柊鏃堕棿';
+comment on column gen_table.remark is '澶囨敞';
diff --git a/db/migration/V20250524155505__create_gen_table_column.sql b/db/migration/V20250524155505__create_gen_table_column.sql
new file mode 100644
index 0000000..85eda38
--- /dev/null
+++ b/db/migration/V20250524155505__create_gen_table_column.sql
@@ -0,0 +1,58 @@
+-- ----------------------------
+-- 19銆佷唬鐮佺敓鎴愪笟鍔¤〃瀛楁
+-- ----------------------------
+
+drop table if exists gen_table_column;
+create table gen_table_column
+(
+    column_id      serial primary key,                     -- 浣跨敤 serial 瀹炵幇鑷
+    table_id       bigint,                                 -- 褰掑睘琛ㄧ紪鍙�
+    column_name    varchar(200),                           -- 鍒楀悕绉�
+    column_comment varchar(500),                           -- 鍒楁弿杩�
+    column_type    varchar(100),                           -- 鍒楃被鍨�
+    java_type      varchar(500),                           -- JAVA绫诲瀷
+    java_field     varchar(200),                           -- JAVA瀛楁鍚�
+    is_pk          char(1),                                -- 鏄惁涓婚敭锛�1鏄級
+    is_increment   char(1),                                -- 鏄惁鑷锛�1鏄級
+    is_required    char(1),                                -- 鏄惁蹇呭~锛�1鏄級
+    is_insert      char(1),                                -- 鏄惁涓烘彃鍏ュ瓧娈碉紙1鏄級
+    is_edit        char(1),                                -- 鏄惁缂栬緫瀛楁锛�1鏄級
+    is_list        char(1),                                -- 鏄惁鍒楄〃瀛楁锛�1鏄級
+    is_query       char(1),                                -- 鏄惁鏌ヨ瀛楁锛�1鏄級
+    query_type     varchar(200) default 'EQ',              -- 鏌ヨ鏂瑰紡锛堢瓑浜庛�佷笉绛変簬銆佸ぇ浜庛�佸皬浜庛�佽寖鍥达級
+    html_type      varchar(200),                           -- 鏄剧ず绫诲瀷锛堟枃鏈銆佹枃鏈煙銆佷笅鎷夋銆佸閫夋銆佸崟閫夋銆佹棩鏈熸帶浠讹級
+    dict_type      varchar(200) default '',                -- 瀛楀吀绫诲瀷
+    sort           int,                                    -- 鎺掑簭
+    create_by      varchar(64)  default '',                -- 鍒涘缓鑰�
+    create_time    timestamp    default current_timestamp, -- 鍒涘缓鏃堕棿
+    update_by      varchar(64)  default '',                -- 鏇存柊鑰�
+    update_time    timestamp,                              -- 鏇存柊鏃堕棿
+    foreign key (table_id) references gen_table (table_id) -- 澶栭敭绾︽潫
+);
+
+-- 琛ㄦ敞閲�
+comment on table gen_table_column is '浠g爜鐢熸垚涓氬姟琛ㄥ瓧娈�';
+
+-- 瀛楁娉ㄩ噴
+comment on column gen_table_column.column_id is '缂栧彿';
+comment on column gen_table_column.table_id is '褰掑睘琛ㄧ紪鍙�';
+comment on column gen_table_column.column_name is '鍒楀悕绉�';
+comment on column gen_table_column.column_comment is '鍒楁弿杩�';
+comment on column gen_table_column.column_type is '鍒楃被鍨�';
+comment on column gen_table_column.java_type is 'JAVA绫诲瀷';
+comment on column gen_table_column.java_field is 'JAVA瀛楁鍚�';
+comment on column gen_table_column.is_pk is '鏄惁涓婚敭锛�1鏄級';
+comment on column gen_table_column.is_increment is '鏄惁鑷锛�1鏄級';
+comment on column gen_table_column.is_required is '鏄惁蹇呭~锛�1鏄級';
+comment on column gen_table_column.is_insert is '鏄惁涓烘彃鍏ュ瓧娈碉紙1鏄級';
+comment on column gen_table_column.is_edit is '鏄惁缂栬緫瀛楁锛�1鏄級';
+comment on column gen_table_column.is_list is '鏄惁鍒楄〃瀛楁锛�1鏄級';
+comment on column gen_table_column.is_query is '鏄惁鏌ヨ瀛楁锛�1鏄級';
+comment on column gen_table_column.query_type is '鏌ヨ鏂瑰紡锛堢瓑浜庛�佷笉绛変簬銆佸ぇ浜庛�佸皬浜庛�佽寖鍥达級';
+comment on column gen_table_column.html_type is '鏄剧ず绫诲瀷锛堟枃鏈銆佹枃鏈煙銆佷笅鎷夋銆佸閫夋銆佸崟閫夋銆佹棩鏈熸帶浠讹級';
+comment on column gen_table_column.dict_type is '瀛楀吀绫诲瀷';
+comment on column gen_table_column.sort is '鎺掑簭';
+comment on column gen_table_column.create_by is '鍒涘缓鑰�';
+comment on column gen_table_column.create_time is '鍒涘缓鏃堕棿';
+comment on column gen_table_column.update_by is '鏇存柊鑰�';
+comment on column gen_table_column.update_time is '鏇存柊鏃堕棿';
diff --git a/pom.xml b/pom.xml
index 857f440..5a16a20 100644
--- a/pom.xml
+++ b/pom.xml
@@ -34,6 +34,7 @@
         <jaxb-api.version>2.3.1</jaxb-api.version>
         <jakarta.version>6.0.0</jakarta.version>
         <springdoc.version>2.6.0</springdoc.version>
+        <postgresql.version>42.2.27</postgresql.version>
     </properties>
 
     <!-- 渚濊禆澹版槑 -->
@@ -185,10 +186,10 @@
                 <version>${ruoyi.version}</version>
             </dependency>
 
-            <!--  flyway 鏁版嵁搴撹縼绉诲伐鍏� -->
             <dependency>
-                <groupId>org.flywaydb</groupId>
-                <artifactId>flyway-core</artifactId>
+                <groupId>org.postgresql</groupId>
+                <artifactId>postgresql</artifactId>
+                <version>${postgresql.version}</version>
             </dependency>
 
         </dependencies>
diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml
index 5a17b7e..59c4861 100644
--- a/ruoyi-admin/pom.xml
+++ b/ruoyi-admin/pom.xml
@@ -54,6 +54,18 @@
             <artifactId>ruoyi-generator</artifactId>
         </dependency>
 
+        <!-- postgresql椹卞姩鍖� -->
+        <dependency>
+            <groupId>org.postgresql</groupId>
+            <artifactId>postgresql</artifactId>
+        </dependency>
+
+        <!--  flyway 鏁版嵁搴撹縼绉诲伐鍏� -->
+        <dependency>
+            <groupId>org.flywaydb</groupId>
+            <artifactId>flyway-core</artifactId>
+        </dependency>
+
     </dependencies>
 
     <build>

--
Gitblit v1.9.3