From 3a29e6118a8615bb1b126878eaaf827e227f64fb Mon Sep 17 00:00:00 2001 From: weidong Date: Fri, 17 Jan 2025 14:12:48 +0800 Subject: [PATCH 1/9] =?UTF-8?q?1=E3=80=81=E4=BC=98=E5=8C=96=E6=8E=A8?= =?UTF-8?q?=E9=80=81=E3=80=82=E5=A6=82=E6=9E=9C=E4=B8=80=E6=AC=A1=E6=8E=A8?= =?UTF-8?q?=E9=80=81=E8=B6=85=E8=BF=8730=E5=88=86=E9=92=9F=EF=BC=8C?= =?UTF-8?q?=E4=BC=9A=E9=80=A0=E6=88=90=E9=87=8D=E5=A4=8D=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/imdroid/secapi/dto/ResendRecord.java | 1 + .../imdroid/beidou_fwd/task/Forwarder.java | 75 +++++++++++-------- .../templates/page/resend_records.html | 4 +- 3 files changed, 49 insertions(+), 31 deletions(-) diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/ResendRecord.java b/sec-api/src/main/java/com/imdroid/secapi/dto/ResendRecord.java index f30cebc5..db7d59cf 100644 --- a/sec-api/src/main/java/com/imdroid/secapi/dto/ResendRecord.java +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/ResendRecord.java @@ -18,6 +18,7 @@ public class ResendRecord { static public final short STATE_FWD_OK = 0; static public final short STATE_FWD_FAILED = 1; static public final short STATE_BREAK_POINT = 2; + static public final short STATE_FWDING = 3; @TableId(value = "id", type = IdType.AUTO) Long id; Integer tenantid; diff --git a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/Forwarder.java b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/Forwarder.java index 0af94ad0..52f92a16 100644 --- a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/Forwarder.java +++ b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/Forwarder.java @@ -1,6 +1,7 @@ package com.imdroid.beidou_fwd.task; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.github.yulichang.query.MPJQueryWrapper; import com.imdroid.beidou_fwd.entity.GZYMQTTData; import com.imdroid.common.util.GsonUtil; @@ -198,27 +199,22 @@ public class Forwarder { int sendNum = send(projectId, records, sendTime); - // 记录推送 - FwdRecord fwdRecord = new FwdRecord(); - fwdRecord.setProjectid(projectId); - fwdRecord.setTenantid(tenantId); - fwdRecord.setDevicenum((short) records.size()); - fwdRecord.setRecordtime(sendTime); - fwdRecord.setCreatetime(LocalDateTime.now()); - fwdRecord.setFwd_group_id(fwdGroupId); - if(sendNum > 0) { - totalSendNum += sendNum; - fwdRecord.setResult(FwdRecord.RESULT_OK); - if(resendRecord != null){ - resendRecord.setState(ResendRecord.STATE_FWD_OK); - resendRecordMapper.updateById(resendRecord); - } - } - else{ - fwdResult = false; - fwdRecord.setResult(FwdRecord.RESULT_FAILED); - // 新增重发记录 - if(resendRecord == null) { + // 非重发的才产生推送记录 + if(resendRecord==null) { + FwdRecord fwdRecord = new FwdRecord(); + fwdRecord.setProjectid(projectId); + fwdRecord.setTenantid(tenantId); + fwdRecord.setDevicenum((short) records.size()); + fwdRecord.setRecordtime(sendTime); + fwdRecord.setCreatetime(LocalDateTime.now()); + fwdRecord.setFwd_group_id(fwdGroupId); + if (sendNum > 0) { + totalSendNum += sendNum; + fwdRecord.setResult(FwdRecord.RESULT_OK); + } else { + fwdResult = false; + fwdRecord.setResult(FwdRecord.RESULT_FAILED); + // 新增重发记录 resendRecord = new ResendRecord(); resendRecord.setProjectid(projectId); resendRecord.setTenantid(tenantId); @@ -229,17 +225,15 @@ public class Forwarder { resendRecord.setState(ResendRecord.STATE_FWD_FAILED); resendRecordMapper.insert(resendRecord); } - else{ - resendRecord.setState(ResendRecord.STATE_FWD_FAILED); - resendRecordMapper.updateById(resendRecord); - } + fwdRecordsMapper.insert(fwdRecord); } - fwdRecordsMapper.insert(fwdRecord); } // 更新推送记录 - if(totalSendNum>0) updateFwd(totalSendNum, true); - else if(!fwdResult) updateFwd(totalSendNum, false); + if(resendRecord==null) { + if (totalSendNum > 0) updateFwd(totalSendNum, true); + else if (!fwdResult) updateFwd(totalSendNum, false); + } return fwdResult; } @@ -258,10 +252,20 @@ public class Forwarder { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("fwd_group_id",fwdGroupId); queryWrapper.ne("state",ResendRecord.STATE_FWD_OK); + queryWrapper.ne("state",ResendRecord.STATE_FWDING); queryWrapper.ge("createtime", LocalDateTime.now().minusDays(30)); List resendRecordsList = resendRecordMapper.selectList(queryWrapper); + if(resendRecordsList!=null){ - logger.info("{} forward history records: {}",fwdGroupId, resendRecordsList.size()); + //修改状态 + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("fwd_group_id",fwdGroupId); + updateWrapper.ne("state",ResendRecord.STATE_FWD_OK); + updateWrapper.ne("state",ResendRecord.STATE_FWDING); + updateWrapper.ge("createtime", LocalDateTime.now().minusDays(30)); + updateWrapper.set("state",ResendRecord.STATE_FWDING); + int updateNum = resendRecordMapper.update(null, updateWrapper); + logger.info("{} forward history records: {}, update {}",fwdGroupId, resendRecordsList.size(),updateNum); // 2.检索这个这个时间段的解算结果,如果有数据则单个终端转发,标志记录为已补传 for(ResendRecord record:resendRecordsList){ if(record.getProjectid()!=null) @@ -273,10 +277,21 @@ public class Forwarder { void forwardBatchGnssRecords(ResendRecord record) { LocalDateTime sendTime = record.getStarttime(); + + int totalSend = 0; + while(sendTime.isBefore(record.getEndtime()) || sendTime.isEqual(record.getEndtime())){ - forwardGnssRecords(sendTime,record); + if(forwardGnssRecords(sendTime,record)) totalSend++; sendTime = sendTime.plusMinutes(fwdCycleMinutes); } + if(totalSend>0) { + record.setState(ResendRecord.STATE_FWD_OK); + } + else{ + record.setState(ResendRecord.STATE_FWD_FAILED); + } + resendRecordMapper.updateById(record); + } int send(String projectId, List records, LocalDateTime sentTime) { diff --git a/sec-beidou/src/main/resources/templates/page/resend_records.html b/sec-beidou/src/main/resources/templates/page/resend_records.html index 9927c410..014bd506 100644 --- a/sec-beidou/src/main/resources/templates/page/resend_records.html +++ b/sec-beidou/src/main/resources/templates/page/resend_records.html @@ -128,8 +128,10 @@ 推送成功 {{# } else if(d.state == 1){ }} 推送失败 + {{# } else if(d.state == 2){ }} + 断点补传 {{# } else { }} - 断点补传 + 推送中 {{# } }} From 0bf150765f4068e13f703790239dedb6bdb864ef Mon Sep 17 00:00:00 2001 From: weidong Date: Fri, 17 Jan 2025 14:59:49 +0800 Subject: [PATCH 2/9] =?UTF-8?q?1=E3=80=81=E5=A2=9E=E5=8A=A0=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E5=A4=87=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/imdroid/secapi/dto/GnssDevice.java | 2 +- .../com/imdroid/secapi/dto/GnssStatusJoin.java | 2 ++ .../beidou/controller/GnssDeviceController.java | 5 +++++ .../beidou/controller/GnssStatusController.java | 2 +- .../resources/templates/page/gnss_dev_cfg.html | 14 ++++++++++++-- .../main/resources/templates/page/gnss_status.html | 10 ++++++++++ .../templates/page/table/gnss_add_dev.html | 8 ++++++++ 7 files changed, 39 insertions(+), 4 deletions(-) diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssDevice.java b/sec-api/src/main/java/com/imdroid/secapi/dto/GnssDevice.java index c72bbdf4..1aa5fcdc 100644 --- a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssDevice.java +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/GnssDevice.java @@ -65,5 +65,5 @@ public class GnssDevice { // 日志记录控制 private Short loggingmode; - + private String remark; } diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssStatusJoin.java b/sec-api/src/main/java/com/imdroid/secapi/dto/GnssStatusJoin.java index 79097482..171ac194 100644 --- a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssStatusJoin.java +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/GnssStatusJoin.java @@ -92,4 +92,6 @@ public class GnssStatusJoin { Double longitude; @ExcelProperty("海拔") Double altitude; + @ExcelProperty("备注") + String remark; } diff --git a/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssDeviceController.java b/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssDeviceController.java index 0bf45895..c457a80b 100644 --- a/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssDeviceController.java +++ b/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssDeviceController.java @@ -135,6 +135,11 @@ public class GnssDeviceController extends BasicController{ if (StringUtils.hasText(appver)) { queryWrapper.like("appver", appver); } + //备注 + String remark = search.getString("remark"); + if (StringUtils.hasText(remark)) { + queryWrapper.like("remark", remark); + } //使用状态 Integer opmode = search.getInteger("opmode"); if (opmode != null && opmode != QUERY_ALL) { diff --git a/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssStatusController.java b/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssStatusController.java index 28cdd822..d367f4bd 100644 --- a/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssStatusController.java +++ b/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssStatusController.java @@ -99,7 +99,7 @@ public class GnssStatusController extends BasicController implements CommonExcel public MPJQueryWrapper prepareQueryWrapper() { return new MPJQueryWrapper() .selectAll(GnssStatus.class) - .select("d.devicetype as devicetype") + .select("d.devicetype as devicetype,d.remark as remark") .leftJoin("gnssdevices d on t.deviceid = d.deviceid") .orderByDesc("t.updatetime"); } diff --git a/sec-beidou/src/main/resources/templates/page/gnss_dev_cfg.html b/sec-beidou/src/main/resources/templates/page/gnss_dev_cfg.html index e6dd4004..dc065381 100644 --- a/sec-beidou/src/main/resources/templates/page/gnss_dev_cfg.html +++ b/sec-beidou/src/main/resources/templates/page/gnss_dev_cfg.html @@ -82,6 +82,12 @@ +
+ +
+ +
+
@@ -113,6 +119,7 @@ table = layui.table; var cfg_cols = [ {field: 'deviceid', title: '设备号', width: 100, sort: true}, + {field: 'remark', title: '备注', width: 100}, {field: 'project_id', title: '项目号', width: 120, sort: true}, {field: 'sector', title: '桩号', width: 120, sort: true}, {field: 'name', title: '监测点号', width: 80}, @@ -131,10 +138,13 @@ {title: '操作', toolbar: '#currentTableBar', fixed: "right", width: 120} ]; if([[${role}]] == "USER") { - cfg_cols[15].hide = true; + cfg_cols[17].hide = true; + } + else if([[${role}]] != "SUPER_ADMIN") { + cfg_cols[1].hide = true; } if([[${tenant_id}]] != 0) { - cfg_cols[10].hide = true; + cfg_cols[11].hide = true; } /** * 初始化表单,要加上,不然刷新部分组件可能会不加载 diff --git a/sec-beidou/src/main/resources/templates/page/gnss_status.html b/sec-beidou/src/main/resources/templates/page/gnss_status.html index 73278088..264d5985 100644 --- a/sec-beidou/src/main/resources/templates/page/gnss_status.html +++ b/sec-beidou/src/main/resources/templates/page/gnss_status.html @@ -61,6 +61,12 @@ +
+ +
+ +
+
@@ -92,6 +98,7 @@ table = layui.table; var cfg_cols = [ {field: 'deviceid', title: '设备号', sort: true}, + {field: 'remark', title: '备注', width: 100}, {field: 'devicetype', title: '设备类型',templet: '#typeTrans'}, {field: 'updatetime', title: '更新时间', templet: "
{{layui.util.toDateString(d.updatetime, 'yyyy-MM-dd HH:mm:ss')}}
"}, {field: 'state', title: '状态',templet: '#stateTrans'}, @@ -107,6 +114,9 @@ {field: 'latitude', title: '纬度'}, {title: '操作', toolbar: '#currentTableBar', fixed: "right", width: 80} ]; + if([[${role}]] != "SUPER_ADMIN") { + cfg_cols[1].hide = true; + } /** * 初始化表单,要加上,不然刷新部分组件可能会不加载 */ diff --git a/sec-beidou/src/main/resources/templates/page/table/gnss_add_dev.html b/sec-beidou/src/main/resources/templates/page/table/gnss_add_dev.html index 73be45ea..311601e3 100644 --- a/sec-beidou/src/main/resources/templates/page/table/gnss_add_dev.html +++ b/sec-beidou/src/main/resources/templates/page/table/gnss_add_dev.html @@ -207,6 +207,13 @@

+
+ +
+ +
+
+
@@ -312,6 +319,7 @@ $('#ecefz').val(data.ecefz); $('#model').val(data.model); $('#sector').val(data.sector); + $('#remark').val(data.remark); setEcefEditor(); form.render(); } From d51b83069ba25a338bf8350477e8818f45599a91 Mon Sep 17 00:00:00 2001 From: weidong Date: Fri, 24 Jan 2025 22:46:56 +0800 Subject: [PATCH 3/9] =?UTF-8?q?1=E3=80=81=E4=BC=98=E5=8C=96debug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sideslope/bd/FocusCalculator1.java | 6 ++--- .../sideslope/bd/FocusCalculator2.java | 2 +- .../sideslope/bd/FocusCalculator5.java | 4 ++-- .../sideslope/bd/FocusCalculator6.java | 2 +- .../calc/SingleLineGNSSCalcService.java | 22 +++++++++---------- .../executor/D341LocationMessageExecutor.java | 4 ++-- .../D3F0SelfCheckMessageExecutor.java | 2 +- .../D3F2StopIndicationMessageExecutor.java | 2 +- .../sideslope/server/tcp/RtcmTcpHandler.java | 2 +- .../sideslope/service/WarningServiceImpl.java | 1 - 10 files changed, 23 insertions(+), 24 deletions(-) diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator1.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator1.java index 6e152231..57131f52 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator1.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator1.java @@ -152,7 +152,7 @@ public class FocusCalculator1 implements FocusCalculator{ // 求初始重心 double[] focus = focusPointObj(selectPoints); - logger.info("seed focus {},{},{},select size {}",focus[0],focus[1],focus[2],selectPoints.size()); + logger.debug("seed focus {},{},{},select size {}",focus[0],focus[1],focus[2],selectPoints.size()); // 迭代计算重心,直到选出50%的点 List filteredPoints=null; @@ -165,10 +165,10 @@ public class FocusCalculator1 implements FocusCalculator{ if(filteredPoints.size() == 0) continue; focus = focusPoint(filteredPoints); }while ((double)filteredPoints.size()/pointList.size() < pointSelectedRate); - if(null!=filteredPoints) logger.info("calc focus r:{}, point num:{}",r,filteredPoints.size()); + if(null!=filteredPoints) logger.debug("calc focus r:{}, point num:{}",r,filteredPoints.size()); return focus; }else{ - logger.info("calc focus iter num:0, point num:{}",selectPoints.size()); + logger.debug("calc focus iter num:0, point num:{}",selectPoints.size()); return focus; } diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator2.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator2.java index 0d3eeba1..f32987a0 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator2.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator2.java @@ -99,7 +99,7 @@ public class FocusCalculator2 extends FocusCalculator1{ while (iterator.hasNext()){ pointList.addAll(iterator.next().getValue()); } - logger.info("total fixed point num to calculated: {},{},{}",pointList.size(), + logger.debug("total fixed point num to calculated: {},{},{}",pointList.size(), cyclePointList.get(0).getKey(), cyclePointList.get(cyclePointList.size()-1).getKey()); if(pointList.size() >= gravityMaxCount){ diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator5.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator5.java index d4f872f5..3dbdc048 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator5.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator5.java @@ -87,7 +87,7 @@ public class FocusCalculator5 implements FocusCalculator{ pointList.clear(); } else{ - logger.info("{} num of fixed points:{}, less than {}",deviceId, pointList.size(),minPointNum); + logger.debug("{} num of fixed points:{}, less than {}",deviceId, pointList.size(),minPointNum); } tilts.clear(); counterNoB562 = 0; @@ -148,7 +148,7 @@ public class FocusCalculator5 implements FocusCalculator{ //取交集 eList.retainAll(nList); eList.retainAll(uList); - logger.info("{} fixed point selected: {}", deviceId, eList.size()); + logger.debug("{} fixed point selected: {}", deviceId, eList.size()); if(eList.size() == 0) return null; //求均值 diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator6.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator6.java index e3f01512..2a0e76f4 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator6.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator6.java @@ -63,7 +63,7 @@ public class FocusCalculator6 implements FocusCalculator{ pointList.clear(); } else{ - logger.info("{} num of fixed points:{}, less than {}",deviceId, pointList.size(),minPointNum); + logger.debug("{} num of fixed points:{}, less than {}",deviceId, pointList.size(),minPointNum); } tilts.clear(); counterNoB562 = 0; 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 b1388a08..61fb2180 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 @@ -136,14 +136,14 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService { double[] doubles = message.getB562_loc();//unit: mm if(doubles !=null) { focusCalculator.addXyz(doubles, message.getCreateTime()); - logger.info("测站{}的b562单次解析结果:{}", deviceId,Arrays.toString(doubles)); + logger.debug("测站{}的b562单次解析结果:{}", deviceId,Arrays.toString(doubles)); } // 单次GGA Gga gga = message.getGga(); if(gga != null) { focusCalculator.addGGA(gga); - logger.info("测站{}的gga单次解析结果:{},{},{},{}",deviceId, + logger.debug("测站{}的gga单次解析结果:{},{},{},{}",deviceId, gga.getLongitude(), gga.getLatitude(), gga.getAltitude(), gga.getQuality()); if(groupCalc.getVer() == 7 && focusCalculator.isJump()){ logger.info("{}发生周跳",deviceId); @@ -227,11 +227,11 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService { }*/ Tilt tilt = focusCalculator.avgTilt(); - logger.info("测站 {} 的b562相对坐标重心:{}", deviceId, Arrays.toString(b562Result)); - logger.info("测站 {} 参考坐标:{}", deviceId, Arrays.toString(referPos)); + logger.debug("测站 {} 的b562相对坐标重心:{}", deviceId, Arrays.toString(b562Result)); + logger.debug("测站 {} 参考坐标:{}", deviceId, Arrays.toString(referPos)); //logger.info("测站 {} 的惯导相对坐标:{}", deviceId, Arrays.toString(r9250Result)); //logger.info("测站 {} 的相对坐标融合值:{}", deviceId, Arrays.toString(mergeResult)); - logger.info("测站 {} 的Tilt平均值:{}", deviceId, tilt); + logger.debug("测站 {} 的Tilt平均值:{}", deviceId, tilt); /* if (mergeResult != null && b562Result != null) { //这里检查一下result,过滤1千米外非正常数据 @@ -299,7 +299,7 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService { if(latestRpos != null) focusCalculator.setReferPoint(latestRpos); else { double[] avgEnu = gnssCalcFilterService.calcFilterValueByLastDay(locationRecord); - logger.info("{} calc 24 hours filtered pos", deviceId); + logger.debug("{} calc 24 hours filtered pos", deviceId); if (avgEnu != null) { ((FocusCalculator6) focusCalculator).setOriginalReferPoint(avgEnu); } @@ -324,23 +324,23 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService { if(focusCalculator2.isOriginalReferPointSet()) { if (locationRecord.getEnabled() && locationRecord.getRpose() != null) { focusCalculator2.setReferPoint(new double[]{locationRecord.getRpose(), locationRecord.getRposn(), locationRecord.getRposd()}); - logger.info("{} set reference pos to filter result:{},{},{}", + logger.debug("{} set reference pos to filter result:{},{},{}", deviceId, locationRecord.getRpose(), locationRecord.getRposn(), locationRecord.getRposd()); } else{ - logger.info("{} reference pos not changed",deviceId); + logger.debug("{} reference pos not changed",deviceId); } } else{ // 查询设备有没有配置初始位置 if(device.getIPose()!=null){ focusCalculator2.setOriginalReferPoint(new double[]{device.getIPose(),device.getIPosn(),device.getIPosd()}); - logger.info("{} set reference pos to init pos:{},{},{}", + logger.debug("{} set reference pos to init pos:{},{},{}", deviceId,device.getIPose(),device.getIPosn(),device.getIPosd()); } else{ focusCalculator.setReferPoint(b562Result); - logger.info("{} set reference pos to b562 result",deviceId); + logger.debug("{} set reference pos to b562 result",deviceId); } } } @@ -386,7 +386,7 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService { queryWrapper.last("limit 1"); GnssCalcData gnssCalcData = dataMapper.selectOne(queryWrapper); if(gnssCalcData != null){ - logger.info("{} getLatestPos", deviceId); + logger.debug("{} getLatestPos", deviceId); return new double[]{gnssCalcData.getRpose(),gnssCalcData.getRposn(),gnssCalcData.getRposd()}; } return null; diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D341LocationMessageExecutor.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D341LocationMessageExecutor.java index 013a5944..4448da94 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D341LocationMessageExecutor.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D341LocationMessageExecutor.java @@ -100,13 +100,13 @@ public class D341LocationMessageExecutor implements Executor { @Override public void channelInactive(ChannelHandlerContext ctx) throws Exception { - logger.info("channel inactive"); + logger.debug("channel inactive"); ctx.close(); } diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/WarningServiceImpl.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/WarningServiceImpl.java index 5530f374..f676fb88 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/WarningServiceImpl.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/WarningServiceImpl.java @@ -286,7 +286,6 @@ public class WarningServiceImpl implements WarningService { queryWrapper.last("limit 1"); WarningMsg warningMsg = warningMsgMapper.selectOne(queryWrapper); if(warningMsg!=null){ - logger.info("update warningMsg {}",warningMsg.getId()); warningMsg.setCleartime(LocalDateTime.now()); warningMsgMapper.updateById(warningMsg); } From f415441562e9265211e7438de5054944f3ce01dd Mon Sep 17 00:00:00 2001 From: weidong Date: Sat, 25 Jan 2025 17:48:29 +0800 Subject: [PATCH 4/9] =?UTF-8?q?1=E3=80=81=E5=A2=9E=E5=8A=A0=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E5=90=8E=E5=8F=B0=E5=91=BD=E4=BB=A4=EF=BC=8C=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E4=BB=8EUDP=E6=88=96TCP=E5=8F=91=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/imdroid/secapi/client/RtcmClient.java | 6 +- .../executor/D331RtcmMessageExecutor.java | 13 +++- .../com/imdroid/sideslope/sal/Device.java | 5 ++ .../imdroid/sideslope/web/ApiController.java | 71 +++++++++++++++++++ .../beidou/controller/CmdLineController.java | 45 ++++++++---- 5 files changed, 122 insertions(+), 18 deletions(-) diff --git a/sec-api/src/main/java/com/imdroid/secapi/client/RtcmClient.java b/sec-api/src/main/java/com/imdroid/secapi/client/RtcmClient.java index 2781e2b0..50442e01 100644 --- a/sec-api/src/main/java/com/imdroid/secapi/client/RtcmClient.java +++ b/sec-api/src/main/java/com/imdroid/secapi/client/RtcmClient.java @@ -1,6 +1,7 @@ package com.imdroid.secapi.client; import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; @@ -11,7 +12,10 @@ public interface RtcmClient { @PostMapping("/config_by_udp") HttpResp configByUdp(@RequestParam(name = "deviceId") String deviceId, @RequestParam(name = "configuration") String configData); - + @PostMapping(value = "/config_device") + public HttpResp configDevice(@RequestParam(name = "deviceId") String deviceId, @RequestParam(name = "configuration") String configData); + @GetMapping(value = "/get_device_info") + public HttpResp getDeviceInfo(@RequestParam(name = "deviceId") String deviceId, @RequestParam(name = "cmd") String cmd); @PostMapping("/device_param_changed") HttpResp deviceParamChanged(@RequestParam(name = "deviceId") String deviceId,@RequestParam(name = "oldParentId") String oldParentId); diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D331RtcmMessageExecutor.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D331RtcmMessageExecutor.java index 6240d092..7e30d7d1 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D331RtcmMessageExecutor.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D331RtcmMessageExecutor.java @@ -8,6 +8,7 @@ import com.imdroid.sideslope.bd.Gga; import com.imdroid.sideslope.message.D331RtcmMessage; import com.imdroid.sideslope.sal.Device; import com.imdroid.sideslope.sal.DeviceService; +import com.imdroid.sideslope.server.DeviceChannel; import com.imdroid.sideslope.server.OnlineChannels; import com.imdroid.sideslope.service.DataPersistService; import io.netty.buffer.ByteBuf; @@ -49,10 +50,18 @@ public class D331RtcmMessageExecutor implements Executor // 要求快速转发,因此用缓存,不要每次都查数据库 List deviceList = deviceService.findByParentId(id); //logger.debug("base station {} has {} rovers: ", message.getId(),deviceList.size()); + DeviceChannel deviceChannel = null; for (Device device : deviceList) { if (device.getOpMode() != GnssDevice.OP_MODE_USE) continue; String deviceId = device.getDeviceId(); - OnlineChannels.INSTANCE.get(deviceId).ifPresent(deviceChannel -> { + if(device.getDataChannelType() == Device.CHANNEL_TYPE_UDP) { + deviceChannel = OnlineChannels.INSTANCE.getDataChannel(deviceId); + } + else { + deviceChannel = OnlineChannels.INSTANCE.getConfigChannel(deviceId); + } + + if(deviceChannel!=null && deviceChannel.isOnline()){ if (logger.isDebugEnabled()) { logger.debug("forward d331 rtcm to device {}", deviceId); } @@ -62,7 +71,7 @@ public class D331RtcmMessageExecutor implements Executor ByteBuf buf = Unpooled.buffer(); buf.writeBytes(forwardBytes); deviceChannel.writeAndFlush(buf); - }); + } } } 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 8b40a4f0..a1e80fe3 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 @@ -26,6 +26,9 @@ public class Device { */ public static final int DEVICE_ROVER = 0; + public static final byte CHANNEL_TYPE_TCP = 0; + public static final byte CHANNEL_TYPE_UDP = 1; + private String name; private Integer tenantId; @@ -77,6 +80,8 @@ public class Device { LocalDateTime lastValidCalcDataTime; //最近一次有效解 int warningcode = 0; short abnormalD341Num = 0; + byte cfgChannelType = CHANNEL_TYPE_TCP; // 0:TCP;1:DUP + byte dataChannelType = CHANNEL_TYPE_UDP; // 0:TCP;1:DUP public void updateRx(int head, int bytes,int count){ lastRxHead = head; diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/web/ApiController.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/web/ApiController.java index 5fbc2585..75d3552a 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/web/ApiController.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/web/ApiController.java @@ -4,6 +4,7 @@ import com.imdroid.common.util.DataTypeUtil; import com.imdroid.secapi.client.HttpResp; import com.imdroid.sideslope.calc.MultiLineGNSSCalcService; import com.imdroid.sideslope.calc.SingleLineGNSSCalcService; +import com.imdroid.sideslope.sal.Device; import com.imdroid.sideslope.sal.LocalDeviceServiceImpl; import com.imdroid.sideslope.server.DeviceChannel; import com.imdroid.sideslope.server.OnlineChannels; @@ -13,6 +14,7 @@ import io.netty.buffer.Unpooled; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; @@ -97,6 +99,75 @@ public class ApiController { return resp; } + @PostMapping(value = "/config_device") + public HttpResp configDevice(String deviceId, String configuration) { + Map status = new HashMap<>(); + HttpResp resp = new HttpResp(); + // set channel0/channel1 tcp/udp + String[] paras = configuration.split("=| "); + Device device = localDeviceService.findByDeviceId(deviceId); + if(device!=null){ + resp.setResponseMessage("set OK."); + if(paras.length>=3){ + if(paras[1].equals("channel1")){ + if(paras[2].equals("tcp")) device.setDataChannelType(Device.CHANNEL_TYPE_TCP); + else device.setDataChannelType(Device.CHANNEL_TYPE_UDP); + } + else if(paras[1].equals("channel0")){ + if(paras[2].equals("tcp")) device.setCfgChannelType(Device.CHANNEL_TYPE_TCP); + else device.setCfgChannelType(Device.CHANNEL_TYPE_UDP); + } + } + else{ + status.put("paras", "error"); + } + } + else { + status.put("status", "Offline"); + resp.setCode(HttpResp.HTTP_RSP_FAILED); + resp.setResponseMessage("Offline."); + } + resp.setResponseObject(status); + return resp; + } + + @GetMapping(value = "/get_device_info") + public HttpResp getDeviceInfo(String deviceId, String cmd) { + Map status = new HashMap<>(); + HttpResp resp = new HttpResp(); + // get channel0/channel1 type + String[] paras = cmd.split("=| "); + Device device = localDeviceService.findByDeviceId(deviceId); + if(device!=null){ + resp.setResponseMessage("set OK."); + if(paras.length>=3){ + if(paras[2].equals("type")) { + if (paras[1].equals("channel1")) { + if (device.getDataChannelType()==Device.CHANNEL_TYPE_TCP) { + resp.setResponseMessage(paras[1]+" tcp"); + } + else resp.setResponseMessage(paras[1]+" udp"); + } else if (paras[1].equals("channel0")) { + if (device.getCfgChannelType()==Device.CHANNEL_TYPE_TCP) { + resp.setResponseMessage(paras[1]+" tcp"); + } + else resp.setResponseMessage(paras[1]+" udp"); + } + } + } + else{ + status.put("paras", "error"); + } + } + else { + status.put("status", "Offline"); + resp.setCode(HttpResp.HTTP_RSP_FAILED); + resp.setResponseMessage("Offline."); + } + resp.setResponseObject(status); + return resp; + } + @PostMapping("/device_param_changed") public HttpResp deviceParamChanged(String deviceId, String oldParentId) { // 更新设备缓存 diff --git a/sec-beidou/src/main/java/com/imdroid/beidou/controller/CmdLineController.java b/sec-beidou/src/main/java/com/imdroid/beidou/controller/CmdLineController.java index 2c9cebd3..4993057e 100644 --- a/sec-beidou/src/main/java/com/imdroid/beidou/controller/CmdLineController.java +++ b/sec-beidou/src/main/java/com/imdroid/beidou/controller/CmdLineController.java @@ -70,24 +70,36 @@ public class CmdLineController extends BasicController{ return HttpResult.fail("设备号不能为空"); } - String sendCmd = cmd.replaceAll(" +",""); + String sendCmd; short len = 0; int msgType = 0xD310 + cmdType; - if(cmdType == 10 || cmdType==11){ // DTU,string format - len = (short) (sendCmd.length() + 5); - sendCmd = Integer.toHexString(msgType) + HexUtil.Short2HexString(len)+ - HexUtil.Int2HexString(Integer.parseInt(deviceId))+ - "01"+HexUtil.String2HexString(sendCmd); - } - else{ //hex format - len = (short) (sendCmd.length()/2+4); - sendCmd = Integer.toHexString(msgType) + HexUtil.Short2HexString(len)+ - HexUtil.Int2HexString(Integer.parseInt(deviceId))+sendCmd; - } HttpResp> rsp; - if(sendChannel == 0) - rsp = rtcmClient.config(deviceId,sendCmd); - else rsp = rtcmClient.configByUdp(deviceId,sendCmd); + + if(cmd.startsWith("set")||cmd.startsWith("get")){ + msgType = 0xD3FF;//后台命令 + sendCmd = cmd; + len = (short) cmd.length(); + if(cmd.charAt(0)=='s') rsp = rtcmClient.configDevice(deviceId,sendCmd); + else rsp = rtcmClient.getDeviceInfo(deviceId,sendCmd); + } + else{ + sendCmd = cmd.replaceAll(" +",""); + + if(cmdType == 10 || cmdType==11){ // DTU,string format + len = (short) (sendCmd.length() + 5); + sendCmd = Integer.toHexString(msgType) + HexUtil.Short2HexString(len)+ + HexUtil.Int2HexString(Integer.parseInt(deviceId))+ + "01"+HexUtil.String2HexString(sendCmd); + } + else{ //hex format + len = (short) (sendCmd.length()/2+4); + sendCmd = Integer.toHexString(msgType) + HexUtil.Short2HexString(len)+ + HexUtil.Int2HexString(Integer.parseInt(deviceId))+sendCmd; + } + if(sendChannel == 0) + rsp = rtcmClient.config(deviceId,sendCmd); + else rsp = rtcmClient.configByUdp(deviceId,sendCmd); + } String txInfo = "TX "+ dateFormat.format(System.currentTimeMillis())+ " "+deviceId+" "+sendCmd; @@ -95,6 +107,9 @@ public class CmdLineController extends BasicController{ if(rsp.getCode() != HttpResp.HTTP_RSP_OK){ txInfo += "\r\n" + rsp.getResponseMessage(); } + else if(msgType == 0xD3FF){ + txInfo += "\r\n" + rsp.getResponseMessage(); + } // 保存 GnssMsg gnssMsg = new GnssMsg(); From bdacee54e60d60412c022e361066f3ac01d5e489 Mon Sep 17 00:00:00 2001 From: weidong Date: Mon, 27 Jan 2025 08:35:34 +0800 Subject: [PATCH 5/9] =?UTF-8?q?1=E3=80=81=E5=A2=9E=E5=8A=A0=E8=91=9B?= =?UTF-8?q?=E6=B4=B2=E5=9D=9D=E6=8E=A8=E9=80=81=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../beidou_fwd/task/GXXfz2Forwarder.java | 100 +----------------- .../beidou_fwd/task/GXXfzForwarder.java | 4 +- .../imdroid/beidou_fwd/task/GZBForwarder.java | 31 ++++++ 3 files changed, 36 insertions(+), 99 deletions(-) create mode 100644 sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GZBForwarder.java diff --git a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GXXfz2Forwarder.java b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GXXfz2Forwarder.java index 1eb8fba7..882b2edb 100644 --- a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GXXfz2Forwarder.java +++ b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GXXfz2Forwarder.java @@ -1,124 +1,30 @@ package com.imdroid.beidou_fwd.task; -import com.imdroid.beidou_fwd.entity.XFZData; import com.imdroid.beidou_fwd.service.TCPClient; -import com.imdroid.beidou_fwd.service.TCPListener; -import com.imdroid.common.util.GsonUtil; -import com.imdroid.common.util.NumberUtils; -import com.imdroid.secapi.dto.GnssCalcData; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; -import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; @Component @Configuration @EnableScheduling -public class GXXfz2Forwarder extends Forwarder{ - static final String FORWARDER_NAME = "广西路建"; +public class GXXfz2Forwarder extends GXXfzForwarder{ + private String FORWARDER_NAME = "广西路建"; @Value("${gxlj.server.host}") private String host; @Value("${gxlj.server.port}") private int port; - private TCPClient xfzTcpClient; - - static class XFZTCPListener implements TCPListener{ - public static final int STATE_NO_ACK = 0; - public static final int STATE_OK = 1; - public static final int STATE_FAILED = 2; - public int state = STATE_NO_ACK; - - public void clear(){ - state = STATE_NO_ACK; - } - @Override - public void onConnected() { - - } - - @Override - public void onDisconnect() { - - } - - @Override - public void onMessage(String msg) { - if(msg.contains("succeed")) state = STATE_OK; - else state = STATE_FAILED; - } - } - XFZTCPListener listener = new XFZTCPListener(); @PostConstruct + @Override void registerMe(){ init(FORWARDER_NAME, "TCP "+host+":"+port,6,FWD_DEVICE_ID,30); xfzTcpClient = new TCPClient(); xfzTcpClient.init(host, port,listener); xfzTcpClient.start(); } - - /** - * 每半小时转发GNSS解算结果 - */ - @Scheduled(cron = "0 0/30 * * * ?") // 每30分钟执行一次 - private void forwardGnss() { - logger.info("xfz forwardGnss"); - forwardCurrentGnss(); - } - @Override - int send(String projectId, List records, LocalDateTime sentTime){ - int sendNum = 0; - if(records.size() == 0) return 0; - - XFZData xfzTcpMessage = new XFZData(); - xfzTcpMessage.setProjectID(projectId); - xfzTcpMessage.setWorkPointID(projectId); - - List dataList = new ArrayList<>(records.size()); - xfzTcpMessage.setData(dataList); - - for(GnssCalcData locationRecord: records) { - XFZData.Data data = new XFZData.Data(); - dataList.add(data); - data.setDataTime(locationRecord.getCreatetime().format(formatter)); - data.setDevNum(locationRecord.getDeviceid()); - data.setDevtype("GNSS"); - // 单位由mm转化为m - data.setX(NumberUtils.scale(locationRecord.getRpose() * 0.001, 5)); - data.setY(NumberUtils.scale(locationRecord.getRposn() * 0.001, 5)); - data.setZ(NumberUtils.scale(locationRecord.getRposd() * 0.001, 5)); - sendNum++; - } - String json = "#" + GsonUtil.toJson(xfzTcpMessage) + "!"; - logger.info("project " + projectId + ": push calculation result to XFZ"); - logger.info(json); - try { - listener.clear(); - xfzTcpClient.writeAndFlush(json); - //等待应答 - if(!checkResult()) sendNum = 0; - } catch (Exception e1) { - sendNum = 0; - e1.printStackTrace(); - } - return sendNum; - } - - boolean checkResult() throws InterruptedException { - // 等待应答,最多等1s - for(int i=0; i<10; i++){ - Thread.sleep(100); - if(listener.state == XFZTCPListener.STATE_OK) return true; - else if(listener.state == XFZTCPListener.STATE_FAILED) return false; - } - return false; - } - } diff --git a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GXXfzForwarder.java b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GXXfzForwarder.java index 19d7f137..aab49633 100644 --- a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GXXfzForwarder.java +++ b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GXXfzForwarder.java @@ -21,14 +21,14 @@ import java.util.List; @Configuration @EnableScheduling public class GXXfzForwarder extends Forwarder{ - static final String FORWARDER_NAME = "广西新发展"; + private String FORWARDER_NAME = "广西新发展"; @Value("${xfz.server.host}") private String host; @Value("${xfz.server.port}") private int port; - private TCPClient xfzTcpClient; + TCPClient xfzTcpClient; static class XFZTCPListener implements TCPListener{ public static final int STATE_NO_ACK = 0; diff --git a/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GZBForwarder.java b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GZBForwarder.java new file mode 100644 index 00000000..dcdf33bb --- /dev/null +++ b/sec-beidou-fwd/src/main/java/com/imdroid/beidou_fwd/task/GZBForwarder.java @@ -0,0 +1,31 @@ +package com.imdroid.beidou_fwd.task; + +import com.imdroid.beidou_fwd.service.TCPClient; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +@Component +@Configuration +@EnableScheduling +public class GZBForwarder extends GXXfzForwarder{ + private String FORWARDER_NAME = "葛洲坝"; + @Value("${gzb.server.host}") + private String host; + + @Value("${gzb.server.port}") + private int port; + + @PostConstruct + @Override + void registerMe(){ + init(FORWARDER_NAME, "TCP "+host+":"+port,1,FWD_DEVICE_ID,30); + xfzTcpClient = new TCPClient(); + xfzTcpClient.init(host, port,listener); + xfzTcpClient.start(); + } + +} From 44c267f2381c0e48995745a53915fedd4de9a313 Mon Sep 17 00:00:00 2001 From: weidong Date: Wed, 29 Jan 2025 16:41:41 +0800 Subject: [PATCH 6/9] =?UTF-8?q?1=E3=80=81=E6=89=93=E5=8D=B0=E6=94=B6?= =?UTF-8?q?=E5=88=B0=E6=9C=AA=E7=9F=A5=E6=B6=88=E6=81=AF=E7=A0=81=E6=B5=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/imdroid/sideslope/server/udp/RtcmUdpHandler.java | 4 +++- .../main/java/com/imdroid/sideslope/web/ApiController.java | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/server/udp/RtcmUdpHandler.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/server/udp/RtcmUdpHandler.java index cfcefb89..d985c580 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/server/udp/RtcmUdpHandler.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/server/udp/RtcmUdpHandler.java @@ -46,7 +46,9 @@ public class RtcmUdpHandler extends ChannelInboundHandlerAdapter { } BizExecutors.execute(message); } catch (UnSupportedMessageException e) { - logger.warn("receive un supported message: {}", e.getMessage()); + byte[] data = new byte[packet.content().readableBytes()]; + packet.content().getBytes(0, data); + logger.warn("receive un supported message: {}", DataTypeUtil.getHexString(data)); } catch (Exception e) { logger.error("channel read error: {}", e.toString()); } finally { diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/web/ApiController.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/web/ApiController.java index 75d3552a..39413ae5 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/web/ApiController.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/web/ApiController.java @@ -56,7 +56,7 @@ public class ApiController { // send command ByteBuf buf = Unpooled.buffer(); byte[] data = getBinaryData(ConfigDataTypeEnum.HEX, configuration); - logger.info("send command:{}", configuration); + logger.debug("send command:{}", configuration); buf.writeBytes(data); deviceChannel.writeAndFlush(buf); } @@ -83,7 +83,7 @@ public class ApiController { // send command ByteBuf buf = Unpooled.buffer(); byte[] data = getBinaryData(ConfigDataTypeEnum.HEX, configuration); - logger.info("send command:{}", configuration); + logger.debug("send command:{}", configuration); buf.writeBytes(data); deviceChannel.writeAndFlush(buf); } From 4ebc66da850dbe55bb4e11c21ac4f75fb9edec72 Mon Sep 17 00:00:00 2001 From: weidong Date: Wed, 29 Jan 2025 17:06:26 +0800 Subject: [PATCH 7/9] =?UTF-8?q?1=E3=80=81=E5=AF=B9=E4=BA=8E=E6=97=A0?= =?UTF-8?q?=E5=9B=BA=E5=AE=9A=E8=A7=A3=E7=9A=84=E8=AE=BE=E5=A4=87=EF=BC=8C?= =?UTF-8?q?=E5=9C=A8=E5=8F=91=E5=86=B7=E5=90=AF=E5=8A=A8=E6=8C=87=E4=BB=A4?= =?UTF-8?q?=E5=89=8D=EF=BC=8C=E5=85=88=E6=A3=80=E6=9F=A5=E5=9F=BA=E7=AB=99?= =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E6=98=AF=E5=90=A6=E6=AD=A3=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../executor/D3F0SelfCheckMessageExecutor.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F0SelfCheckMessageExecutor.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F0SelfCheckMessageExecutor.java index c937185c..dd8ef688 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F0SelfCheckMessageExecutor.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/executor/D3F0SelfCheckMessageExecutor.java @@ -111,9 +111,21 @@ public class D3F0SelfCheckMessageExecutor implements Executor0 &&device.getAbnormalD341Num()>10){ - startBTResetTask(device); + if(isBaseStationFwd(device)) startBTResetTask(device); device.clearNoResultStat(); } else if((device.getWarningcode()&WarningCfg.TYPE_CONT_INVALID_RESULT) !=0){ - startBTHotStartTask(device); + if(isBaseStationFwd(device)) startBTHotStartTask(device); device.clearNoResultStat(); } } From accd869dc8267f116e0150be69422d2b1ed8c46f Mon Sep 17 00:00:00 2001 From: weidong Date: Wed, 5 Feb 2025 07:53:54 +0800 Subject: [PATCH 8/9] =?UTF-8?q?1=E3=80=81=E5=9B=BD=E4=BA=A7=E7=AE=97?= =?UTF-8?q?=E6=B3=95=E5=A2=9E=E5=8A=A0=E5=91=A8=E8=B7=B3=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sideslope/bd/FocusCalculator3.java | 84 +++++-------- .../sideslope/bd/FocusCalculator7.java | 117 ------------------ .../calc/SingleLineGNSSCalcService.java | 13 +- 3 files changed, 36 insertions(+), 178 deletions(-) delete mode 100644 sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator7.java diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator3.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator3.java index 32a13028..eb94fd01 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator3.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator3.java @@ -14,37 +14,19 @@ import static com.imdroid.sideslope.bd.GeoCoordConverterUtil.*; * 博通:用GGA绝对坐标代替相对位置 */ public class FocusCalculator3 extends FocusCalculator1{ + //final static long scale = 100000000L;//地球1°:111km,放大到mm乘以100,000,000 + final static int bad_change_mm = 500;//固定解跳变连续10次超过500mm,认为是周跳 + final static int bad_duration = 10; + + int bad_count = 0; Device bsDevice; + public FocusCalculator3(Device bsDevice){ super(); this.bsDevice = bsDevice; gravityMinCount = 80; } -/* - static class EComparator implements Comparator{ - @Override - public int compare(double[] point1, double[] point2) { - return Double.compare(point1[1], point2[1]); - //return (int) ((point1[0] - point2[0])*100); - } - } - static class NComparator implements Comparator{ - @Override - public int compare(double[] point1, double[] point2) { - return Double.compare(point1[1], point2[1]); - //return (int) ((point1[1] - point2[1])*100); - } - } - - static class DComparator implements Comparator{ - @Override - public int compare(double[] point1, double[] point2) { - return Double.compare(point1[1], point2[1]); - //return (int) ((point1[2] - point2[2])*100); - } - } -*/ @Override public void addGGA(Gga gga) { if(gga == null) return; @@ -69,7 +51,6 @@ public class FocusCalculator3 extends FocusCalculator1{ // 以基站为站心的 ENU 坐标 ENU_Coordinate difference_enu = ECEF2ENU(reference_ecef, rover_ecef); - System.out.println("DIFF ENU:" + difference_enu.ENU_E + " " + difference_enu.ENU_N + " " + difference_enu.ENU_U); end = new double[]{ difference_enu.ENU_E*1000, difference_enu.ENU_N*1000, @@ -79,7 +60,17 @@ public class FocusCalculator3 extends FocusCalculator1{ if(gga.isFixed()) { counterFixedResult++; - //pointList.add(xyz); + if(pointList.size()>0){ + double[] lastXyz = pointList.get(pointList.size()-1); + if(Math.abs(end[0]-lastXyz[0])>bad_change_mm || + Math.abs(end[1]-lastXyz[1])>bad_change_mm || + Math.abs(end[2]-lastXyz[2])>bad_change_mm){ + bad_count++; + return; + } + } + bad_count = 0; + pointList.add(end); } else if(gga.getQuality() == 5) counterNoFixed++; @@ -95,33 +86,6 @@ public class FocusCalculator3 extends FocusCalculator1{ } - /*double calcGravity(List list , int index){ - double sum = 0; - int begin = (int) (list.size() * 0.25); - int end = (int) (list.size() * 0.75); - if(end-begin == 0) return 0; - - for(int i=begin; i= 3){ - Collections.sort(pointList, new EComparator()); - double e = calcGravity(pointList,0); - Collections.sort(pointList, new NComparator()); - double n = calcGravity(pointList,1); - Collections.sort(pointList, new DComparator()); - double d = calcGravity(pointList,2); - return new double[]{e,n,d}; - } - - return null; - }*/ - @Override public double[] resultB562(){ try { @@ -166,9 +130,23 @@ public class FocusCalculator3 extends FocusCalculator1{ return null; } + @Override + public void reset(){ + super.reset(); + bad_count = 0; + } + @Override public int getVer() { return 3; } + public boolean isJump(){ + if (bad_count>bad_duration){ + bad_count = 0; + return true; + } + else return false; + } + } diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator7.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator7.java deleted file mode 100644 index 821c78b7..00000000 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator7.java +++ /dev/null @@ -1,117 +0,0 @@ -package com.imdroid.sideslope.bd; - -import com.imdroid.sideslope.sal.Device; - -import static com.imdroid.sideslope.bd.GeoCoordConverterUtil.ECEF2ENU; -import static com.imdroid.sideslope.bd.GeoCoordConverterUtil.LLA2ECEF; - - -/** - * 博通:用GGA绝对坐标代替相对位置 - */ -public class FocusCalculator7 extends FocusCalculator3{ - - //final static long scale = 100000000L;//地球1°:111km,放大到mm乘以100,000,000 - final static int bad_change_mm = 500;//固定解跳变连续10次超过500mm,认为是周跳 - final static int bad_duration = 10; - - int bad_count = 0; - - public FocusCalculator7(Device bsDevice) { - super(bsDevice); - } - - /*@Override - public void addGGA(Gga gga) { - if(gga == null) return; - - double[] xyz = new double[]{gga.getLongitude()*scale, gga.getLatitude()*scale, gga.getAltitude()*1000, gga.getQuality()}; - - if(gga.isFixed()) { - counterFixedResult++; - if(pointList.size()>0){ - double[] lastXyz = pointList.get(pointList.size()-1); - if(Math.abs(xyz[0]-lastXyz[0])>bad_change_mm || - Math.abs(xyz[1]-lastXyz[1])>bad_change_mm || - Math.abs(xyz[2]-lastXyz[2])>bad_change_mm){ - bad_count++; - return; - } - } - bad_count = 0; - - pointList.add(xyz); - } - else if(gga.getQuality() == 5) counterNoFixed++; - else counterNoB562 ++; - }*/ - - @Override - public void addGGA(Gga gga) { - if(gga == null) return; - double[] end; - - // 测站的GGA - 测站 LLA 数据 - GeoCoordConverterUtil.LLA_Coordinate rover_lla = new GeoCoordConverterUtil.LLA_Coordinate(gga.getLatitude(),gga.getLongitude(),gga.getAltitude()); - // 测站 LLA 坐标转 ECEF 坐标,单位米 - GeoCoordConverterUtil.ECEF_Coordinate rover_ecef = LLA2ECEF(rover_lla); - - if(bsDevice==null || bsDevice.getEcefx()==null){ - end = new double[]{ - rover_ecef.getECEF_X()*1000, - rover_ecef.getECEF_Y()*1000, - rover_ecef.getECEF_Z()*1000, - gga.getQuality()}; - } - else { - // 查询测站的绑定的基站 - GeoCoordConverterUtil.ECEF_Coordinate reference_ecef = new GeoCoordConverterUtil.ECEF_Coordinate(bsDevice.getEcefx(), bsDevice.getEcefy(), bsDevice.getEcefz()); - - // 以基站为站心的 ENU 坐标 - GeoCoordConverterUtil.ENU_Coordinate difference_enu = ECEF2ENU(reference_ecef, rover_ecef); - end = new double[]{ - difference_enu.ENU_E*1000, - difference_enu.ENU_N*1000, - difference_enu.ENU_U*1000, - gga.getQuality()}; - } - - if(gga.isFixed()) { - counterFixedResult++; - if(pointList.size()>0){ - double[] lastXyz = pointList.get(pointList.size()-1); - if(Math.abs(end[0]-lastXyz[0])>bad_change_mm || - Math.abs(end[1]-lastXyz[1])>bad_change_mm || - Math.abs(end[2]-lastXyz[2])>bad_change_mm){ - bad_count++; - return; - } - } - bad_count = 0; - - pointList.add(end); - } - else if(gga.getQuality() == 5) counterNoFixed++; - else counterNoB562 ++; - } - - @Override - public void reset(){ - super.reset(); - bad_count = 0; - } - - @Override - public int getVer() { - return 7; - } - - public boolean isJump(){ - if (bad_count>bad_duration){ - bad_count = 0; - return true; - } - else return false; - } - -} 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 61fb2180..e9f745a5 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 @@ -85,16 +85,13 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService { if(device == null) return; GnssGroupCalc groupCalc = getGroupCalc(device.getCalcGroupId()); if(groupCalc==null) return; - device.setB562AsCalc(groupCalc.getVer()!=3 && groupCalc.getVer()!=7); + device.setB562AsCalc(groupCalc.getVer()!=3); if(completeWhenIdle) resultOutputTimer(device, groupCalc, message.getCreateTime()); //todo 创建FocusCalculator对象需获取该测站的杆长度,上一小时的Tilt平均值,上一小时的测站相对坐标融合值ekfResult FocusCalculator focusCalculator; - if(groupCalc.getVer() == 7){ - focusCalculator = calculatorMap.computeIfAbsent(deviceId,s -> new FocusCalculator7(null)); - } - else if(groupCalc.getVer() == 6){ + if(groupCalc.getVer() == 6){ focusCalculator = calculatorMap.computeIfAbsent(deviceId,s -> new FocusCalculator6(deviceId, 50)); } else if(groupCalc.getVer() == 5){ @@ -145,7 +142,7 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService { focusCalculator.addGGA(gga); logger.debug("测站{}的gga单次解析结果:{},{},{},{}",deviceId, gga.getLongitude(), gga.getLatitude(), gga.getAltitude(), gga.getQuality()); - if(groupCalc.getVer() == 7 && focusCalculator.isJump()){ + if(groupCalc.getVer() == 3 && focusCalculator.isJump()){ logger.info("{}发生周跳",deviceId); hardResetDevice(deviceId); } @@ -273,7 +270,7 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService { gnssCalcFilterService.calc(device, groupCalc, locationRecord, latestRpos); } else { - if(focusCalculator.getVer()==1 || focusCalculator.getVer()==3 || focusCalculator.getVer()==5 || focusCalculator.getVer()==7){ + if(focusCalculator.getVer()==1 || focusCalculator.getVer()==3 || focusCalculator.getVer()==5){ gnssCalcFilterService.calc(device, groupCalc, locationRecord, null); } else { @@ -316,7 +313,7 @@ public class SingleLineGNSSCalcService implements GNSSDataCalcService { else focusCalculator.setReferPoint(b562Result); } } - else if(focusCalculator.getVer()==1 || focusCalculator.getVer()==3 || focusCalculator.getVer()==5 || focusCalculator.getVer()==7) { + else if(focusCalculator.getVer()==1 || focusCalculator.getVer()==3 || focusCalculator.getVer()==5) { focusCalculator.setReferPoint(b562Result); } else { From 67a3cec36eaa5f8fb79c7c93ef8badd57392c3c3 Mon Sep 17 00:00:00 2001 From: weidong Date: Wed, 5 Feb 2025 08:01:22 +0800 Subject: [PATCH 9/9] =?UTF-8?q?1=E3=80=81=E5=8E=BB=E6=8E=89=E7=AE=97?= =?UTF-8?q?=E6=B3=95=E7=89=88=E6=9C=AC7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/resources/templates/page/table/gnss_add_group_calc.html | 1 - 1 file changed, 1 deletion(-) diff --git a/sec-beidou/src/main/resources/templates/page/table/gnss_add_group_calc.html b/sec-beidou/src/main/resources/templates/page/table/gnss_add_group_calc.html index 16697eea..902f3485 100644 --- a/sec-beidou/src/main/resources/templates/page/table/gnss_add_group_calc.html +++ b/sec-beidou/src/main/resources/templates/page/table/gnss_add_group_calc.html @@ -39,7 +39,6 @@ -