Merge branch 'main' of git.yarnom.com:Imdroid/pwv_ntrip
This commit is contained in:
commit
69b5fa3ad6
@ -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;
|
||||||
|
}
|
||||||
@ -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<RtkDataAverage, Long> {
|
||||||
|
}
|
||||||
@ -3,7 +3,10 @@ package com.rtklib.repository;
|
|||||||
import com.rtklib.entity.RtkData;
|
import com.rtklib.entity.RtkData;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
public interface RtkDataRepository extends JpaRepository<RtkData, Long> {
|
public interface RtkDataRepository extends JpaRepository<RtkData, Long> {
|
||||||
|
List<RtkData> findByTimestampBetween(LocalDateTime startTime, LocalDateTime endTime);
|
||||||
}
|
}
|
||||||
@ -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<RtkData> 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user