|
|
@ -65,6 +65,52 @@ public class LineDataHourAggregator { |
|
|
lineData.setYData(newY); |
|
|
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 |
|
|
* 00~29 分 → HH:00:00 |
|
|
|