From a2969a5b3c8d40dba41d957c9a7e256e179f7186 Mon Sep 17 00:00:00 2001 From: weidong Date: Wed, 17 Jan 2024 12:35:29 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E5=A2=9E=E5=8A=A0=E6=89=93=E5=8D=B0?= =?UTF-8?q?=EF=BC=8C=E6=9F=A5=E6=96=AD=E7=82=B9=E7=BB=AD=E4=BC=A0=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calc/MultiLineGNSSCalcService.java | 87 ++++++++++--------- 1 file changed, 46 insertions(+), 41 deletions(-) diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/MultiLineGNSSCalcService.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/MultiLineGNSSCalcService.java index a4408cd3..5c6e7dfd 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/MultiLineGNSSCalcService.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/calc/MultiLineGNSSCalcService.java @@ -41,54 +41,59 @@ public class MultiLineGNSSCalcService { LocalDateTime lastDate = deviceMap.get(deviceId); LocalDateTime msgTime = d342Message.getOriginalTime(); int d341Count = d342Message.getMessageList().size(); - if(msgTime!=null) logger.info("proc D342: "+msgTime+" D341 num: "+d341Count); + if(msgTime!=null) logger.info(deviceId + " proc D342: "+msgTime+" seq:"+d342Message.getSeq()+" D341 num: "+d341Count); - // 如果序号为0(有可能丢失,改为lastDate==null且包含的d341数大于0),则认为是第一条补传记录 - if(lastDate == null && d341Count>0){ - // 产生继续补传通知 - beidouClient.onGnssUpload(deviceId,d342Message.getTenantId(), msgTime); - GnssStatus gnssStatus = dataPersistService.getDeviceState(deviceId); - if(gnssStatus!=null){ - gnssStatus.setUpdatetime(LocalDateTime.now()); - gnssStatus.setState(GnssStatus.STATE_UPLOADING); - dataPersistService.updateDeviceState(gnssStatus); + if(d341Count>0) { + if(msgTime==null){ + logger.info(deviceId + " invalid D342"); + return; } - // 生成推送记录 - createFwdReord(d342Message); - } - // 一个周期数据的处理 - if(lastDate != null){ - if(d341Count == 0){//补传结束指示 - // 计算上轮结果 - calcService.calSingleDone(deviceId, d342Message.getTenantId(),lastDate); - // 重算最近的 - lastDate = gnssCalcFilterService.updateRb562(deviceId,lastDate); - // 记录转发表更新为upload done - FwdRecord fwdRecord = fwdRecordMap.get(deviceId); - if(fwdRecord != null){ - fwdRecord.setEndtime(lastDate); - fwdRecord.setState(FwdRecord.STATE_UPLOAD_DONE); - fwdRecordMapper.insert(fwdRecord); - fwdRecordMap.remove(deviceId); + if(lastDate != null) { + logger.info(deviceId + " last D342: " + lastDate); + if (msgTime.isAfter(lastDate.plusMinutes(4))) { + logger.info(deviceId + " d341 cycle done!"); + // 计算上轮结果 + calcService.calSingleDone(deviceId, d342Message.getTenantId(), lastDate); } } - else if(msgTime!=null && msgTime.isAfter(lastDate.plusMinutes(2))){ - // 计算上轮结果 - calcService.calSingleDone(deviceId, d342Message.getTenantId(),lastDate); + else{ + logger.info(deviceId + " D342 session begin!"); + // 产生断点补传通知 + beidouClient.onGnssUpload(deviceId, d342Message.getTenantId(), msgTime); + GnssStatus gnssStatus = dataPersistService.getDeviceState(deviceId); + if (gnssStatus != null) { + gnssStatus.setUpdatetime(LocalDateTime.now()); + gnssStatus.setState(GnssStatus.STATE_UPLOADING); + dataPersistService.updateDeviceState(gnssStatus); + } + // 生成推送记录 + createFwdReord(d342Message); + } + + // 处理d341 + deviceMap.put(deviceId, msgTime); + for(BaseMessage message: d342Message.getMessageList()){ + D341LocationMessage d341Message = (D341LocationMessage)message; + calcService.calcSingle(d341Message, false); } } - - // 处理每个B562 - for(BaseMessage message: d342Message.getMessageList()){ - D341LocationMessage d341Message = (D341LocationMessage)message; - calcService.calcSingle(d341Message, false); - } - - // 记录最新补传数据的时间 - if(d341Count>0) deviceMap.put(deviceId, msgTime); - else if(deviceMap.get(deviceId)!=null){ - // 补传完成 + else if(lastDate != null){ + //补传结束指示 + logger.info(deviceId + " d342 session done!"); + // 计算上轮结果 + calcService.calSingleDone(deviceId, d342Message.getTenantId(),lastDate); + // 重算最近的 + lastDate = gnssCalcFilterService.updateRb562(deviceId,lastDate); + // 记录转发表更新为upload done + FwdRecord fwdRecord = fwdRecordMap.get(deviceId); + if(fwdRecord != null){ + fwdRecord.setEndtime(lastDate); + fwdRecord.setState(FwdRecord.STATE_UPLOAD_DONE); + fwdRecordMapper.insert(fwdRecord); + fwdRecordMap.remove(deviceId); + } + // 移除记录、发完成指示、更新设备状态 deviceMap.remove(deviceId); beidouClient.onGnssUploadComplete(deviceId,d342Message.getTenantId()); GnssStatus gnssStatus = dataPersistService.getDeviceState(deviceId);