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: '天标准差'},