From ee9cd377f10eb7d55fb34230d5cb44ab7913003f Mon Sep 17 00:00:00 2001 From: weidong Date: Sat, 9 Dec 2023 15:14:05 +0800 Subject: [PATCH] =?UTF-8?q?bug=20fixed:=20D342=E6=B6=88=E6=81=AF=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../imdroid/sideslope/calc/MultiLineGNSSCalcService.java | 5 +++-- .../sideslope/executor/D342LocationMessageExecutor.java | 5 +---- .../imdroid/sideslope/message/D342LocationMessage.java | 8 ++++++-- 3 files changed, 10 insertions(+), 8 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 282e3c8c..ab08679e 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 @@ -25,9 +25,10 @@ public class MultiLineGNSSCalcService { LocalDateTime msgTime = d342Message.getOriginalTime(); LocalDateTime lastDate = deviceMap.get(deviceId); int d341Count = d342Message.getMessageList().size(); - logger.info("proc D342: "+msgTime.toString()+" D341 num: "+d341Count); + if(msgTime!=null) logger.info("proc D342: "+msgTime+" D341 num: "+d341Count); + if(lastDate != null){ - if(msgTime.isAfter(lastDate.plusMinutes(1)) || d341Count == 0){ + if(d341Count == 0 || (msgTime!=null && msgTime.isAfter(lastDate.plusMinutes(1)))){ // 计算上轮结果 calcService.calSingleDone(deviceId, d342Message.getTenantId(),lastDate); } diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D342LocationMessageExecutor.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D342LocationMessageExecutor.java index aff720a8..a3942d4a 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D342LocationMessageExecutor.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D342LocationMessageExecutor.java @@ -1,13 +1,10 @@ package com.imdroid.sideslope.executor; import com.imdroid.sideslope.calc.MultiLineGNSSCalcService; -import com.imdroid.sideslope.message.D341LocationMessage; import com.imdroid.sideslope.message.D342LocationMessage; import com.imdroid.sideslope.sal.Device; import com.imdroid.sideslope.sal.DeviceService; import com.imdroid.sideslope.util.ThreadManager; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -42,6 +39,6 @@ public class D342LocationMessageExecutor implements Executor getMessageType() { - return D341LocationMessage.class; + return D342LocationMessage.class; } } diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/message/D342LocationMessage.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/message/D342LocationMessage.java index d1b7d4b4..7d3aa499 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/message/D342LocationMessage.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/message/D342LocationMessage.java @@ -25,6 +25,8 @@ public class D342LocationMessage extends BaseMessage { this.id = String.valueOf(src.readUnsignedInt()); //id this.seq = src.readUnsignedShort(); + if(this.len<=15) return; + short year = src.readUnsignedByte(); short month = src.readUnsignedByte(); short day = src.readUnsignedByte(); @@ -34,10 +36,12 @@ public class D342LocationMessage extends BaseMessage { // 拆分D341,指针已移动到d341了 int totalLen = src.readableBytes(); - int begin = 0; + int begin = 15; // d341 head: 10, date: 5 while(begin+2 < totalLen){ - int msgLen = src.getShort(begin+2)&0x7FF + 4; + int msgLen = src.getUnsignedShort(begin+2); + msgLen = msgLen&0x07FF; + msgLen = msgLen + 4; if(msgLen > totalLen) break; //error ByteBuf msgBuf = src.slice(begin,msgLen);