From 68156d14934ffb7d7b6e0dca63d3dcf3ed43c995 Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期六, 05 九月 2026 18:01:40 +0800
Subject: [PATCH] 修复离线设备无法发现和登记的问题
---
battery-business/src/main/java/com/battery/business/service/impl/TDetectionCabinetServiceImpl.java | 12 +++++-------
1 files changed, 5 insertions(+), 7 deletions(-)
diff --git a/battery-business/src/main/java/com/battery/business/service/impl/TDetectionCabinetServiceImpl.java b/battery-business/src/main/java/com/battery/business/service/impl/TDetectionCabinetServiceImpl.java
index fb49958..7e8ce2b 100644
--- a/battery-business/src/main/java/com/battery/business/service/impl/TDetectionCabinetServiceImpl.java
+++ b/battery-business/src/main/java/com/battery/business/service/impl/TDetectionCabinetServiceImpl.java
@@ -101,7 +101,7 @@
}
/**
- * 读取 Redis 在线候选供原选择设备弹窗展示,不生成模拟设备。
+ * 读取未过期且未登记的候选,离线设备仍保留身份并可选择。
* 测试占用状态由实时通道工作状态聚合;测试归属留待后续绑定闭环确认。
*
* @return 可供选择的检测柜设备摘要
@@ -111,13 +111,12 @@
{
Set<String> registeredCodes = Set.copyOf(detectionCabinetMapper.selectRegisteredCabinetCodes());
return candidateStore.snapshot(Instant.now()).cabinets().stream()
- .filter(CabinetCandidate::online)
.filter(candidate -> !registeredCodes.contains(candidate.deviceCode()))
.map(candidate -> {
- boolean active = isActive(candidate);
+ boolean active = candidate.online() && isActive(candidate);
return new DiscoveredCabinetVo(
candidate.deviceCode(), candidate.ip(), candidate.mac(), candidate.name(),
- candidate.manufacturer(), candidate.model(), candidate.channels().size(), "在线",
+ candidate.manufacturer(), candidate.model(), candidate.channels().size(), candidate.online() ? "在线" : "离线",
active ? "测试中" : "空闲",
active ? "待确认" : "-");
})
@@ -136,8 +135,7 @@
{
normalizeBasicFields(detectionCabinet);
CabinetCandidate candidate = candidateStore.findCabinet(detectionCabinet.getCabinetCode(), Instant.now())
- .filter(CabinetCandidate::online)
- .orElseThrow(() -> new ServiceException("请先选择在线的发现候选设备"));
+ .orElseThrow(() -> new ServiceException("请先选择有效的发现候选设备"));
detectionCabinet.setAdapterId(candidate.adapterId());
detectionCabinet.setAdapterCode(candidate.adapterCode());
detectionCabinet.setVendorDeviceType(candidate.devtype());
@@ -169,7 +167,7 @@
value.setLastSeenAtUtc(null);
detectionCabinetMapper.insertDetectionChannel(value);
}
- // 登记瞬间的候选也是一次有效观测,立即写入正式事实,避免等待下一轮轮询才显示在线。
+ // 登记只确认来源身份,在线与离线事实都按候选原样同步。
detectionCabinetMapper.updateRegisteredCabinetObservation(candidate.adapterCode(), candidate.devtype(),
candidate.devid(), candidate.online() ? "ONLINE" : "OFFLINE", candidate.observedAt(),
candidate.online());
--
Gitblit v1.7.1