yeg
5 天以前 99935242ecccd94e76978e2b71cbc46b87d31dc6
ruoyi-admin/src/test/java/com/battery/business/runtime/PushIngestLandingMigrationContractTest.java
@@ -207,6 +207,33 @@
        assertTrue(latest.getPayloadJson().contains("Voltage"));
    }
    /**
     * 工步与循环的分段推导读的就是这条查询(ADR-0067):某一个来源库在该通道上的采样行,
     * 按 (设备时间, 协议序号) 升序——推导依赖这个次序判断哪一段还在进行;其他来源库、
     * 其他通道与其他来源的行都不混进来。
     */
    @Test
    void samplesOfOneSourceRefComeBackInWatermarkOrderAndNothingElseDoes()
    {
        mapper.insertIngestRecord(sample(26, "DB_20260927_155209/Ws26_IV_0:12", 12L, "{\"Voltage\":1.3}",
                Instant.parse("2026-09-27T07:53:20Z")));
        mapper.insertIngestRecord(sample(26, "DB_20260927_155209/Ws26_IV_0:11", 11L, "{\"Voltage\":1.2}",
                Instant.parse("2026-09-27T07:52:20Z")));
        // 换了来源库(厂商侧另一次测试)、另一个通道:都不属于本次推导范围。
        TDeviceIngestRecord laterTest = sample(26, "DB_20260928_101010/Ws26_IV_0:1", 1L, "{\"Voltage\":1.4}",
                Instant.parse("2026-09-28T02:10:10Z"));
        laterTest.setSourceRef("DB_20260928_101010/Ws26_IV_0");
        mapper.insertIngestRecord(laterTest);
        mapper.insertIngestRecord(sample(18, "DB_20260923_161840/Ws18_IV_0:5", 5L, "{\"Voltage\":1.1}",
                Instant.parse("2026-09-23T08:18:40Z")));
        List<TDeviceIngestRecord> rows = mapper.selectSamplesOfSource(ADAPTER, 0, 0, 1, 26,
                "DB_20260927_155209/Ws26_IV_0");
        assertEquals(List.of(11L, 12L), rows.stream().map(TDeviceIngestRecord::getRecordSequence).toList());
        assertTrue(mapper.selectSamplesOfSource(ADAPTER, 0, 0, 1, 26, "DB_20261001_000000/Ws26_IV_0").isEmpty());
    }
    /** 供 H2 别名使用的 HEX 等价实现;H2 没有 MySQL 的 HEX()。 */
    public static String hexOf(byte[] value)
    {