yuan
3 天以前 7fc5bc0c6f92d65099397690128cbf218935972d
feat: 修改小时同步回看窗口为1小时,并添加天维度汇总功能
已修改4个文件
52 ■■■■■ 文件已修改
src/main/java/com/ruoyi/http/config/TqdianbiaoConfig.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/http/service/impl/StatisticEleServiceImpl.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/http/service/impl/TqdianbiaoEleSyncServiceImpl.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-zqsy.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/http/config/TqdianbiaoConfig.java
@@ -28,7 +28,7 @@
    public static class Sync {
        /** 是否启用定时同步 */
        private Boolean enabled = true;
        /** 小时同步回看窗口(小时数) */
        private Integer hourWindow = 2;
        /** 小时同步回看窗口(完整小时数,不含当前小时) */
        private Integer hourWindow = 1;
    }
}
src/main/java/com/ruoyi/http/service/impl/StatisticEleServiceImpl.java
@@ -24,6 +24,7 @@
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.List;
@@ -84,8 +85,29 @@
            throw new ServiceException("统计维度无效,支持 hour/day/month/quarter/year");
        }
        if ("day".equals(dimension)) {
            return getDayDimensionSummary(startTime, endTime);
        }
        List<StatisticEleRecordVo> detailRecords = aggregateFromHour(dimension, startTime, endTime, true);
        List<StatisticEleRecordVo> chartRecords = aggregateFromHour(dimension, startTime, endTime, false);
        return buildSummary(detailRecords, chartRecords);
    }
    /**
     * 天维度汇总:单日用小时级数据计算均值/极值并展示 24 小时趋势;多日按日桶对比。
     */
    private StatisticEleSummaryVo getDayDimensionSummary(String startTime, String endTime) {
        HourRange range = StatisticEleAggregateUtil.toHourQueryRange("day", startTime, endTime);
        List<StatisticEleRecordVo> hourRecords = queryHourRecords(range.startTime(), range.endTime());
        List<StatisticEleRecordVo> detailRecords = StatisticEleAggregateUtil.aggregateHourPerMeter(
                hourRecords, StatisticEleAggregateUtil.HOUR_TO_DAY);
        boolean singleDay = startTime.equals(endTime);
        List<StatisticEleRecordVo> chartRecords = singleDay
                ? StatisticEleAggregateUtil.aggregateHourToBuckets(hourRecords, StatisticEleAggregateUtil.HOUR_TO_HOUR)
                : StatisticEleAggregateUtil.aggregateHourToBuckets(hourRecords, StatisticEleAggregateUtil.HOUR_TO_DAY);
        return buildSummary(detailRecords, chartRecords);
    }
@@ -106,17 +128,8 @@
    @Override
    public StatisticEleSummaryVo getYesterdaySummary() {
        HourRange range = StatisticEleAggregateUtil.yesterdayHourRange();
        List<StatisticEleRecordVo> records = queryHourRecords(range.startTime(), range.endTime());
        List<StatisticEleRecordVo> chartRecords = StatisticEleAggregateUtil.aggregateHourToBuckets(
                records, StatisticEleAggregateUtil.HOUR_TO_HOUR);
        StatisticEleSummaryVo summary = buildSummary(records, chartRecords);
        summary.setTotalConsumption(round(StatisticEleAggregateUtil.sumRecordsTotal(records)));
        return summary;
    }
    private static double round(double value) {
        return Math.round(value * 100.0) / 100.0;
        String day = LocalDate.now().minusDays(1).format(DateTimeFormatter.ofPattern("yyyyMMdd"));
        return getDayDimensionSummary(day, day);
    }
    @Override
src/main/java/com/ruoyi/http/service/impl/TqdianbiaoEleSyncServiceImpl.java
@@ -37,9 +37,14 @@
    @Override
    public int syncHourData() {
        int window = config.getSync().getHourWindow() != null ? config.getSync().getHourWindow() : 2;
        LocalDateTime end = LocalDateTime.now().withMinute(0).withSecond(0).withNano(0);
        LocalDateTime start = end.minusHours(window);
        int window = config.getSync().getHourWindow() != null ? config.getSync().getHourWindow() : 1;
        if (window < 1) {
            window = 1;
        }
        // 结束于上一完整小时,不包含当前未结束的小时
        LocalDateTime currentHourStart = LocalDateTime.now().withMinute(0).withSecond(0).withNano(0);
        LocalDateTime end = currentHourStart.minusHours(1);
        LocalDateTime start = end.minusHours(window - 1L);
        String startTime = start.format(HOUR_FMT);
        String endTime = end.format(HOUR_FMT);
        return syncDimension("hour", startTime, endTime);
src/main/resources/application-zqsy.yml
@@ -274,4 +274,4 @@
  ignore-radio: 1
  sync:
    enabled: true
    hour-window: 2
    hour-window: 1