From 147428971be43eed90a79f3849f15000d3855390 Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期一, 28 九月 2026 15:15:22 +0800
Subject: [PATCH] 实现新威 7.6 直连取数与逐行接收

---
 battery-business/src/main/java/com/battery/business/service/impl/DeviceAdapterServiceImpl.java |   25 ++++++++++++++++++++++---
 1 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/battery-business/src/main/java/com/battery/business/service/impl/DeviceAdapterServiceImpl.java b/battery-business/src/main/java/com/battery/business/service/impl/DeviceAdapterServiceImpl.java
index b42c954..175558e 100644
--- a/battery-business/src/main/java/com/battery/business/service/impl/DeviceAdapterServiceImpl.java
+++ b/battery-business/src/main/java/com/battery/business/service/impl/DeviceAdapterServiceImpl.java
@@ -32,6 +32,10 @@
     private static final String DISABLED = "1";
     private static final String READ_ONLY_CAPABILITIES =
             "{\"discovery\":true,\"realtimeObservation\":true,\"historyDownload\":true,\"control\":false}";
+    /** 适配器类型按存储形态划分;BTS 保留给开发模拟器与将来的协议路线(ADR-0065)。 */
+    private static final List<String> SUPPORTED_TYPES = List.of("BTS", "NEWARE_MYSQL");
+    /** 直连厂商存储的来源,其通道登记清单是长期事实,候选不按时间过期。 */
+    private static final List<String> PERSISTENT_CANDIDATE_TYPES = List.of("NEWARE_MYSQL");
 
     private final TDeviceAdapterMapper mapper;
     private final DeviceAdapterRegistry registry;
@@ -136,7 +140,7 @@
             registry.synchronize(toRuntimeConfig(adapter));
             AdapterDiscoveryResult result = persistence.discoverForReception(registry, new DiscoverySource(
                     adapter.getAdapterCode(), adapter.getAdapterId(), adapter.getAdapterName(),
-                    adapter.getPollIntervalMs()));
+                    adapter.getPollIntervalMs(), PERSISTENT_CANDIDATE_TYPES.contains(adapter.getAdapterType())));
             mapper.updateDiscoverySuccess(adapterId, result.observedAtUtc());
             return result;
         }
@@ -214,8 +218,9 @@
         adapter.setAdapterType(StringUtils.trim(adapter.getAdapterType()).toUpperCase(Locale.ROOT));
         adapter.setHost(StringUtils.trim(adapter.getHost()));
         adapter.setTimezoneId(StringUtils.trim(adapter.getTimezoneId()));
+        adapter.setSourceConfig(StringUtils.trim(adapter.getSourceConfig()));
         adapter.setRemark(StringUtils.trim(adapter.getRemark()));
-        if (!"BTS".equals(adapter.getAdapterType()))
+        if (!SUPPORTED_TYPES.contains(adapter.getAdapterType()))
             throw error("不支持的适配器类型", DeviceAdapterErrorCodes.UNSUPPORTED_TYPE);
         if (!Boolean.TRUE.equals(adapter.getReadOnly()))
             throw error("当前里程碑只允许只读设备适配器", DeviceAdapterErrorCodes.INVALID_CONFIG);
@@ -243,7 +248,21 @@
     {
         return new AdapterInstanceConfig(adapter.getAdapterCode(), adapter.getAdapterType(), adapter.getHost(),
                 adapter.getPort(), adapter.getPollIntervalMs(), adapter.getTimezoneId(),
-                ENABLED.equals(adapter.getStatus()), parseCapabilities(adapter.getCapabilities()));
+                ENABLED.equals(adapter.getStatus()), parseCapabilities(adapter.getCapabilities()),
+                parseSourceConfig(adapter.getSourceConfig()));
+    }
+
+    /** 来源形态配置只承载非敏感项;连接口令由环境变量或启动参数提供,不入库。 */
+    private static java.util.Map<String, String> parseSourceConfig(String sourceConfig)
+    {
+        if (StringUtils.isBlank(sourceConfig)) return java.util.Map.of();
+        JSONObject value = JSON.parseObject(sourceConfig);
+        if (value == null) return java.util.Map.of();
+        java.util.Map<String, String> result = new java.util.LinkedHashMap<>();
+        value.forEach((key, item) -> {
+            if (item != null) result.put(String.valueOf(key), String.valueOf(item));
+        });
+        return result;
     }
 
     private AdapterCapabilities parseCapabilities(String capabilities)

--
Gitblit v1.7.1