From 7e4484e9c901f3a1974cb586ac34df5283ce5970 Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期三, 02 九月 2026 12:34:57 +0800
Subject: [PATCH] 修复迁移校验并补充遗留表清理

---
 ruoyi-admin/src/test/java/com/ruoyi/config/Ticket29MigrationContractTest.java                   |   32 ++++++++++++++++++++++++++++++++
 ruoyi-admin/src/main/resources/db/migration/V29__remove_remaining_history_gap_legacy.sql        |    7 +++++++
 ruoyi-admin/src/main/resources/db/migration/V28__remove_reception_backfill_integrity_legacy.sql |    2 --
 ruoyi-admin/src/test/java/com/ruoyi/config/Ticket28MigrationContractTest.java                   |    2 --
 4 files changed, 39 insertions(+), 4 deletions(-)

diff --git a/ruoyi-admin/src/main/resources/db/migration/V28__remove_reception_backfill_integrity_legacy.sql b/ruoyi-admin/src/main/resources/db/migration/V28__remove_reception_backfill_integrity_legacy.sql
index 9788a2d..7acca86 100644
--- a/ruoyi-admin/src/main/resources/db/migration/V28__remove_reception_backfill_integrity_legacy.sql
+++ b/ruoyi-admin/src/main/resources/db/migration/V28__remove_reception_backfill_integrity_legacy.sql
@@ -4,8 +4,6 @@
 
 DROP TABLE t_test_integrity_issue;
 DROP TABLE t_test_backfill_cursor;
-DROP TABLE t_data_gap;
-DROP TABLE t_history_sync_cursor;
 DROP TABLE t_test_collector_exception_interval;
 DROP TABLE t_test_reception_interval;
 DROP TABLE t_collector_channel_lease;
diff --git a/ruoyi-admin/src/main/resources/db/migration/V29__remove_remaining_history_gap_legacy.sql b/ruoyi-admin/src/main/resources/db/migration/V29__remove_remaining_history_gap_legacy.sql
new file mode 100644
index 0000000..cd2ecf7
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/db/migration/V29__remove_remaining_history_gap_legacy.sql
@@ -0,0 +1,7 @@
+-- Ticket28 后续清理:V28 已执行后补删遗留历史游标和数据缺口表,保持已应用迁移不可变。
+SET FOREIGN_KEY_CHECKS = 0;
+
+DROP TABLE IF EXISTS t_data_gap;
+DROP TABLE IF EXISTS t_history_sync_cursor;
+
+SET FOREIGN_KEY_CHECKS = 1;
diff --git a/ruoyi-admin/src/test/java/com/ruoyi/config/Ticket28MigrationContractTest.java b/ruoyi-admin/src/test/java/com/ruoyi/config/Ticket28MigrationContractTest.java
index 515091c..3c30450 100644
--- a/ruoyi-admin/src/test/java/com/ruoyi/config/Ticket28MigrationContractTest.java
+++ b/ruoyi-admin/src/test/java/com/ruoyi/config/Ticket28MigrationContractTest.java
@@ -16,8 +16,6 @@
         assertTrue(sql.contains("DROP TABLE t_test_reception_interval"));
         assertTrue(sql.contains("DROP TABLE t_collector_channel_lease"));
         assertTrue(sql.contains("DROP TABLE t_channel_lease"));
-        assertTrue(sql.contains("DROP TABLE t_data_gap"));
-        assertTrue(sql.contains("DROP TABLE t_history_sync_cursor"));
         assertTrue(sql.contains("DROP FOREIGN KEY fk_sample_reception_interval"));
         assertTrue(sql.contains("DROP FOREIGN KEY fk_collector_sample_reception_interval"));
         assertTrue(sql.contains("DROP COLUMN reception_interval_id"));
diff --git a/ruoyi-admin/src/test/java/com/ruoyi/config/Ticket29MigrationContractTest.java b/ruoyi-admin/src/test/java/com/ruoyi/config/Ticket29MigrationContractTest.java
new file mode 100644
index 0000000..6c11b30
--- /dev/null
+++ b/ruoyi-admin/src/test/java/com/ruoyi/config/Ticket29MigrationContractTest.java
@@ -0,0 +1,32 @@
+package com.ruoyi.config;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+import org.junit.jupiter.api.Test;
+
+/** V29 补删 Ticket28 遗漏的历史补采游标和数据缺口表。 */
+class Ticket29MigrationContractTest
+{
+    @Test
+    void removesRemainingHistorySyncTables()
+    {
+        String sql = resource("db/migration/V29__remove_remaining_history_gap_legacy.sql");
+        assertTrue(sql.contains("DROP TABLE IF EXISTS t_data_gap"));
+        assertTrue(sql.contains("DROP TABLE IF EXISTS t_history_sync_cursor"));
+    }
+
+    private static String resource(String path)
+    {
+        try (InputStream stream = Ticket29MigrationContractTest.class.getClassLoader().getResourceAsStream(path))
+        {
+            if (stream == null) throw new AssertionError("Missing migration resource " + path);
+            return new String(stream.readAllBytes(), StandardCharsets.UTF_8);
+        }
+        catch (Exception exception)
+        {
+            throw new AssertionError("Unable to read migration resource " + path, exception);
+        }
+    }
+}

--
Gitblit v1.7.1