zxl
2025-05-12 fdcdd41fba7874c045766e3dea54d56d70df73ef
(部级录像可用率,重点录像可用率,录像可用率)计算可用率
1个文件已修改
94 ■■■■ 已修改文件
ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java 94 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java
@@ -1261,6 +1261,21 @@
    }
    private final ISysConfigService configService;
    public double getSySMinTime(){
        //获取系统参数
        String dictLabel =  configService.selectConfigByKey("recording_min_time");
        double recordingMinTime;
        try {
            recordingMinTime = Double.parseDouble(dictLabel) / 60; // 如果 dictLabel 是以小时为单位,则无需除以 60
        } catch (Exception e) {
            log.error("配置的删除时间范围格式不正确: {}", dictLabel, e);
            return  12.0; // 默认 12 小时(以小时为单位)
        }
        return recordingMinTime;
    }
    /**
     * 视频:录像可用率
     *
@@ -1268,18 +1283,10 @@
     * @return
     */
    @Override
    public Result videoAvailabilityRate(DataCenterQuery params) {
        //获取系统参数
        String dictLabel =  configService.selectConfigByKey("recording_min_time");
        double recordingMinTime;
        try {
            recordingMinTime = Double.parseDouble(dictLabel) / 60; // 如果 dictLabel 是以小时为单位,则无需除以 60
        } catch (Exception e) {
            log.error("配置的删除时间范围格式不正确: {}", dictLabel, e);
            recordingMinTime = 12.0; // 默认 12 小时(以小时为单位)
        }
        List<String> likeFileds = Arrays.asList("deviceId", "deviceName");
        Query query = MongoUtil.getQuery(params, "createTime", likeFileds, null);
@@ -1333,12 +1340,13 @@
        MongoDatabase databaes2 = mongoTemplate.getDb();
        MongoCollection<Document> collection2 = databaes2.getCollection("uy_record_meta_d_sum");
        double finalRecordingMinTime = recordingMinTime;
        double finalRecordingMinTime = getSySMinTime();
        List<Document> documentList = new ArrayList<>(3);
        List<Document> documentList = new ArrayList<>(2);
        setTag(params, documentList);
        Document recording = new Document("recordDuration",new Document("$gte", finalRecordingMinTime));
        documentList.add(recording);
        Document filter = new Document("$and", documentList);
        // 构建聚合管道
        List<Document> pipeline = Arrays.asList(
@@ -1353,7 +1361,7 @@
            uniqueDeviceIdCount = doc.getInteger("uniqueDeviceIds");
            break; // 不需要继续遍历,因为 $count 只会产生一个结果
        }
        log.error("打印:{}",uniqueDeviceIdCount);
        log.error("录像可用率打印:{}",uniqueDeviceIdCount);
//        List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper())
//                .select(CheckIndexVideo::getVideoAvailable)
//                .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province)
@@ -1378,6 +1386,7 @@
//        1:完整 0:间歇 -1:异常 |
        if (!StringUtils.isEmpty(resultCount.get(0)) && !"0".equals(resultCount.get(0))) {
            //resultCount.get(0)是总数 uniqueDeviceIdCount是更具系统参数查询到mongodb中大于等于 recordDuration字段的总数
            onlineRate = new BigDecimal(uniqueDeviceIdCount).divide(new BigDecimal(resultCount.get(0)), 3,RoundingMode.DOWN).multiply(new BigDecimal("100"));
        }
        resultCount.add(this.remove0(onlineRate));
@@ -1438,6 +1447,35 @@
            return uniqueDeviceIdCount + "";
        }).collect(Collectors.toList());
        //计算部级录像可用率
        MongoDatabase database2 = mongoTemplate.getDb();
        MongoCollection<Document> collection2 = database2.getCollection("uy_record_meta_d_sum");
        double finalRecordingMinTime = getSySMinTime();
        List<Document> documentList = new ArrayList<>(4);
        documentList.add(new Document("deptTag", new Document("$eq", Boolean.TRUE)));
        setTag(params, documentList);
        Document recording = new Document("recordDuration",new Document("$gte", finalRecordingMinTime));
        documentList.add(recording);
        Document filter = new Document("$and", documentList);
        // 构建聚合管道
        List<Document> pipeline = Arrays.asList(
                new Document("$match", filter),
                // $group 去重
                new Document("$group", new Document("_id", "$deviceId")),
                new Document("$count", "uniqueDeviceIds")
        );
        AggregateIterable<Document> result = collection2.aggregate(pipeline);
        Integer uniqueDeviceIdCount = 0;
        for (Document doc : result) {
            uniqueDeviceIdCount = doc.getInteger("uniqueDeviceIds");
            break; // 不需要继续遍历,因为 $count 只会产生一个结果
        }
        log.error("部级录像可用率{}:",uniqueDeviceIdCount);
