Browse Source

代码完善

master
review512jwy@163.com 3 days ago
parent
commit
3215443cfc
  1. 8
      dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataMeasureServiceImpl.java
  2. 67
      dongjian-dashboard-back-util/src/main/java/com/dongjian/dashboard/back/util/CommonUtil.java

8
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())){ if (Constants.DEVICE_TYPE_TEMPERATURE_HUMIDITY.contains(data.getCategoryId())){
// 根据 attrCode 排序,temperature 排在前,humidity 排在后 // 根据 attrCode 排序,temperature 排在前,humidity 排在后
sortedRealtime = realtime.stream() sortedRealtime = realtime.stream()
.sorted(Comparator.comparing(measure -> .sorted(Comparator.comparingInt(m -> {
DeviceAttrCode.MEASURE_TEMPERATURE.equals(measure.getAttrCode()) ? 0 : if (DeviceAttrCode.MEASURE_TEMPERATURE.equals(m.getAttrCode())) return 0;
DeviceAttrCode.MEASURE_HUMIDITY.equals(measure.getAttrCode()) ? 2 : 1)) // temperature > others > humidity if (DeviceAttrCode.MEASURE_HUMIDITY.equals(m.getAttrCode())) return 1;
return 99;
}))
.toList(); .toList();
} }
// 获取所有 MeasurementValue 并用逗号连接(不需要日期过滤) // 获取所有 MeasurementValue 并用逗号连接(不需要日期过滤)

67
dongjian-dashboard-back-util/src/main/java/com/dongjian/dashboard/back/util/CommonUtil.java

@ -778,34 +778,73 @@ public class CommonUtil {
if (number == null) { if (number == null) {
return null; return null;
} }
if (null == scale){ if (scale == null) {
scale = 2; scale = 2;
} }
try { try {
BigDecimal bd; // String 类型特殊处理(支持逗号分隔)
if (number instanceof String) {
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 str = ((String) number).trim(); String str = ((String) number).trim();
if (str.isEmpty()) { if (str.isEmpty()) {
return str; return str;
} }
bd = new BigDecimal(str); // 逗号分隔的情况
} else { if (str.contains(",")) {
// 非法类型,直接返回原值 String[] parts = str.split(",");
return number.toString(); 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) { } catch (Exception e) {
logger.error("非法数字格式: {}", number, e); logger.error("非法数字格式: {}", number, e);
return number.toString(); 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));
}
} }

Loading…
Cancel
Save