From a4bc54eb0846800dcf1dae08b77aa2966cab2139 Mon Sep 17 00:00:00 2001 From: weidong Date: Wed, 14 Feb 2024 17:51:01 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E4=BC=98=E5=8C=96=E5=91=8A=E8=AD=A6?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/imdroid/secapi/dto/GnssTrxMsg.java | 2 + .../com/imdroid/secapi/dto/WarningCfg.java | 3 + .../service/DataPersistServiceImpl.java | 1 + .../sideslope/service/WarningServiceImpl.java | 170 +++++++++--------- .../beidou/controller/WarningController.java | 1 + sec-beidou/src/main/resources/db/schema.sql | 1 + .../templates/page/gnss_msg_trx.html | 3 +- 7 files changed, 90 insertions(+), 91 deletions(-) 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 8c7d00e9..1e4a6dc3 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 @@ -59,4 +59,6 @@ public class GnssTrxMsg { @ExcelProperty("D3XX") Integer d3xxbytes; + @ExcelProperty("使用卫星数") + Integer satelliteinuse; } diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/WarningCfg.java b/sec-api/src/main/java/com/imdroid/secapi/dto/WarningCfg.java index 1ac00b6f..98d22a79 100644 --- a/sec-api/src/main/java/com/imdroid/secapi/dto/WarningCfg.java +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/WarningCfg.java @@ -40,6 +40,8 @@ public class WarningCfg { public static final String TYPE_NAME_NO_FIXED_RESULT = "连续无固定解"; public static final int TYPE_BS_NO_RESULT = 0x200; public static final String TYPE_NAME_BS_NO_RESULT = "基站下的测站均无解"; + public static final int TYPE_INCLINE = 0x400; + public static final String TYPE_NAME_INCLINE = "异常倾斜"; // warning level definition public static final short LEVEL_0 = 0; //正常 @@ -65,6 +67,7 @@ public class WarningCfg { if((code & TYPE_LESS_B562) !=0) warningInfo.add(TYPE_NAME_LESS_B562); if((code & TYPE_NO_FIXED_RESULT) !=0) warningInfo.add(TYPE_NAME_NO_FIXED_RESULT); if((code & TYPE_BS_NO_RESULT) !=0) warningInfo.add(TYPE_NAME_BS_NO_RESULT); + if((code & TYPE_INCLINE) !=0) warningInfo.add(TYPE_NAME_INCLINE); return warningInfo; } } 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 093db726..c02ced00 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 @@ -92,6 +92,7 @@ public class DataPersistServiceImpl implements DataPersistService { // 添加到trxmsg里 GnssTrxMsg trxMsg = message.getTrxMsg(); trxMsg.setTenantid(message.getTenantId()); + trxMsg.setSatelliteinuse(device.getSatelitesInUse()); trxMsgMapper.insert(trxMsg); // 保存消息摘要 saveMsg(message,null); 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 fa8b89e3..6453ff72 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 @@ -49,55 +49,28 @@ public class WarningServiceImpl implements WarningService { if(status == null) return; boolean isUpdated = false; - if ((status.getWarningcode() & (WarningCfg.TYPE_NO_FIXED_RESULT - | WarningCfg.TYPE_LESS_B562 - | WarningCfg.TYPE_LESS_D3XX)) != 0) { - status.setWarningcode(status.getWarningcode() & ~WarningCfg.TYPE_NO_FIXED_RESULT); - status.setWarningcode(status.getWarningcode() & ~WarningCfg.TYPE_LESS_B562); + if ((status.getWarningcode() & WarningCfg.TYPE_LESS_D3XX) != 0) { status.setWarningcode(status.getWarningcode() & ~WarningCfg.TYPE_LESS_D3XX); isUpdated = true; } // b562少 - int[] threshold = cfgMap.get(WarningCfg.TYPE_LESS_B562); - if(threshold != null && (numB562Stat[0] < threshold[1])) { - WarningMsg warningMsg = new WarningMsg(); - warningMsg.setDeviceid(deviceId); - warningMsg.setTenantid(tenantId); - warningMsg.setCreatetime(LocalDateTime.now()); - warningMsg.setDevicetype(WarningCfg.TYPE_GNSS); - warningMsg.setCode(WarningCfg.TYPE_LESS_B562); - warningMsg.setLevel((short) threshold[0]); - warningMsg.setInfo(WarningCfg.TYPE_NAME_LESS_B562+",固定解:" + numB562Stat[0] + ",非固定解:"+numB562Stat[1]+",无B562:"+numB562Stat[2]); - warningMsgMapper.insert(warningMsg); - status.setWarningcode(status.getWarningcode()|WarningCfg.TYPE_LESS_B562); - isUpdated = true; - } + if(check(status, WarningCfg.TYPE_LESS_B562, + WarningCfg.TYPE_NAME_LESS_B562,true, + numB562Stat[0],null)) isUpdated=true; //连续无b562 if(0 == numB562Stat[0]){ // 记录连续无固定解的轮数 int count = status.getNoreslutcount()+1; status.setNoreslutcount(count); - int[] threshold2 = cfgMap.get(WarningCfg.TYPE_NO_FIXED_RESULT); - if(threshold2!=null && count >= threshold2[1]){ - // 连续6个周期无固定解则产生严重告警 - WarningMsg warningMsg = new WarningMsg(); - warningMsg.setDeviceid(deviceId); - warningMsg.setTenantid(tenantId); - warningMsg.setCreatetime(LocalDateTime.now()); - warningMsg.setDevicetype(WarningCfg.TYPE_GNSS); - warningMsg.setCode(WarningCfg.TYPE_NO_FIXED_RESULT); - warningMsg.setLevel((short) threshold2[0]); - warningMsg.setInfo("连续" + count+"周期无固定解"); - warningMsgMapper.insert(warningMsg); - status.setWarningcode(status.getWarningcode()|WarningCfg.TYPE_NO_FIXED_RESULT); - } - isUpdated = true; - + if(check(status, WarningCfg.TYPE_NO_FIXED_RESULT, + WarningCfg.TYPE_NAME_NO_FIXED_RESULT, false, + count, null)) isUpdated=true; } else if(isUpdated){ //b562有告警标志 status.setNoreslutcount(0); + status.setWarningcode(status.getWarningcode() & ~WarningCfg.TYPE_NO_FIXED_RESULT); } if(isUpdated){ @@ -115,48 +88,29 @@ public class WarningServiceImpl implements WarningService { if(curStatus.getWarningcode() == null) curStatus.setWarningcode(0); boolean isUpdated = false; - //清除原来的告警 - if ((curStatus.getWarningcode() & (WarningCfg.TYPE_DEVICE_OFF_LINE - | WarningCfg.TYPE_LOW_VOLTAGE - | WarningCfg.TYPE_LOW_RSSI)) != 0) { + if ((curStatus.getWarningcode() & WarningCfg.TYPE_DEVICE_OFF_LINE) != 0) { curStatus.setWarningcode(curStatus.getWarningcode() & ~WarningCfg.TYPE_DEVICE_OFF_LINE); - curStatus.setWarningcode(curStatus.getWarningcode() & ~WarningCfg.TYPE_LOW_VOLTAGE); - curStatus.setWarningcode(curStatus.getWarningcode() & ~WarningCfg.TYPE_LOW_RSSI); isUpdated = true; } - int[] lowVoltage = cfgMap.get(WarningCfg.TYPE_LOW_VOLTAGE); - if(lowVoltage!=null && statusMsg.getVoltage() <= lowVoltage[1]){ - // 检测电压 - WarningMsg warningMsg = new WarningMsg(); - warningMsg.setDeviceid(statusMsg.getDeviceid()); - warningMsg.setTenantid(statusMsg.getTenantid()); - warningMsg.setCreatetime(LocalDateTime.now()); - warningMsg.setDevicetype(WarningCfg.TYPE_GNSS); - warningMsg.setCode(WarningCfg.TYPE_LOW_VOLTAGE); - warningMsg.setLevel((short) lowVoltage[0]); - warningMsg.setInfo("低电压:" + statusMsg.getVoltage() + "mV"); - warningMsgMapper.insert(warningMsg); - //告警级别 - curStatus.setWarningcode(curStatus.getWarningcode() | WarningCfg.TYPE_LOW_VOLTAGE); - isUpdated = true; + //低电压告警 + if(statusMsg.getVoltage()!=null) { + if(check(curStatus, WarningCfg.TYPE_LOW_VOLTAGE, + WarningCfg.TYPE_NAME_LOW_VOLTAGE,true, + statusMsg.getVoltage(), null)) isUpdated=true; } - - int[] lowRSSI = cfgMap.get(WarningCfg.TYPE_LOW_RSSI); - if(lowRSSI!=null && statusMsg.getRssi() <= lowRSSI[1]){ - // 检测RSSI - WarningMsg warningMsg = new WarningMsg(); - warningMsg.setDeviceid(statusMsg.getDeviceid()); - warningMsg.setTenantid(statusMsg.getTenantid()); - warningMsg.setCreatetime(LocalDateTime.now()); - warningMsg.setDevicetype(WarningCfg.TYPE_GNSS); - warningMsg.setCode( WarningCfg.TYPE_LOW_RSSI); - warningMsg.setLevel((short) lowRSSI[0]); - warningMsg.setInfo("4G信号弱:" + statusMsg.getRssi()); - warningMsgMapper.insert(warningMsg); - //告警级别 - curStatus.setWarningcode(curStatus.getWarningcode() | WarningCfg.TYPE_LOW_RSSI); - isUpdated = true; + //低RSSI + if(statusMsg.getRssi()!=null) { + if(check(curStatus, WarningCfg.TYPE_LOW_RSSI, + WarningCfg.TYPE_NAME_LOW_RSSI,true, + statusMsg.getRssi().intValue(), null)) isUpdated=true; + } + //倾角异常告警 + if(statusMsg.getPitch()!=null) { + if(check(curStatus, WarningCfg.TYPE_INCLINE, + WarningCfg.TYPE_NAME_INCLINE,false, + Math.abs(statusMsg.getPitch().intValue()), + Math.abs(statusMsg.getRoll().intValue()))) isUpdated=true; } // 根据告警码确定告警级别 @@ -165,6 +119,56 @@ public class WarningServiceImpl implements WarningService { } } + + boolean check(GnssStatus curStatus, int warningType, String warningName, boolean isLessCmp, Integer value1, Integer value2){ + boolean isUpdated=false; + int newWarningCode = 0; + int[] warningValues = cfgMap.get(warningType); + if(warningValues!=null){ + if(isLessCmp) { + if (value1 != null && value1 <= warningValues[1]) { + newWarningCode = warningType; + } + if (value2 != null && value2 <= warningValues[1]) { + newWarningCode = warningType; + } + } + else{ + if (value1 != null && value1 >= warningValues[1]) { + newWarningCode = warningType; + } + if (value2 != null && value2 >= warningValues[1]) { + newWarningCode = warningType; + } + } + } + else return isUpdated; + + int oldWarningCode = curStatus.getWarningcode() & warningType; + if(newWarningCode != oldWarningCode){ + if(newWarningCode == 0){ + curStatus.setWarningcode(curStatus.getWarningcode() & ~warningType); + } + else { + WarningMsg warningMsg = new WarningMsg(); + warningMsg.setDeviceid(curStatus.getDeviceid()); + warningMsg.setTenantid(curStatus.getTenantid()); + warningMsg.setCreatetime(LocalDateTime.now()); + warningMsg.setDevicetype(WarningCfg.TYPE_GNSS); + warningMsg.setCode(warningType); + warningMsg.setLevel((short) warningValues[0]); + String info = warningName + ":" + value1; + if(value2!=null) info = info +","+value2; + warningMsg.setInfo(info); + warningMsgMapper.insert(warningMsg); + //告警级别 + curStatus.setWarningcode(curStatus.getWarningcode() | warningType); + } + isUpdated = true; + } + return isUpdated; + } + /*** * 检查未知报文是否较多 */ @@ -186,29 +190,15 @@ public class WarningServiceImpl implements WarningService { boolean isUpdated = false; // 清除b562告警 if((status.getWarningcode() & (WarningCfg.TYPE_NO_FIXED_RESULT - |WarningCfg.TYPE_LESS_B562 - |WarningCfg.TYPE_LESS_D3XX)) !=0 ) { + |WarningCfg.TYPE_LESS_B562)) !=0 ) { status.setWarningcode(status.getWarningcode() & ~WarningCfg.TYPE_NO_FIXED_RESULT); status.setWarningcode(status.getWarningcode() & ~WarningCfg.TYPE_LESS_B562); - status.setWarningcode(status.getWarningcode() & ~WarningCfg.TYPE_LESS_D3XX); isUpdated = true; } // 检查d331告警 - if(cfgMap.size() == 0) refreshCfg(); - int[] threshold = cfgMap.get(WarningCfg.TYPE_LESS_D3XX); - if(threshold != null && (device.getD3xxCount() < threshold[1])) { - WarningMsg warningMsg = new WarningMsg(); - warningMsg.setDeviceid(device.getDeviceId()); - warningMsg.setTenantid(device.getTenantId()); - warningMsg.setCreatetime(LocalDateTime.now()); - warningMsg.setDevicetype(WarningCfg.TYPE_GNSS); - warningMsg.setCode(WarningCfg.TYPE_LESS_D3XX); - warningMsg.setLevel((short) threshold[0]); - warningMsg.setInfo(WarningCfg.TYPE_NAME_LESS_D3XX+"," + device.getD3xxCount()); - warningMsgMapper.insert(warningMsg); - status.setWarningcode(status.getWarningcode()|WarningCfg.TYPE_LESS_D3XX); - isUpdated = true; - } + if(check(status, WarningCfg.TYPE_LESS_D3XX, + WarningCfg.TYPE_NAME_LESS_D3XX,true, + device.getD3xxCount(), null)) isUpdated=true; if(isUpdated) { status.setWarning(getWarningLevel(status.getWarningcode())); diff --git a/sec-beidou/src/main/java/com/imdroid/beidou/controller/WarningController.java b/sec-beidou/src/main/java/com/imdroid/beidou/controller/WarningController.java index 46d95f1a..52da6131 100644 --- a/sec-beidou/src/main/java/com/imdroid/beidou/controller/WarningController.java +++ b/sec-beidou/src/main/java/com/imdroid/beidou/controller/WarningController.java @@ -44,6 +44,7 @@ public class WarningController extends BasicController implements CommonExcelSer warningMap.put(WarningCfg.TYPE_LOW_VOLTAGE, WarningCfg.TYPE_NAME_LOW_VOLTAGE); warningMap.put(WarningCfg.TYPE_LOW_RSSI, WarningCfg.TYPE_NAME_LOW_RSSI); warningMap.put(WarningCfg.TYPE_RX_MUCH_UNKNOWN, WarningCfg.TYPE_NAME_RX_MUCH_UNKNOWN); + warningMap.put(WarningCfg.TYPE_INCLINE, WarningCfg.TYPE_NAME_INCLINE); } /**** 推送页面 *****/ diff --git a/sec-beidou/src/main/resources/db/schema.sql b/sec-beidou/src/main/resources/db/schema.sql index 50156951..d5c947fe 100644 --- a/sec-beidou/src/main/resources/db/schema.sql +++ b/sec-beidou/src/main/resources/db/schema.sql @@ -212,6 +212,7 @@ CREATE TABLE IF NOT EXISTS `gnsstrxmsg` ( `uart2unknown` int DEFAULT NULL, `b562bytes` int DEFAULT NULL, `d3xxbytes` int DEFAULT NULL, + `satelliteinuse` int DEFAULT 0, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 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 7e8934dd..2856bc70 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 @@ -83,7 +83,8 @@ {field: 'uart1unknown', title: '串口1未知'}, {field: 'uart2txbytes', title: '串口2发'}, {field: 'uart2rxbytes', title: '串口2收'}, - {field: 'uart2unknown', title: '串口2未知'} + {field: 'uart2unknown', title: '串口2未知'}, + {field: 'satelliteinuse', title: '使用卫星数'} ]], limits: [10, 15, 20, 25, 50, 100], limit: 15,