From 71412f5ac45eda3d71f13eb44855343eeccc4ee2 Mon Sep 17 00:00:00 2001 From: zms Date: Wed, 21 May 2025 10:54:40 +0800 Subject: [PATCH] =?UTF-8?q?ZTD=E5=87=BA=E7=8E=B0=E4=B8=A4=E5=B0=8F?= =?UTF-8?q?=E6=97=B6=E7=9A=84=E5=91=A8=E6=9C=9F=EF=BC=8C=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=9B=9B=E5=B0=8F=E6=97=B6=E7=9A=84=E6=BB=A4=E6=B3=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/rtklib/entity/RtkDataAverage.java | 35 ++++++++ .../repository/RtkDataAverageRepository.java | 9 +++ .../rtklib/repository/RtkDataRepository.java | 3 + .../rtklib/service/RtkDataAverageService.java | 80 +++++++++++++++++++ 4 files changed, 127 insertions(+) create mode 100644 ntrip_load-main/src/main/java/com/rtklib/entity/RtkDataAverage.java create mode 100644 ntrip_load-main/src/main/java/com/rtklib/repository/RtkDataAverageRepository.java create mode 100644 ntrip_load-main/src/main/java/com/rtklib/service/RtkDataAverageService.java diff --git a/ntrip_load-main/src/main/java/com/rtklib/entity/RtkDataAverage.java b/ntrip_load-main/src/main/java/com/rtklib/entity/RtkDataAverage.java new file mode 100644 index 0000000..3e847dc --- /dev/null +++ b/ntrip_load-main/src/main/java/com/rtklib/entity/RtkDataAverage.java @@ -0,0 +1,35 @@ + package com.rtklib.entity; + +import lombok.Data; +import jakarta.persistence.*; +import java.time.LocalDateTime; + +@Data +@Entity +@Table(name = "rtk_data_average") +public class RtkDataAverage { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "start_time") + private LocalDateTime startTime; + + @Column(name = "end_time") + private LocalDateTime endTime; + + @Column(name = "average_latitude") + private Double averageLatitude; + + @Column(name = "average_longitude") + private Double averageLongitude; + + @Column(name = "average_height") + private Double averageHeight; + + @Column(name = "average_ztd") + private Double averageZtd; + + @Column(name = "device_id") + private String deviceId; +} \ No newline at end of file diff --git a/ntrip_load-main/src/main/java/com/rtklib/repository/RtkDataAverageRepository.java b/ntrip_load-main/src/main/java/com/rtklib/repository/RtkDataAverageRepository.java new file mode 100644 index 0000000..2e63118 --- /dev/null +++ b/ntrip_load-main/src/main/java/com/rtklib/repository/RtkDataAverageRepository.java @@ -0,0 +1,9 @@ + package com.rtklib.repository; + +import com.rtklib.entity.RtkDataAverage; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface RtkDataAverageRepository extends JpaRepository { +} \ No newline at end of file diff --git a/ntrip_load-main/src/main/java/com/rtklib/repository/RtkDataRepository.java b/ntrip_load-main/src/main/java/com/rtklib/repository/RtkDataRepository.java index b06502d..7aa24ba 100644 --- a/ntrip_load-main/src/main/java/com/rtklib/repository/RtkDataRepository.java +++ b/ntrip_load-main/src/main/java/com/rtklib/repository/RtkDataRepository.java @@ -3,7 +3,10 @@ package com.rtklib.repository; import com.rtklib.entity.RtkData; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.time.LocalDateTime; +import java.util.List; @Repository public interface RtkDataRepository extends JpaRepository { + List findByTimestampBetween(LocalDateTime startTime, LocalDateTime endTime); } \ No newline at end of file diff --git a/ntrip_load-main/src/main/java/com/rtklib/service/RtkDataAverageService.java b/ntrip_load-main/src/main/java/com/rtklib/service/RtkDataAverageService.java new file mode 100644 index 0000000..f5dfd9b --- /dev/null +++ b/ntrip_load-main/src/main/java/com/rtklib/service/RtkDataAverageService.java @@ -0,0 +1,80 @@ +package com.rtklib.service; + +import com.rtklib.entity.RtkData; +import com.rtklib.entity.RtkDataAverage; +import com.rtklib.repository.RtkDataRepository; +import com.rtklib.repository.RtkDataAverageRepository; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.List; + +@Service +public class RtkDataAverageService { + private static final Logger logger = LoggerFactory.getLogger(RtkDataAverageService.class); + + @Autowired + private RtkDataRepository rtkDataRepository; + + @Autowired + private RtkDataAverageRepository rtkDataAverageRepository; + + @Scheduled(fixedRate = 600000) // 每10分钟执行一次 + public void calculateAndSaveAverages() { + try { + LocalDateTime endTime = LocalDateTime.now(); + LocalDateTime startTime = endTime.minusHours(4); + + // 获取过去4小时内的所有数据 + List dataList = rtkDataRepository.findByTimestampBetween(startTime, endTime); + + if (dataList.isEmpty()) { + logger.warn("No data found for the period between {} and {}", startTime, endTime); + return; + } + + // 计算平均值 + double avgLatitude = dataList.stream() + .mapToDouble(RtkData::getLatitude) + .average() + .orElse(0.0); + + double avgLongitude = dataList.stream() + .mapToDouble(RtkData::getLongitude) + .average() + .orElse(0.0); + + double avgHeight = dataList.stream() + .mapToDouble(RtkData::getHeight) + .average() + .orElse(0.0); + + double avgZtd = dataList.stream() + .mapToDouble(RtkData::getZtd) + .average() + .orElse(0.0); + + // 获取设备ID(使用第一个数据的设备ID) + String deviceId = dataList.get(0).getDeviceId(); + + // 创建并保存平均值记录 + RtkDataAverage average = new RtkDataAverage(); + average.setStartTime(startTime); + average.setEndTime(endTime); + average.setAverageLatitude(avgLatitude); + average.setAverageLongitude(avgLongitude); + average.setAverageHeight(avgHeight); + average.setAverageZtd(avgZtd); + average.setDeviceId(deviceId); + + rtkDataAverageRepository.save(average); + logger.info("Successfully saved 4-hour average data for period {} to {}", startTime, endTime); + } catch (Exception e) { + logger.error("Error calculating and saving averages: {}", e.getMessage(), e); + } + } +} \ No newline at end of file