diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/SingleLineGNSSCalcService.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/SingleLineGNSSCalcService.java index b4fc7e49..6c897932 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/SingleLineGNSSCalcService.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/SingleLineGNSSCalcService.java @@ -1,7 +1,9 @@ package com.imdroid.sideslope.calc; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.imdroid.common.util.ThreadManager; import com.imdroid.secapi.dto.GnssCalcData; +import com.imdroid.secapi.dto.GnssCalcDataMapper; import com.imdroid.secapi.dto.GnssGroupCalc; import com.imdroid.secapi.dto.GnssGroupCalcMapper; import com.imdroid.sideslope.bd.*; @@ -44,6 +46,8 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService { @Autowired GnssGroupCalcMapper groupCalcMapper; + @Autowired + GnssCalcDataMapper dataMapper; // 非线程安全,需加同步保护 List groupCalcList; @@ -222,7 +226,9 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService { new double[]{locationRecord.getRpose(),locationRecord.getRposn(),locationRecord.getRposd()}); } else if(focusCalculator.getReferPoint() == null){ - focusCalculator.setReferPoint(b562Result); + double[] latestPos = getLatestPos(deviceId); + if(latestPos != null) focusCalculator.setReferPoint(latestPos); + else focusCalculator.setReferPoint(b562Result); } } else if(focusCalculator.getVer()==1 || focusCalculator.getVer()==3 || focusCalculator.isShocked()) { @@ -273,4 +279,18 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService { calculatorMap.remove(deviceId); logger.info("device paras changed"); } + + double[] getLatestPos(String deviceId){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("deviceid",deviceId); + queryWrapper.ge("createtime",LocalDateTime.now().minusHours(12)); + queryWrapper.isNotNull("rpose"); + queryWrapper.orderByDesc("createtime"); + GnssCalcData gnssCalcData = dataMapper.selectOne(queryWrapper); + if(gnssCalcData != null){ + logger.info("{} getLatestPos", deviceId); + return new double[]{gnssCalcData.getRpose(),gnssCalcData.getRposn(),gnssCalcData.getRposd()}; + } + return null; + } }