diff --git a/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/common/LineDataHourAggregator.java b/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/common/LineDataHourAggregator.java index 04e96f6..7cff13b 100644 --- a/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/common/LineDataHourAggregator.java +++ b/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 xData = lineData.getXData(); + List yData = lineData.getYData(); + + if (xData == null || yData == null || xData.size() != yData.size()) { + return; + } + + ZoneId JST = ZoneId.of("Asia/Tokyo"); + + // 现有数据转 Map + Map 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 newX = new ArrayList<>(48); + List 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 diff --git a/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataAccumulateServiceImpl.java b/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataAccumulateServiceImpl.java index 5218de3..0070ae5 100644 --- a/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataAccumulateServiceImpl.java +++ b/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); 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 ba06465..32f6b99 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 @@ -241,6 +241,8 @@ public class DeviceDataMeasureServiceImpl implements DeviceDataMeasureService { lineDataList.forEach(lineData -> { //按半小时聚合 LineDataHourAggregator.aggregateAverageByHalfHour(lineData); + //补齐48个横坐标 + LineDataHourAggregator.fillTodayHalfHourPointsJST(lineData); }); } return SimpleDataResponse.success(lineDataList);