From 73bffd2ce55db22e3994e9ce4e22c3b6f1149b29 Mon Sep 17 00:00:00 2001 From: weidong Date: Fri, 3 Nov 2023 15:03:37 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BA=86=E5=8D=95=E6=AC=A1?= =?UTF-8?q?=E8=A7=A3=E7=AE=97=EF=BC=9B=E5=A2=9E=E5=8A=A0=E4=BA=86=E8=A7=A3?= =?UTF-8?q?=E7=AE=97=E7=BB=93=E6=9E=9C=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/imdroid/secapi/dto/GnssCalcData.java | 1 + .../com/imdroid/secapi/dto/GnssStatusMsg.java | 2 +- .../com/imdroid/secapi/dto/GnssTrxMsg.java | 2 +- sec-beidou-rtcm/pom.xml | 6 + .../imdroid/sideslope/bd/FocusCalculator.java | 11 + .../calc/SingleLineGNSSCalcService.java | 39 ++- .../sideslope/message/BaseMessage.java | 42 +--- .../message/D3F0SelfCheckMessage.java | 4 +- .../message/D3F2StopIndicationMessage.java | 6 +- .../sideslope/sal/DbDeviceServiceImpl.java | 5 +- .../imdroid/sideslope/sal/DeviceService.java | 4 +- .../sideslope/sal/LocalDeviceServiceImpl.java | 5 +- .../sideslope/sal/LocationRecordDTO.java | 81 ------- .../service/DataPersistServiceImpl.java | 2 +- .../GNSSDeviceLocationRecordService.java | 6 +- .../GNSSDeviceLocationRecordServiceImpl.java | 84 +++---- .../controller/GnssCalcDataController.java | 58 +++++ .../beidou/controller/GnssMsgController.java | 78 +++++- .../GnssSingleCalcDataController.java | 29 ++- .../beidou/controller/LayuiController.java | 15 +- sec-beidou/src/main/resources/db/schema.sql | 31 ++- .../templates/page/gnss_data_calc.html | 225 +++++++++--------- .../templates/page/gnss_data_raw.html | 14 +- .../resources/templates/page/gnss_msg.html | 37 +-- .../templates/page/gnss_msg_status.html | 39 ++- .../templates/page/gnss_msg_trx.html | 49 ++-- 26 files changed, 483 insertions(+), 392 deletions(-) delete mode 100644 sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/LocationRecordDTO.java create mode 100644 sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssCalcDataController.java diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssCalcData.java b/sec-api/src/main/java/com/imdroid/secapi/dto/GnssCalcData.java index bd63a4ea..43eb5292 100644 --- a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssCalcData.java +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/GnssCalcData.java @@ -34,4 +34,5 @@ public class GnssCalcData { double rb562e; double rb562d; double rb562n; + int pps; } diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssStatusMsg.java b/sec-api/src/main/java/com/imdroid/secapi/dto/GnssStatusMsg.java index 31ffd3a6..9c9ad816 100644 --- a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssStatusMsg.java +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/GnssStatusMsg.java @@ -17,7 +17,7 @@ import java.sql.Timestamp; public class GnssStatusMsg { @TableId(value = "id", type = IdType.AUTO) Long id; - Timestamp updatetime; + Timestamp createtime; Timestamp devicetime; String deviceid; float roll; diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssTrxMsg.java b/sec-api/src/main/java/com/imdroid/secapi/dto/GnssTrxMsg.java index 15da29e4..b77bb38a 100644 --- a/sec-api/src/main/java/com/imdroid/secapi/dto/GnssTrxMsg.java +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/GnssTrxMsg.java @@ -17,7 +17,7 @@ import java.sql.Timestamp; public class GnssTrxMsg { @TableId(value = "id", type = IdType.AUTO) Long id; - Timestamp updatetime; + Timestamp createtime; Timestamp devicetime; String deviceid; long uart1txbytes; diff --git a/sec-beidou-rtcm/pom.xml b/sec-beidou-rtcm/pom.xml index 22b4258d..ce2ceb1f 100644 --- a/sec-beidou-rtcm/pom.xml +++ b/sec-beidou-rtcm/pom.xml @@ -127,6 +127,12 @@ lombok true + + + org.ejml + ejml-all + 0.41 + diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator.java index 219a7e2d..14f01b6d 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/FocusCalculator.java @@ -20,6 +20,8 @@ public class FocusCalculator { private boolean flag = false; // 是否是第一次计算 private List pointList = new ArrayList<>(); public static double[] lastFocus = null;// + private int delay_ms = 0; + private int counter = 0; /** @@ -322,4 +324,13 @@ public class FocusCalculator { return r; } + public void addDelayMs(int ms){ + delay_ms += ms; + counter ++; + } + + public int getAvgDelayMs(){ + return delay_ms/counter; + } + } 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 e7c3bb95..0cef4e56 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,5 +1,6 @@ package com.imdroid.sideslope.calc; +import com.imdroid.secapi.dto.GnssCalcData; import com.imdroid.sideslope.bd.*; import com.imdroid.sideslope.message.D341LocationMessage; import com.imdroid.sideslope.sal.*; @@ -82,9 +83,12 @@ public class SingleLineGNSSCalcService implements GNSSCalcService { } focusCalculator.addTilt(tilt); if (logger.isDebugEnabled()) { - logger.debug("测站" + deviceId + "的9250单次解析结果:{}", tilt.toString() + "," + Arrays.toString(TiltUtil.toPosition(tilt, focusCalculator.getTilt0(), focusCalculator.getPosition0(), focusCalculator.getR()))); + logger.debug("测站" + deviceId + "的9250单次解析结果:{}", tilt + "," + Arrays.toString(TiltUtil.toPosition(tilt, focusCalculator.getTilt0(), focusCalculator.getPosition0(), focusCalculator.getR()))); } + // 计算延迟 + focusCalculator.addDelayMs(message.getPps()); + //计算到单次相对位置xyz并记录 //tilt共16个字节,从后边开始找b562 double[] doubles = message.getB562_loc(); @@ -127,6 +131,7 @@ public class SingleLineGNSSCalcService implements GNSSCalcService { logger.info("测站 {} 的9250相对坐标:{}", deviceId, Arrays.toString(r9250Result)); logger.info("测站 {} 的相对坐标融合值:{}", deviceId, Arrays.toString(result)); logger.info("测站 {} 的Tilt平均值:{}", deviceId, tilt); + logger.info("测站 {} 的平均延迟:{}ms", deviceId, focusCalculator.getAvgDelayMs()); if (tilt != null) { if (Boolean.TRUE.equals(cleanTiltStatusMap.get(deviceId))) { @@ -147,7 +152,7 @@ public class SingleLineGNSSCalcService implements GNSSCalcService { } else { positionMap.put(deviceId, result); } - postLocationRecord(deviceId, b562Result, r9250Result, result); + postLocationRecord(deviceId, b562Result, r9250Result, result, focusCalculator.getAvgDelayMs()); }else{ logger.error("融合值异常"); } @@ -159,18 +164,33 @@ public class SingleLineGNSSCalcService implements GNSSCalcService { timerMap.put(deviceId, future); } - private void postLocationRecord(String deviceId, double[] b562Result, double[] r9250Result, double[] result) { - LocationRecordDTO locationRecord = new LocationRecordDTO(deviceId, NumberUtils.doubleArrayToString(b562Result), - NumberUtils.doubleArrayToString(r9250Result), NumberUtils.doubleArrayToString(result),String.valueOf(isExceedMap.get(deviceId))); - deviceService.postLocationRecord(locationRecord); + private void postLocationRecord(String deviceId, double[] b562Result, double[] r9250Result, double[] result, int delay) { + GnssCalcData locationRecord = new GnssCalcData(); + locationRecord.setDeviceid(deviceId); + if(b562Result!=null) { + locationRecord.setB562e(b562Result[0] * 10); //cm->mm + locationRecord.setB562n(b562Result[1] * 10); + locationRecord.setB562d(b562Result[2] * 10); + } + if(r9250Result!=null) { + locationRecord.setR9250e(r9250Result[0]); + locationRecord.setR9250n(r9250Result[1]); + locationRecord.setR9250d(r9250Result[2]); + } + if(result!=null) { + locationRecord.setResulte(result[0]); + locationRecord.setResultn(result[1]); + locationRecord.setResultd(result[2]); + } + locationRecord.setPps(delay); + deviceService.postLocationRecord(locationRecord, isExceedMap.get(deviceId)); } @Override public double[] calcResult(String deviceId,double[] b562Xyz, double[] tiltXyz) { FocusCalculator focusCalculator = calculatorMap.get(deviceId); if (focusCalculator != null) { - double[] result = focusCalculator.ekfResult(b562Xyz,tiltXyz); - return result; + return focusCalculator.ekfResult(b562Xyz,tiltXyz); } return null; } @@ -179,8 +199,7 @@ public class SingleLineGNSSCalcService implements GNSSCalcService { public Tilt calcAvgTilt(String deviceId) { FocusCalculator focusCalculator = calculatorMap.get(deviceId); if (focusCalculator != null) { - Tilt tilt = focusCalculator.avgTilt(); - return tilt; + return focusCalculator.avgTilt(); } return null; } diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/message/BaseMessage.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/message/BaseMessage.java index b2753ad4..0fcea9fa 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/message/BaseMessage.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/message/BaseMessage.java @@ -2,11 +2,13 @@ package com.imdroid.sideslope.message; import com.imdroid.sideslope.util.WrongMessageRecorder; import io.netty.buffer.ByteBuf; +import lombok.Data; /** * @author Layton * @date 2023/2/2 20:32 */ +@Data public abstract class BaseMessage { protected short header; protected String id; @@ -37,44 +39,4 @@ public abstract class BaseMessage { public boolean shouldDecodeHeader() { return true; } - - public short getHeader() { - return header; - } - - public void setHeader(short header) { - this.header = header; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public int getLen() { - return len; - } - - public void setLen(int len) { - this.len = len; - } - - public int getPps() { - return pps; - } - - public void setPps(int pps) { - this.pps = pps; - } - - public byte[] getSrcData() { - return srcData; - } - - public void setSrcData(byte[] srcData) { - this.srcData = srcData; - } } diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/message/D3F0SelfCheckMessage.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/message/D3F0SelfCheckMessage.java index 3ab6a638..32536cc1 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/message/D3F0SelfCheckMessage.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/message/D3F0SelfCheckMessage.java @@ -3,6 +3,7 @@ package com.imdroid.sideslope.message; import com.imdroid.secapi.dto.GnssStatusMsg; import io.netty.buffer.ByteBuf; import lombok.Data; +import lombok.EqualsAndHashCode; import java.sql.Timestamp; @@ -12,6 +13,7 @@ import java.sql.Timestamp; * @author Layton * @date 2023/2/2 20:38 */ +@EqualsAndHashCode(callSuper=true) @Data public class D3F0SelfCheckMessage extends BaseMessage { @@ -20,7 +22,7 @@ public class D3F0SelfCheckMessage extends BaseMessage { @Override public void decodeBody(ByteBuf src) { statusMsg.setDeviceid(getId()); - statusMsg.setUpdatetime(new Timestamp(System.currentTimeMillis())); + statusMsg.setCreatetime(new Timestamp(System.currentTimeMillis())); statusMsg.setDevicetime(new Timestamp(getPps()*1000)); statusMsg.setPitch(src.readFloat()); statusMsg.setRoll(src.readFloat()); diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/message/D3F2StopIndicationMessage.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/message/D3F2StopIndicationMessage.java index d6b034c7..e231858e 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/message/D3F2StopIndicationMessage.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/message/D3F2StopIndicationMessage.java @@ -3,6 +3,7 @@ package com.imdroid.sideslope.message; import com.imdroid.secapi.dto.GnssTrxMsg; import io.netty.buffer.ByteBuf; import lombok.Data; +import lombok.EqualsAndHashCode; import java.sql.Timestamp; @@ -12,14 +13,15 @@ import java.sql.Timestamp; * @author LiGang */ @Data +@EqualsAndHashCode(callSuper=true) public class D3F2StopIndicationMessage extends BaseMessage { - private GnssTrxMsg trxMsg = new GnssTrxMsg();; + private GnssTrxMsg trxMsg = new GnssTrxMsg(); @Override public void decodeBody(ByteBuf src) { trxMsg.setDeviceid(getId()); - trxMsg.setUpdatetime(new Timestamp(System.currentTimeMillis())); + trxMsg.setCreatetime(new Timestamp(System.currentTimeMillis())); trxMsg.setDevicetime(new Timestamp(getPps()*1000)); int keys = (this.len - 6) / 5; for (int i = 0; i < keys; i++) { diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/DbDeviceServiceImpl.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/DbDeviceServiceImpl.java index 9ee2e939..6b9ef4d9 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/DbDeviceServiceImpl.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/DbDeviceServiceImpl.java @@ -1,6 +1,7 @@ package com.imdroid.sideslope.sal; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.imdroid.secapi.dto.GnssCalcData; import com.imdroid.secapi.dto.GnssDevice; import com.imdroid.secapi.dto.GnssDeviceMapper; import com.imdroid.sideslope.service.GNSSDeviceLocationRecordService; @@ -62,10 +63,10 @@ public class DbDeviceServiceImpl implements DeviceService { } @Override - public boolean postLocationRecord(LocationRecordDTO locationRecord) { + public boolean postLocationRecord(GnssCalcData locationRecord, boolean isExceed) { ThreadManager.getFixedThreadPool().submit(() -> { try { - gnssDeviceLocationRecordService.save(locationRecord); + gnssDeviceLocationRecordService.save(locationRecord, isExceed); } catch (Exception e) { logger.error(e.toString()); } diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/DeviceService.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/DeviceService.java index 11aa8f92..12b0f0f3 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/DeviceService.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/DeviceService.java @@ -1,5 +1,7 @@ package com.imdroid.sideslope.sal; +import com.imdroid.secapi.dto.GnssCalcData; + import java.util.Date; import java.util.List; @@ -13,7 +15,7 @@ public interface DeviceService { List findByParentId(String parentId); - boolean postLocationRecord(LocationRecordDTO locationRecord); + boolean postLocationRecord(GnssCalcData locationRecord, boolean isExceed); void updateLatestDataTime(String deviceId, Date latestDataTime); } diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/LocalDeviceServiceImpl.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/LocalDeviceServiceImpl.java index c7312a19..039e968a 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/LocalDeviceServiceImpl.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/LocalDeviceServiceImpl.java @@ -2,6 +2,7 @@ package com.imdroid.sideslope.sal; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; +import com.imdroid.secapi.dto.GnssCalcData; import org.springframework.stereotype.Component; import javax.annotation.Resource; @@ -50,8 +51,8 @@ public class LocalDeviceServiceImpl implements DeviceService { } @Override - public boolean postLocationRecord(LocationRecordDTO locationRecord) { - return delegate.postLocationRecord(locationRecord); + public boolean postLocationRecord(GnssCalcData locationRecord, boolean isExceed) { + return delegate.postLocationRecord(locationRecord, isExceed); } @Override diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/LocationRecordDTO.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/LocationRecordDTO.java deleted file mode 100644 index e37eda1e..00000000 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/sal/LocationRecordDTO.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.imdroid.sideslope.sal; - - -/** - * @author Layton - * @date 2023/2/15 20:58 - */ -public class LocationRecordDTO { - - private String deviceId; - - /** - * 北斗位置(b562),相对坐标 - */ - private String b562; - - /** - * 惯导位置(9250),相对坐标 - */ - private String r9250; - - /** - * 融合位置,相对坐标 - */ - private String result; - - - private String flag; - - public LocationRecordDTO() { - - } - - public LocationRecordDTO(String deviceId, String b562, String r9250, String result, String flag) { - this.deviceId = deviceId; - this.b562 = b562; - this.r9250 = r9250; - this.result = result; - this.flag = flag; - } - - public String getFlag() { - return flag; - } - - public void setFlag(String flag) { - this.flag = flag; - } - - public String getDeviceId() { - return deviceId; - } - - public void setDeviceId(String deviceId) { - this.deviceId = deviceId; - } - - public String getB562() { - return b562; - } - - public void setB562(String b562) { - this.b562 = b562; - } - - public String getR9250() { - return r9250; - } - - public void setR9250(String r9250) { - this.r9250 = r9250; - } - - public String getResult() { - return result; - } - - public void setResult(String result) { - this.result = result; - } -} 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 24ad9178..5e4244a0 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 @@ -44,7 +44,7 @@ public class DataPersistServiceImpl implements DataPersistService { } //deviceState.setId(SequenceUtil.getSequence()); deviceState.setDeviceid(message.getId()); - deviceState.setUpdatetime(statusMsg.getUpdatetime()); + deviceState.setUpdatetime(statusMsg.getCreatetime()); deviceState.setRoll(statusMsg.getRoll()); deviceState.setPitch(statusMsg.getPitch()); deviceState.setYaw(statusMsg.getYaw()); diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/GNSSDeviceLocationRecordService.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/GNSSDeviceLocationRecordService.java index f4b9dd5a..de6bea7d 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/GNSSDeviceLocationRecordService.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/GNSSDeviceLocationRecordService.java @@ -1,7 +1,7 @@ package com.imdroid.sideslope.service; +import com.imdroid.secapi.dto.GnssCalcData; import com.imdroid.sideslope.message.D341LocationMessage; -import com.imdroid.sideslope.sal.LocationRecordDTO; /** @@ -10,6 +10,6 @@ import com.imdroid.sideslope.sal.LocationRecordDTO; */ public interface GNSSDeviceLocationRecordService { - public void save(LocationRecordDTO importRecord) throws Exception; - public void saveSingleCalcData(D341LocationMessage message); + void save(GnssCalcData locationRecord, boolean isExceed) throws Exception; + void saveSingleCalcData(D341LocationMessage message); } diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/GNSSDeviceLocationRecordServiceImpl.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/GNSSDeviceLocationRecordServiceImpl.java index e6b7c044..c71fb95e 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/GNSSDeviceLocationRecordServiceImpl.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/GNSSDeviceLocationRecordServiceImpl.java @@ -5,13 +5,10 @@ import com.imdroid.secapi.dto.*; import com.imdroid.sideslope.bd.Tilt; import com.imdroid.sideslope.message.D341LocationMessage; import com.imdroid.sideslope.rabbitmq.RabbitmqConfig; -import com.imdroid.sideslope.sal.LocationRecordDTO; import com.imdroid.sideslope.util.GsonUtil; import com.imdroid.sideslope.util.NumberUtils; import io.dt20.common.persistence.Attribute; import io.dt20.common.repo.AttributeRepository; -import io.dt20.util.SequenceUtil; -import io.dt20.util.StringUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.amqp.rabbit.core.RabbitTemplate; @@ -53,64 +50,41 @@ public class GNSSDeviceLocationRecordServiceImpl implements GNSSDeviceLocationRe } @Override - public void save(LocationRecordDTO importRecord) throws Exception { - GnssDevice gnssDevice = gnssDeviceRepository.queryByDeviceId(importRecord.getDeviceId()); + public void save(GnssCalcData locationRecord, boolean isExceed) { + GnssDevice gnssDevice = gnssDeviceRepository.queryByDeviceId(locationRecord.getDeviceid()); + if(gnssDevice == null) return; - GnssCalcData locationRecord = new GnssCalcData(); - locationRecord.setDeviceid(importRecord.getDeviceId()); + locationRecord.setTenantid(gnssDevice.getTenantid()); locationRecord.setCreatetime(new Timestamp(System.currentTimeMillis())); locationRecord.setEnabled(true); - locationRecord.setId(SequenceUtil.getSequence()); - if (!StringUtil.isEmpty(importRecord.getB562())) { - String resultStr = NumberUtils.removeBrackets(importRecord.getB562()); - String[] arr = resultStr.split(","); - // 由cm转化为mm - locationRecord.setB562e(NumberUtils.scaleTwo(Double.parseDouble(arr[0]) * 10)); - locationRecord.setB562n(NumberUtils.scaleTwo(Double.parseDouble(arr[1]) * 10)); - locationRecord.setB562d(NumberUtils.scaleTwo(Double.parseDouble(arr[2]) * 10)); - } - if (!StringUtil.isEmpty(importRecord.getR9250())) { - String resultStr = NumberUtils.removeBrackets(importRecord.getR9250()); - String[] arr = resultStr.split(","); - locationRecord.setR9250e(NumberUtils.scaleTwo(arr[0])); - locationRecord.setR9250n(NumberUtils.scaleTwo(arr[1])); - locationRecord.setR9250d(NumberUtils.scaleTwo(arr[2])); - } - if (!StringUtil.isEmpty(importRecord.getResult())) { - String resultStr = NumberUtils.removeBrackets(importRecord.getResult()); - String[] arr = resultStr.split(","); - locationRecord.setResulte(NumberUtils.scaleTwo(arr[0])); - locationRecord.setResultn(NumberUtils.scaleTwo(arr[1])); - locationRecord.setResultd(NumberUtils.scaleTwo(arr[2])); - // 做滤波 水平方向按照shock 若 >1.5 用6h滤波 否则用25h - // 垂直方向 用6+12 - List attributes = attributeRepository.findByObjectAndPid(gnssDevice.getObjectName(), gnssDevice.getId()); - if (!StringUtil.isEmpty(importRecord.getFlag()) && Boolean.parseBoolean(importRecord.getFlag())) { - a = 6 * 60 * 60 * 1000; - b = 6 * 60 * 60 * 1000; - } - for (Attribute attribute : attributes) { - if (attribute.getValueNumber() == null) { - continue; - } - double[] avgEND = avgEND(gnssDevice.getDeviceid(), locationRecord, a, b); - if (ATTR_B562E.equals(attribute.getKey())) { - locationRecord.setRb562e(NumberUtils.scaleTwo(avgEND[0] * 10 - attribute.getValueNumber())); - } - if (ATTR_B562N.equals(attribute.getKey())) { - locationRecord.setRb562n(NumberUtils.scaleTwo(avgEND[1] * 10 - attribute.getValueNumber())); - } - if (ATTR_B562D.equals(attribute.getKey())) { - locationRecord.setRb562d(NumberUtils.scaleTwo(avgEND[2] * 10 - attribute.getValueNumber())); - } - } - a = 25 * 60 * 60 * 1000; - b = 25 * 60 * 60 * 1000; + // 做滤波 水平方向按照shock 若 >1.5 用6h滤波 否则用25h + // 垂直方向 用6+12 + List attributes = attributeRepository.findByObjectAndPid(gnssDevice.getObjectName(), gnssDevice.getId()); + if (isExceed) { + a = 6 * 60 * 60 * 1000; + b = 6 * 60 * 60 * 1000; } - sendDataToMq(locationRecord); + for (Attribute attribute : attributes) { + if (attribute.getValueNumber() == null) { + continue; + } + double[] avgEND = avgEND(gnssDevice.getDeviceid(), locationRecord, a, b); + if (ATTR_B562E.equals(attribute.getKey())) { + locationRecord.setRb562e(NumberUtils.scaleTwo(avgEND[0] * 10 - attribute.getValueNumber())); + } + if (ATTR_B562N.equals(attribute.getKey())) { + locationRecord.setRb562n(NumberUtils.scaleTwo(avgEND[1] * 10 - attribute.getValueNumber())); + } + if (ATTR_B562D.equals(attribute.getKey())) { + locationRecord.setRb562d(NumberUtils.scaleTwo(avgEND[2] * 10 - attribute.getValueNumber())); + } + } + a = 25 * 60 * 60 * 1000; + b = 25 * 60 * 60 * 1000; + repository.insert(locationRecord); - + //sendDataToMq(locationRecord); } public static final String ATTR_B562E = "b562e"; diff --git a/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssCalcDataController.java b/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssCalcDataController.java new file mode 100644 index 00000000..697ed921 --- /dev/null +++ b/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssCalcDataController.java @@ -0,0 +1,58 @@ +package com.imdroid.beidou.controller; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.imdroid.secapi.dto.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +public class GnssCalcDataController extends BasicController{ + @Autowired + GnssCalcDataMapper dataMapper; + @RequestMapping("/page/gnss_data_calc") + public String gnssDataRaw() { + return "/page/gnss_data_calc"; + } + + /**** 推送数据 *****/ + @RequestMapping("/gnss/data/list_calc") + @ResponseBody + public JSONObject listMsg(int page, int limit, String searchParams) { + Page pageable = new Page<>(page, limit); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.orderByDesc("createtime"); + + // 条件查询 + if(searchParams != null) { + JSONObject search = (JSONObject) JSONObject.parse(searchParams); + //设备号 + String deviceid = search.getString("deviceid"); + if (!StringUtils.isEmpty(deviceid)) { + queryWrapper.like("deviceid", deviceid); + } + //时间范围 + String q_start = search.getString("q_start"); + if (!StringUtils.isEmpty(q_start)) { + queryWrapper.ge("createtime", q_start); + } + String q_end = search.getString("q_end"); + if (!StringUtils.isEmpty(q_end)) { + queryWrapper.le("createtime", q_end+" 23:59:59"); + } + } + IPage cs = dataMapper.selectPage(pageable, queryWrapper); + + JSONObject jsonObject = new JSONObject(); + jsonObject.put("code", 0); + jsonObject.put("msg", ""); + jsonObject.put("count", cs.getTotal()); + jsonObject.put("data", cs.getRecords()); + return jsonObject; + } +} 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 31abffa9..b62d05e3 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 @@ -1,11 +1,13 @@ package com.imdroid.beidou.controller; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.imdroid.secapi.dto.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -38,9 +40,31 @@ public class GnssMsgController extends BasicController{ /**** 推送数据 *****/ @RequestMapping("/gnss/msg/list_all") @ResponseBody - public JSONObject listMsg(int page, int limit) { + public JSONObject listMsg(int page, int limit, String searchParams) { Page pageable = new Page<>(page, limit); - IPage cs = msgMapper.selectPage(pageable, null); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.orderByDesc("createtime"); + + // 条件查询 + if(searchParams != null) { + JSONObject search = (JSONObject) JSONObject.parse(searchParams); + //设备号 + String deviceid = search.getString("deviceid"); + if (!StringUtils.isEmpty(deviceid)) { + queryWrapper.like("deviceid", deviceid); + } + //时间范围 + String q_start = search.getString("q_start"); + if (!StringUtils.isEmpty(q_start)) { + queryWrapper.ge("createtime", q_start); + } + String q_end = search.getString("q_end"); + if (!StringUtils.isEmpty(q_end)) { + queryWrapper.le("createtime", q_end+" 23:59:59"); + } + } + + IPage cs = msgMapper.selectPage(pageable, queryWrapper); JSONObject jsonObject = new JSONObject(); jsonObject.put("code", 0); @@ -52,9 +76,30 @@ public class GnssMsgController extends BasicController{ @RequestMapping("/gnss/msg/list_status") @ResponseBody - public JSONObject listStatusMsg(int page, int limit) { + public JSONObject listStatusMsg(int page, int limit, String searchParams) { Page pageable = new Page<>(page, limit); - IPage cs = statusMsgMapper.selectPage(pageable, null); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.orderByDesc("createtime"); + + // 条件查询 + if(searchParams != null) { + JSONObject search = (JSONObject) JSONObject.parse(searchParams); + //设备号 + String deviceid = search.getString("deviceid"); + if (!StringUtils.isEmpty(deviceid)) { + queryWrapper.like("deviceid", deviceid); + } + //时间范围 + String q_start = search.getString("q_start"); + if (!StringUtils.isEmpty(q_start)) { + queryWrapper.ge("createtime", q_start); + } + String q_end = search.getString("q_end"); + if (!StringUtils.isEmpty(q_end)) { + queryWrapper.le("createtime", q_end+" 23:59:59"); + } + } + IPage cs = statusMsgMapper.selectPage(pageable, queryWrapper); JSONObject jsonObject = new JSONObject(); jsonObject.put("code", 0); @@ -66,9 +111,30 @@ public class GnssMsgController extends BasicController{ @RequestMapping("/gnss/msg/list_trx") @ResponseBody - public JSONObject listTrxMsg(int page, int limit) { + public JSONObject listTrxMsg(int page, int limit, String searchParams) { Page pageable = new Page<>(page, limit); - IPage cs = trxMsgMapper.selectPage(pageable, null); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.orderByDesc("createtime"); + + // 条件查询 + if(searchParams != null) { + JSONObject search = (JSONObject) JSONObject.parse(searchParams); + //设备号 + String deviceid = search.getString("deviceid"); + if (!StringUtils.isEmpty(deviceid)) { + queryWrapper.like("deviceid", deviceid); + } + //时间范围 + String q_start = search.getString("q_start"); + if (!StringUtils.isEmpty(q_start)) { + queryWrapper.ge("createtime", q_start); + } + String q_end = search.getString("q_end"); + if (!StringUtils.isEmpty(q_end)) { + queryWrapper.le("createtime", q_end+" 23:59:59"); + } + } + IPage cs = trxMsgMapper.selectPage(pageable, queryWrapper); JSONObject jsonObject = new JSONObject(); jsonObject.put("code", 0); diff --git a/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssSingleCalcDataController.java b/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssSingleCalcDataController.java index b176776d..7970b374 100644 --- a/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssSingleCalcDataController.java +++ b/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssSingleCalcDataController.java @@ -1,13 +1,14 @@ package com.imdroid.beidou.controller; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.imdroid.secapi.dto.GnssMsg; import com.imdroid.secapi.dto.GnssSingleCalcData; import com.imdroid.secapi.dto.GnssSingleCalcDataMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -16,17 +17,37 @@ public class GnssSingleCalcDataController extends BasicController{ @Autowired GnssSingleCalcDataMapper dataMapper; @RequestMapping("/page/gnss_data_raw") - public String gnssDataRaw()throws Exception { + public String gnssDataRaw() { return "/page/gnss_data_raw"; } /**** 推送数据 *****/ @RequestMapping("/gnss/data/list_raw") @ResponseBody - public JSONObject listMsg(int page, int limit) { + public JSONObject listMsg(int page, int limit, String searchParams) { Page pageable = new Page<>(page, limit); - IPage cs = dataMapper.selectPage(pageable, null); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.orderByDesc("createtime"); + // 条件查询 + if(searchParams != null) { + JSONObject search = (JSONObject) JSONObject.parse(searchParams); + //设备号 + String deviceid = search.getString("deviceid"); + if (!StringUtils.isEmpty(deviceid)) { + queryWrapper.like("deviceid", deviceid); + } + //时间范围 + String q_start = search.getString("q_start"); + if (!StringUtils.isEmpty(q_start)) { + queryWrapper.ge("createtime", q_start); + } + String q_end = search.getString("q_end"); + if (!StringUtils.isEmpty(q_end)) { + queryWrapper.le("createtime", q_end+" 23:59:59"); + } + } + IPage cs = dataMapper.selectPage(pageable, queryWrapper); JSONObject jsonObject = new JSONObject(); jsonObject.put("code", 0); jsonObject.put("msg", ""); diff --git a/sec-beidou/src/main/java/com/imdroid/beidou/controller/LayuiController.java b/sec-beidou/src/main/java/com/imdroid/beidou/controller/LayuiController.java index 45a4993e..0ab2a2bb 100644 --- a/sec-beidou/src/main/java/com/imdroid/beidou/controller/LayuiController.java +++ b/sec-beidou/src/main/java/com/imdroid/beidou/controller/LayuiController.java @@ -6,32 +6,27 @@ import org.springframework.web.bind.annotation.RequestMapping; @Controller public class LayuiController extends BasicController{ @RequestMapping("/login") - public String login() throws Exception { + public String login(){ return "/login"; } @RequestMapping("/") - public String index0()throws Exception { + public String index0() { return "/index"; } @RequestMapping("/index") - public String index()throws Exception { + public String index() { return "/index"; } @RequestMapping("/page/device_overview") - public String deviceOverview()throws Exception { + public String deviceOverview() { return "/page/device_overview"; } - @RequestMapping("/page/gnss_data_calc") - public String gnssDataCalc()throws Exception { - return "/page/gnss_data_calc"; - } - @RequestMapping("/page/gnss_data_tools") - public String gnssDataTools()throws Exception { + public String gnssDataTools() { return "/page/gnss_data_tools"; } diff --git a/sec-beidou/src/main/resources/db/schema.sql b/sec-beidou/src/main/resources/db/schema.sql index eca2b34f..6cff64b6 100644 --- a/sec-beidou/src/main/resources/db/schema.sql +++ b/sec-beidou/src/main/resources/db/schema.sql @@ -124,6 +124,7 @@ CREATE TABLE IF NOT EXISTS `gnssdevicelocationrecords` ( `rb562e` double DEFAULT NULL COMMENT '相对北斗位置东E', `rb562d` double DEFAULT NULL COMMENT '相对北斗位置北N', `rb562n` double DEFAULT NULL COMMENT '相对北斗位置天D', + `pps` int DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_deviceid_time` (`deviceid`,`createtime`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; @@ -154,7 +155,7 @@ CREATE TABLE IF NOT EXISTS `gnssmsg` ( CREATE TABLE IF NOT EXISTS `gnssstatusmsg` ( `id` bigint AUTO_INCREMENT, - `updatetime` datetime DEFAULT NULL, + `createtime` datetime DEFAULT NULL, `devicetime` datetime DEFAULT NULL, `deviceid` varchar(20) NOT NULL, `roll` float DEFAULT 0, @@ -170,7 +171,7 @@ CREATE TABLE IF NOT EXISTS `gnssstatusmsg` ( CREATE TABLE IF NOT EXISTS `gnsstrxmsg` ( `id` bigint AUTO_INCREMENT, - `updatetime` datetime DEFAULT NULL, + `createtime` datetime DEFAULT NULL, `devicetime` datetime DEFAULT NULL, `deviceid` varchar(20) NOT NULL, `uart1txbytes` int DEFAULT 0, @@ -185,3 +186,29 @@ CREATE TABLE IF NOT EXISTS `gnsstrxmsg` ( `d3xxbytes` int DEFAULT 0, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE IF NOT EXISTS `metadatas` ( + `id` bigint NOT NULL, + `object` varchar(32) NOT NULL, + `keyname` varchar(32) NOT NULL, + `type` varchar(1) NOT NULL, + `mandatory` int NOT NULL, + `message` varchar(64) DEFAULT NULL, + `notes` varchar(256) DEFAULT NULL, + `format` varchar(128) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `object` (`object`,`keyname`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; + +CREATE TABLE IF NOT EXISTS `attributes` ( + `id` bigint NOT NULL, + `object` varchar(32) NOT NULL, + `pid` bigint NOT NULL, + `keyname` varchar(32) NOT NULL, + `type` varchar(1) NOT NULL, + `valuestring` varchar(255) DEFAULT NULL, + `valuenumber` double DEFAULT NULL, + `valuedate` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `object` (`object`,`pid`,`keyname`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; diff --git a/sec-beidou/src/main/resources/templates/page/gnss_data_calc.html b/sec-beidou/src/main/resources/templates/page/gnss_data_calc.html index a8eef427..29e47efa 100644 --- a/sec-beidou/src/main/resources/templates/page/gnss_data_calc.html +++ b/sec-beidou/src/main/resources/templates/page/gnss_data_calc.html @@ -9,7 +9,7 @@
- +
@@ -45,12 +45,12 @@
- diff --git a/sec-beidou/src/main/resources/templates/page/gnss_data_raw.html b/sec-beidou/src/main/resources/templates/page/gnss_data_raw.html index e7f04641..60cb56b7 100644 --- a/sec-beidou/src/main/resources/templates/page/gnss_data_raw.html +++ b/sec-beidou/src/main/resources/templates/page/gnss_data_raw.html @@ -9,7 +9,7 @@
- +
@@ -53,7 +53,7 @@ table.render({ elem: '#currentTableId', - url: '/gnss/data/list_raw',//假数据 + url: '/gnss/data/list_raw', defaultToolbar: ['filter', 'exports', 'print', { title: '提示', layEvent: 'LAYTABLE_TIPS', @@ -73,15 +73,17 @@ limits: [10, 15, 20, 25, 50, 100], limit: 15, page: true, - skin: 'line' + skin: 'line', + done: function (result, curr, count) { + //回调渲染折线图 + console.log(curr, count); + console.log(result); + } }); // 监听搜索操作 form.on('submit(data-search-btn)', function (data) { var result = JSON.stringify(data.field); - layer.alert(result, { - title: '最终的搜索信息' - }); //执行搜索重载 table.reload('currentTableId', { 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 a07cb674..49ad8eed 100644 --- a/sec-beidou/src/main/resources/templates/page/gnss_msg.html +++ b/sec-beidou/src/main/resources/templates/page/gnss_msg.html @@ -9,19 +9,18 @@
- +
- -
- -
-
+ +
+ +
+
+ +
+
@@ -36,16 +35,23 @@ \ No newline at end of file + diff --git a/sec-beidou/src/main/resources/templates/page/gnss_msg_status.html b/sec-beidou/src/main/resources/templates/page/gnss_msg_status.html index 0e6edf1b..c84c5d77 100644 --- a/sec-beidou/src/main/resources/templates/page/gnss_msg_status.html +++ b/sec-beidou/src/main/resources/templates/page/gnss_msg_status.html @@ -9,7 +9,16 @@
- + +
+
+
+ +
+ +
+
+
@@ -26,22 +35,29 @@
\ No newline at end of file + diff --git a/sec-beidou/src/main/resources/templates/page/gnss_msg_trx.html b/sec-beidou/src/main/resources/templates/page/gnss_msg_trx.html index 7055a101..e0b11bf9 100644 --- a/sec-beidou/src/main/resources/templates/page/gnss_msg_trx.html +++ b/sec-beidou/src/main/resources/templates/page/gnss_msg_trx.html @@ -9,19 +9,18 @@
- + +
+
+
+ +
+ +
+
+
-
- -
- -
-
@@ -36,22 +35,29 @@ \ No newline at end of file +