From ebb60146591d53a09107ccd229cce80a25f586b2 Mon Sep 17 00:00:00 2001 From: HuangHuiKang Date: Sat, 7 Feb 2026 10:18:16 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E5=AE=9E=E6=97=B6?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E7=82=B9=E4=BD=8D=E7=B1=BB=E5=9E=8B=E5=B1=95?= =?UTF-8?q?=E7=A4=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iot/service/device/DeviceServiceImpl.java | 33 ++++++++++++++++--- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/DeviceServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/DeviceServiceImpl.java index ec1243a14..ab9152867 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/DeviceServiceImpl.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/device/DeviceServiceImpl.java @@ -715,6 +715,9 @@ public class DeviceServiceImpl implements DeviceService { DeviceAttributeTypeDO::getName )); + Map attributeTypeCache = new HashMap<>(); + + // 3. 遍历并处理 for (Map deviceData : deviceDataList) { String queryDataJson = (String) deviceData.get("queryData"); @@ -729,12 +732,31 @@ public class DeviceServiceImpl implements DeviceService { for (Map data : dataList) { // 获取属性类型名称 String attributeTypeName = "其他"; - String typeStr = (String) data.get("attributeType"); - if (typeStr != null) { + Object typeObj = data.get("attributeType"); + + if (typeObj != null) { + String typeStr = typeObj.toString(); + try { + // 尝试当作数字 ID + Long typeId = Long.parseLong(typeStr); + + // 先从缓存查 + if (attributeTypeCache.containsKey(typeId)) { + attributeTypeName = attributeTypeCache.get(typeId); + } else { + // 查数据库 + String nameFromDb = idToNameMap.get(typeId); + if (nameFromDb != null) { + attributeTypeName = nameFromDb; + } else { + attributeTypeName = typeStr; // 查不到就用原值 + } + attributeTypeCache.put(typeId, attributeTypeName); + } + } catch (NumberFormatException e) { + // 不是数字,直接用原字符串 attributeTypeName = typeStr; - } catch (Exception e) { - attributeTypeName = "未知"; } } @@ -781,7 +803,8 @@ public class DeviceServiceImpl implements DeviceService { // 2. 获取属性类型映射 (ID -> Name) 并构建缓存,避免重复数据库查询 Map idToNameMap = deviceAttributeTypeMapper.selectList() .stream() - .collect(Collectors.toMap(DeviceAttributeTypeDO::getId, DeviceAttributeTypeDO::getName)); + .collect(Collectors.toMap(DeviceAttributeTypeDO::getId, DeviceAttributeTypeDO::getName) + ); // 额外缓存:数字ID -> 名称,防止同一个ID多次查询数据库 Map attributeTypeCache = new HashMap<>();