From 99935242ecccd94e76978e2b71cbc46b87d31dc6 Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期五, 09 十月 2026 11:17:44 +0800
Subject: [PATCH] 推式来源的工步与循环改为从采样段推导
---
battery-business/src/test/java/com/battery/business/service/impl/FakeIngestLanding.java | 28 ++++++++++++++++++++++++++++
1 files changed, 28 insertions(+), 0 deletions(-)
diff --git a/battery-business/src/test/java/com/battery/business/service/impl/FakeIngestLanding.java b/battery-business/src/test/java/com/battery/business/service/impl/FakeIngestLanding.java
index 8e8923e..21b6586 100644
--- a/battery-business/src/test/java/com/battery/business/service/impl/FakeIngestLanding.java
+++ b/battery-business/src/test/java/com/battery/business/service/impl/FakeIngestLanding.java
@@ -32,6 +32,22 @@
return 1;
}
+ /** 拓扑是声明:撞键即刷新声明内容,不追加新行(与生产 SQL 的 upsert 语义一致)。 */
+ @Override
+ public int upsertTopology(TDeviceIngestRecord record)
+ {
+ int index = -1;
+ for (int i = 0; i < rows.size(); i++)
+ if (same(rows.get(i), record)) index = i;
+ if (index < 0)
+ {
+ rows.add(record);
+ return 1;
+ }
+ rows.set(index, record);
+ return 1;
+ }
+
@Override
public String selectIngestRecordHashByKey(String adapterCode, String payloadKind, String recordKey)
{
@@ -59,6 +75,7 @@
TDeviceIngestChannel channel = new TDeviceIngestChannel();
channel.setDevtype(row.getDevtype()); channel.setDevid(row.getDevid());
channel.setSubdevid(row.getSubdevid()); channel.setChlid(row.getChlid());
+ channel.setVendorChannelNo(row.getVendorChannelNo());
channel.setLastDataAt(rows.stream().filter(sample -> isSample(sample, adapterCode, row))
.map(TDeviceIngestRecord::getDeviceTimeUtc).filter(java.util.Objects::nonNull)
.max(Date::compareTo).orElse(null));
@@ -80,6 +97,17 @@
}
@Override
+ public List<TDeviceIngestRecord> selectSamplesOfSource(String adapterCode, int devtype, int devid, int subdevid,
+ int chlid, String sourceRef)
+ {
+ return samples(adapterCode, devtype, devid, subdevid, chlid).stream()
+ .filter(row -> sourceRef.equals(row.getSourceRef()))
+ .sorted(java.util.Comparator.comparing(TDeviceIngestRecord::getDeviceTimeUtc)
+ .thenComparing(TDeviceIngestRecord::getRecordSequence))
+ .toList();
+ }
+
+ @Override
public List<TDeviceIngestRecord> selectSamplesSince(String adapterCode, int devtype, int devid, int subdevid,
int chlid, Date watermarkTime, long watermarkSequence, int limit)
{
--
Gitblit v1.7.1