diff --git a/ems-system/src/main/java/com/xzzn/ems/service/impl/GeneralQueryServiceImpl.java b/ems-system/src/main/java/com/xzzn/ems/service/impl/GeneralQueryServiceImpl.java index d424da4..c8b53ab 100644 --- a/ems-system/src/main/java/com/xzzn/ems/service/impl/GeneralQueryServiceImpl.java +++ b/ems-system/src/main/java/com/xzzn/ems/service/impl/GeneralQueryServiceImpl.java @@ -271,7 +271,7 @@ public class GeneralQueryServiceImpl implements IGeneralQueryService private Stats clacStats(List deviceDataList) { // 提取有效数值(过滤null) List values = deviceDataList.stream() - .map(vo -> (BigDecimal) vo.getPointValue()) + .map(vo -> convertToBigDecimal(vo.getPointValue())) .filter(value -> value != null) // 过滤null值 .collect(Collectors.toList()); if (values.isEmpty()) { @@ -290,6 +290,27 @@ public class GeneralQueryServiceImpl implements IGeneralQueryService return new Stats(maxValue,minValue,avgValue,diff); } + private BigDecimal convertToBigDecimal(Object pointValue) { + if (pointValue == null) { + return null; + } + // 根据实际存储的数值类型,依次判断并转换 + if (pointValue instanceof BigDecimal) { + return (BigDecimal) pointValue; + } else if (pointValue instanceof Integer) { + return new BigDecimal ((Integer) pointValue); + } else if (pointValue instanceof Long) { + return new BigDecimal ((Long) pointValue); + } else if (pointValue instanceof Double) { + return BigDecimal.valueOf ((Double) pointValue); // 避免 Double 精度丢失 + } else if (pointValue instanceof Float) { + return BigDecimal.valueOf ((Float) pointValue); + } else { + // 非数值类型(如 String),可根据业务需求处理(此处返回 null) + return null; + } + } + private void dealDataTime(PointNameRequest request) { String startDate = request.getStartDate(); String endDate = request.getEndDate(); @@ -354,7 +375,7 @@ public class GeneralQueryServiceImpl implements IGeneralQueryService data.setValueDate(minute); data.setSiteId(siteId); data.setDeviceId(deviceId); - data.setPointValue(lastValue==null? 0 : lastValue); // 用上一分钟值填充 + data.setPointValue(lastValue==null? BigDecimal.ZERO : lastValue); // 用上一分钟值填充 } else { lastValue = data.getPointValue(); // 更新最新值 }