Browse Source

图表横坐标补齐

master
review512jwy@163.com 1 month ago
parent
commit
b7e58dd909
  1. 46
      dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/common/LineDataHourAggregator.java
  2. 2
      dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataAccumulateServiceImpl.java
  3. 2
      dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataMeasureServiceImpl.java

46
dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/common/LineDataHourAggregator.java

@ -65,6 +65,52 @@ public class LineDataHourAggregator {
lineData.setYData(newY);
}
/**
* LineData 补齐为日本时区当天 0:00 - 23:30 48 个半小时点
* 没有数据的时间点Y 值补 0
*/
public static void fillTodayHalfHourPointsJST(LineData lineData) {
List<Object> xData = lineData.getXData();
List<Object> yData = lineData.getYData();
if (xData == null || yData == null || xData.size() != yData.size()) {
return;
}
ZoneId JST = ZoneId.of("Asia/Tokyo");
// 现有数据转 Map
Map<String, Double> valueMap = new HashMap<>();
for (int i = 0; i < xData.size(); i++) {
valueMap.put(
String.valueOf(xData.get(i)),
Double.parseDouble(String.valueOf(yData.get(i)))
);
}
// 日本“今天”
LocalDate todayJst = LocalDate.now(JST);
List<Object> newX = new ArrayList<>(48);
List<Object> newY = new ArrayList<>(48);
// 日本当天 00:00
LocalDateTime start = todayJst.atStartOfDay();
for (int i = 0; i < 48; i++) {
LocalDateTime timePoint = start.plusMinutes(i * 30);
String key = timePoint.format(INPUT_FMT);
newX.add(key);
newY.add(valueMap.getOrDefault(key, null));
}
lineData.setXData(newX);
lineData.setYData(newY);
}
/**
* 给计测设备按半小时聚合数据求平均值
* 00~29 HH:00:00

2
dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataAccumulateServiceImpl.java

@ -194,6 +194,8 @@ public class DeviceDataAccumulateServiceImpl implements DeviceDataAccumulateServ
lineDataList.forEach(lineData -> {
//按半小时聚合
LineDataHourAggregator.aggregateLastByHalfHour(lineData);
//补齐48个横坐标
LineDataHourAggregator.fillTodayHalfHourPointsJST(lineData);
});
}
return SimpleDataResponse.success(lineDataList);

2
dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataMeasureServiceImpl.java

@ -241,6 +241,8 @@ public class DeviceDataMeasureServiceImpl implements DeviceDataMeasureService {
lineDataList.forEach(lineData -> {
//按半小时聚合
LineDataHourAggregator.aggregateAverageByHalfHour(lineData);
//补齐48个横坐标
LineDataHourAggregator.fillTodayHalfHourPointsJST(lineData);
});
}
return SimpleDataResponse.success(lineDataList);

Loading…
Cancel
Save