yeg
2026-09-05 7079c726e7470c71f3a83553092b6d3762fa0d17
修复已初始化开发库的迁移校验失败

恢复原始 V2 校验值,将接收边界字段改为 V6 追加迁移,并锁定已执行基线的 Flyway 校验值。验证旧库升级、已有测试保留和重复迁移。
1个文件已添加
2个文件已修改
18 ■■■■■ 已修改文件
ruoyi-admin/src/main/resources/db/migration-final/V2__final_business_baseline.sql 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/db/migration-final/V6__test_reception_boundary.sql 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/test/java/com/battery/business/runtime/FinalDatabaseBaselineContractTest.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/db/migration-final/V2__final_business_baseline.sql
@@ -212,7 +212,6 @@
    reception_status VARCHAR(32) NOT NULL DEFAULT 'NOT_STARTED',
    monitor_timeout_minutes INT NOT NULL DEFAULT 30,
    started_at_utc DATETIME(3) NULL,
    reception_boundary_at_utc DATETIME(3) NULL,
    ended_at_utc DATETIME(3) NULL,
    logic_step_mappings_json JSON NULL,
    console_detail_json JSON NULL,
ruoyi-admin/src/main/resources/db/migration-final/V6__test_reception_boundary.sql
New file
@@ -0,0 +1,3 @@
-- 接收边界通过追加迁移引入,保持已在开发库执行的 V2 校验值不变。
ALTER TABLE t_test
    ADD COLUMN reception_boundary_at_utc DATETIME(3) NULL AFTER started_at_utc;
ruoyi-admin/src/test/java/com/battery/business/runtime/FinalDatabaseBaselineContractTest.java
@@ -1,5 +1,6 @@
package com.battery.business.runtime;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -7,6 +8,9 @@
import java.nio.charset.StandardCharsets;
import java.util.Set;
import org.flywaydb.core.api.Location;
import org.flywaydb.core.internal.resolver.ChecksumCalculator;
import org.flywaydb.core.internal.resource.classpath.ClassPathResource;
import org.junit.jupiter.api.Test;
/** Ticket03 最终数据库基线的结构契约。 */
@@ -26,6 +30,16 @@
            "t_test_console_import_record");
    @Test
    void finalBaselineKeepsTheChecksumAlreadyAppliedToDevelopmentDatabase()
    {
        // 已执行的基线必须保持 Flyway 校验值,新增字段只能追加迁移。
        ClassPathResource baseline = new ClassPathResource(new Location("classpath:db/migration-final"),
                "db/migration-final/V2__final_business_baseline.sql", getClass().getClassLoader(),
                StandardCharsets.UTF_8);
        assertEquals(-1864711325, ChecksumCalculator.calculate(baseline));
    }
    @Test
    void finalBaselineContainsOnlyTheAcceptedBusinessModel()
    {
        String sql = resource("db/migration-final/V2__final_business_baseline.sql");