From 652a32b7978e0d6ee997519f5a1e1a3451dd2078 Mon Sep 17 00:00:00 2001 From: George Date: Wed, 21 Jan 2026 20:01:32 +0800 Subject: [PATCH] =?UTF-8?q?20260121=EF=BC=9A=E4=BC=98=E5=8C=96=E5=BC=95?= =?UTF-8?q?=E7=94=A8=E6=A8=A1=E5=9E=8B=E5=8F=96=E5=80=BC=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iot/service/impl/DeviceServiceImpl.java | 45 +++++-------------- 1 file changed, 11 insertions(+), 34 deletions(-) diff --git a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/DeviceServiceImpl.java b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/DeviceServiceImpl.java index d2837384..f19b02a3 100644 --- a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/DeviceServiceImpl.java +++ b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/DeviceServiceImpl.java @@ -517,8 +517,13 @@ public class DeviceServiceImpl implements IDeviceService { // 判断是否有纯计算物模型 有:需要获取设备级别物模型 无:直接使用产品级别物模型即可 boolean isCalculated = thingsModelValueRemarkItem.stream().anyMatch(ThingsModelSimpleItem::isCalculated); Map calculatedModelMap = new HashMap<>(); + Map thingsModelValueMap = new HashMap<>(); if (isCalculated) { calculatedModelMap = itslCache.getDeviceCalculatedModelMap(serialNumber); + thingsModelValueMap = thingsModelValueRemarkItem.stream().filter(things -> !things.isCalculated()) + .collect(Collectors.toMap(ThingsModelSimpleItem::getId, + ThingsModelSimpleItem::getValue, + (oldValue, newValue) -> oldValue)); } for (ThingsModelSimpleItem item : thingsModelValueRemarkItem) { String identity = item.getId(); @@ -561,40 +566,12 @@ public class DeviceServiceImpl implements IDeviceService { // 获取引用的其他物模型的值 for (String refIdentifier : referencedIdentifiers) { if (!refIdentifier.equals(identity)) { // 避免循环引用自己 - try { - // 优先从当前消息中查找 - String refValue = null; - for (ThingsModelSimpleItem currentItem : thingsModelValueRemarkItem) { - String currentId = currentItem.getId(); - if (currentId.startsWith("array_")) { - currentId = currentId.substring(9); - } - if (currentId.equals(refIdentifier)) { - refValue = currentItem.getValue(); - break; - } - } - - // 如果当前消息中没有,再从缓存读取 - if (refValue == null) { - ValueItem refValueItem = itslValueCache.getCacheIdentifier( - input.getProductId(), - serialNumber, - refIdentifier); - if (refValueItem != null && StringUtils.isNotEmpty(refValueItem.getValue())) { - refValue = refValueItem.getValue(); - } - } - - if (refValue != null && !refValue.isEmpty()) { - params.put("{" + refIdentifier + "}", refValue); - } else { - params.put("{" + refIdentifier + "}", "0"); - log.warn("=>计算公式引用的物模型值不存在[{}],标识符:[{}],使用默认值0", input.getProductId(), refIdentifier); - } - } catch (Exception e) { - log.error("=>获取计算公式引用的物模型值失败[{}],标识符:[{}],错误:{}", - input.getProductId(), refIdentifier, e.getMessage()); + String refValue = thingsModelValueMap.get(refIdentifier); + if (refValue != null && !refValue.isEmpty()) { + params.put("{" + refIdentifier + "}", refValue); + } else { + params.put("{" + refIdentifier + "}", "0"); + log.warn("=>计算公式引用的物模型值不存在[{}],标识符:[{}],使用默认值0", input.getProductId(), refIdentifier); } } }