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 a94613c44..43b2a7a98 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 @@ -650,7 +650,7 @@ public class DeviceServiceImpl implements DeviceService { try { Double result = Double.parseDouble(value.toString()); - return (ratio != null && ratio != 0.0) ? result / ratio : result; + return ratio != null ? result * ratio : result; } catch (NumberFormatException e) { return value; // 转换失败返回原值 } diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energydevice/EnergyDeviceServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energydevice/EnergyDeviceServiceImpl.java index c8f3344fb..61dafd327 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energydevice/EnergyDeviceServiceImpl.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/energydevice/EnergyDeviceServiceImpl.java @@ -379,7 +379,7 @@ public class EnergyDeviceServiceImpl implements EnergyDeviceService { // 保留2位小数 BigDecimal bd = new BigDecimal(value.toString()); - Double finalValue = bd.setScale(2, RoundingMode.HALF_UP).doubleValue(); + Double finalValue = adjustByRatio(bd.setScale(2, RoundingMode.HALF_UP).doubleValue(), pointInfo.getRatio()); pointValueMap.put(pointId, finalValue); } catch (Exception e) { log.warn("点位值转换失败, pointId={}, value={}, dataType={}", pointId, value, pointInfo.getDataType(), e); @@ -521,7 +521,7 @@ public class EnergyDeviceServiceImpl implements EnergyDeviceService { if (value != null) { try { BigDecimal bd = new BigDecimal(value.toString()); - pointValueMap.put(pointId, bd.setScale(2, RoundingMode.HALF_UP).doubleValue()); + pointValueMap.put(pointId, adjustByRatio(bd.setScale(2, RoundingMode.HALF_UP).doubleValue(), pointInfo.getRatio())); } catch (Exception e) { log.warn("点位值转换失败, pointId={}, value={}, dataType={}", pointId, value, pointInfo.getDataType(), e); } @@ -726,7 +726,7 @@ public class EnergyDeviceServiceImpl implements EnergyDeviceService { pointInfo.getDataType(), value.toString() ); - Double finalValue = convertToDouble(converted); + Double finalValue = adjustByRatio(convertToDouble(converted), pointInfo.getRatio()); valueMap.put(pointId, finalValue); } catch (Exception e) { log.warn("点位值转换失败, pointId={}, value={}, dataType={}", pointId, value, pointInfo.getDataType(), e); @@ -978,7 +978,7 @@ public class EnergyDeviceServiceImpl implements EnergyDeviceService { continue; } try { - pointValueMap.put(rule.getPointId(), new BigDecimal(value.toString()).setScale(2, RoundingMode.HALF_UP).doubleValue()); + pointValueMap.put(rule.getPointId(), adjustByRatio(new BigDecimal(value.toString()).setScale(2, RoundingMode.HALF_UP).doubleValue(), pointInfo.getRatio())); } catch (Exception e) { log.warn("解析趋势点位值失败, deviceId={}, pointId={}, value={}", deviceId, rule.getPointId(), value, e); } @@ -1151,6 +1151,13 @@ public class EnergyDeviceServiceImpl implements EnergyDeviceService { return vo; } + private Double adjustByRatio(Double value, Double ratio) { + if (value == null) { + return null; + } + return ratio != null ? value * ratio : value; + } + /** 根据规则计算总值 */ private Double calculateByRules( Long energyDeviceId,