From 99935242ecccd94e76978e2b71cbc46b87d31dc6 Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期五, 09 十月 2026 11:17:44 +0800
Subject: [PATCH] 推式来源的工步与循环改为从采样段推导
---
ruoyi-admin/src/test/java/com/battery/business/runtime/PushIngestLandingMigrationContractTest.java | 27 +++++++++++++++++++++++++++
1 files changed, 27 insertions(+), 0 deletions(-)
diff --git a/ruoyi-admin/src/test/java/com/battery/business/runtime/PushIngestLandingMigrationContractTest.java b/ruoyi-admin/src/test/java/com/battery/business/runtime/PushIngestLandingMigrationContractTest.java
index fe58e3f..c1b1d75 100644
--- a/ruoyi-admin/src/test/java/com/battery/business/runtime/PushIngestLandingMigrationContractTest.java
+++ b/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)
{
--
Gitblit v1.7.1