From 10d0044b017ccae27b84df541b070e28cb7e9394 Mon Sep 17 00:00:00 2001 From: weidong Date: Wed, 2 Apr 2025 20:05:44 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E5=81=A5=E5=BA=B7=E6=A3=80=E6=9F=A5?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=BF=9E=E7=BB=AD=E6=97=A0=E6=95=88=E8=A7=A3?= =?UTF-8?q?=E6=97=B6=E9=95=BF=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/imdroid/secapi/dto/Ehm.java | 1 + .../com/imdroid/beidou_ehm/task/EhmTask.java | 33 +++++++++++++++++++ .../beidou/controller/GnssEhmController.java | 1 + sec-beidou/src/main/resources/db/schema.sql | 1 + .../resources/templates/page/gnss_ehm.html | 1 + 5 files changed, 37 insertions(+) diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/Ehm.java b/sec-api/src/main/java/com/imdroid/secapi/dto/Ehm.java index d5471a2f..948b7d0d 100644 --- a/sec-api/src/main/java/com/imdroid/secapi/dto/Ehm.java +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/Ehm.java @@ -23,6 +23,7 @@ public class Ehm { private Short offlinestatdays; private Integer offlinecount; private Integer offlineminutes; + private Integer invalidresultminutes; private Integer calcstathours; private Float stdeve; private Float stdevn; diff --git a/sec-beidou-ehm/src/main/java/com/imdroid/beidou_ehm/task/EhmTask.java b/sec-beidou-ehm/src/main/java/com/imdroid/beidou_ehm/task/EhmTask.java index 2728b2f1..2d47ca4e 100644 --- a/sec-beidou-ehm/src/main/java/com/imdroid/beidou_ehm/task/EhmTask.java +++ b/sec-beidou-ehm/src/main/java/com/imdroid/beidou_ehm/task/EhmTask.java @@ -61,6 +61,8 @@ public class EhmTask{ // 检查过去N天离线次数和时长 checkOffline(ehm, status.getState()==GnssStatus.STATE_OFFLINE); + // 检查过去N天无效解总时长 + checkInvalidGnssDataTime(ehm); // 计算过去N小时标准差 // 计算过去N小时有效解比例 // 计算过去N小时固定解比例 @@ -111,6 +113,37 @@ public class EhmTask{ } } + private void checkInvalidGnssDataTime(Ehm ehm){ + LocalDateTime now = ehm.getCreatetime(); + // 从告警消息里查询离线记录 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("deviceid",ehm.getDeviceid()); + queryWrapper.ge("createtime",now.minusDays(ehm.getOfflinestatdays())); + queryWrapper.eq("code",WarningCfg.TYPE_CONT_INVALID_RESULT); + List warningMsgList = warningMsgMapper.selectList(queryWrapper); + if(warningMsgList!=null){ + int invalidGnssDataMinutes = 0; + LocalDateTime offlineEnd = null; + LocalDateTime offlineBegin = null; + for(WarningMsg warningMsg:warningMsgList){ + // 读下一条纪录时才计算上一条的时间差,因为cleartime有可能没有 + if(offlineEnd==null) offlineEnd=warningMsg.getCreatetime(); + if(offlineBegin!=null){ + Duration duration = Duration.between(offlineBegin,offlineEnd); + invalidGnssDataMinutes+=duration.toMinutes(); + } + offlineBegin = warningMsg.getCreatetime(); + offlineEnd = warningMsg.getCleartime(); + } + if(offlineEnd==null) offlineEnd=now; + if(offlineBegin!=null){ + Duration duration = Duration.between(offlineBegin,offlineEnd); + invalidGnssDataMinutes+=duration.toMinutes(); + } + ehm.setInvalidresultminutes(invalidGnssDataMinutes); + } + } + private void checkCalcResults(Ehm ehm){ // 获取过去N小时的解算数据 QueryWrapper queryWrapper = new QueryWrapper<>(); diff --git a/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssEhmController.java b/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssEhmController.java index 0ed4abc7..97fdae8e 100644 --- a/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssEhmController.java +++ b/sec-beidou/src/main/java/com/imdroid/beidou/controller/GnssEhmController.java @@ -42,6 +42,7 @@ public class GnssEhmController extends BasicController implements CommonExcelSer if(sortItems.size()==0) { sortItems.add("离线次数");sortSqls.add("order by offlinecount desc"); sortItems.add("离线时长");sortSqls.add("order by offlineminutes desc"); + sortItems.add("连续无效解时长");sortSqls.add("order by invalidresultminutes desc"); sortItems.add("东标准差");sortSqls.add("order by stdeve desc"); sortItems.add("北标准差");sortSqls.add("order by stdevn desc"); sortItems.add("天标准差");sortSqls.add("order by stdevu desc"); diff --git a/sec-beidou/src/main/resources/db/schema.sql b/sec-beidou/src/main/resources/db/schema.sql index 60d020fe..50381969 100644 --- a/sec-beidou/src/main/resources/db/schema.sql +++ b/sec-beidou/src/main/resources/db/schema.sql @@ -377,6 +377,7 @@ CREATE TABLE IF NOT EXISTS `ehm` ( `offlinestatdays` smallint DEFAULT NULL COMMENT '离线统计周期', `offlinecount` int DEFAULT NULL COMMENT '离线统计周期内的离线次数', `offlineminutes` int DEFAULT NULL COMMENT '离线统计周期内的离线时长', + `invalidresultminutes` int DEFAULT NULL COMMENT '离线统计周期内的连续无效解时长', `calcstathours` int DEFAULT NULL COMMENT '数据分析周期', `stdeve` float DEFAULT NULL COMMENT '标准差', `stdevn` float DEFAULT NULL COMMENT '标准差', diff --git a/sec-beidou/src/main/resources/templates/page/gnss_ehm.html b/sec-beidou/src/main/resources/templates/page/gnss_ehm.html index 3095d0b6..c175b96f 100644 --- a/sec-beidou/src/main/resources/templates/page/gnss_ehm.html +++ b/sec-beidou/src/main/resources/templates/page/gnss_ehm.html @@ -80,6 +80,7 @@ {field: 'calcstathours', title: '数据分析周期(小时)'}, {field: 'offlinecount', title: '离线次数'}, {field: 'offlineminutes', title: '离线分钟数'}, + {field: 'invalidresultminutes', title: '连续无效解分钟数'}, {field: 'stdeve', title: '东标准差'}, {field: 'stdevn', title: '北标准差'}, {field: 'stdevu', title: '天标准差'},