From a04222c873e5e55f48c8d33b5c0bc46fa524ac8d Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期四, 08 十月 2026 13:20:39 +0800
Subject: [PATCH] 界面显示号改为来源自报,并给出无歧义的来源定位
---
battery-business/src/main/java/com/battery/business/service/impl/DeviceIngestServiceImpl.java | 9 ++++++++-
1 files changed, 8 insertions(+), 1 deletions(-)
diff --git a/battery-business/src/main/java/com/battery/business/service/impl/DeviceIngestServiceImpl.java b/battery-business/src/main/java/com/battery/business/service/impl/DeviceIngestServiceImpl.java
index bb44aeb..78083e4 100644
--- a/battery-business/src/main/java/com/battery/business/service/impl/DeviceIngestServiceImpl.java
+++ b/battery-business/src/main/java/com/battery/business/service/impl/DeviceIngestServiceImpl.java
@@ -165,6 +165,9 @@
/**
* 拓扑上报:声明该来源当前有哪些通道。行里只有厂商自己的通道号,身份映射在本方法里完成。
* 拓扑是"这个通道还在"的长期声明,重复上报被幂等忽略(不多占空间,也不改写既有行)。
+ *
+ * <p>行里可以额外带 {@code channelNo}:来源自己软件里显示的通道号。
+ * 它只用于界面显示与登记(操作员要拿它跟厂商软件对上),不参与通道身份,所以缺了也不影响接收。
*/
private void storeTopology(String adapterCode, String timezoneId, JSONObject payload, Instant receivedAt,
Counters counters)
@@ -177,9 +180,13 @@
if (channel == null || channel < 1) throw payloadInvalid("第 " + index + " 行的 channel 不合法:" + row);
TDeviceIngestRecord value = base(adapterCode, timezoneId, TDeviceIngestRecord.KIND_TOPOLOGY, channel,
receivedAt);
+ value.setVendorChannelNo(row.containsKey("channelNo") ? row.getInteger("channelNo") : null);
value.setRecordKey("topology:" + channel);
value.setPayloadJson(JSON.toJSONString(row));
- store(value, counters);
+ // 拓扑是声明不是设备事实:重复上报刷新声明内容(例如这次才带上的来源通道号),
+ // 不追加新行、也不按"内容不同即冲突"处理——声明本来就允许被刷新。
+ value.setContentSha256(canonicalHash(value.getPayloadJson()));
+ if (records.upsertTopology(value) > 0) counters.accepted++; else counters.ignored++;
}
}
--
Gitblit v1.7.1