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 98d22a79..684b1a3a 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 @@ -38,8 +38,8 @@ public class WarningCfg { public static final String TYPE_NAME_LESS_B562 = "固定解少"; public static final int TYPE_NO_FIXED_RESULT = 0x100; 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_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 = "异常倾斜"; @@ -66,7 +66,7 @@ public class WarningCfg { if((code & TYPE_LESS_D3XX) !=0) warningInfo.add(TYPE_NAME_LESS_D3XX); 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_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/WarningServiceImpl.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/WarningServiceImpl.java index d5d30406..140f855f 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 @@ -61,18 +61,12 @@ public class WarningServiceImpl implements WarningService { numB562Stat[0],null, "固定解:"+numB562Stat[0]+",浮点解:"+numB562Stat[1]+",全零:"+numB562Stat[2])) isUpdated=true; - //连续无b562 - if(0 == numB562Stat[0]){ - // 记录连续无固定解的轮数 - int count = status.getNoreslutcount()+1; - status.setNoreslutcount(count); - if(check(status, WarningCfg.TYPE_NO_FIXED_RESULT, - WarningCfg.TYPE_NAME_NO_FIXED_RESULT, false, - count, null,null)) isUpdated=true; - } - else if(isUpdated){ //b562有告警标志 - status.setNoreslutcount(0); - status.setWarningcode(status.getWarningcode() & ~WarningCfg.TYPE_NO_FIXED_RESULT); + //清除连续无b562 + if(0 != numB562Stat[0]){ + if ((status.getWarningcode() & WarningCfg.TYPE_NO_FIXED_RESULT) != 0) { + status.setWarningcode(status.getWarningcode() & ~WarningCfg.TYPE_NO_FIXED_RESULT); + isUpdated = true; + } } if(isUpdated){ 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 52da6131..20a857fb 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 @@ -36,7 +36,7 @@ public class WarningController extends BasicController implements CommonExcelSer @PostConstruct public static void init() { warningMap.put(WarningCfg.TYPE_DEVICE_OFF_LINE, WarningCfg.TYPE_NAME_DEVICE_OFF_LINE); - warningMap.put(WarningCfg.TYPE_BS_NO_RESULT, WarningCfg.TYPE_NAME_BS_NO_RESULT); + //warningMap.put(WarningCfg.TYPE_BS_NO_RESULT, WarningCfg.TYPE_NAME_BS_NO_RESULT); warningMap.put(WarningCfg.TYPE_NO_FIXED_RESULT, WarningCfg.TYPE_NAME_NO_FIXED_RESULT); warningMap.put(WarningCfg.TYPE_LESS_INUSE_SAT, WarningCfg.TYPE_NAME_LESS_INUSE_SAT); warningMap.put(WarningCfg.TYPE_LESS_D3XX, WarningCfg.TYPE_NAME_LESS_D3XX); diff --git a/sec-beidou/src/main/java/com/imdroid/beidou/task/DeviceStatusChecker.java b/sec-beidou/src/main/java/com/imdroid/beidou/task/DeviceStatusChecker.java index 6cfb31db..58a54ad0 100644 --- a/sec-beidou/src/main/java/com/imdroid/beidou/task/DeviceStatusChecker.java +++ b/sec-beidou/src/main/java/com/imdroid/beidou/task/DeviceStatusChecker.java @@ -101,78 +101,71 @@ public class DeviceStatusChecker { @Scheduled(cron = "0 28 * * * ?") // 每小时执行一次 void checkRoverStationCalcData() throws ExecutionException, InterruptedException { - //获取所有基站 + // 获取无固定解告警配置 + QueryWrapper warningCfgQueryWrapper = new QueryWrapper<>(); + warningCfgQueryWrapper.eq("typename",WarningCfg.TYPE_NAME_NO_FIXED_RESULT); + warningCfgQueryWrapper.last("limit 1"); + WarningCfg warningCfg = warningCfgMapper.selectOne(warningCfgQueryWrapper); + if(warningCfg == null) return; + + // 获取所有n个小时内无固定解的测站 + LocalDateTime now = LocalDateTime.now(); + LocalDateTime beginTime = now.minusHours(warningCfg.getValue()); + QueryWrapper calcDataQueryWrapper = new QueryWrapper<>(); + calcDataQueryWrapper.ge("createtime",beginTime.format(formatter)); + List calcDataList = dataMapper.selectList(calcDataQueryWrapper); + + MPJQueryWrapper queryWrapper = + new MPJQueryWrapper() + .selectAll(GnssStatus.class) + .leftJoin("gnssdevices d on t.deviceid = d.deviceid") + .eq("d.devicetype",GnssDevice.TYPE_REFERENCE_STATION) + .eq("d.opmode",GnssDevice.OP_MODE_USE) + .ne("t.state",GnssStatus.STATE_OFFLINE); + List statusList = gnssStatusMapper.selectList(queryWrapper); + List deviceIds = new ArrayList<>(); - QueryWrapper deviceQueryWrapper = new QueryWrapper<>(); - deviceQueryWrapper.eq("devicetype", GnssDevice.TYPE_REFERENCE_STATION); - deviceQueryWrapper.ne("opmode", GnssDevice.OP_MODE_UNUSE); - List bsList = deviceMapper.selectList(deviceQueryWrapper); - for(GnssDevice bs:bsList){ - GnssStatus status = gnssStatusMapper.getByDeviceId(bs.getDeviceid()); - if(status != null && status.getState()!=GnssStatus.STATE_OFFLINE) { - int warningCode = 0; - if(!isRoverStationNormal(bs.getDeviceid())){ - warningCode = WarningCfg.TYPE_BS_NO_RESULT; - } - - // warningCode changed - if(warningCode != (status.getWarningcode()&WarningCfg.TYPE_BS_NO_RESULT)){ - //清除原来的告警 - if(warningCode == 0) { - status.setWarningcode(status.getWarningcode() & ~WarningCfg.TYPE_BS_NO_RESULT); - status.setWarning(WarningCfg.LEVEL_0); - } - else{ - WarningMsg warningMsg = new WarningMsg(); - warningMsg.setDeviceid(bs.getDeviceid()); - warningMsg.setTenantid(bs.getTenantid()); - warningMsg.setCreatetime(LocalDateTime.now()); - warningMsg.setDevicetype(WarningCfg.TYPE_GNSS); - warningMsg.setCode(WarningCfg.TYPE_BS_NO_RESULT); - warningMsg.setLevel(WarningCfg.LEVEL_2); - warningMsg.setInfo(WarningCfg.TYPE_NAME_BS_NO_RESULT); - warningMsgMapper.insert(warningMsg); - - status.setWarningcode(status.getWarningcode() | WarningCfg.TYPE_BS_NO_RESULT); - status.setWarning(WarningCfg.LEVEL_2); - deviceIds.add(bs.getDeviceid()+"("+bs.getName()+")"); - } - gnssStatusMapper.updateById(status); + for(GnssStatus status: statusList){ + int warningCode = WarningCfg.TYPE_NO_FIXED_RESULT; + for(GnssCalcData calcData:calcDataList){ + if(status.getDeviceid().equals(calcData.getDeviceid())){ + warningCode = 0; + break; } } + if(warningCode != (status.getWarningcode()&WarningCfg.TYPE_NO_FIXED_RESULT)){ + //清除原来的告警 + if(warningCode == 0) { + status.setWarningcode(status.getWarningcode() & ~WarningCfg.TYPE_NO_FIXED_RESULT); + status.setWarning(WarningCfg.LEVEL_0); + } + else{ + WarningMsg warningMsg = new WarningMsg(); + warningMsg.setDeviceid(status.getDeviceid()); + warningMsg.setTenantid(status.getTenantid()); + warningMsg.setCreatetime(now); + warningMsg.setDevicetype(WarningCfg.TYPE_GNSS); + warningMsg.setCode(WarningCfg.TYPE_NO_FIXED_RESULT); + warningMsg.setLevel(WarningCfg.LEVEL_2); + warningMsg.setInfo(WarningCfg.TYPE_NAME_NO_FIXED_RESULT); + warningMsgMapper.insert(warningMsg); + + status.setWarningcode(status.getWarningcode() | WarningCfg.TYPE_NO_FIXED_RESULT); + status.setWarning(WarningCfg.LEVEL_2); + deviceIds.add(status.getDeviceid()); + } + gnssStatusMapper.updateById(status); + } } // 发短信通知 if(deviceIds.size()>0){ notificationService.onWarning(deviceIds.toString(), - WarningCfg.TYPE_NAME_BS_NO_RESULT, + WarningCfg.TYPE_NAME_NO_FIXED_RESULT, LocalDateTime.now().format(formatter), WarningCfg.LEVEL_2); } } - /*** - * 检查基站下的测站最近一个小时是否全都无固定解 - */ - boolean isRoverStationNormal(String parentId){ - //是否有关联测站 - QueryWrapper deviceQueryWrapper = new QueryWrapper<>(); - deviceQueryWrapper.eq("parentid", parentId); - deviceQueryWrapper.eq("opmode",GnssDevice.OP_MODE_USE); - if(deviceMapper.selectCount(deviceQueryWrapper) == 0) return true; - - //如果有关联的测站,检查解算结果 - LocalDateTime endTime = LocalDateTime.now(); - LocalDateTime beginTime = endTime.minusHours(1); - MPJQueryWrapper queryWrapper = - new MPJQueryWrapper() - .selectAll(GnssCalcData.class) - .leftJoin("gnssdevices d on t.deviceid = d.deviceid") - .eq("d.parentid",parentId) - .between("t.createtime",beginTime.format(formatter),endTime.format(formatter)) - .eq("t.enabled",true); - List dataList = dataMapper.selectList(queryWrapper); - return dataList.size()>0; - } } \ No newline at end of file