diff --git a/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataMeasureServiceImpl.java b/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataMeasureServiceImpl.java index 30e35d3..06596b6 100644 --- a/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataMeasureServiceImpl.java +++ b/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataMeasureServiceImpl.java @@ -145,9 +145,11 @@ public class DeviceDataMeasureServiceImpl implements DeviceDataMeasureService { if (Constants.DEVICE_TYPE_TEMPERATURE_HUMIDITY.contains(data.getCategoryId())){ // 根据 attrCode 排序,temperature 排在前,humidity 排在后 sortedRealtime = realtime.stream() - .sorted(Comparator.comparing(measure -> - DeviceAttrCode.MEASURE_TEMPERATURE.equals(measure.getAttrCode()) ? 0 : - DeviceAttrCode.MEASURE_HUMIDITY.equals(measure.getAttrCode()) ? 2 : 1)) // temperature > others > humidity + .sorted(Comparator.comparingInt(m -> { + if (DeviceAttrCode.MEASURE_TEMPERATURE.equals(m.getAttrCode())) return 0; + if (DeviceAttrCode.MEASURE_HUMIDITY.equals(m.getAttrCode())) return 1; + return 99; + })) .toList(); } // 获取所有 MeasurementValue 并用逗号连接(不需要日期过滤) diff --git a/dongjian-dashboard-back-util/src/main/java/com/dongjian/dashboard/back/util/CommonUtil.java b/dongjian-dashboard-back-util/src/main/java/com/dongjian/dashboard/back/util/CommonUtil.java index ddd3965..2a380a1 100644 --- a/dongjian-dashboard-back-util/src/main/java/com/dongjian/dashboard/back/util/CommonUtil.java +++ b/dongjian-dashboard-back-util/src/main/java/com/dongjian/dashboard/back/util/CommonUtil.java @@ -778,34 +778,73 @@ public class CommonUtil { if (number == null) { return null; } - if (null == scale){ + if (scale == null) { scale = 2; } try { - BigDecimal bd; - - if (number instanceof BigDecimal) { - bd = (BigDecimal) number; - } else if (number instanceof Number) { - // 包含 Double / Integer / Long / double 等 - bd = BigDecimal.valueOf(((Number) number).doubleValue()); - } else if (number instanceof String) { + // String 类型特殊处理(支持逗号分隔) + if (number instanceof String) { String str = ((String) number).trim(); if (str.isEmpty()) { return str; } - bd = new BigDecimal(str); - } else { - // 非法类型,直接返回原值 - return number.toString(); + // 逗号分隔的情况 + if (str.contains(",")) { + String[] parts = str.split(","); + StringBuilder result = new StringBuilder(); + + for (int i = 0; i < parts.length; i++) { + String part = parts[i].trim(); + if (!part.isEmpty()) { + result.append(formatDecimalSingle(part, scale)); + } + if (i < parts.length - 1) { + result.append(","); + } + } + return result.toString(); + } + + // 单个数字字符串 + return formatDecimalSingle(str, scale); + } + + // BigDecimal + if (number instanceof BigDecimal) { + return ((BigDecimal) number) + .setScale(scale, RoundingMode.HALF_UP) + .toPlainString(); + } + + // Number(Double / Integer / Long / double 等) + if (number instanceof Number) { + BigDecimal bd = BigDecimal.valueOf(((Number) number).doubleValue()); + return bd.setScale(scale, RoundingMode.HALF_UP).toPlainString(); } - return bd.setScale(scale, RoundingMode.HALF_UP).toPlainString(); + // 其他类型,直接返回 + return number.toString(); + } catch (Exception e) { logger.error("非法数字格式: {}", number, e); return number.toString(); } } + /** + * 处理单个数字字符串 + */ + private static String formatDecimalSingle(String value, int scale) { + BigDecimal bd = new BigDecimal(value); + return bd.setScale(scale, RoundingMode.HALF_UP).toPlainString(); + } + + + public static void main(String[] args) { + System.out.println(formatDecimal("123.456789", 2)); + System.out.println(formatDecimal(123.456789, 2)); + System.out.println(formatDecimal("123.456,7.898", 2)); + } + }