| | |
| | | }else { |
| | | item.setPingOnlineStr("离线"); |
| | | } |
| | | if(1== item.getOnline() ){ |
| | | item.setOnlineStr("在线"); |
| | | }else if(-1==item.getOnline()){ |
| | | item.setOnlineStr("离线"); |
| | | }else { |
| | | item.setOnlineStr("未知"); |
| | | } |
| | | }); |
| | | params.setDeptTag(-1); |
| | | params.setDeviceType(1); |
| | |
| | | item.setPingOnlineStr("在线"); |
| | | }else { |
| | | item.setPingOnlineStr("离线"); |
| | | } |
| | | if (1 == item.getOnline()) { |
| | | item.setOnlineStr("在线"); |
| | | } else if (-1 == item.getOnline()) { |
| | | item.setOnlineStr("离线"); |
| | | } else { |
| | | item.setOnlineStr("未知"); |
| | | } |
| | | }); |
| | | // 统计设备数量 |
| | |
| | | }else { |
| | | item.setPingOnlineStr("离线"); |
| | | } |
| | | if (1 == item.getOnline()) { |
| | | item.setOnlineStr("在线"); |
| | | } else if (-1 == item.getOnline()) { |
| | | item.setOnlineStr("离线"); |
| | | } else { |
| | | item.setOnlineStr("未知"); |
| | | } |
| | | }); |
| | | Date now = new Date(); |
| | | List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper()) |
| | |
| | | item.setPingOnlineStr("在线"); |
| | | }else { |
| | | item.setPingOnlineStr("离线"); |
| | | } |
| | | if (1 == item.getOnline()) { |
| | | item.setOnlineStr("在线"); |
| | | } else if (-1 == item.getOnline()) { |
| | | item.setOnlineStr("离线"); |
| | | } else { |
| | | item.setOnlineStr("未知"); |
| | | } |
| | | }); |
| | | Date now = new Date(); |
| | |
| | | MongoUtil.setPage(query, params, TIME_FIELD); |
| | | //系统ping的结果 |
| | | List<TMonitorResult> resultList = mongoTemplate.find(query, TMonitorResult.class); |
| | | //TODO:优云在线结果 |
| | | params.setDeptTag(-1); |
| | | params.setDeviceType(2); |
| | | // 统计设备数量 |
| | |
| | | item.setPingOnlineStr("在线"); |
| | | }else { |
| | | item.setPingOnlineStr("离线"); |
| | | } |
| | | if (1 == item.getOnline()) { |
| | | item.setOnlineStr("在线"); |
| | | } else if (-1 == item.getOnline()) { |
| | | item.setOnlineStr("离线"); |
| | | } else { |
| | | item.setOnlineStr("未知"); |
| | | } |
| | | }); |
| | | List<CheckIndexCar> videoList = new LambdaQueryChainWrapper<>(checkIndexCarService.getBaseMapper()) |
| | |
| | | }else { |
| | | item.setOnlineStr("离线"); |
| | | } |
| | | if (1 == item.getOnline()) { |
| | | item.setOnlineStr("在线"); |
| | | } else if (-1 == item.getOnline()) { |
| | | item.setOnlineStr("离线"); |
| | | } else { |
| | | item.setOnlineStr("未知"); |
| | | } |
| | | }); |
| | | params.setDeptTag(-1); |
| | | params.setDeviceType(3); |
| | |
| | | map.put("list", resultList); |
| | | return Result.ok().data(map).total(total); |
| | | } |
| | | |
| | | /** |
| | | * 视频:视频图像资源安全管理 |
| | | * |
| | |
| | | |
| | | /** |
| | | * 删除尾部的0 |
| | | * |
| | | * @param rate |
| | | * @return |
| | | */ |
| | |
| | | |
| | | /** |
| | | * 设置标签搜索条件 |
| | | * |
| | | * @param params |
| | | * @param dList |
| | | */ |
| | |
| | | for (TMonitorResult monitorResult : onlineResult) { |
| | | int dayOfMonth = monitorResult.getMongoCreateTime().getDayOfMonth(); |
| | | String online = ""; |
| | | online += monitorResult.getPingOnline() ? "在线" : "离线"; |
| | | if(ApiConstants.UY_OnlineSite_Online.equals(monitorResult.getOnline())){ |
| | | online +="在线"; |
| | | }else if(ApiConstants.UY_OnlineSite_Offline.equals(monitorResult.getOnline())){ |
| | | online +="离线"; |
| | | }else { |
| | | online +="未知"; |
| | | } |
| | | //反射赋值,字段统一定义为day+1,2,3... |
| | | Field field = videoDailyExp.getClass().getDeclaredField("day" + dayOfMonth); |
| | | field.setAccessible(true); |
| | |
| | | if (-1 == item.getSigna1() ) { |
| | | this.genWorkOrder(workOrder, ErrorType.SIGNAL_LOSS, item.getDeviceId()); |
| | | } |
| | | // 画面偏色 |
| | | if (-1 == item.getColor()) { |
| | | this.genWorkOrder(workOrder, ErrorType.SCREEN_COLOR_DEVIATION, item.getDeviceId()); |
| | | } |
| | | // 雪花干扰 |
| | | if (-1 == item.getSnow()) { |
| | | this.genWorkOrder(workOrder, ErrorType.SNOW_STORM, item.getDeviceId()); |
| | | } |
| | | // 条纹干扰 |
| | | if (-1 == item.getStripe()) { |
| | | this.genWorkOrder(workOrder, ErrorType.STRIPE_INTERFERENCE, item.getDeviceId()); |
| | | } |
| | | // // 画面偏色 |
| | | // if (-1 == item.getColor()) { |
| | | // this.genWorkOrder(workOrder, ErrorType.SCREEN_COLOR_DEVIATION, item.getDeviceId()); |
| | | // } |
| | | // // 雪花干扰 |
| | | // if (-1 == item.getSnow()) { |
| | | // this.genWorkOrder(workOrder, ErrorType.SNOW_STORM, item.getDeviceId()); |
| | | // } |
| | | // // 条纹干扰 |
| | | // if (-1 == item.getStripe()) { |
| | | // this.genWorkOrder(workOrder, ErrorType.STRIPE_INTERFERENCE, item.getDeviceId()); |
| | | // } |
| | | // 画面遮挡 |
| | | if (-1 == item.getShade()) { |
| | | this.genWorkOrder(workOrder, ErrorType.SCREEN_OCCLUSION, item.getDeviceId()); |
| | | } |
| | | // 清晰度异常 |
| | | if (-1 == item.getBlur()) { |
| | | this.genWorkOrder(workOrder, ErrorType.ABNORMAL_CLARITY, item.getDeviceId()); |
| | | } |
| | | // 亮度异常 |
| | | if (-1 == item.getLight()) { |
| | | this.genWorkOrder(workOrder, ErrorType.ABNORMAL_BRIGHTNESS, item.getDeviceId()); |
| | | } |
| | | // // 清晰度异常 |
| | | // if (-1 == item.getBlur()) { |
| | | // this.genWorkOrder(workOrder, ErrorType.ABNORMAL_CLARITY, item.getDeviceId()); |
| | | // } |
| | | // // 亮度异常 |
| | | // if (-1 == item.getLight()) { |
| | | // this.genWorkOrder(workOrder, ErrorType.ABNORMAL_BRIGHTNESS, item.getDeviceId()); |
| | | // } |
| | | return workOrder; |
| | | }).collect(Collectors.toList()); |
| | | workOrderService.innerAddWorkOrder(workOrderList); |
| | |
| | | List<WorkOrder> notAddList = new ArrayList<>(); |
| | | //查redis今日工单数量 |
| | | int workOrderNum = 0; |
| | | for (WorkOrder workOrder : waitAddList) { |
| | | YwPoint point = pointMapping.get(workOrder.getSerialNumber()); |
| | | if (Objects.isNull(point)) { |
| | | notAddList.add(workOrder); |
| | | continue; |
| | | } |
| | | if (Objects.nonNull(point.getUnitId())) { |
| | | workOrder.setUnitId(Math.toIntExact(point.getUnitId())); |
| | | } |
| | | if (point.getImportantTag() || point.getImportantCommandImageTag()) { |
| | | workOrder.setProcessingPeriod(Integer.valueOf(important.getConfigValue())); |
| | | } else { |
| | | workOrder.setProcessingPeriod(Integer.valueOf(normal.getConfigValue())); |
| | | } |
| | | } |
| | | waitAddList.removeAll(notAddList); |
| | | if (CollectionUtils.isEmpty(waitAddList)) { |
| | | return Boolean.TRUE; |
| | | } |
| | | //UUID作为value,保证上锁的线程自己解锁 |
| | | String requestId = IdUtils.fastSimpleUUID(); |
| | | try { |
| | |
| | | log.error("获取锁异常"); |
| | | return Boolean.FALSE; |
| | | } |
| | | //记录工单数,补充工单号 |
| | | for (WorkOrder workOrder : waitAddList) { |
| | | YwPoint point = pointMapping.get(workOrder.getSerialNumber()); |
| | | if (Objects.isNull(point)) { |
| | | notAddList.add(workOrder); |
| | | continue; |
| | | } |
| | | if (Objects.nonNull(point.getUnitId())) { |
| | | workOrder.setUnitId(Math.toIntExact(point.getUnitId())); |
| | | } |
| | | if (point.getImportantTag() || point.getImportantCommandImageTag()) { |
| | | workOrder.setProcessingPeriod(Integer.valueOf(important.getConfigValue())); |
| | | } else { |
| | | workOrder.setProcessingPeriod(Integer.valueOf(normal.getConfigValue())); |
| | | } |
| | | //数字前面补0 |
| | | workOrderNum++; |
| | | workOrder.setWorkOrderNo(IdUtils.workOrderNO(now, String.format("%05d", workOrderNum))); |
| | | // 保存错误类型 |
| | | for (String errorType : workOrder.getErrorTypeList()) { |
| | | WorkOrderErrorType workOrderErrorType = new WorkOrderErrorType(); |
| | |
| | | workOrderErrorType.setErrorName(errorType); |
| | | waitAddErrorTypeList.add(workOrderErrorType); |
| | | } |
| | | } |
| | | waitAddList.removeAll(notAddList); |
| | | if (CollectionUtils.isEmpty(waitAddList)) { |
| | | return Boolean.TRUE; |
| | | } |
| | | //记录工单数,补充工单号 |
| | | for (WorkOrder workOrder : waitAddList) { |
| | | //数字前面补0 |
| | | workOrderNum++; |
| | | workOrder.setWorkOrderNo(IdUtils.workOrderNO(now, String.format("%05d", workOrderNum))); |
| | | log.info("即将生成的工单:{}",workOrder); |
| | | } |
| | | redisCache.setCacheObject(RedisConstant.WORKORDER_NUM, workOrderNum); |
| | | redisCache.releaseLock(RedisConstant.WORKORDER_NUM_LOCK, requestId); |
| | |
| | | public void siteOnlineTask() { |
| | | log.info("开始计算点位在线率"); |
| | | Date yesterday = DateUtils.addDays(new Date(), -1); |
| | | //计算点位在线率和视图库对接稳定性 |
| | | //计算点位在线率 |
| | | Query query = new Query(); |
| | | query.addCriteria(Criteria |
| | | .where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())) |
| | | .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday)) |
| | | .and("dataType").is(ApiConstants.HK_DataType_CAR)); |
| | | List<SnapshotDataMonitorResult> results = mongoTemplate.find(query, SnapshotDataMonitorResult.class); |
| | | CalculationStrategy<SnapshotDataMonitorResult> calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Car_SiteOnline); |
| | | calculator.calculate(results); |
| | | log.info("结束计算视图库对接稳定性"); |
| | | log.info("结束计算点位在线率"); |
| | | } |
| | | |
| | | public void viewConnectTask() { |
| | | log.info("开始计算视图库对接稳定性"); |
| | | Date yesterday = DateUtils.addDays(new Date(), -1); |
| | | //计算点位在线率和视图库对接稳定性 |
| | | //计算视图库对接稳定性 |
| | | Query query = new Query(); |
| | | query.addCriteria(Criteria |
| | | .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday)) |
| | |
| | | List<SnapshotDataMonitorResult> results = mongoTemplate.find(query, SnapshotDataMonitorResult.class); |
| | | CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Face_SiteOnline); |
| | | calculator.calculate(results); |
| | | log.info("结束计算视图库对接稳定性"); |
| | | log.info("结束计算点位在线率"); |
| | | } |
| | | public void viewConnectTask() { |
| | | log.info("开始计算视图库对接稳定性"); |
| | |
| | | List<SnapshotDataMonitorResult> results = mongoTemplate.find(query, SnapshotDataMonitorResult.class); |
| | | CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Face_ViewStability); |
| | | calculator.calculate(results); |
| | | log.info("结束计算人脸点位在线率和视图库对接稳定性"); |
| | | log.info("结束计算视图库对接稳定性"); |
| | | } |
| | | |
| | | |
| | |
| | | } else { |
| | | log.error("请配置离线次数,此次设置为默认值2"); |
| | | } |
| | | // 先查出在线的设备IP集合,剔除掉在线情况是未知的,并且只检测正在考核的设备避免多余工单 |
| | | // 先查出设备IP集合,剔除掉在线情况是未知的,并且只检测正在考核的设备避免多余工单 |
| | | List<TMonitorResult> monitorList = monitorMapper.getDistinctIP(); |
| | | List<TMonitorResult> dataList = new ArrayList<>(48); |
| | | Integer time = times; |
| | |
| | | return thread.call(); // 假设 OnlineCheckThread 实现了 Callable 接口 |
| | | }, executorService) |
| | | .orTimeout(60, TimeUnit.SECONDS) |
| | | //出现异常 |
| | | .exceptionally(ex -> { |
| | | if (ex instanceof TimeoutException) { |
| | | log.error("任务执行超时:"+monitor.getIp()); |
| | |
| | | Date now = new Date(); |
| | | List<UpdateOnlineVO> willUpdateList = dataList.stream().filter(result->!result.getPingOnline()).map(item -> { |
| | | UpdateOnlineVO vo = new UpdateOnlineVO(); |
| | | vo.setOnline(item.getPingOnline()?ApiConstants.UY_OnlineSite_Online:ApiConstants.UY_OnlineSite_Offline); |
| | | vo.setOnline(ApiConstants.UY_OnlineSite_Offline); |
| | | vo.setIp(item.getIp()); |
| | | vo.setUpdateTime(now); |
| | | return vo; |
| | | }).collect(Collectors.toList()); |
| | | monitorMapper.updateOnline(willUpdateList); |
| | | //工单 |
| | | List<WorkOrder> workOrderList = dataList.stream() |
| | | .filter(item -> Objects.nonNull(item.getWorkOrder())) |
| | | .map(TMonitorResult::getWorkOrder) |
| | | .collect(Collectors.toList()); |
| | | if (!CollectionUtils.isEmpty(workOrderList)) { |
| | | workOrderService.innerAddWorkOrder(workOrderList); |
| | | } |
| | | //存放到mongo |
| | | if (!CollectionUtils.isEmpty(dataList)) { |
| | | //如果存在之前的数据先删除 |
| | |
| | | //存放在mongo中 |
| | | mongoTemplate.insertAll(dataList); |
| | | } |
| | | //工单 |
| | | List<WorkOrder> workOrderList = dataList.stream() |
| | | .filter(item -> Objects.nonNull(item.getWorkOrder())) |
| | | .map(TMonitorResult::getWorkOrder) |
| | | .collect(Collectors.toList()); |
| | | if (!CollectionUtils.isEmpty(workOrderList)) { |
| | | workOrderService.innerAddWorkOrder(workOrderList); |
| | | } |
| | | log.info("点位在线监测完成"); |
| | | } |
| | | |
| | |
| | | IFNULL(SUM(IF(p.online = 1, 1, 0)), 0) AS totalMembers, |
| | | IFNULL(SUM(IF(p.online = -1, 1, 0)), 0) AS postsPercentage, |
| | | IFNULL(SUM(IF(p.online = 0, 1, 0)), 0) AS unknownNumbers, |
| | | IFNULL(ROUND(SUM(IF(p.online = 1 , 1, 0)) / count(*) * 100, 2), 0) as viewsPercentage FROM t_monitor m |
| | | IFNULL(ROUND(SUM(IF(p.online = 1 , 1, 0)) / count(*) * 100, 2), 0) as viewsPercentage |
| | | FROM t_monitor m |
| | | left join t_yw_point p on m.serial_number = p.serial_number |
| | | left join sys_dept d on p.dept_id = d.dept_id and d.del_flag = 0 |
| | | <where> |
| | |
| | | IFNULL(SUM(IF(p.online = 1, 1, 0)), 0) AS totalMembers, |
| | | IFNULL(SUM(IF(p.online = -1, 1, 0)), 0) AS postsPercentage, |
| | | IFNULL(SUM(IF(p.online = 0, 1, 0)), 0) AS unknownNumbers, |
| | | IFNULL(ROUND(SUM(IF(p.online = 1 , 1, 0)) / count(*) * 100, 2), 0) as viewsPercentage FROM t_monitor m |
| | | IFNULL(ROUND(SUM(IF(p.online = 1 , 1, 0)) / count(*) * 100, 2), 0) as viewsPercentage |
| | | FROM t_monitor m |
| | | left join t_yw_point p on m.serial_number = p.serial_number |
| | | left join sys_dept d on p.dept_id = d.dept_id and d.del_flag = 0 |
| | | <where> |
| | | p.examine_status = 1 |
| | | <!-- (p.recovery = 1 OR TIMESTAMPDIFF(DAY, p.recovery_time, NOW()) <![CDATA[<=]]> #{time}) --> |