diff --git a/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataBaStatusServiceImpl.java b/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataBaStatusServiceImpl.java index 5bb8fcc..243b435 100644 --- a/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataBaStatusServiceImpl.java +++ b/dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataBaStatusServiceImpl.java @@ -234,107 +234,10 @@ public class DeviceDataBaStatusServiceImpl implements DeviceDataBaStatusService lineData.setAttrCode(lineDataSearchParams.getAttrCodeList()[0]); lineData.getYData().put("common", yCommon); - fillToEndOfDay(lineData);//补全24小时的算法 - lineDataList.add(lineData); } return SimpleDataResponse.success(lineDataList); } - public static void fillToEndOfDay(LineData lineData) { - DateTimeFormatter DF = Constants.FORMATTER_YMDHMS; - - List xData = lineData.getXData(); - Map> yData = lineData.getYData(); - - // 至少 1 个点才能补 - if (xData == null || xData.isEmpty()) { - return; - } - - // 最后一个已有时间点 - LocalDateTime lastTime = LocalDateTime.parse( - xData.get(xData.size() - 1), DF - ); - - LocalDate date = lastTime.toLocalDate(); - - // 当天 00:00 - LocalDateTime startOfDay = date.atStartOfDay(); - - // 当天 24:00(次日 00:00) - LocalDateTime endOfDay = date.plusDays(1).atStartOfDay(); - - // 如果已经到 24 点,不补 - if (!lastTime.isBefore(endOfDay)) { - return; - } - - // 已有数据占据的时长(0 点 → 最后一个点) - long existSeconds = Duration.between(startOfDay, lastTime).getSeconds(); - long daySeconds = Duration.between(startOfDay, endOfDay).getSeconds(); // 86400 - - if (existSeconds <= 0 || daySeconds <= 0) { - return; - } - - int existCount = xData.size(); - - // 等比例推算全天应有点数 - double ratio = (double) existSeconds / daySeconds; - int totalCount = (int) Math.ceil(existCount / ratio); - int appendCount = totalCount - existCount; - - if (appendCount <= 0) { - return; - } - - // 防止点数爆炸 - int MAX_APPEND = 300; - appendCount = Math.min(appendCount, MAX_APPEND); - - // 剩余可补时长 - long appendSeconds = Duration.between(lastTime, endOfDay).getSeconds(); - - // 计算步长(兜底) - long stepSeconds = appendSeconds / appendCount; - if (stepSeconds <= 0) { - stepSeconds = appendSeconds; - } - - LocalDateTime cursor = lastTime; - boolean appended = false; - - // 按比例补点 - for (int i = 0; i < appendCount; i++) { - cursor = cursor.plusSeconds(stepSeconds); - - if (!cursor.isBefore(endOfDay)) { - break; - } - - xData.add(cursor.format(DF)); - appended = true; - - for (List series : yData.values()) { - series.add(null); - } - } - - // 保底:如果最后一个点仍然 < 23:59:59,强制补一个 - LocalDateTime finalTime = LocalDateTime.parse( - xData.get(xData.size() - 1), DF - ); - - LocalDateTime lastSecondOfDay = endOfDay.minusSeconds(1); - - if (finalTime.isBefore(lastSecondOfDay)) { - xData.add(lastSecondOfDay.format(DF)); - for (List series : yData.values()) { - series.add(null); - } - } - } - }