fix(iot): 修复客流阈值触发时 IoT 模块未将区域配置回写至 Redis 缓存的问题
This commit is contained in:
@@ -112,17 +112,43 @@ public class CleanOrderIntegrationConfigServiceImpl implements CleanOrderIntegra
|
||||
// 2. 缓存未命中,调用 Ops 模块
|
||||
CommonResult<List<AreaDeviceDTO>> 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
|
||||
|
||||
Reference in New Issue
Block a user