diff --git a/bin/send_modbus_and_register.py b/bin/send_modbus_and_register.py index 6e397d95..b9d00023 100644 --- a/bin/send_modbus_and_register.py +++ b/bin/send_modbus_and_register.py @@ -8,11 +8,8 @@ TARGET_PORT = 8888 # 请根据实际情况修改 # 元数组 modbus 指令 MODBUS_DATA_HEX = ( - "7e80DD33D43DFC5B7e", - "010320413d0d7541bacb2dbf42019a3f6bdb33c2b19c73c0d39f304100a253c3f9f2187f3a", - "020320414056d541b8ad60c02d4acd3fa708cdc2adfe5ac1bcf64c413630c4c3f9a81af11d", - "030320413fc48241b919bcc0006ecd3ff874cdc2ae6c0ac18c11e041877c67c3f9b431a049", - "040320413f56c341b0362ebf48b333403e3200c2addb5cc0daec4341cf60bdc3f9a40fae0b" + "7e80D20C4C6A55D57e", + "01030400110018AA3C" ) # 深部位移计 diff --git a/fastbee-common/src/main/java/com/fastbee/common/utils/gateway/CRC16Utils.java b/fastbee-common/src/main/java/com/fastbee/common/utils/gateway/CRC16Utils.java index f0fdc6ae..1a638536 100644 --- a/fastbee-common/src/main/java/com/fastbee/common/utils/gateway/CRC16Utils.java +++ b/fastbee-common/src/main/java/com/fastbee/common/utils/gateway/CRC16Utils.java @@ -133,7 +133,7 @@ public class CRC16Utils { public static void main(String[] args) throws Exception { - String hex = "006000000000"; + String hex = "01030400110018AA3C"; byte[] bytes = ByteUtils.hexToByte(hex); String crc = getCRC(bytes); System.out.println(crc); diff --git a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/cache/impl/TSLCacheImpl.java b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/cache/impl/TSLCacheImpl.java index 315ad84c..c588c392 100644 --- a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/cache/impl/TSLCacheImpl.java +++ b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/cache/impl/TSLCacheImpl.java @@ -363,7 +363,7 @@ public class TSLCacheImpl implements ITSLCache { // 从数据库查询设备级计算物模型 ThingsModel model = new ThingsModel(); model.setSerialNumber(serialNumber); - model.setIsCalculated(1); // 查询设备级物模型 + model.setIsCalculatedList(Arrays.asList(1,2)); // 查询设备级物模型 List models = thingsModelService.selectThingsModelList(model); if (CollectionUtils.isEmpty(models)) { // 清除可能存在的旧缓存 diff --git a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/domain/ThingsModel.java b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/domain/ThingsModel.java index da8c18e5..97b504b1 100644 --- a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/domain/ThingsModel.java +++ b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/domain/ThingsModel.java @@ -109,12 +109,14 @@ public class ThingsModel extends BaseEntity { private String formula; /** - * 物模型来源类型(0-设备上报,1-纯计算,2-其他预留) + * 物模型来源类型(0-设备上报,1-纯计算(横向计算),2-纵向计算) * 纯计算物模型:计算公式包含{},依赖其他物模型计算值 */ - @ApiModelProperty(value = "物模型来源类型", notes = "(0-设备上报,1-纯计算,2-其他预留)") + @ApiModelProperty(value = "物模型来源类型", notes = "(0-设备上报,1-纯计算(横向计算),2-纵向计算)") private Integer isCalculated; + private List isCalculatedList; + /** * 数据定义 */ diff --git a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/model/ThingsModels/ThingsModelValueItem.java b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/model/ThingsModels/ThingsModelValueItem.java index c6a1a7f6..57e8c0f0 100644 --- a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/model/ThingsModels/ThingsModelValueItem.java +++ b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/model/ThingsModels/ThingsModelValueItem.java @@ -81,7 +81,7 @@ public class ThingsModelValueItem { private String formula; /** - * 物模型来源类型(0-设备上报,1-纯计算,2-其他预留) + * 物模型来源类型(0-设备上报,1-纯计算(横向计算),2-纵向计算) */ private Integer isCalculated; diff --git a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/platform/adapter/dcp/DcpPlatformAdapter.java b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/platform/adapter/dcp/DcpPlatformAdapter.java index 7ad9b109..bd81756b 100644 --- a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/platform/adapter/dcp/DcpPlatformAdapter.java +++ b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/platform/adapter/dcp/DcpPlatformAdapter.java @@ -102,9 +102,7 @@ public class DcpPlatformAdapter { try { String pushPath = resolvePushPath(mapping, pushInterface); - handleNormalPush( - platform, mapping, reportSerialNumber, payload, pushPath, - interfaceCode, requestSchema); + handleNormalPush(platform, mapping, reportSerialNumber, payload, pushPath, interfaceCode, requestSchema); } catch (Exception e) { String serialNumber = StringUtils.hasText(reportSerialNumber) ? reportSerialNumber : mapping.getSerialNumber(); @@ -151,8 +149,7 @@ public class DcpPlatformAdapter { // 无数组字段 → 简单推送,使用子设备 platformDeviceId 和主表 fieldMapping if (!hasArrayField(requestSchema)) { // 如果只有一个设备完全可以走 - handleSubDeviceSimplePush(platform, mapping, subMapping, reportSerialNumber, - payload, pushPath, interfaceCode, requestSchema); + handleSubDeviceSimplePush(platform, mapping, subMapping, reportSerialNumber, payload, pushPath, interfaceCode, requestSchema); return; } @@ -348,12 +345,10 @@ public class DcpPlatformAdapter { int replayCount = 0; for (PlatformDeviceSubMapping monitor : subMappings) { - if (monitor == null || !monitor.isMonitor() - || !StringUtils.hasText(monitor.getSubSerialNumber())) { + if (monitor == null || !monitor.isMonitor() || !StringUtils.hasText(monitor.getSubSerialNumber())) { continue; } - JSONObject monitorData = bufferService.getMonitorDataIfFresh( - platform.getId(), fieldName, monitor.getSubSerialNumber(), reportIntervalSec); + JSONObject monitorData = bufferService.getMonitorDataIfFresh(platform.getId(), fieldName, monitor.getSubSerialNumber(), reportIntervalSec); if (monitorData == null) { continue; } @@ -379,8 +374,7 @@ public class DcpPlatformAdapter { JSONArray pushBody = buildArrayPushBody(mapping, bodyFields, fieldName, sensorData, monitor.getPlatformDeviceId()); - PlatformPushLog logEntry = createLogEntry(platform, mapping, interfaceCode, - monitor.getSubSerialNumber()); + PlatformPushLog logEntry = createLogEntry(platform, mapping, interfaceCode, monitor.getSubSerialNumber()); doHttpPost(platform, baseUrl, JSON.toJSONString(pushBody), logEntry); pushLogService.asyncSave(logEntry); if (logEntry.getStatus() != null && logEntry.getStatus() == 1) { @@ -1117,8 +1111,7 @@ public class DcpPlatformAdapter { } if (currentIndex == -1) { - log.warn("[DCP] 当前子设备 {} 不在监测点列表中 mappingId={}", - reportSerialNumber, mapping.getId()); + log.warn("[DCP] 当前子设备 {} 不在监测点列表中 mappingId={}", reportSerialNumber, mapping.getId()); return; } @@ -1156,8 +1149,7 @@ public class DcpPlatformAdapter { } String sensorId = resolveSubDeviceSensorId(sub); - JSONObject sensorDataItem = buildArrayItem( - platform, mapping, requestSchema, reportData, fieldName, itemFieldMappings, sensorId); + JSONObject sensorDataItem = buildArrayItem(platform, mapping, requestSchema, reportData, fieldName, itemFieldMappings, sensorId); if (sensorDataItem == null || sensorDataItem.isEmpty()) { log.warn("[DCP] 子设备 {} 数据映射为空,跳过其 sensorData", subSn); continue; 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 3e8311a2..7f302fcd 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 @@ -691,9 +691,8 @@ public class DeviceServiceImpl implements IDeviceService { log.warn("=>查询物模型为空[{}],标识符:[{}]", input.getProductId(), identity); continue; // 跳过当前物模型的处理 } - // 获取设备实时值 - ValueItem cacheIdentifier = itslValueCache.getCacheIdentifier(input.getProductId(), serialNumber, - thingModels.getId()); + // 获取设备上一次缓存值 + ValueItem cacheIdentifier = itslValueCache.getCacheIdentifier(input.getProductId(), serialNumber, thingModels.getId()); if (Objects.isNull(cacheIdentifier)) { log.warn("=>查询物模型值为空[{}],标识符:[{}]", input.getProductId(), identity); } @@ -720,8 +719,13 @@ public class DeviceServiceImpl implements IDeviceService { if (refValue != null && !refValue.isEmpty()) { params.put("{" + refIdentifier + "}", refValue); } else { - params.put("{" + refIdentifier + "}", "0"); - log.warn("=>计算公式引用的物模型值不存在[{}],标识符:[{}],使用默认值0", input.getProductId(), refIdentifier); + // 纵向计算物模型 + if (Integer.valueOf(2).equals(thingModels.getIsCalculated())) { + params.put("{" + refIdentifier + "}", cacheIdentifier.getValue()); + } else { + params.put("{" + refIdentifier + "}", "0"); + log.warn("=>计算公式引用的物模型值不存在[{}],标识符:[{}],使用默认值0", input.getProductId(), refIdentifier); + } } } } diff --git a/fastbee-service/fastbee-iot-service/src/main/resources/mapper/iot/ThingsModelMapper.xml b/fastbee-service/fastbee-iot-service/src/main/resources/mapper/iot/ThingsModelMapper.xml index 77f35174..d4a65b40 100644 --- a/fastbee-service/fastbee-iot-service/src/main/resources/mapper/iot/ThingsModelMapper.xml +++ b/fastbee-service/fastbee-iot-service/src/main/resources/mapper/iot/ThingsModelMapper.xml @@ -144,6 +144,12 @@ AND is_calculated = #{isCalculated} + + AND is_calculated IN + + #{item} + + model_id IN diff --git a/yack-web/.env.development b/yack-web/.env.development index a4dcd513..dcc498e9 100644 --- a/yack-web/.env.development +++ b/yack-web/.env.development @@ -12,7 +12,7 @@ VUE_APP_BASE_API = /dev-api VUE_APP_SERVER_API_URL = http://localhost:8080 # MQTT WebSocket 服务器地址 -VUE_APP_MQTT_SERVER_URL = ws://localhost:8083/mqtt +VUE_APP_MQTT_SERVER_URL = ws://47.121.180.229:8083/mqtt # 百度地图 API Key VUE_APP_BAI_DU_AK = s9mUXN9a7bKgVu6U6Z3bXhKSxtz97YPI diff --git a/yack-web/src/views/iot/device/device-things-model.vue b/yack-web/src/views/iot/device/device-things-model.vue index 663753e6..a2e5c7d9 100644 --- a/yack-web/src/views/iot/device/device-things-model.vue +++ b/yack-web/src/views/iot/device/device-things-model.vue @@ -21,6 +21,13 @@ + + +