//        List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper())
//                .select(CheckIndexVideo::getMinistryVideoAvailable)
//                .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province)
@@ -1458,7 +1496,7 @@
        resultCount.add(0, totalCount + "");
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (!StringUtils.isEmpty(resultCount.get(0)) && !"0".equals(resultCount.get(0))) {
            onlineRate = new BigDecimal(resultCount.get(1)).divide(new BigDecimal(resultCount.get(0)), 3,RoundingMode.DOWN).multiply(new BigDecimal("100"));
            onlineRate = new BigDecimal(uniqueDeviceIdCount).divide(new BigDecimal(resultCount.get(0)), 3,RoundingMode.DOWN).multiply(new BigDecimal("100"));
        }
        resultCount.add(this.remove0(onlineRate));
        HashMap<String, Object> map = new HashMap<>();
@@ -1517,6 +1555,32 @@
            return uniqueDeviceIdCount + "";
        }).collect(Collectors.toList());
        //计算重点点位录像可用率
        MongoDatabase database2 = mongoTemplate.getDb();
        MongoCollection<Document> collection2 = database2.getCollection("uy_record_meta_d_sum");
        double finalRecordingMinTime = getSySMinTime();
        List<Document> documentList = new ArrayList<>(4);
        documentList.add(new Document("importantTag", new Document("$eq", Boolean.TRUE)));
        setTag(params, documentList);
        Document recording = new Document("recordDuration",new Document("$gte", finalRecordingMinTime));
        documentList.add(recording);
        Document filter = new Document("$and", documentList);
        // 构建聚合管道
        List<Document> pipeline = Arrays.asList(
                new Document("$match", filter),
                // $group 去重
                new Document("$group", new Document("_id", "$deviceId")),
                new Document("$count", "uniqueDeviceIds")
        );
        AggregateIterable<Document> result = collection2.aggregate(pipeline);
        Integer uniqueDeviceIdCount = 0;
        for (Document doc : result) {
            uniqueDeviceIdCount = doc.getInteger("uniqueDeviceIds");
            break; // 不需要继续遍历,因为 $count 只会产生一个结果
        }
        log.error("重点点位录像可用率{}:",uniqueDeviceIdCount);
//        List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper())
//                .select(CheckIndexVideo::getKeyVideoAvailable)
//                .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province)
@@ -1537,7 +1601,7 @@
        resultCount.add(0, totalCount + "");
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (!StringUtils.isEmpty(resultCount.get(0)) && !"0".equals(resultCount.get(0))) {
            onlineRate = new BigDecimal(resultCount.get(1)).divide(new BigDecimal(resultCount.get(0)), 3,RoundingMode.DOWN).multiply(new BigDecimal("100"));
            onlineRate = new BigDecimal(uniqueDeviceIdCount).divide(new BigDecimal(resultCount.get(0)), 3,RoundingMode.DOWN).multiply(new BigDecimal("100"));
        }
        resultCount.add(this.remove0(onlineRate));
        HashMap<String, Object> map = new HashMap<>();