fuliqi
2024-10-16 44cd2d171062c9b07a0eb047cd0ac80d06188e8c
工单bug,数据中心在线率增加存ping状态
8个文件已修改
182 ■■■■■ 已修改文件
ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/impl/UYErrorTypeCheckServiceImpl.java 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java 47 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/task/CarTask.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/task/FaceTask.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/task/UYTask.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java
@@ -79,6 +79,13 @@
            }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);
@@ -121,6 +128,13 @@
                item.setPingOnlineStr("在线");
            }else {
                item.setPingOnlineStr("离线");
            }
            if (1 == item.getOnline()) {
                item.setOnlineStr("在线");
            } else if (-1 == item.getOnline()) {
                item.setOnlineStr("离线");
            } else {
                item.setOnlineStr("未知");
            }
        });
        // 统计设备数量
@@ -170,6 +184,13 @@
            }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())
@@ -213,6 +234,13 @@
                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();
@@ -914,7 +942,6 @@
        MongoUtil.setPage(query, params, TIME_FIELD);
        //系统ping的结果
        List<TMonitorResult> resultList = mongoTemplate.find(query, TMonitorResult.class);
        //TODO:优云在线结果
        params.setDeptTag(-1);
        params.setDeviceType(2);
        // 统计设备数量
@@ -924,6 +951,13 @@
                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())
@@ -1427,6 +1461,13 @@
            }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);
@@ -1848,6 +1889,7 @@
        map.put("list", resultList);
        return Result.ok().data(map).total(total);
    }
    /**
     * 视频:视频图像资源安全管理
     *
@@ -1869,6 +1911,7 @@
    /**
     * 删除尾部的0
     *
     * @param rate
     * @return
     */
@@ -1879,6 +1922,7 @@
    /**
     * 设置标签搜索条件
     *
     * @param params
     * @param dList
     */
ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java
@@ -1099,7 +1099,13 @@
        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);
ycl-server/src/main/java/com/ycl/platform/service/impl/UYErrorTypeCheckServiceImpl.java
@@ -45,30 +45,30 @@
            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);
ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
@@ -211,6 +211,25 @@
        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 {
@@ -234,20 +253,11 @@
            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();
@@ -257,16 +267,7 @@
                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);
ycl-server/src/main/java/com/ycl/task/CarTask.java
@@ -45,21 +45,21 @@
    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))
ycl-server/src/main/java/com/ycl/task/FaceTask.java
@@ -49,7 +49,7 @@
        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("开始计算视图库对接稳定性");
@@ -62,7 +62,7 @@
        List<SnapshotDataMonitorResult> results = mongoTemplate.find(query, SnapshotDataMonitorResult.class);
        CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Face_ViewStability);
        calculator.calculate(results);
        log.info("结束计算人脸点位在线率和视图库对接稳定性");
        log.info("结束计算视图库对接稳定性");
    }
ycl-server/src/main/java/com/ycl/task/UYTask.java
@@ -186,7 +186,7 @@
        } else {
            log.error("请配置离线次数,此次设置为默认值2");
        }
        // 先查出在线的设备IP集合,剔除掉在线情况是未知的,并且只检测正在考核的设备避免多余工单
        // 先查出设备IP集合,剔除掉在线情况是未知的,并且只检测正在考核的设备避免多余工单
        List<TMonitorResult> monitorList = monitorMapper.getDistinctIP();
        List<TMonitorResult> dataList = new ArrayList<>(48);
        Integer time = times;
@@ -196,6 +196,7 @@
                            return thread.call(); // 假设 OnlineCheckThread 实现了 Callable 接口
                        }, executorService)
                        .orTimeout(60, TimeUnit.SECONDS)
                        //出现异常
                        .exceptionally(ex -> {
                            if (ex instanceof TimeoutException) {
                                log.error("任务执行超时:"+monitor.getIp());
@@ -245,20 +246,12 @@
        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)) {
            //如果存在之前的数据先删除
@@ -267,6 +260,14 @@
            //存放在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("点位在线监测完成");
    }
ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml
@@ -369,7 +369,8 @@
        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>
@@ -389,7 +390,10 @@
        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}) -->