From 3e54094c3d6b08cb530f1015331492c88350ff01 Mon Sep 17 00:00:00 2001 From: lzh Date: Tue, 24 Feb 2026 18:01:39 +0800 Subject: [PATCH] =?UTF-8?q?fix(iot):=20=E4=BF=AE=E5=A4=8D=E5=AE=A2?= =?UTF-8?q?=E6=B5=81=E9=98=88=E5=80=BC=E8=A7=A6=E5=8F=91=E6=97=B6=20IoT=20?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=E6=9C=AA=E5=B0=86=E5=8C=BA=E5=9F=9F=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E5=9B=9E=E5=86=99=E8=87=B3=20Redis=20=E7=BC=93?= =?UTF-8?q?=E5=AD=98=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...leanOrderIntegrationConfigServiceImpl.java | 36 ++++++++++++++++--- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/viewsh-module-iot/viewsh-module-iot-server/src/main/java/com/viewsh/module/iot/service/integration/clean/CleanOrderIntegrationConfigServiceImpl.java b/viewsh-module-iot/viewsh-module-iot-server/src/main/java/com/viewsh/module/iot/service/integration/clean/CleanOrderIntegrationConfigServiceImpl.java index 81db962..05935cf 100644 --- a/viewsh-module-iot/viewsh-module-iot-server/src/main/java/com/viewsh/module/iot/service/integration/clean/CleanOrderIntegrationConfigServiceImpl.java +++ b/viewsh-module-iot/viewsh-module-iot-server/src/main/java/com/viewsh/module/iot/service/integration/clean/CleanOrderIntegrationConfigServiceImpl.java @@ -112,17 +112,43 @@ public class CleanOrderIntegrationConfigServiceImpl implements CleanOrderIntegra // 2. 缓存未命中,调用 Ops 模块 CommonResult> result = areaDeviceApi.getDevicesByAreaAndType(areaId, relationType); - if (result == null || !result.isSuccess() || result.getData() == null) { - log.warn("[CleanOrderConfig] 调用 Ops 模块获取区域配置失败:areaId={}, relationType={}", areaId, relationType); + if (result == null || !result.isSuccess() || result.getData() == null || result.getData().isEmpty()) { + log.warn("[CleanOrderConfig] 调用 Ops 模块获取区域配置为空或失败:areaId={}, relationType={}", areaId, relationType); + // 写入防缓存穿透标记 (1分钟) + try { + stringRedisTemplate.opsForValue().set(cacheKey, NULL_CACHE, 1, TimeUnit.MINUTES); + } catch (Exception e) { + log.warn("[CleanOrderConfig] 写入防击穿缓存失败:areaId={}, relationType={}", areaId, relationType, e); + } return null; } - // 返回第一个启用的配置 - return result.getData().stream() + // 3. 返回第一个启用的配置,并主动写入缓存 (模拟 Ops 端的缓存策略,24小时) + AreaDeviceDTO validDto = result.getData().stream() .filter(dto -> dto.getEnabled() != null && dto.getEnabled()) .findFirst() - .map(this::wrapDto) .orElse(null); + + if (validDto != null) { + try { + stringRedisTemplate.opsForValue().set( + cacheKey, + JsonUtils.toJsonString(validDto), + 24, + TimeUnit.HOURS); + } catch (Exception e) { + log.warn("[CleanOrderConfig] 写入区域配置缓存失败:areaId={}, relationType={}", areaId, relationType, e); + } + return wrapDto(validDto); + } else { + // 没有找到启用的配置,写入 NULL_CACHE + try { + stringRedisTemplate.opsForValue().set(cacheKey, NULL_CACHE, 1, TimeUnit.MINUTES); + } catch (Exception e) { + log.warn("[CleanOrderConfig] 写入防击穿缓存失败:areaId={}, relationType={}", areaId, relationType, e); + } + return null; + } } @Override