jackzhou 5 месяцев назад
Родитель
Сommit
e0005cbbc8

+ 1 - 2
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/alarm/service/check/DefaultSensorAlarmChecker.java

@@ -11,7 +11,6 @@ import vip.xiaonuo.coldchain.core.alarm.config.ColdChainAlarmMessageProperties;
 import vip.xiaonuo.coldchain.core.alarm.service.threshold.SensorThresholdService;
 import vip.xiaonuo.coldchain.core.bean.influxdb.SensorData;
 import vip.xiaonuo.coldchain.core.event.SensorAlarmEvent;
-import vip.xiaonuo.coldchain.core.util.DateFormatter;
 import vip.xiaonuo.coldchain.modular.monitortargetregion.entity.MonitorTargetRegion;
 
 import java.text.SimpleDateFormat;
@@ -97,7 +96,7 @@ public class DefaultSensorAlarmChecker implements SensorAlarmChecker {
         SensorAlarm sensorAlarm = new SensorAlarm();
         sensorAlarm.setAlarmType(alarmType);  // 设置报警类型(例如 温度超标、湿度过低等)
         sensorAlarm.setValue(value);  // 设置传感器值
-        sensorAlarm.setAlarmTime(DateFormatter.now(new Date()));  // 设置单位(例如 °C, %, ppm)
+        sensorAlarm.setAlarmTime(InfluxDBDateFormatter.now(new Date()));  // 设置单位(例如 °C, %, ppm)
         sensorAlarm.setSource(deviceName);  // 设置设备名称
         sensorAlarm.setDeviceName(deviceName);  // 设置设备名称
         sensorAlarm.setDeviceId(deviceId);  // 设置设备名称

+ 6 - 6
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/JfcloudSensorDataService.java

@@ -1,15 +1,15 @@
 package vip.xiaonuo.coldchain.core.service;
 
 import com.github.jfcloud.influxdb.config.JfcloudInfluxDB2Properties;
+import com.github.jfcloud.influxdb.flux.AggregationWindow;
 import com.github.jfcloud.influxdb.flux.JfcloudFluxDataService;
 import com.github.jfcloud.influxdb.service.JfcloudInfluxDBService;
+import com.github.jfcloud.influxdb.util.InfluxDBDateFormatter;
 import com.influxdb.client.QueryApi;
 import com.influxdb.query.FluxTable;
 import org.springframework.stereotype.Service;
 import org.springframework.util.Assert;
 import vip.xiaonuo.coldchain.core.bean.influxdb.SensorData;
-import vip.xiaonuo.coldchain.core.util.DateFormatter;
-import vip.xiaonuo.coldchain.modular.app.param.AggregationWindow;
 
 import java.time.Instant;
 import java.time.LocalDateTime;
@@ -75,8 +75,8 @@ public class JfcloudSensorDataService extends JfcloudFluxDataService<SensorData>
 //        Assert.notNull(endTimeStr, "endTime cannot be null");
 //        Assert.notNull(field, "field cannot be null");
 //        //替换起始时间和结束时间2024/09/09 这种格式为2024-09-09
-//        startTimeStr = DateFormatter.replaceDateFormat(startTimeStr);
-//        endTimeStr = DateFormatter.replaceDateFormat(endTimeStr);
+//        startTimeStr = InfluxDBDateFormatter.replaceDateFormat(startTimeStr);
+//        endTimeStr = InfluxDBDateFormatter.replaceDateFormat(endTimeStr);
 //        // 如果只有日期部分,则手动补充时间部分(00:00:00)
 //        if (startTimeStr.length() == 10) {
 //            startTimeStr += " 00:00:00";
@@ -106,8 +106,8 @@ public class JfcloudSensorDataService extends JfcloudFluxDataService<SensorData>
         Assert.notNull(field, "field cannot be null");
 
         // 替换日期格式,确保格式一致
-        startTimeStr = DateFormatter.replaceDateFormat(startTimeStr);
-        endTimeStr = DateFormatter.replaceDateFormat(endTimeStr);
+        startTimeStr = InfluxDBDateFormatter.replaceDateFormat(startTimeStr);
+        endTimeStr = InfluxDBDateFormatter.replaceDateFormat(endTimeStr);
 
         // 如果只有日期部分,补充时间部分为00:00:00和23:59:59
         if (startTimeStr.length() == 10) {

+ 1 - 2
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/dataclean/impl/AbsRenkeMonitorDataProcessor.java

@@ -15,7 +15,6 @@ import vip.xiaonuo.coldchain.core.event.MonitorDeviceLoginEvent;
 import vip.xiaonuo.coldchain.core.event.SensorDataEvent;
 import vip.xiaonuo.coldchain.core.service.dataprocess.dataclean.MonitorDataProcessor;
 import vip.xiaonuo.coldchain.core.service.dataprocess.model.RenKeColdChainMessageData;
-import vip.xiaonuo.coldchain.core.util.DateFormatter;
 import vip.xiaonuo.coldchain.modular.monitordevice.enums.DeviceModelEnum;
 
 import java.time.Instant;
@@ -137,7 +136,7 @@ public abstract class AbsRenkeMonitorDataProcessor implements MonitorDataProcess
                 sensorData.setDeviceId(String.valueOf(deviceId));
                 sensorData.setRoads(nodeId);
                 sensorData.setModelName(modelName);
-                sensorData.setCreateTime(DateFormatter.now(recordTime));
+                sensorData.setCreateTime(InfluxDBDateFormatter.now(recordTime));
                 sensorData.setTemperature(floatValue(nodeData.getTem()));
                 sensorData.setHumidity(floatValue(nodeData.getHum()));
                 sensorData.setTime(recordTime.toInstant());

+ 0 - 237
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/util/DateFormatter.java

@@ -1,237 +0,0 @@
-package vip.xiaonuo.coldchain.core.util;
-
-/**
- * @author jackzhou
- * @version 1.0
- * @project jfcloud-coldchain
- * @description
- * @date 2024/11/22 14:50:28
- */
-
-import vip.xiaonuo.coldchain.modular.app.param.AggregationWindow;
-
-import java.text.SimpleDateFormat;
-import java.time.Instant;
-import java.time.LocalDateTime;
-import java.time.ZoneId;
-import java.time.ZonedDateTime;
-import java.time.format.DateTimeFormatter;
-import java.time.temporal.ChronoUnit;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Locale;
-
-public class DateFormatter {
-
-    // 批量格式化多个 Date 对象的方法
-    public List<String> getFormattedLastUpdated(List<Date> dateList) {
-        List<String> formattedDates = new ArrayList<>();
-        for (Date lastUpdated : dateList) {
-            // 如果 lastUpdated 为 null,返回默认值
-            if (lastUpdated == null) {
-                formattedDates.add("");  // 可以返回适当的默认值
-                continue;
-            }
-            // 将 Date 转换为 LocalDateTime
-            LocalDateTime lastUpdatedLocal = lastUpdated.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
-
-            // 获取当前时间
-            LocalDateTime now = LocalDateTime.now();
-
-            // 计算两个日期的差值(以天为单位)
-            long daysDiff = ChronoUnit.DAYS.between(lastUpdatedLocal, now);
-
-            // 根据日期差异来格式化输出
-            if (daysDiff <= 7) {
-                // 使用 Locale.CHINESE 进行格式化,显示中文星期几
-                DateTimeFormatter dayFormatter = DateTimeFormatter.ofPattern("EEEE", Locale.SIMPLIFIED_CHINESE);
-                formattedDates.add(lastUpdatedLocal.format(dayFormatter));  // 返回中文星期几
-            } else {
-                // 超过 7 天,显示完整的日期时间格式
-                DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-                formattedDates.add(lastUpdatedLocal.format(formatter));  // 返回完整的日期时间
-            }
-        }
-
-        return formattedDates;
-    }
-
-    // 单个 Date 格式化的方法
-    public String getFormattedSingleDate(Date lastUpdated) {
-        // 如果 lastUpdated 为 null,返回默认值
-        if (lastUpdated == null) {
-            return "";
-        }
-        // 将 Date 转换为 LocalDateTime
-        LocalDateTime lastUpdatedLocal = lastUpdated.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
-        // 获取当前时间
-        LocalDateTime now = LocalDateTime.now();
-        // 计算两个日期的差值(以天为单位)
-        long daysDiff = ChronoUnit.DAYS.between(lastUpdatedLocal, now);
-        // 根据日期差异来格式化输出
-        if (daysDiff <= 7) {
-            // 使用 Locale.CHINESE 进行格式化,显示中文星期几
-            DateTimeFormatter dayFormatter = DateTimeFormatter.ofPattern("EEEE", Locale.SIMPLIFIED_CHINESE);
-            return lastUpdatedLocal.format(dayFormatter);  // 返回中文星期几
-        } else {
-            // 超过 7 天,显示完整的日期时间格式
-            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-            return lastUpdatedLocal.format(formatter);  // 返回完整的日期时间
-        }
-    }
-
-    public static String getFormattedSingleDate(Instant lastUpdated) {
-        // 如果 lastUpdated 为 null,返回默认值
-        if (lastUpdated == null) {
-            return "";
-        }
-        // 将 Instant 转换为 LocalDateTime
-        LocalDateTime lastUpdatedLocal = LocalDateTime.ofInstant(lastUpdated, ZoneId.systemDefault());
-        // 获取当前时间
-        LocalDateTime now = LocalDateTime.now();
-        // 计算两个日期的差值(以天为单位)
-        long daysDiff = ChronoUnit.DAYS.between(lastUpdatedLocal, now);
-        // 根据日期差异来格式化输出
-        if (daysDiff <= 7) {
-            // 使用 Locale.CHINESE 进行格式化,显示中文星期几
-            DateTimeFormatter dayFormatter = DateTimeFormatter.ofPattern("EEEE", Locale.SIMPLIFIED_CHINESE);
-            return lastUpdatedLocal.format(dayFormatter);  // 返回中文星期几
-        } else {
-            // 超过 7 天,显示完整的日期时间格式
-            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-            return lastUpdatedLocal.format(formatter);  // 返回完整的日期时间
-        }
-    }
-
-    // 格式化 Date 类型
-    public static String formatTime(Date date, AggregationWindow aggregationWindow) {
-        if (date == null || aggregationWindow == null) {
-            throw new IllegalArgumentException("日期时间和聚合窗口不能为空");
-        }
-        Instant instant = date.toInstant();
-        LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
-        return formatTime(localDateTime, aggregationWindow);
-    }
-
-    // 格式化 String 类型,增加了 dateFormat 参数
-    public static String formatTime(String dateTimeStr, AggregationWindow aggregationWindow, String dateFormat) {
-        if (dateTimeStr == null || aggregationWindow == null) {
-            throw new IllegalArgumentException("日期时间和聚合窗口不能为空");
-        }
-        if (dateFormat == null) {
-            dateFormat = DateTimeFormatter.ISO_LOCAL_DATE_TIME.toString();  // 默认使用 ISO 格式
-        }
-
-        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(dateFormat);
-        LocalDateTime localDateTime = LocalDateTime.parse(dateTimeStr, formatter);
-        return formatTime(localDateTime, aggregationWindow);
-    }
-
-    // 格式化 Instant 类型
-    public static String formatTime(Instant instant, AggregationWindow aggregationWindow) {
-        if (instant == null || aggregationWindow == null) {
-            throw new IllegalArgumentException("日期时间和聚合窗口不能为空");
-        }
-        LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
-        return formatTime(localDateTime, aggregationWindow);
-    }
-
-    // 格式化 LocalDateTime 类型
-    public static String formatTime(LocalDateTime localDateTime, AggregationWindow aggregationWindow) {
-        if (localDateTime == null || aggregationWindow == null) {
-            throw new IllegalArgumentException("日期时间和聚合窗口不能为空");
-        }
-
-        // 定义日期时间格式
-        String pattern;
-        switch (aggregationWindow) {
-            case MINUTE:
-                pattern = "yyyy-MM-dd HH:mm"; // 精确到分钟
-                break;
-            case HOUR:
-                pattern = "yyyy-MM-dd HH"; // 精确到小时
-                break;
-            case HALF_DAY:
-                pattern = "yyyy-MM-dd a"; // 精确到上午/下午
-                break;
-            case DAY:
-                pattern = "yyyy-MM-dd"; // 精确到天
-                break;
-            case WEEK:
-                pattern = "yyyy年 第w周"; // 中文自然周
-                break;
-            case MONTH:
-                pattern = "yyyy年MM月"; // 精确到月
-                break;
-            case QUARTER:
-                // 计算季度:将月份(1-12)映射为中文的"第一季度"至"第四季度"
-                int month = localDateTime.getMonthValue();
-                String quarter = "第" + ((month - 1) / 3 + 1) + "季度";
-                return localDateTime.getYear() + "年" + quarter; // 格式如 "2024年第一季度"
-            case YEAR:
-                pattern = "yyyy年"; // 精确到年
-                break;
-            default:
-                pattern = "yyyy-MM-dd"; // 默认精确到天
-                break;
-        }
-        // 返回格式化的日期时间
-        return localDateTime.format(DateTimeFormatter.ofPattern(pattern));
-    }
-
-    public static String convertToUTCPlus8(String time) {
-        // 1. 解析时间为 Instant (UTC)
-        Instant instant = Instant.parse(time); // time 需要是 ISO 8601 格式,例如 "2024-11-25T07:42:48.861094300Z"
-        // 2. 将 Instant 转换为 UTC+8 (Asia/Shanghai)
-        ZonedDateTime utcPlus8Time = instant.atZone(ZoneId.of("Asia/Shanghai"));
-        // 3. 格式化为所需的字符串输出
-        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
-        return formatter.format(utcPlus8Time);
-    }
-
-
-    public static String instantToUTC8String(Instant instant) {
-        // 1. 将 Instant 转换为指定时区的 ZonedDateTime
-        ZonedDateTime zonedDateTime = instant.atZone(ZoneId.of("Asia/Shanghai"));
-        // 2. 格式化为目标格式
-        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-        // 3. 返回格式化后的时间字符串
-        return formatter.format(zonedDateTime);
-    }
-
-    public static String now(Date instant) {
-        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        // 3. 返回格式化后的时间字符串
-        return formatter.format(instant);
-    }
-
-    public static String replaceDateFormat(String input) {
-        if (input == null || input.isEmpty()) {
-            return input;
-        }
-        // 将"YYYY/MM/DD"替换为"YYYY-MM-DD"
-        return input.trim().replaceAll("(\\d{4})/(\\d{2})/(\\d{2})", "$1-$2-$3");
-    }
-
-//    public static void main(String[] args) {
-//        // 示例:传入 Date 类型
-//        Date now = new Date();
-//        System.out.println(DateFormatter.formatTime(now, AggregationWindow.DAY));  // 2024-12-10
-//
-//        // 示例:传入 String 类型并指定日期格式
-//        String dateStr = "12-10-2024 10:30";
-//        String dateFormat = "MM-dd-yyyy HH:mm"; // 指定自定义的日期格式
-//        System.out.println(DateFormatter.formatTime(dateStr, AggregationWindow.HOUR, dateFormat));  // 2024-12-10 10
-//
-//        // 示例:传入 Instant 类型
-//        Instant instantNow = Instant.now();
-//        System.out.println(DateFormatter.formatTime(instantNow, AggregationWindow.QUARTER));  // 2024年第四季度
-//
-//        // 示例:传入 LocalDateTime 类型
-//        LocalDateTime localDateTimeNow = LocalDateTime.now();
-//        System.out.println(DateFormatter.formatTime(localDateTimeNow, AggregationWindow.MONTH));  // 2024年12月
-//    }
-
-}
-

+ 0 - 137
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/app/param/AggregationWindow.java

@@ -1,137 +0,0 @@
-package vip.xiaonuo.coldchain.modular.app.param;
-
-import cn.hutool.core.util.StrUtil;
-import vip.xiaonuo.coldchain.core.util.DateFormatter;
-
-import java.time.Duration;
-import java.time.Instant;
-import java.time.LocalDate;
-import java.time.ZoneId;
-import java.time.format.DateTimeParseException;
-
-/**
- * 聚合窗口枚举类,定义不同的时间维度聚合规则
- * <p>
- * 聚合窗口包括分钟、小时、半天、天、自然周、月度、季度、年度等
- * </p>
- *
- * @author jackzhou
- * @version 1.2
- * @project jfcloud-coldchain
- * @description 提供聚合窗口相关的枚举值和计算逻辑
- * @date 2024/12/10 15:31:56
- */
-public enum AggregationWindow {
-
-    MINUTE("1m", "分钟"),
-    HOUR("1h", "小时"),
-    HALF_DAY("12h", "半天"),
-    DAY("1d", "天"),
-    WEEK("1w", "自然周"),
-    MONTH("1mo", "月度"),
-    QUARTER("3mo", "季度"), // 新增季度聚合窗口
-    YEAR("1y", "年度"),
-    DEFAULT("1d", "天");
-
-    private final String code;
-    private final String description;
-
-    /**
-     * 构造函数
-     *
-     * @param code        聚合窗口代码
-     * @param description 聚合窗口描述
-     */
-    AggregationWindow(String code, String description) {
-        this.code = code;
-        this.description = description;
-    }
-
-    /**
-     * 获取聚合窗口的代码
-     *
-     * @return 窗口代码
-     */
-    public String getCode() {
-        return code;
-    }
-
-    /**
-     * 获取聚合窗口的描述
-     *
-     * @return 窗口描述
-     */
-    public String getDescription() {
-        return description;
-    }
-
-    /**
-     * 根据代码获取对应的聚合窗口
-     *
-     * @param window 聚合窗口代码
-     * @return 匹配的聚合窗口,如果无匹配返回 DEFAULT
-     */
-    public static AggregationWindow fromString(String window) {
-        if (StrUtil.isBlank(window)) {
-            return DEFAULT;
-        }
-        for (AggregationWindow aggregationWindow : AggregationWindow.values()) {
-            if (aggregationWindow.code.equals(window)) {
-                return aggregationWindow;
-            }
-        }
-        return DEFAULT;
-    }
-
-    /**
-     * 根据时间范围自动计算推荐的聚合窗口
-     *
-     * @param startTime 起始时间(支持 yyyy-MM-dd 格式)
-     * @param stopTime  结束时间(支持 yyyy-MM-dd 格式)
-     * @return 推荐的聚合窗口
-     */
-    public static AggregationWindow determineAggregationWindow(String startTime, String stopTime) {
-        // 检查输入时间是否为空
-        if (StrUtil.isBlank(startTime) || StrUtil.isBlank(stopTime)) {
-            return DEFAULT;
-        }
-
-        try {
-            // 替换日期格式以支持多种输入格式
-            startTime = DateFormatter.replaceDateFormat(startTime);
-            stopTime = DateFormatter.replaceDateFormat(stopTime);
-
-            // 解析时间字符串为 LocalDate,并转为 Instant
-            LocalDate startDate = LocalDate.parse(startTime);
-            LocalDate stopDate = LocalDate.parse(stopTime);
-            Instant start = startDate.atStartOfDay(ZoneId.systemDefault()).toInstant();
-            Instant stop = stopDate.atStartOfDay(ZoneId.systemDefault()).toInstant();
-
-            // 计算时间差
-            Duration duration = Duration.between(start, stop);
-            long days = duration.toDays();
-
-            // 根据时间范围选择适当的聚合窗口
-            if (days >= 365) {
-                return YEAR; // 超过一年,按年度聚合
-            } else if (days >= 90) {
-                return QUARTER; // 超过90天,按季度聚合
-            } else if (days >= 30) {
-                return MONTH; // 超过30天,按月度聚合
-            } else if (days >= 7) {
-                return WEEK; // 超过7天,按自然周聚合
-            } else if (days >= 1) {
-                return DAY; // 超过1天,按天聚合
-            } else if (duration.toHours() >= 12) {
-                return HALF_DAY; // 超过半天,按半天聚合
-            } else if (duration.toHours() >= 1) {
-                return HOUR; // 超过1小时,按小时聚合
-            } else {
-                return MINUTE; // 默认按分钟聚合
-            }
-        } catch (DateTimeParseException e) {
-            // 如果解析时间失败,返回默认聚合窗口
-            return DEFAULT;
-        }
-    }
-}

+ 6 - 5
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/app/param/SensorDataTransformer.java

@@ -1,8 +1,9 @@
 package vip.xiaonuo.coldchain.modular.app.param;
 
+import com.github.jfcloud.influxdb.flux.AggregationWindow;
+import com.github.jfcloud.influxdb.util.InfluxDBDateFormatter;
 import lombok.experimental.UtilityClass;
 import vip.xiaonuo.coldchain.core.bean.influxdb.SensorData;
-import vip.xiaonuo.coldchain.core.util.DateFormatter;
 
 import java.util.ArrayList;
 import java.util.Comparator;
@@ -20,7 +21,7 @@ public class SensorDataTransformer {
 //        List<Map<String, Object>> temperatureData = sortedData.stream().filter(data -> data.getTemperature() != null) // 过滤掉没有温度值的数据
 //                .map(data -> {
 //                    Map<String, Object> timeTemperatureMap = new HashMap<>();
-//                    timeTemperatureMap.put("time", DateFormatter.instantToUTC8String(data.getTime()));  // 时间
+//                    timeTemperatureMap.put("time", InfluxDBDateFormatter.instantToUTC8String(data.getTime()));  // 时间
 //                    timeTemperatureMap.put("temperature", data.getTemperature());  // 温度
 //                    return timeTemperatureMap;
 //                }).collect(Collectors.toList());
@@ -29,7 +30,7 @@ public class SensorDataTransformer {
 //        List<Map<String, Object>> humidityData = sortedData.stream().filter(data -> data.getHumidity() != null) // 过滤掉没有湿度值的数据
 //                .map(data -> {
 //                    Map<String, Object> timeHumidityMap = new HashMap<>();
-//                    timeHumidityMap.put("time", DateFormatter.instantToUTC8String(data.getTime()));  // 时间
+//                    timeHumidityMap.put("time", InfluxDBDateFormatter.instantToUTC8String(data.getTime()));  // 时间
 //                    timeHumidityMap.put("humidity", data.getHumidity());  // 湿度
 //                    return timeHumidityMap;
 //                }).collect(Collectors.toList());
@@ -38,7 +39,7 @@ public class SensorDataTransformer {
 //        List<Map<String, Object>> co2Data = sortedData.stream().filter(data -> data.getCo2() != null) // 过滤掉没有二氧化碳值的数据
 //                .map(data -> {
 //                    Map<String, Object> timeCo2Map = new HashMap<>();
-//                    timeCo2Map.put("time", DateFormatter.instantToUTC8String(data.getTime()));  // 时间
+//                    timeCo2Map.put("time", InfluxDBDateFormatter.instantToUTC8String(data.getTime()));  // 时间
 //                    timeCo2Map.put("co2", data.getCo2());  // 二氧化碳
 //                    return timeCo2Map;
 //                }).collect(Collectors.toList());
@@ -66,7 +67,7 @@ public class SensorDataTransformer {
         List<String> times = new ArrayList<>();
         List<Float> values = new ArrayList<>();
         sortedData.stream().filter(data -> isValidData(data, dataType)).forEach(data -> {
-            times.add(DateFormatter.formatTime(data.getTime(), window)); // 时间格式化
+            times.add(InfluxDBDateFormatter.formatTime(data.getTime(), window)); // 时间格式化
             values.add(SensorDataTransformer.formatFloat(getDataValue(data, dataType)));                 // 数值格式化
         });
         return new SensorEchartData(times, values);

+ 1 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/service/MonitorDeviceService.java

@@ -14,11 +14,11 @@ package vip.xiaonuo.coldchain.modular.monitordevice.service;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.github.jfcloud.influxdb.flux.AggregationWindow;
 import com.github.jfcloud.influxdb.flux.QueryCondition;
 import rk.netDevice.sdk.p2.ParamData;
 import rk.netDevice.sdk.p2.ParamIdsData;
 import vip.xiaonuo.coldchain.core.bean.influxdb.SensorData;
-import vip.xiaonuo.coldchain.modular.app.param.AggregationWindow;
 import vip.xiaonuo.coldchain.modular.monitordevice.entity.MonitorDevice;
 import vip.xiaonuo.coldchain.modular.monitordevice.param.MonitorDeviceAddParam;
 import vip.xiaonuo.coldchain.modular.monitordevice.param.MonitorDeviceEditParam;

+ 1 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/service/impl/MonitorDeviceServiceImpl.java

@@ -20,6 +20,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.jfcloud.influxdb.flux.AggregationWindow;
 import com.github.jfcloud.influxdb.flux.QueryCondition;
 import jakarta.annotation.Resource;
 import lombok.RequiredArgsConstructor;
@@ -34,7 +35,6 @@ import vip.xiaonuo.coldchain.core.bean.influxdb.SensorData;
 import vip.xiaonuo.coldchain.core.cache.monitordevice.MonitorDeviceCache;
 import vip.xiaonuo.coldchain.core.renke.RenKeService;
 import vip.xiaonuo.coldchain.core.service.JfcloudSensorDataService;
-import vip.xiaonuo.coldchain.modular.app.param.AggregationWindow;
 import vip.xiaonuo.coldchain.modular.monitordevice.entity.MonitorDevice;
 import vip.xiaonuo.coldchain.modular.monitordevice.enums.MonitorDeviceStatusEnum;
 import vip.xiaonuo.coldchain.modular.monitordevice.mapper.MonitorDeviceMapper;