diff --git a/sec-api/src/main/java/com/imdroid/secapi/client/BeidouClient.java b/sec-api/src/main/java/com/imdroid/secapi/client/BeidouClient.java index 6d471b3f..0d8ee97b 100644 --- a/sec-api/src/main/java/com/imdroid/secapi/client/BeidouClient.java +++ b/sec-api/src/main/java/com/imdroid/secapi/client/BeidouClient.java @@ -29,7 +29,8 @@ public interface BeidouClient { @PostMapping("/gnss_upload") String onGnssUpload(@RequestParam(name = "deviceId") String deviceId, @RequestParam(name = "tenantId") Integer tenantId, - @RequestParam(name = "uploadTime") LocalDateTime uploadTime); + @RequestParam(name = "uploadTime") LocalDateTime uploadTime, + @RequestParam(name = "info") String info); @PostMapping("/gnss_upload_pause") String onGnssUploadPause(@RequestParam(name = "deviceId") String deviceId, 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 57771dfd..cb07502e 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 @@ -5,6 +5,7 @@ import com.imdroid.sideslope.message.D342LocationMessage; import com.imdroid.sideslope.sal.Device; import com.imdroid.sideslope.sal.DeviceService; import com.imdroid.common.util.ThreadManager; +import com.imdroid.sideslope.service.DataPersistService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -21,6 +22,8 @@ public class D342LocationMessageExecutor implements Executor { gnssCalcService.calc(message); + if(message.getMessageList().size()==0){ + dataPersistService.saveD342Stat(message, device); + device.clearD342Stat(); + } }); return null; diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F2StopIndicationMessageExecutor.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F2StopIndicationMessageExecutor.java index fd9eec35..6053fd7c 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F2StopIndicationMessageExecutor.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F2StopIndicationMessageExecutor.java @@ -62,7 +62,10 @@ public class D3F2StopIndicationMessageExecutor implements Executor this.len) totalLen = this.len + 4 - begin; - + int pos = 15; // head 10,date 5 int msgLen = 0; - while(begin+2 < totalLen){ - int flag = src.getUnsignedShort(begin); + while(pos+2 < this.len){ + int flag = src.getUnsignedShort(pos); // 有时候两个d341会多一些字节,原因未明 if(flag != 0xD341){ - if(begin+msgLen > totalLen) break; + if(pos+msgLen > this.len) break; else { - begin++; + pos++; continue; } } - msgLen = src.getUnsignedShort(begin+2); + msgLen = src.getUnsignedShort(pos+2); msgLen = (msgLen&0x07FF) + 4; - if(begin+msgLen > totalLen) break; //error + if(pos+msgLen > this.len) break; //error - ByteBuf msgBuf = src.slice(begin,msgLen); + ByteBuf msgBuf = src.slice(pos,msgLen); BaseMessage message = new D341LocationMessage(); message.decode(msgBuf); message.setCreateTime(originalTime); messageList.add(message); // next data - begin += msgLen; + pos += msgLen; } } diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/Device.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/Device.java index 9ad45ed4..fe9ec9ba 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/Device.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/Device.java @@ -39,6 +39,9 @@ public class Device { int d3xxbytes = 0; int d341Count = 0; int d341bytes = 0; + int d342Bytes = 0; + int d342Count = 0; + int d341In42Count = 0; int satelitesInUse = 0;//平均卫星数 int sataStatCount = 0; @@ -56,6 +59,12 @@ public class Device { d341bytes += bytes; } + public void updateD342Bytes(int bytes, int d341Num){ + d342Count ++; + d342Bytes += bytes; + d341In42Count += d341Num; + } + public void updateSatelitesNum(int num){ if(num>0) { sataStatCount++; @@ -72,4 +81,9 @@ public class Device { satelitesInUse = 0; } + public void clearD342Stat(){ + d342Count = 0; + d342Bytes = 0; + d341In42Count = 0; + } } diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/DataPersistService.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/DataPersistService.java index af1c23d0..57bd58fe 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/DataPersistService.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/DataPersistService.java @@ -1,6 +1,7 @@ package com.imdroid.sideslope.service; import com.imdroid.secapi.dto.GnssStatus; +import com.imdroid.sideslope.message.D342LocationMessage; import com.imdroid.sideslope.message.D3F0SelfCheckMessage; import com.imdroid.sideslope.message.D3F2StopIndicationMessage; import com.imdroid.sideslope.sal.Device; @@ -20,4 +21,5 @@ public interface DataPersistService { void saveDeviceState(D3F0SelfCheckMessage d3F0SelfCheckMessage); void saveDeviceTrxStat(D3F2StopIndicationMessage d3F2StopIndicationMessage, boolean isUploading, Device device); + void saveD342Stat(D342LocationMessage message, Device device); } diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/DataPersistServiceImpl.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/DataPersistServiceImpl.java index 0fb9e5d6..70a45884 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/DataPersistServiceImpl.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/DataPersistServiceImpl.java @@ -2,6 +2,7 @@ package com.imdroid.sideslope.service; import com.imdroid.secapi.dto.*; import com.imdroid.sideslope.message.BaseMessage; +import com.imdroid.sideslope.message.D342LocationMessage; import com.imdroid.sideslope.message.D3F0SelfCheckMessage; import com.imdroid.sideslope.message.D3F2StopIndicationMessage; import com.imdroid.sideslope.sal.Device; @@ -92,7 +93,6 @@ public class DataPersistServiceImpl implements DataPersistService { // 添加到trxmsg里 GnssTrxMsg trxMsg = message.getTrxMsg(); trxMsgMapper.insert(trxMsg); - // 保存消息摘要 if(device.getDeviceType() == GnssDevice.TYPE_ROVER) { saveMsg(message, "d341 num: "+device.getD341Count()+","+message.getOtherInfo()); } @@ -135,4 +135,10 @@ public class DataPersistServiceImpl implements DataPersistService { msgMapper.insert(gnssMsg); } + @Override + public void saveD342Stat(D342LocationMessage message, Device device){ + saveMsg(message, "d342 num:"+device.getD342Count()+ + ", bytes:"+device.getD342Bytes()+ + ", total d341 num:"+device.getD341In42Count()+"session done"); + } } diff --git a/sec-beidou/src/main/java/com/imdroid/beidou/controller/APIController.java b/sec-beidou/src/main/java/com/imdroid/beidou/controller/APIController.java index f1366a8a..b177496d 100644 --- a/sec-beidou/src/main/java/com/imdroid/beidou/controller/APIController.java +++ b/sec-beidou/src/main/java/com/imdroid/beidou/controller/APIController.java @@ -131,8 +131,9 @@ public class APIController extends BasicController{ /****** gnss upload *******/ @PostMapping(value = "/api/gnss_upload") @ResponseBody - public String onGnssUpload(String deviceId, Integer tenantId,LocalDateTime uploadTime) { - saveMsg(deviceId, tenantId,0xd342, "gnss data upload from "+uploadTime,false); + public String onGnssUpload(String deviceId, Integer tenantId,LocalDateTime uploadTime,String info) { + saveMsg(deviceId, tenantId,0xd342, + "gnss data upload from "+uploadTime+", "+info,false); return null; } diff --git a/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssMsgController.java b/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssMsgController.java index 07d6ca18..a5308253 100644 --- a/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssMsgController.java +++ b/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssMsgController.java @@ -10,9 +10,12 @@ import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import javax.annotation.PostConstruct; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; /** * 消息摘要 控制器 @@ -23,10 +26,24 @@ public class GnssMsgController extends BasicController implements CommonExcelSer private final GnssMsgMapper msgMapper; + public static final Map msgTypeMap = new HashMap<>(); + + @PostConstruct + public static void init() { + msgTypeMap.put(0xd3f0,"自检消息"); + msgTypeMap.put(0xd3f2,"休眠消息"); + msgTypeMap.put(0xd310,"GNSS配置"); + msgTypeMap.put(0xd311,"工作时间配置"); + msgTypeMap.put(0xd312,"单片机配置"); + msgTypeMap.put(0xd313,"DEBUG"); + msgTypeMap.put(0xd31A,"DTU配置"); + msgTypeMap.put(0xd342,"断点续传"); + } /**** 推送页面 *****/ @RequestMapping("/page/gnss_msg") public String gnssMsg(Model m, HttpSession session) { initModel(m, session); + m.addAttribute("type_map", msgTypeMap); return "/page/gnss_msg"; } diff --git a/sec-beidou/src/main/resources/templates/page/gnss_msg.html b/sec-beidou/src/main/resources/templates/page/gnss_msg.html index fdc52bb2..2d893935 100644 --- a/sec-beidou/src/main/resources/templates/page/gnss_msg.html +++ b/sec-beidou/src/main/resources/templates/page/gnss_msg.html @@ -24,7 +24,15 @@ -
+
+ +
+ +
+