fuliqi
2025-02-13 9963456cd3d9737ecf53ebc1f464df29fd9398e6
ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java
@@ -26,6 +26,7 @@
import com.ycl.system.page.PageUtil;
import com.ycl.utils.DateUtils;
import com.ycl.utils.MongoUtil;
import com.ycl.utils.StringUtils;
import com.ycl.utils.bean.BeanUtils;
import com.ycl.utils.poi.ExcelUtil;
import constant.ApiConstants;
@@ -115,7 +116,7 @@
                item.setOnlineStr("未知");
            }
            List<String> offLineTime = item.getOffLineTimeStr();
            if(!CollectionUtils.isEmpty(offLineTime)) {
            if (!CollectionUtils.isEmpty(offLineTime)) {
                if (offLineTime.size() > 1) {
                    offLineTime = offLineTime.subList(offLineTime.size() - 2, offLineTime.size());
                }
@@ -159,20 +160,24 @@
            onlineCount = (Integer) result.getOrDefault("onlineCount", 0L);
            totalCount = offlineCount + unknownCount + onlineCount;
        }
        /** 查询当天在线率 */
        List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper())
                .select(CheckIndexVideo::getSiteOnline)
                .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province)
                .eq(params.getDataType().equals(2), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Dept)
                .between(CheckIndexVideo::getCreateTime, params.getStartTime(), params.getEndTime())
                .list();
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (CollectionUtils.isNotEmpty(videoList)) {
            BigDecimal sum = videoList.stream().map(CheckIndexVideo::getSiteOnline).reduce(BigDecimal.ZERO, BigDecimal::add);
            BigDecimal count = BigDecimal.valueOf(videoList.size());
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        if (totalCount!=0) {
            onlineRate = new BigDecimal(onlineCount).divide(new BigDecimal(totalCount), 3,RoundingMode.DOWN).multiply(new BigDecimal("100"));
        }
//        /** 查询当天在线率 */
//        List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper())
//                .select(CheckIndexVideo::getSiteOnline)
//                .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province)
//                .eq(params.getDataType().equals(2), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Dept)
//                .between(CheckIndexVideo::getCreateTime, params.getStartTime(), params.getEndTime())
//                .list();
//
//        BigDecimal onlineRate = BigDecimal.ZERO;
//        if (CollectionUtils.isNotEmpty(videoList)) {
//            BigDecimal sum = videoList.stream().map(CheckIndexVideo::getSiteOnline).reduce(BigDecimal.ZERO, BigDecimal::add);
//            BigDecimal count = BigDecimal.valueOf(videoList.size());
//            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
//        }
        HashMap<String, Object> map = new HashMap<>();
        map.put("count", Arrays.asList(totalCount + "", onlineCount + "", offlineCount + "", unknownCount + "", this.remove0(onlineRate)));
        map.put("list", resultList);
@@ -254,21 +259,24 @@
            onlineCount = (Integer) result.getOrDefault("onlineCount", 0L);
            totalCount = offlineCount + unknownCount + onlineCount;
        }
        params.setDeptTag(1);
        params.setDeviceType(1);
        List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper())
                .select(CheckIndexVideo::getMinistrySiteOnline)
                .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province)
                .eq(params.getDataType().equals(2), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Dept)
                .between(CheckIndexVideo::getCreateTime, params.getStartTime(), params.getEndTime())
                .list();
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (CollectionUtils.isNotEmpty(videoList)) {
            BigDecimal sum = videoList.stream().map(CheckIndexVideo::getMinistrySiteOnline).reduce(BigDecimal.ZERO, BigDecimal::add);
            BigDecimal count = BigDecimal.valueOf(videoList.size());
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        if (totalCount!=0) {
            onlineRate = new BigDecimal(onlineCount).divide(new BigDecimal(totalCount), 3,RoundingMode.DOWN).multiply(new BigDecimal("100"));
        }
//        params.setDeptTag(1);
//        params.setDeviceType(1);
//        List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper())
//                .select(CheckIndexVideo::getMinistrySiteOnline)
//                .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province)
//                .eq(params.getDataType().equals(2), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Dept)
//                .between(CheckIndexVideo::getCreateTime, params.getStartTime(), params.getEndTime())
//                .list();
//        BigDecimal onlineRate = BigDecimal.ZERO;
//        if (CollectionUtils.isNotEmpty(videoList)) {
//            BigDecimal sum = videoList.stream().map(CheckIndexVideo::getMinistrySiteOnline).reduce(BigDecimal.ZERO, BigDecimal::add);
//            BigDecimal count = BigDecimal.valueOf(videoList.size());
//            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
//        }
        HashMap<String, Object> map = new HashMap<>();
        map.put("count", Arrays.asList(totalCount + "", onlineCount + "", offlineCount + "", unknownCount + "", this.remove0(onlineRate)));
        map.put("list", resultList);
@@ -352,18 +360,22 @@
            onlineCount = (Integer) result.getOrDefault("onlineCount", 0L);
            totalCount = offlineCount + unknownCount + onlineCount;
        }
        List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper())
                .select(CheckIndexVideo::getKeySiteOnline)
                .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province)
                .eq(params.getDataType().equals(2), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Dept)
                .between(CheckIndexVideo::getCreateTime, params.getStartTime(), params.getEndTime())
                .list();
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (CollectionUtils.isNotEmpty(videoList)) {
            BigDecimal sum = videoList.stream().map(CheckIndexVideo::getKeySiteOnline).reduce(BigDecimal.ZERO, BigDecimal::add);
            BigDecimal count = BigDecimal.valueOf(videoList.size());
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        if (totalCount!=0) {
            onlineRate = new BigDecimal(onlineCount).divide(new BigDecimal(totalCount), 3,RoundingMode.DOWN).multiply(new BigDecimal("100"));
        }
//        List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper())
//                .select(CheckIndexVideo::getKeySiteOnline)
//                .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province)
//                .eq(params.getDataType().equals(2), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Dept)
//                .between(CheckIndexVideo::getCreateTime, params.getStartTime(), params.getEndTime())
//                .list();
//        BigDecimal onlineRate = BigDecimal.ZERO;
//        if (CollectionUtils.isNotEmpty(videoList)) {
//            BigDecimal sum = videoList.stream().map(CheckIndexVideo::getKeySiteOnline).reduce(BigDecimal.ZERO, BigDecimal::add);
//            BigDecimal count = BigDecimal.valueOf(videoList.size());
//            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
//        }
        HashMap<String, Object> map = new HashMap<>();
        map.put("count", Arrays.asList(totalCount + "", onlineCount + "", offlineCount + "", unknownCount + "", this.remove0(onlineRate)));
        map.put("list", resultList);
@@ -448,19 +460,22 @@
            onlineCount = (Integer) result.getOrDefault("onlineCount", 0L);
            totalCount = offlineCount + unknownCount + onlineCount;
        }
        List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper())
                .select(CheckIndexVideo::getKeyCommandImageOnline)
                .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province)
                .eq(params.getDataType().equals(2), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Dept)
                .between(CheckIndexVideo::getCreateTime, params.getStartTime(), params.getEndTime())
                .list();
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (CollectionUtils.isNotEmpty(videoList)) {
            BigDecimal sum = videoList.stream().map(CheckIndexVideo::getKeyCommandImageOnline).reduce(BigDecimal.ZERO, BigDecimal::add);
            BigDecimal count = BigDecimal.valueOf(videoList.size());
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        if (totalCount!=0) {
            onlineRate = new BigDecimal(onlineCount).divide(new BigDecimal(totalCount), 3,RoundingMode.DOWN).multiply(new BigDecimal("100"));
        }
//        List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper())
//                .select(CheckIndexVideo::getKeyCommandImageOnline)
//                .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province)
//                .eq(params.getDataType().equals(2), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Dept)
//                .between(CheckIndexVideo::getCreateTime, params.getStartTime(), params.getEndTime())
//                .list();
//        BigDecimal onlineRate = BigDecimal.ZERO;
//        if (CollectionUtils.isNotEmpty(videoList)) {
//            BigDecimal sum = videoList.stream().map(CheckIndexVideo::getKeyCommandImageOnline).reduce(BigDecimal.ZERO, BigDecimal::add);
//            BigDecimal count = BigDecimal.valueOf(videoList.size());
//            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
//        }
        HashMap<String, Object> map = new HashMap<>();
        map.put("count", Arrays.asList(totalCount + "", onlineCount + "", offlineCount + "", unknownCount + "", this.remove0(onlineRate)));
        map.put("list", resultList);
@@ -479,10 +494,10 @@
        List<Criteria> andCriteria = MongoUtil.getAndCriteria(params, TIME_FIELD, likeFileds, null);
        Query query = new Query();
        Criteria and = new Criteria();
        if(params.getOption()!=null){
            if(params.getOption() ==1){
        if (params.getOption() != null) {
            if (params.getOption() == 1) {
                andCriteria.add(Criteria.where("newDevice").is(Boolean.TRUE));
            }else if(params.getOption() ==-1){
            } else if (params.getOption() == -1) {
                andCriteria.add(Criteria.where("newDevice").is(Boolean.FALSE));
            }
        }
@@ -502,12 +517,12 @@
        //总数
        List<Document> dList1 = new ArrayList<>(2);
        setTag(params, dList1);
        Document totalFilter = new Document("$and",dList1);
        Document totalFilter = new Document("$and", dList1);
        //新设备数
        List<Document> dList2 = new ArrayList<>(2);
        setTag(params, dList2);
        dList2.add(new Document("newDevice",Boolean.TRUE));
        Document newFilter = new Document("$and",dList2);
        dList2.add(new Document("newDevice", Boolean.TRUE));
        Document newFilter = new Document("$and", dList2);
        List<Document> lists = Arrays.asList(totalFilter, newFilter);
        List<String> rList = lists.stream().map(filter -> {
@@ -528,19 +543,23 @@
            return uniqueDeviceIdCount + "";
        }).collect(Collectors.toList());
        List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper())
                .select(CheckIndexVideo::getMonitorRegistration)
                .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province)
                .eq(params.getDataType().equals(2), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Dept)
                .between(CheckIndexVideo::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
                .list();
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (CollectionUtils.isNotEmpty(videoList)) {
            BigDecimal sum = videoList.stream().map(CheckIndexVideo::getMonitorRegistration).reduce(BigDecimal.ZERO, BigDecimal::add);
            BigDecimal count = BigDecimal.valueOf(videoList.size());
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
//        List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper())
//                .select(CheckIndexVideo::getMonitorRegistration)
//                .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province)
//                .eq(params.getDataType().equals(2), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Dept)
//                .between(CheckIndexVideo::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
//                .list();
//        BigDecimal onlineRate = BigDecimal.ZERO;
//        if (CollectionUtils.isNotEmpty(videoList)) {
//            BigDecimal sum = videoList.stream().map(CheckIndexVideo::getMonitorRegistration).reduce(BigDecimal.ZERO, BigDecimal::add);
//            BigDecimal count = BigDecimal.valueOf(videoList.size());
//            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
//        }
        BigDecimal rate = BigDecimal.ZERO;
        if (!StringUtils.isEmpty(rList.get(0)) && !"0".equals(rList.get(0))) {
            rate = new BigDecimal(rList.get(0)).subtract(new BigDecimal(rList.get(1))).divide(new BigDecimal(rList.get(0)), 3,RoundingMode.DOWN).multiply(new BigDecimal("100"));
        }
        rList.add(this.remove0(onlineRate));
        rList.add(this.remove0(rate));
        HashMap<String, Object> map = new HashMap<>();
        map.put("count", rList);
        map.put("list", resultVOS);
@@ -561,8 +580,8 @@
        Criteria and = new Criteria();
        and.andOperator(andCriteria);
        query = Query.query(and);
        if(params.getOption()!=null){
            if(params.getOption() ==1){
        if (params.getOption() != null) {
            if (params.getOption() == 1) {
                andCriteria.add(Criteria.where("serialNumber.error").is(Boolean.FALSE));
                andCriteria.add(Criteria.where("name.error").is(Boolean.FALSE));
                andCriteria.add(Criteria.where("civilCode.error").is(Boolean.FALSE));
@@ -578,7 +597,7 @@
                Criteria and2 = new Criteria();
                and2.andOperator(andCriteria);
                query = Query.query(and2);
            }else if(params.getOption() ==-1){
            } else if (params.getOption() == -1) {
                Criteria c1 = Criteria.where("serialNumber.error").is(Boolean.TRUE);
                Criteria c2 = Criteria.where("name.error").is(Boolean.TRUE);
                Criteria c3 = Criteria.where("civilCode.error").is(Boolean.TRUE);
@@ -611,26 +630,26 @@
        //总数
        List<Document> dList1 = new ArrayList<>(2);
        setTag(params, dList1);
        Document totalFilter = new Document("$and",dList1);
        Document totalFilter = new Document("$and", dList1);
        //合格数
        List<Document> dList2 = new ArrayList<>(2);
        dList2.add(new Document("serialNumber.error",Boolean.FALSE));
        dList2.add(new Document("name.error",Boolean.FALSE));
        dList2.add(new Document("civilCode.error",Boolean.FALSE));
        dList2.add(new Document("integrated_device.error",Boolean.FALSE));
        dList2.add(new Document("jkdwlx.error",Boolean.FALSE));
        dList2.add(new Document("latitude.error",Boolean.FALSE));
        dList2.add(new Document("longitude.error",Boolean.FALSE));
        dList2.add(new Document("macdz.error",Boolean.FALSE));
        dList2.add(new Document("name.error",Boolean.FALSE));
        dList2.add(new Document("sbzt.error",Boolean.FALSE));
        dList2.add(new Document("sxjcjqy.error",Boolean.FALSE));
        dList2.add(new Document("sxjgnlx.error",Boolean.FALSE));
        setTag(params,dList2);
        Document qualifyFilter = new Document("$and",dList2);
        dList2.add(new Document("serialNumber.error", Boolean.FALSE));
        dList2.add(new Document("name.error", Boolean.FALSE));
        dList2.add(new Document("civilCode.error", Boolean.FALSE));
        dList2.add(new Document("integrated_device.error", Boolean.FALSE));
        dList2.add(new Document("jkdwlx.error", Boolean.FALSE));
        dList2.add(new Document("latitude.error", Boolean.FALSE));
        dList2.add(new Document("longitude.error", Boolean.FALSE));
        dList2.add(new Document("macdz.error", Boolean.FALSE));
        dList2.add(new Document("name.error", Boolean.FALSE));
        dList2.add(new Document("sbzt.error", Boolean.FALSE));
        dList2.add(new Document("sxjcjqy.error", Boolean.FALSE));
        dList2.add(new Document("sxjgnlx.error", Boolean.FALSE));
        setTag(params, dList2);
        Document qualifyFilter = new Document("$and", dList2);
        //不合格数
        List<Document> dList3  = new ArrayList<>(2);
        setTag(params,dList3);
        List<Document> dList3 = new ArrayList<>(2);
        setTag(params, dList3);
        List<Document> errorConditions = new ArrayList<>();
        errorConditions.add(new Document("serialNumber.error", new Document("$eq", Boolean.TRUE)));
        errorConditions.add(new Document("name.error", new Document("$eq", Boolean.TRUE)));
@@ -666,19 +685,22 @@
            }
            return uniqueDeviceIdCount + "";
        }).collect(Collectors.toList());
        List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper())
                .select(CheckIndexVideo::getMonitorQualification)
                .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province)
                .eq(params.getDataType().equals(2), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Dept)
                .between(CheckIndexVideo::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
                .list();
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (CollectionUtils.isNotEmpty(videoList)) {
            BigDecimal sum = videoList.stream().map(CheckIndexVideo::getMonitorQualification).reduce(BigDecimal.ZERO, BigDecimal::add);
            BigDecimal count = BigDecimal.valueOf(videoList.size());
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        if (!StringUtils.isEmpty(rList.get(0)) && !"0".equals(rList.get(0))) {
            onlineRate = new BigDecimal(rList.get(1)).divide(new BigDecimal(rList.get(0)), 3,RoundingMode.DOWN).multiply(new BigDecimal("100"));
        }
//        List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper())
//                .select(CheckIndexVideo::getMonitorQualification)
//                .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province)
//                .eq(params.getDataType().equals(2), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Dept)
//                .between(CheckIndexVideo::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
//                .list();
//        BigDecimal onlineRate = BigDecimal.ZERO;
//        if (CollectionUtils.isNotEmpty(videoList)) {
//            BigDecimal sum = videoList.stream().map(CheckIndexVideo::getMonitorQualification).reduce(BigDecimal.ZERO, BigDecimal::add);
//            BigDecimal count = BigDecimal.valueOf(videoList.size());
//            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
//        }
        rList.add(this.remove0(onlineRate));
        HashMap<String, Object> map = new HashMap<>();
        map.put("count", rList);
@@ -691,6 +713,7 @@
     * 档案留存总量:mongo存的所有去重后的档案
     * 当日档案:当日的档案
     * 档案考核比 = 当日档案/档案留存总量
     *
     * @param params
     * @return1
     */
@@ -716,14 +739,14 @@
        //总数
        List<Document> dList1 = new ArrayList<>(2);
        DataCenterQuery totalParams = new DataCenterQuery();
        BeanUtils.copyProperties(params,totalParams);
        BeanUtils.copyProperties(params, totalParams);
        totalParams.setStartTime(null);
        setTag(totalParams, dList1);
        Document totalFilter = new Document("$and",dList1);
        Document totalFilter = new Document("$and", dList1);
        //当日档案数
        List<Document> dList2 = new ArrayList<>(2);
        setTag(params, dList2);
        Document newFilter = new Document("$and",dList2);
        Document newFilter = new Document("$and", dList2);
        List<Document> lists = Arrays.asList(totalFilter, newFilter);
        List<String> rList = lists.stream().map(filter -> {
@@ -743,19 +766,22 @@
            }
            return uniqueDeviceIdCount + "";
        }).collect(Collectors.toList());
        List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper())
                .select(CheckIndexVideo::getArchivesRate)
                .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province)
                .eq(params.getDataType().equals(2), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Dept)
                .between(CheckIndexVideo::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
                .list();
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (CollectionUtils.isNotEmpty(videoList)) {
            BigDecimal sum = videoList.stream().map(CheckIndexVideo::getArchivesRate).reduce(BigDecimal.ZERO, BigDecimal::add);
            BigDecimal count = BigDecimal.valueOf(videoList.size());
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        if (!StringUtils.isEmpty(rList.get(0)) && !"0".equals(rList.get(0))) {
            onlineRate = new BigDecimal(rList.get(1)).divide(new BigDecimal(rList.get(0)), 3,RoundingMode.DOWN).multiply(new BigDecimal("100"));
        }
//        List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper())
//                .select(CheckIndexVideo::getArchivesRate)
//                .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province)
//                .eq(params.getDataType().equals(2), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Dept)
//                .between(CheckIndexVideo::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
//                .list();
//        BigDecimal onlineRate = BigDecimal.ZERO;
//        if (CollectionUtils.isNotEmpty(videoList)) {
//            BigDecimal sum = videoList.stream().map(CheckIndexVideo::getArchivesRate).reduce(BigDecimal.ZERO, BigDecimal::add);
//            BigDecimal count = BigDecimal.valueOf(videoList.size());
//            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
//        }
        rList.add(this.remove0(onlineRate));
        HashMap<String, Object> map = new HashMap<>();
        map.put("count", rList);
@@ -781,10 +807,10 @@
        MongoUtil.setPage(query, params, "createTime");
        List<RecordMetaDSumResult> resultList = mongoTemplate.find(query, RecordMetaDSumResult.class);
        //翻译行政区域
        resultList.forEach(item->{
        resultList.forEach(item -> {
            String areaCode = item.getArealayername().substring(0, 6);
            AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromCode(areaCode);
            if(areaDeptEnum!=null) item.setArealayername(areaDeptEnum.getName());
            if (areaDeptEnum != null) item.setArealayername(areaDeptEnum.getName());
        });
        // 统计数量
        MongoDatabase database = mongoTemplate.getDb();
@@ -811,18 +837,18 @@
            }
            return uniqueDeviceIdCount + "";
        }).collect(Collectors.toList());
        List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper())
                .select(CheckIndexVideo::getVideoAvailable)
                .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province)
                .eq(params.getDataType().equals(2), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Dept)
                .between(CheckIndexVideo::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
                .list();
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (CollectionUtils.isNotEmpty(videoList)) {
            BigDecimal sum = videoList.stream().map(CheckIndexVideo::getVideoAvailable).reduce(BigDecimal.ZERO, BigDecimal::add);
            BigDecimal count = BigDecimal.valueOf(videoList.size());
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        }
//        List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper())
//                .select(CheckIndexVideo::getVideoAvailable)
//                .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province)
//                .eq(params.getDataType().equals(2), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Dept)
//                .between(CheckIndexVideo::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
//                .list();
//        BigDecimal onlineRate = BigDecimal.ZERO;
//        if (CollectionUtils.isNotEmpty(videoList)) {
//            BigDecimal sum = videoList.stream().map(CheckIndexVideo::getVideoAvailable).reduce(BigDecimal.ZERO, BigDecimal::add);
//            BigDecimal count = BigDecimal.valueOf(videoList.size());
//            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
//        }
        //加一个总数
        int totalCount = 0;
        for (String s : resultCount) {
@@ -830,6 +856,10 @@
        }
        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"));
        }
        resultCount.add(this.remove0(onlineRate));
        HashMap<String, Object> map = new HashMap<>();
@@ -856,10 +886,10 @@
        MongoUtil.setPage(query, params, "createTime");
        List<RecordMetaDSumResult> resultList = mongoTemplate.find(query, RecordMetaDSumResult.class);
        //翻译行政区域
        resultList.forEach(item->{
        resultList.forEach(item -> {
            String areaCode = item.getArealayername().substring(0, 6);
            AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromCode(areaCode);
            if(areaDeptEnum!=null) item.setArealayername(areaDeptEnum.getName());
            if (areaDeptEnum != null) item.setArealayername(areaDeptEnum.getName());
        });
        // 统计数量
        MongoDatabase database = mongoTemplate.getDb();
@@ -888,24 +918,28 @@
            return uniqueDeviceIdCount + "";
        }).collect(Collectors.toList());
        List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper())
                .select(CheckIndexVideo::getMinistryVideoAvailable)
                .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province)
                .eq(params.getDataType().equals(2), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Dept)
                .between(CheckIndexVideo::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
                .list();
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (CollectionUtils.isNotEmpty(videoList)) {
            BigDecimal sum = videoList.stream().map(CheckIndexVideo::getMinistryVideoAvailable).reduce(BigDecimal.ZERO, BigDecimal::add);
            BigDecimal count = BigDecimal.valueOf(videoList.size());
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        }
//        List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper())
//                .select(CheckIndexVideo::getMinistryVideoAvailable)
//                .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province)
//                .eq(params.getDataType().equals(2), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Dept)
//                .between(CheckIndexVideo::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
//                .list();
//        BigDecimal onlineRate = BigDecimal.ZERO;
//        if (CollectionUtils.isNotEmpty(videoList)) {
//            BigDecimal sum = videoList.stream().map(CheckIndexVideo::getMinistryVideoAvailable).reduce(BigDecimal.ZERO, BigDecimal::add);
//            BigDecimal count = BigDecimal.valueOf(videoList.size());
//            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
//        }
        //加一个总数
        int totalCount = 0;
        for (String s : resultCount) {
            totalCount += Integer.parseInt(s);
        }
        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"));
        }
        resultCount.add(this.remove0(onlineRate));
        HashMap<String, Object> map = new HashMap<>();
        map.put("count", resultCount);
@@ -931,10 +965,10 @@
        MongoUtil.setPage(query, params, "createTime");
        List<RecordMetaDSumResult> resultList = mongoTemplate.find(query, RecordMetaDSumResult.class);
        //翻译行政区域
        resultList.forEach(item->{
        resultList.forEach(item -> {
            String areaCode = item.getArealayername().substring(0, 6);
            AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromCode(areaCode);
            if(areaDeptEnum!=null) item.setArealayername(areaDeptEnum.getName());
            if (areaDeptEnum != null) item.setArealayername(areaDeptEnum.getName());
        });
        // 统计数量
        MongoDatabase database = mongoTemplate.getDb();
@@ -963,24 +997,28 @@
            return uniqueDeviceIdCount + "";
        }).collect(Collectors.toList());
        List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper())
                .select(CheckIndexVideo::getKeyVideoAvailable)
                .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province)
                .eq(params.getDataType().equals(2), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Dept)
                .between(CheckIndexVideo::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
                .list();
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (CollectionUtils.isNotEmpty(videoList)) {
            BigDecimal sum = videoList.stream().map(CheckIndexVideo::getKeyVideoAvailable).reduce(BigDecimal.ZERO, BigDecimal::add);
            BigDecimal count = BigDecimal.valueOf(videoList.size());
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        }
//        List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper())
//                .select(CheckIndexVideo::getKeyVideoAvailable)
//                .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province)
//                .eq(params.getDataType().equals(2), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Dept)
//                .between(CheckIndexVideo::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
//                .list();
//        BigDecimal onlineRate = BigDecimal.ZERO;
//        if (CollectionUtils.isNotEmpty(videoList)) {
//            BigDecimal sum = videoList.stream().map(CheckIndexVideo::getKeyVideoAvailable).reduce(BigDecimal.ZERO, BigDecimal::add);
//            BigDecimal count = BigDecimal.valueOf(videoList.size());
//            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
//        }
        //加一个总数
        int totalCount = 0;
        for (String s : resultCount) {
            totalCount += Integer.parseInt(s);
        }
        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"));
        }
        resultCount.add(this.remove0(onlineRate));
        HashMap<String, Object> map = new HashMap<>();
        map.put("count", resultCount);
@@ -1029,7 +1067,7 @@
        query = Query.query(and);
        //下拉框标注正确查询条件
        if (params.getOption() != null) {
            if(params.getOption()==1) {
            if (params.getOption() == 1) {
                andCriteria.add(Criteria.where("osdNameCorrect").is(1));
                andCriteria.add(Criteria.where("osdTimeCorrect").is(1));
                andCriteria.add(Criteria.where("osdProvinceCorrect").is(1));
@@ -1038,7 +1076,7 @@
                Criteria and2 = new Criteria();
                and2.andOperator(andCriteria);
                query = Query.query(and2);
            }else if(params.getOption()==-1){
            } else if (params.getOption() == -1) {
                // 使用$or条件连接多个字段检查,每个字段检查是否等于-1
                Criteria c1 = Criteria.where("osdNameCorrect").is(-1);
                Criteria c2 = Criteria.where("osdTimeCorrect").is(-1);
@@ -1048,7 +1086,7 @@
                Criteria orOperator = new Criteria().orOperator(c1, c2, c3, c4, c5);
                orOperator.andOperator(andCriteria);
                query = Query.query(orOperator);
            }else {
            } else {
                Criteria c1 = Criteria.where("osdNameCorrect").is(0);
                Criteria c2 = Criteria.where("osdTimeCorrect").is(0);
                Criteria c3 = Criteria.where("osdProvinceCorrect").is(0);
@@ -1085,7 +1123,7 @@
        Document osdCorrectFilter = new Document("$and", dList1);
        //异常数
        List<Document> dList2 = new ArrayList<>(2);
        setTag(params,dList2);
        setTag(params, dList2);
        Document importantTagCondition = new Document("importantTag", Boolean.TRUE);
        dList2.add(importantTagCondition);
        List<Document> errorConditions = new ArrayList<>();
@@ -1099,7 +1137,7 @@
        Document osdErrorFilter = new Document("$and", dList2);
        //未知数
        List<Document> dList3 = new ArrayList<>(2);
        setTag(params,dList3);
        setTag(params, dList3);
        dList3.add(importantTagCondition);
        List<Document> unknownConditions = new ArrayList<>();
        unknownConditions.add(new Document("osdNameCorrect", new Document("$eq", 0)));
@@ -1112,7 +1150,7 @@
        dList3.add(unknownFilter);
        Document osdUnknownFilter = new Document("$and", dList3);
        List<Document> lists = Arrays.asList(osdFilter, osdCorrectFilter, osdErrorFilter,osdUnknownFilter);
        List<Document> lists = Arrays.asList(osdFilter, osdCorrectFilter, osdErrorFilter, osdUnknownFilter);
        List<String> rList = lists.stream().map(filter -> {
            // 构建聚合管道
            List<Document> pipeline = Arrays.asList(
@@ -1131,17 +1169,21 @@
            return uniqueDeviceIdCount + "";
        }).collect(Collectors.toList());
        List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper())
                .select(CheckIndexVideo::getKeyAnnotationAccuracy)
                .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province)
                .eq(params.getDataType().equals(2), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Dept)
                .between(CheckIndexVideo::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
                .list();
//        List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper())
//                .select(CheckIndexVideo::getKeyAnnotationAccuracy)
//                .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province)
//                .eq(params.getDataType().equals(2), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Dept)
//                .between(CheckIndexVideo::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
//                .list();
//        BigDecimal onlineRate = BigDecimal.ZERO;
//        if (CollectionUtils.isNotEmpty(videoList)) {
//            BigDecimal sum = videoList.stream().map(CheckIndexVideo::getKeyAnnotationAccuracy).reduce(BigDecimal.ZERO, BigDecimal::add);
//            BigDecimal count = BigDecimal.valueOf(videoList.size());
//            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
//        }
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (CollectionUtils.isNotEmpty(videoList)) {
            BigDecimal sum = videoList.stream().map(CheckIndexVideo::getKeyAnnotationAccuracy).reduce(BigDecimal.ZERO, BigDecimal::add);
            BigDecimal count = BigDecimal.valueOf(videoList.size());
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        if (!StringUtils.isEmpty(rList.get(0)) && !"0".equals(rList.get(0))) {
            onlineRate = new BigDecimal(rList.get(1)).divide(new BigDecimal(rList.get(0)), 3,RoundingMode.DOWN).multiply(new BigDecimal("100"));
        }
        rList.add(this.remove0(onlineRate));
        HashMap<String, Object> map = new HashMap<>();
@@ -1160,7 +1202,7 @@
        query = Query.query(and);
        //下拉框标注正确查询条件
        if (params.getOption() != null) {
            if(params.getOption()==1) {
            if (params.getOption() == 1) {
                andCriteria.add(Criteria.where("osdNameCorrect").is(1));
                andCriteria.add(Criteria.where("osdTimeCorrect").is(1));
                andCriteria.add(Criteria.where("osdProvinceCorrect").is(1));
@@ -1169,7 +1211,7 @@
                Criteria and2 = new Criteria();
                and2.andOperator(andCriteria);
                query = Query.query(and2);
            }else if(params.getOption()==-1){
            } else if (params.getOption() == -1) {
                // 使用$or条件连接多个字段检查,每个字段检查是否等于-1
                Criteria c1 = Criteria.where("osdNameCorrect").is(-1);
                Criteria c2 = Criteria.where("osdTimeCorrect").is(-1);
@@ -1179,7 +1221,7 @@
                Criteria orOperator = new Criteria().orOperator(c1, c2, c3, c4, c5);
                orOperator.andOperator(andCriteria);
                query = Query.query(orOperator);
            }else {
            } else {
                Criteria c1 = Criteria.where("osdNameCorrect").is(0);
                Criteria c2 = Criteria.where("osdTimeCorrect").is(0);
                Criteria c3 = Criteria.where("osdProvinceCorrect").is(0);
@@ -1211,7 +1253,7 @@
    }
    /**
     * 视频:校时正确率
     * 视频:校时正确率(停用)
     *
     * @param params
     * @return
@@ -1248,11 +1290,11 @@
        Query query = MongoUtil.getQuery(params, "checkTime", likeFileds, null);
        //下拉框标注正确查询条件
        if (params.getOption() != null) {
            if(params.getOption()==1) {
               query.addCriteria(Criteria.where("osdTimeCorrect").is(1));
            }else if(params.getOption()==-1){
            if (params.getOption() == 1) {
                query.addCriteria(Criteria.where("osdTimeCorrect").is(1));
            } else if (params.getOption() == -1) {
                query.addCriteria(Criteria.where("osdTimeCorrect").is(-1));
            }else {
            } else {
                query.addCriteria(Criteria.where("osdTimeCorrect").is(0));
            }
        }
@@ -1284,7 +1326,7 @@
        Document osdCorrectFilter = new Document("$and", dList1);
        //异常数
        List<Document> dList2 = new ArrayList<>(2);
        setTag(params,dList2);
        setTag(params, dList2);
        Document importantTagCondition = new Document("importantTag", Boolean.TRUE);
        dList2.add(importantTagCondition);
        List<Document> errorConditions = new ArrayList<>();
@@ -1298,7 +1340,7 @@
        Document osdErrorFilter = new Document("$and", dList2);
        //未知数
        List<Document> dList3 = new ArrayList<>(2);
        setTag(params,dList3);
        setTag(params, dList3);
        dList3.add(importantTagCondition);
        List<Document> unknownConditions = new ArrayList<>();
        unknownConditions.add(new Document("osdNameCorrect", new Document("$eq", 0)));
@@ -1311,7 +1353,7 @@
        dList3.add(unknownFilter);
        Document osdUnknownFilter = new Document("$and", dList3);
        List<Document> lists = Arrays.asList(osdFilter, osdCorrectFilter, osdErrorFilter,osdUnknownFilter);
        List<Document> lists = Arrays.asList(osdFilter, osdCorrectFilter, osdErrorFilter, osdUnknownFilter);
        List<String> rList = lists.stream().map(filter -> {
            // 构建聚合管道
            List<Document> pipeline = Arrays.asList(
@@ -1330,17 +1372,21 @@
            return uniqueDeviceIdCount + "";
        }).collect(Collectors.toList());
        List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper())
                .select(CheckIndexVideo::getKeyTimingAccuracy)
                .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province)
                .eq(params.getDataType().equals(2), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Dept)
                .between(CheckIndexVideo::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
                .list();
//        List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper())
//                .select(CheckIndexVideo::getKeyTimingAccuracy)
//                .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province)
//                .eq(params.getDataType().equals(2), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Dept)
//                .between(CheckIndexVideo::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
//                .list();
//        BigDecimal onlineRate = BigDecimal.ZERO;
//        if (CollectionUtils.isNotEmpty(videoList)) {
//            BigDecimal sum = videoList.stream().map(CheckIndexVideo::getKeyTimingAccuracy).reduce(BigDecimal.ZERO, BigDecimal::add);
//            BigDecimal count = BigDecimal.valueOf(videoList.size());
//            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
//        }
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (CollectionUtils.isNotEmpty(videoList)) {
            BigDecimal sum = videoList.stream().map(CheckIndexVideo::getKeyTimingAccuracy).reduce(BigDecimal.ZERO, BigDecimal::add);
            BigDecimal count = BigDecimal.valueOf(videoList.size());
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        if (!StringUtils.isEmpty(rList.get(0)) && !"0".equals(rList.get(0))) {
            onlineRate = new BigDecimal(rList.get(1)).divide(new BigDecimal(rList.get(0)), 3,RoundingMode.DOWN).multiply(new BigDecimal("100"));
        }
        rList.add(this.remove0(onlineRate));
        HashMap<String, Object> map = new HashMap<>();
@@ -1362,21 +1408,21 @@
        Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        //加DataType为车辆
        query.addCriteria(Criteria.where("dataType").is(ApiConstants.HK_DataType_CAR));
        if(params.getOption()!=null){
            if(ApiConstants.HK_SnapCount_ResultType_Normal.equals(params.getOption())) {
        if (params.getOption() != null) {
            if (ApiConstants.HK_SnapCount_ResultType_Normal.equals(params.getOption())) {
                query.addCriteria(Criteria.where("resultType").is(ApiConstants.HK_SnapCount_ResultType_Normal));
            }else if(ApiConstants.HK_SnapCount_ResultType_Null.equals(params.getOption())){
            } else if (ApiConstants.HK_SnapCount_ResultType_Null.equals(params.getOption())) {
                query.addCriteria(Criteria.where("resultType").is(ApiConstants.HK_SnapCount_ResultType_Null));
            }else if(ApiConstants.HK_SnapCount_ResultType_Descent.equals(params.getOption())){
            } else if (ApiConstants.HK_SnapCount_ResultType_Descent.equals(params.getOption())) {
                query.addCriteria(Criteria.where("resultType").is(ApiConstants.HK_SnapCount_ResultType_Descent));
            }else if(ApiConstants.HK_SnapCount_ResultType_Low.equals(params.getOption())){
            } else if (ApiConstants.HK_SnapCount_ResultType_Low.equals(params.getOption())) {
                query.addCriteria(Criteria.where("resultType").is(ApiConstants.HK_SnapCount_ResultType_Low));
            }
        }
        long total = mongoTemplate.count(query, SnapshotDataMonitorResult.class);
        MongoUtil.setPage(query, params, TIME_FIELD);
        List<SnapshotDataMonitorResult> resultList = mongoTemplate.find(query, SnapshotDataMonitorResult.class);
        resultList.forEach(item ->item.setResultTypeText(item.getResultTypeText()));
        resultList.forEach(item -> item.setResultTypeText(item.getResultTypeText()));
        // 统计数量
        MongoDatabase database = mongoTemplate.getDb();
        MongoCollection<Document> collection = database.getCollection("hk_snapshot_data_monitor");
@@ -1389,10 +1435,19 @@
        dList3.add(new Document("resultType", new Document("$eq", 2)));
        dList3.add(new Document("dataType", new Document("$eq", ApiConstants.HK_DataType_CAR)));
        setTag(params, dList3);
        Document noDataFilter = new Document("$and", dList2);
        Document trFilter = new Document("$and", dList3);
        List<Document> lists = Arrays.asList(noDataFilter, trFilter);
        List<Document> dList4 = new ArrayList<>(2);
        dList4.add(new Document("resultType", new Document("$eq", 3)));
        dList4.add(new Document("dataType", new Document("$eq", ApiConstants.HK_DataType_CAR)));
        setTag(params, dList4);
        List<Document> dList5 = new ArrayList<>(2);
        dList5.add(new Document("resultType", new Document("$eq", 4)));
        dList5.add(new Document("dataType", new Document("$eq", ApiConstants.HK_DataType_CAR)));
        setTag(params, dList5);
        Document normalFilter = new Document("$and", dList2);
        Document noDataFilter = new Document("$and", dList3);
        Document downFilter = new Document("$and", dList4);
        Document lessFilter = new Document("$and", dList5);
        List<Document> lists = Arrays.asList(normalFilter, noDataFilter,downFilter,lessFilter);
        List<String> rList = lists.stream().map(filter -> {
            // 构建聚合管道
            List<Document> pipeline = Arrays.asList(
@@ -1425,18 +1480,27 @@
        for (Document doc : result) {
            dataCount = doc.getInteger("dataCount");
        }
        rList.add(0,dataCount+"");
        List<CheckIndexCar> carList = new LambdaQueryChainWrapper<>(checkIndexCarService.getBaseMapper())
                .select(CheckIndexCar::getViewConnectStability)
                .eq(params.getDataType().equals(1), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Province)
                .eq(params.getDataType().equals(2), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Dept)
                .between(CheckIndexCar::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
                .list();
        rList.add(0, dataCount + "");
//        List<CheckIndexCar> carList = new LambdaQueryChainWrapper<>(checkIndexCarService.getBaseMapper())
//                .select(CheckIndexCar::getViewConnectStability)
//                .eq(params.getDataType().equals(1), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Province)
//                .eq(params.getDataType().equals(2), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Dept)
//                .between(CheckIndexCar::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
//                .list();
//        BigDecimal onlineRate = BigDecimal.ZERO;
//        if (CollectionUtils.isNotEmpty(carList)) {
//            BigDecimal sum = carList.stream().map(CheckIndexCar::getViewConnectStability).reduce(BigDecimal.ZERO, BigDecimal::add);
//            BigDecimal count = BigDecimal.valueOf(carList.size());
//            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
//        }
        BigDecimal normal = new BigDecimal(rList.get(1));
        BigDecimal noData = new BigDecimal(rList.get(2));
        BigDecimal down = new BigDecimal(rList.get(3));
        BigDecimal less = new BigDecimal(rList.get(4));
        BigDecimal totalCount = normal.add(noData).add(down).add(less);
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (CollectionUtils.isNotEmpty(carList)) {
            BigDecimal sum = carList.stream().map(CheckIndexCar::getViewConnectStability).reduce(BigDecimal.ZERO, BigDecimal::add);
            BigDecimal count = BigDecimal.valueOf(carList.size());
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        if (totalCount.compareTo(BigDecimal.ZERO)>0) {
            onlineRate = normal.divide(totalCount, 3,RoundingMode.DOWN).multiply(new BigDecimal("100"));
        }
        rList.add(this.remove0(onlineRate));
        HashMap<String, Object> map = new HashMap<>();
@@ -1490,7 +1554,7 @@
                item.setOnlineStr("未知");
            }
            List<String> offLineTime = item.getOffLineTimeStr();
            if(!CollectionUtils.isEmpty(offLineTime)) {
            if (!CollectionUtils.isEmpty(offLineTime)) {
                //后续可以改成配置的离线次数(提取前n次,n为配置的离线次数)
                if (offLineTime.size() > 1) {
                    offLineTime = offLineTime.subList(0, 2);
@@ -1535,17 +1599,21 @@
            totalCount = offlineCount + unknownCount + onlineCount;
        }
        List<CheckIndexCar> videoList = new LambdaQueryChainWrapper<>(checkIndexCarService.getBaseMapper())
                .select(CheckIndexCar::getSiteOnline)
                .eq(params.getDataType().equals(1), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Province)
                .eq(params.getDataType().equals(2), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Dept)
                .between(CheckIndexCar::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
                .list();
//        List<CheckIndexCar> videoList = new LambdaQueryChainWrapper<>(checkIndexCarService.getBaseMapper())
//                .select(CheckIndexCar::getSiteOnline)
//                .eq(params.getDataType().equals(1), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Province)
//                .eq(params.getDataType().equals(2), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Dept)
//                .between(CheckIndexCar::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
//                .list();
//        BigDecimal onlineRate = BigDecimal.ZERO;
//        if (CollectionUtils.isNotEmpty(videoList)) {
//            BigDecimal sum = videoList.stream().map(CheckIndexCar::getSiteOnline).reduce(BigDecimal.ZERO, BigDecimal::add);
//            BigDecimal count = BigDecimal.valueOf(videoList.size());
//            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
//        }
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (CollectionUtils.isNotEmpty(videoList)) {
            BigDecimal sum = videoList.stream().map(CheckIndexCar::getSiteOnline).reduce(BigDecimal.ZERO, BigDecimal::add);
            BigDecimal count = BigDecimal.valueOf(videoList.size());
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        if (totalCount!=0) {
            onlineRate = new BigDecimal(onlineCount).divide(new BigDecimal(totalCount), 3,RoundingMode.DOWN).multiply(new BigDecimal("100"));
        }
        HashMap<String, Object> map = new HashMap<>();
        map.put("count", Arrays.asList(totalCount + "", onlineCount + "", offlineCount + "", unknownCount + "", this.remove0(onlineRate)));
@@ -1568,10 +1636,10 @@
        andCriteria.add(Criteria.where("sxjgnlx.value").regex(pattern));
        Query query = new Query();
        Criteria and = new Criteria();
        if(params.getOption()!=null){
            if(params.getOption() ==1){
        if (params.getOption() != null) {
            if (params.getOption() == 1) {
                andCriteria.add(Criteria.where("newDevice").is(Boolean.TRUE));
            }else if(params.getOption() ==-1){
            } else if (params.getOption() == -1) {
                andCriteria.add(Criteria.where("newDevice").is(Boolean.FALSE));
            }
        }
@@ -1592,13 +1660,13 @@
        List<Document> dList1 = new ArrayList<>(2);
        setTag(params, dList1);
        dList1.add(new Document("sxjgnlx.value", new Document("$regex", ".*2.*")));
        Document totalFilter = new Document("$and",dList1);
        Document totalFilter = new Document("$and", dList1);
        //新设备数
        List<Document> dList2 = new ArrayList<>(2);
        setTag(params, dList2);
        dList2.add(new Document("sxjgnlx.value", new Document("$regex", ".*2.*")));
        dList2.add(new Document("newDevice",Boolean.TRUE));
        Document newFilter = new Document("$and",dList2);
        dList2.add(new Document("newDevice", Boolean.TRUE));
        Document newFilter = new Document("$and", dList2);
        List<Document> lists = Arrays.asList(totalFilter, newFilter);
        List<String> rList = lists.stream().map(filter -> {
@@ -1619,17 +1687,21 @@
            return uniqueDeviceIdCount + "";
        }).collect(Collectors.toList());
        List<CheckIndexCar> videoList = new LambdaQueryChainWrapper<>(checkIndexCarService.getBaseMapper())
                .select(CheckIndexCar::getDeviceDirectoryConsistent)
                .eq(params.getDataType().equals(1), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Province)
                .eq(params.getDataType().equals(2), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Dept)
                .between(CheckIndexCar::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
                .list();
//        List<CheckIndexCar> videoList = new LambdaQueryChainWrapper<>(checkIndexCarService.getBaseMapper())
//                .select(CheckIndexCar::getDeviceDirectoryConsistent)
//                .eq(params.getDataType().equals(1), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Province)
//                .eq(params.getDataType().equals(2), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Dept)
//                .between(CheckIndexCar::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
//                .list();
//        BigDecimal onlineRate = BigDecimal.ZERO;
//        if (CollectionUtils.isNotEmpty(videoList)) {
//            BigDecimal sum = videoList.stream().map(CheckIndexCar::getDeviceDirectoryConsistent).reduce(BigDecimal.ZERO, BigDecimal::add);
//            BigDecimal count = BigDecimal.valueOf(videoList.size());
//            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
//        }
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (CollectionUtils.isNotEmpty(videoList)) {
            BigDecimal sum = videoList.stream().map(CheckIndexCar::getDeviceDirectoryConsistent).reduce(BigDecimal.ZERO, BigDecimal::add);
            BigDecimal count = BigDecimal.valueOf(videoList.size());
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        if (!StringUtils.isEmpty(rList.get(0)) && !"0".equals(rList.get(0))) {
            onlineRate = new BigDecimal(rList.get(0)).subtract(new BigDecimal(rList.get(1))).divide(new BigDecimal(rList.get(0)), 3,RoundingMode.DOWN).multiply(new BigDecimal("100"));
        }
        rList.add(this.remove0(onlineRate));
        HashMap<String, Object> map = new HashMap<>();
@@ -1652,11 +1724,11 @@
        Criteria and = new Criteria();
        and.andOperator(andCriteria);
        query = Query.query(and);
        if(params.getOption()!=null){
            if(params.getOption() ==1){
        if (params.getOption() != null) {
            if (params.getOption() == 1) {
                query.addCriteria(Criteria.where("lalType").is(ApiConstants.HK_Info_LayType_Normal));
                query.addCriteria(Criteria.where("gbCodeType").is(ApiConstants.HK_Info_GbCodeType_Normal));
            }else if(params.getOption() ==-1){
            } else if (params.getOption() == -1) {
                Criteria lalType = Criteria.where("lalType").ne(ApiConstants.HK_Info_LayType_Normal);
                Criteria gbCodeType = Criteria.where("gbCodeType").ne(ApiConstants.HK_Info_GbCodeType_Normal);
                Criteria orOperator = new Criteria().orOperator(lalType, gbCodeType);
@@ -1682,9 +1754,9 @@
        List<Document> dList3 = new ArrayList<>(2);
        setTag(params, dList3);
        List<Document> errorConditions = new ArrayList<>();
        errorConditions.add(new Document("lalType",new Document("$ne",1)));
        errorConditions.add(new Document("gbCodeType",new Document("$ne",1)));
        Document errorDoc = new Document("$or",errorConditions);
        errorConditions.add(new Document("lalType", new Document("$ne", 1)));
        errorConditions.add(new Document("gbCodeType", new Document("$ne", 1)));
        Document errorDoc = new Document("$or", errorConditions);
        dList3.add(errorDoc);
        Document totalFilter = new Document("$and", dList1);
        Document correctFilter = new Document("$and", dList2);
@@ -1709,17 +1781,21 @@
            return uniqueDeviceIdCount + "";
        }).collect(Collectors.toList());
        List<CheckIndexCar> videoList = new LambdaQueryChainWrapper<>(checkIndexCarService.getBaseMapper())
                .select(CheckIndexCar::getVehicleInformationCollectionAccuracy)
                .eq(params.getDataType().equals(1), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Province)
                .eq(params.getDataType().equals(2), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Dept)
                .between(CheckIndexCar::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
                .list();
//        List<CheckIndexCar> videoList = new LambdaQueryChainWrapper<>(checkIndexCarService.getBaseMapper())
//                .select(CheckIndexCar::getVehicleInformationCollectionAccuracy)
//                .eq(params.getDataType().equals(1), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Province)
//                .eq(params.getDataType().equals(2), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Dept)
//                .between(CheckIndexCar::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
//                .list();
//        BigDecimal onlineRate = BigDecimal.ZERO;
//        if (CollectionUtils.isNotEmpty(videoList)) {
//            BigDecimal sum = videoList.stream().map(CheckIndexCar::getVehicleInformationCollectionAccuracy).reduce(BigDecimal.ZERO, BigDecimal::add);
//            BigDecimal count = BigDecimal.valueOf(videoList.size());
//            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
//        }
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (CollectionUtils.isNotEmpty(videoList)) {
            BigDecimal sum = videoList.stream().map(CheckIndexCar::getVehicleInformationCollectionAccuracy).reduce(BigDecimal.ZERO, BigDecimal::add);
            BigDecimal count = BigDecimal.valueOf(videoList.size());
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        if (!StringUtils.isEmpty(rList.get(0)) && !"0".equals(rList.get(0))) {
            onlineRate = new BigDecimal(rList.get(1)).divide(new BigDecimal(rList.get(0)), 3,RoundingMode.DOWN).multiply(new BigDecimal("100"));
        }
        rList.add(this.remove0(onlineRate));
        HashMap<String, Object> map = new HashMap<>();
@@ -1738,11 +1814,11 @@
    public Result vehicleCollectionDataIntegrity(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("externalIndexCode", "deviceName");
        Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        if(params.getOption()!=null){
        if (params.getOption() != null) {
            //主要属性不完整
            if(params.getOption()==1){
                 query.addCriteria(Criteria.where("noIntegrityCount").gt(0));
            }else if(params.getOption()==-1){
            if (params.getOption() == 1) {
                query.addCriteria(Criteria.where("noIntegrityCount").gt(0));
            } else if (params.getOption() == -1) {
                //属性不完整
                query.addCriteria(Criteria.where("mainNoIntegrityCount").gt(0));
            }
@@ -1777,22 +1853,26 @@
            mainNoIntegrityCount = doc.getInteger("mainNoIntegrityCount");
        }
        List<CheckIndexCar> videoList = new LambdaQueryChainWrapper<>(checkIndexCarService.getBaseMapper())
                .select(CheckIndexCar::getVehicleCaptureIntegrity)
                .eq(params.getDataType().equals(1), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Province)
                .eq(params.getDataType().equals(2), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Dept)
                .between(CheckIndexCar::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
                .list();
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (CollectionUtils.isNotEmpty(videoList)) {
            BigDecimal sum = videoList.stream().map(CheckIndexCar::getVehicleCaptureIntegrity).reduce(BigDecimal.ZERO, BigDecimal::add);
            BigDecimal count = BigDecimal.valueOf(videoList.size());
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        }
//        List<CheckIndexCar> videoList = new LambdaQueryChainWrapper<>(checkIndexCarService.getBaseMapper())
//                .select(CheckIndexCar::getVehicleCaptureIntegrity)
//                .eq(params.getDataType().equals(1), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Province)
//                .eq(params.getDataType().equals(2), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Dept)
//                .between(CheckIndexCar::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
//                .list();
//        BigDecimal onlineRate = BigDecimal.ZERO;
//        if (CollectionUtils.isNotEmpty(videoList)) {
//            BigDecimal sum = videoList.stream().map(CheckIndexCar::getVehicleCaptureIntegrity).reduce(BigDecimal.ZERO, BigDecimal::add);
//            BigDecimal count = BigDecimal.valueOf(videoList.size());
//            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
//        }
        List<String> countList = new ArrayList<>();
        countList.add(dataCount+"");
        countList.add(noIntegrityCount+"");
        countList.add(mainNoIntegrityCount+"");
        countList.add(dataCount + "");
        countList.add(noIntegrityCount + "");
        countList.add(mainNoIntegrityCount + "");
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (dataCount!=0) {
            onlineRate = new BigDecimal(dataCount-noIntegrityCount).divide(new BigDecimal(dataCount), 3,RoundingMode.DOWN).multiply(new BigDecimal("100"));
        }
        countList.add(this.remove0(onlineRate));
        HashMap<String, Object> map = new HashMap<>();
        map.put("count", countList);
@@ -1810,11 +1890,11 @@
    public Result vehicleCollectionDataCaptured(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("externalIndexCode", "deviceName");
        Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        if(params.getOption()!=null){
        if (params.getOption() != null) {
            //主要属性不一致
            if(params.getOption()==1){
            if (params.getOption() == 1) {
                query.addCriteria(Criteria.where("majorDiffCount").gt(0));
            }else if(params.getOption()==-1){
            } else if (params.getOption() == -1) {
                //重要属性不一致
                query.addCriteria(Criteria.where("importantDiffCount").gt(0));
            }
@@ -1848,23 +1928,27 @@
            importantDiffCount = doc.getInteger("importantDiffCount");
        }
        List<CheckIndexCar> videoList = new LambdaQueryChainWrapper<>(checkIndexCarService.getBaseMapper())
                .select(CheckIndexCar::getVehicleCaptureAccuracy)
                .eq(params.getDataType().equals(1), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Province)
                .eq(params.getDataType().equals(2), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Dept)
                .between(CheckIndexCar::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
                .list();
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (CollectionUtils.isNotEmpty(videoList)) {
            BigDecimal sum = videoList.stream().map(CheckIndexCar::getVehicleCaptureAccuracy).reduce(BigDecimal.ZERO, BigDecimal::add);
            BigDecimal count = BigDecimal.valueOf(videoList.size());
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        }
//        List<CheckIndexCar> videoList = new LambdaQueryChainWrapper<>(checkIndexCarService.getBaseMapper())
//                .select(CheckIndexCar::getVehicleCaptureAccuracy)
//                .eq(params.getDataType().equals(1), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Province)
//                .eq(params.getDataType().equals(2), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Dept)
//                .between(CheckIndexCar::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
//                .list();
//        BigDecimal onlineRate = BigDecimal.ZERO;
//        if (CollectionUtils.isNotEmpty(videoList)) {
//            BigDecimal sum = videoList.stream().map(CheckIndexCar::getVehicleCaptureAccuracy).reduce(BigDecimal.ZERO, BigDecimal::add);
//            BigDecimal count = BigDecimal.valueOf(videoList.size());
//            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
//        }
        List<String> countList = new ArrayList<>();
        countList.add(sampleCount+"");
        countList.add(majorDiffCount+"");
        countList.add(importantDiffCount+"");
        countList.add(sampleCount + "");
        countList.add(majorDiffCount + "");
        countList.add(importantDiffCount + "");
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (sampleCount!=0) {
            onlineRate = new BigDecimal(sampleCount-majorDiffCount).divide(new BigDecimal(sampleCount), 3,RoundingMode.DOWN).multiply(new BigDecimal("100"));
        }
        countList.add(this.remove0(onlineRate));
        HashMap<String, Object> map = new HashMap<>();
        map.put("count", countList);
@@ -1882,11 +1966,11 @@
    public Result vehicleClockAccuracy(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("externalIndexCode", "deviceName");
        Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        if(params.getOption()!=null){
        if (params.getOption() != null) {
            //当日时钟异常
            if(params.getOption()==1){
            if (params.getOption() == 1) {
                query.addCriteria(Criteria.where("majorDiffCount").gt(0));
            }else if(params.getOption()==-1){
            } else if (params.getOption() == -1) {
                //全部时钟异常
                query.addCriteria(Criteria.where("importantDiffCount").gt(0));
            }
@@ -1895,7 +1979,7 @@
        MongoUtil.setPage(query, params, TIME_FIELD);
        List<VehicleDeviceInspectionResult> resultList = mongoTemplate.find(query, VehicleDeviceInspectionResult.class);
        List<SnapClockVO> resultVos = new ArrayList<>();
        resultList.forEach(item->{
        resultList.forEach(item -> {
            SnapClockVO vo = VehicleDeviceInspectionResult.getVO(item);
            resultVos.add(vo);
        });
@@ -1921,7 +2005,7 @@
        Document allFilter = new Document("$and", dList3);
        Document allErrFilter = new Document("$and", dList4);
        List<Document> lists = Arrays.asList(todayFilter, todayErrFilter, allFilter,allErrFilter);
        List<Document> lists = Arrays.asList(todayFilter, todayErrFilter, allFilter, allErrFilter);
        List<String> rList = lists.stream().map(filter -> {
            // 构建聚合管道
            List<Document> pipeline = Arrays.asList(
@@ -1940,17 +2024,24 @@
            return uniqueDeviceIdCount + "";
        }).collect(Collectors.toList());
        List<CheckIndexCar> videoList = new LambdaQueryChainWrapper<>(checkIndexCarService.getBaseMapper())
                .select(CheckIndexCar::getVehicleTimingAccuracy)
                .eq(params.getDataType().equals(1), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Province)
                .eq(params.getDataType().equals(2), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Dept)
                .between(CheckIndexCar::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
                .list();
//        List<CheckIndexCar> videoList = new LambdaQueryChainWrapper<>(checkIndexCarService.getBaseMapper())
//                .select(CheckIndexCar::getVehicleTimingAccuracy)
//                .eq(params.getDataType().equals(1), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Province)
//                .eq(params.getDataType().equals(2), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Dept)
//                .between(CheckIndexCar::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
//                .list();
//        BigDecimal onlineRate = BigDecimal.ZERO;
//        if (CollectionUtils.isNotEmpty(videoList)) {
//            BigDecimal sum = videoList.stream().map(CheckIndexCar::getVehicleTimingAccuracy).reduce(BigDecimal.ZERO, BigDecimal::add);
//            BigDecimal count = BigDecimal.valueOf(videoList.size());
//            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
//        }
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (CollectionUtils.isNotEmpty(videoList)) {
            BigDecimal sum = videoList.stream().map(CheckIndexCar::getVehicleTimingAccuracy).reduce(BigDecimal.ZERO, BigDecimal::add);
            BigDecimal count = BigDecimal.valueOf(videoList.size());
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        BigDecimal normal = new BigDecimal(rList.get(0));
        BigDecimal abnormal = new BigDecimal(rList.get(1));
        BigDecimal totalCount = normal.add(abnormal);
        if (totalCount.compareTo(BigDecimal.ZERO)>0) {
            onlineRate = normal.divide(totalCount, 3,RoundingMode.DOWN).multiply(new BigDecimal("100"));
        }
        rList.add(this.remove0(onlineRate));
        HashMap<String, Object> map = new HashMap<>();
@@ -1970,11 +2061,11 @@
        List<String> likeFileds = Arrays.asList("externalIndexCode", "deviceName");
        Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        query.addCriteria(Criteria.where("dataType").is(ApiConstants.HK_DataType_CAR));
        if(params.getOption()!=null){
        if (params.getOption() != null) {
            //正常
            if(params.getOption()==1){
            if (params.getOption() == 1) {
                query.addCriteria(Criteria.where("delayCount").is(0));
            }else if(params.getOption()==-1){
            } else if (params.getOption() == -1) {
                //延迟
                query.addCriteria(Criteria.where("delayCount").gt(0));
            }
@@ -1988,15 +2079,15 @@
        List<Document> dList1 = new ArrayList<>(2);
        setTag(params, dList1);
        dList1.add(new Document("dataType" ,new Document("$eq",ApiConstants.HK_DataType_CAR)));
        dList1.add(new Document("dataType", new Document("$eq", ApiConstants.HK_DataType_CAR)));
        Document allFilter = new Document("$and", dList1);
        List<Document> dList2 = new ArrayList<>(2);
        dList2.add(new Document("dataType" ,new Document("$eq",ApiConstants.HK_DataType_CAR)));
        dList2.add(new Document("dataType", new Document("$eq", ApiConstants.HK_DataType_CAR)));
        dList2.add(new Document("delayCount", new Document("$gt", 0)));
        setTag(params, dList2);
        Document delayFilter = new Document("$and", dList2);
        List<Document> lists = Arrays.asList(allFilter,delayFilter);
        List<Document> lists = Arrays.asList(allFilter, delayFilter);
        List<String> rList = lists.stream().map(filter -> {
            // 构建聚合管道
            List<Document> pipeline = Arrays.asList(
@@ -2016,17 +2107,21 @@
        }).collect(Collectors.toList());
        List<CheckIndexCar> videoList = new LambdaQueryChainWrapper<>(checkIndexCarService.getBaseMapper())
                .select(CheckIndexCar::getVehicleUploadTimeliness)
                .eq(params.getDataType().equals(1), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Province)
                .eq(params.getDataType().equals(2), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Dept)
                .between(CheckIndexCar::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
                .list();
//        List<CheckIndexCar> videoList = new LambdaQueryChainWrapper<>(checkIndexCarService.getBaseMapper())
//                .select(CheckIndexCar::getVehicleUploadTimeliness)
//                .eq(params.getDataType().equals(1), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Province)
//                .eq(params.getDataType().equals(2), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Dept)
//                .between(CheckIndexCar::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
//                .list();
//        BigDecimal onlineRate = BigDecimal.ZERO;
//        if (CollectionUtils.isNotEmpty(videoList)) {
//            BigDecimal sum = videoList.stream().map(CheckIndexCar::getVehicleUploadTimeliness).reduce(BigDecimal.ZERO, BigDecimal::add);
//            BigDecimal count = BigDecimal.valueOf(videoList.size());
//            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
//        }
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (CollectionUtils.isNotEmpty(videoList)) {
            BigDecimal sum = videoList.stream().map(CheckIndexCar::getVehicleUploadTimeliness).reduce(BigDecimal.ZERO, BigDecimal::add);
            BigDecimal count = BigDecimal.valueOf(videoList.size());
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        if (!StringUtils.isEmpty(rList.get(0)) && !"0".equals(rList.get(0))) {
            onlineRate = new BigDecimal(rList.get(0)).subtract(new BigDecimal(rList.get(1))).divide(new BigDecimal(rList.get(0)), 3,RoundingMode.DOWN).multiply(new BigDecimal("100"));
        }
        rList.add(this.remove0(onlineRate));
        HashMap<String, Object> map = new HashMap<>();
@@ -2045,10 +2140,10 @@
    public Result vehicleUrlAccuracy(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("externalIndexCode", "deviceName");
        Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        if(params.getOption()!=null){
            if(params.getOption()==1){
        if (params.getOption() != null) {
            if (params.getOption() == 1) {
                query.addCriteria(Criteria.where("expCount").is(0));
            }else if(params.getOption()==-1){
            } else if (params.getOption() == -1) {
                query.addCriteria(Criteria.where("expCount").gt(0));
            }
        }
@@ -2091,8 +2186,8 @@
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        }
        List<String> rList = new ArrayList<>();
        rList.add(sampleCount+"");
        rList.add(expCount+"");
        rList.add(sampleCount + "");
        rList.add(expCount + "");
        rList.add(this.remove0(onlineRate));
        HashMap<String, Object> map = new HashMap<>();
@@ -2111,10 +2206,10 @@
    public Result vehicleBigImgAccuracy(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("externalIndexCode", "deviceName");
        Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        if(params.getOption()!=null){
            if(params.getOption()==1){
        if (params.getOption() != null) {
            if (params.getOption() == 1) {
                query.addCriteria(Criteria.where("bigUseful.bigPicExpCount").is(0));
            }else if(params.getOption()==-1){
            } else if (params.getOption() == -1) {
                query.addCriteria(Criteria.where("bigUseful.bigPicExpCount").gt(0));
            }
        }
@@ -2123,7 +2218,7 @@
        query.with(Sort.by(Sort.Order.desc("bigUseful.bigPicExpCount")));
        List<VehicleDeviceSamplingResult> resultList = mongoTemplate.find(query, VehicleDeviceSamplingResult.class);
        List<BigPicUsefulVO> voList = new ArrayList<>();
        resultList.forEach(item->{
        resultList.forEach(item -> {
            BigPicUsefulVO picVO = VehicleDeviceSamplingResult.getPicVO(item);
            voList.add(picVO);
        });
@@ -2148,20 +2243,24 @@
            expCount = doc.getInteger("expCount");
        }
        List<String> countList = new ArrayList<>();
        List<CheckIndexCar> videoList = new LambdaQueryChainWrapper<>(checkIndexCarService.getBaseMapper())
                .select(CheckIndexCar::getVehiclePictureAvailability)
                .eq(params.getDataType().equals(1), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Province)
                .eq(params.getDataType().equals(2), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Dept)
                .between(CheckIndexCar::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
                .list();
//        List<CheckIndexCar> videoList = new LambdaQueryChainWrapper<>(checkIndexCarService.getBaseMapper())
//                .select(CheckIndexCar::getVehiclePictureAvailability)
//                .eq(params.getDataType().equals(1), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Province)
//                .eq(params.getDataType().equals(2), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Dept)
//                .between(CheckIndexCar::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
//                .list();
//        BigDecimal onlineRate = BigDecimal.ZERO;
//        if (CollectionUtils.isNotEmpty(videoList)) {
//            BigDecimal sum = videoList.stream().map(CheckIndexCar::getVehiclePictureAvailability).reduce(BigDecimal.ZERO, BigDecimal::add);
//            BigDecimal count = BigDecimal.valueOf(videoList.size());
//            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
//        }
        countList.add(sampleCount + "");
        countList.add(expCount + "");
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (CollectionUtils.isNotEmpty(videoList)) {
            BigDecimal sum = videoList.stream().map(CheckIndexCar::getVehiclePictureAvailability).reduce(BigDecimal.ZERO, BigDecimal::add);
            BigDecimal count = BigDecimal.valueOf(videoList.size());
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        if (sampleCount!=0) {
            onlineRate = new BigDecimal(sampleCount-expCount).divide(new BigDecimal(sampleCount), 3,RoundingMode.DOWN).multiply(new BigDecimal("100"));
        }
        countList.add(sampleCount+"");
        countList.add(expCount+"");
        countList.add(this.remove0(onlineRate));
        HashMap<String, Object> map = new HashMap<>();
        map.put("count", countList);
@@ -2181,21 +2280,21 @@
        Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        //加DataType为车辆
        query.addCriteria(Criteria.where("dataType").is(ApiConstants.HK_DataType_FACE));
        if(params.getOption()!=null){
            if(ApiConstants.HK_SnapCount_ResultType_Normal.equals(params.getOption())) {
        if (params.getOption() != null) {
            if (ApiConstants.HK_SnapCount_ResultType_Normal.equals(params.getOption())) {
                query.addCriteria(Criteria.where("resultType").is(ApiConstants.HK_SnapCount_ResultType_Normal));
            }else if(ApiConstants.HK_SnapCount_ResultType_Null.equals(params.getOption())){
            } else if (ApiConstants.HK_SnapCount_ResultType_Null.equals(params.getOption())) {
                query.addCriteria(Criteria.where("resultType").is(ApiConstants.HK_SnapCount_ResultType_Null));
            }else if(ApiConstants.HK_SnapCount_ResultType_Descent.equals(params.getOption())){
            } else if (ApiConstants.HK_SnapCount_ResultType_Descent.equals(params.getOption())) {
                query.addCriteria(Criteria.where("resultType").is(ApiConstants.HK_SnapCount_ResultType_Descent));
            }else if(ApiConstants.HK_SnapCount_ResultType_Low.equals(params.getOption())){
            } else if (ApiConstants.HK_SnapCount_ResultType_Low.equals(params.getOption())) {
                query.addCriteria(Criteria.where("resultType").is(ApiConstants.HK_SnapCount_ResultType_Low));
            }
        }
        long total = mongoTemplate.count(query, SnapshotDataMonitorResult.class);
        MongoUtil.setPage(query, params, TIME_FIELD);
        List<SnapshotDataMonitorResult> resultList = mongoTemplate.find(query, SnapshotDataMonitorResult.class);
        resultList.forEach(item ->item.setResultTypeText(item.getResultTypeText()));
        resultList.forEach(item -> item.setResultTypeText(item.getResultTypeText()));
        // 统计数量
        MongoDatabase database = mongoTemplate.getDb();
        MongoCollection<Document> collection = database.getCollection("hk_snapshot_data_monitor");
@@ -2209,9 +2308,19 @@
        dList3.add(new Document("dataType", new Document("$eq", ApiConstants.HK_DataType_CAR)));
        setTag(params, dList3);
        Document noDataFilter = new Document("$and", dList2);
        Document trFilter = new Document("$and", dList3);
        List<Document> lists = Arrays.asList(noDataFilter, trFilter);
        List<Document> dList4 = new ArrayList<>(2);
        dList4.add(new Document("resultType", new Document("$eq", 3)));
        dList4.add(new Document("dataType", new Document("$eq", ApiConstants.HK_DataType_CAR)));
        setTag(params, dList4);
        List<Document> dList5 = new ArrayList<>(2);
        dList5.add(new Document("resultType", new Document("$eq", 4)));
        dList5.add(new Document("dataType", new Document("$eq", ApiConstants.HK_DataType_CAR)));
        setTag(params, dList5);
        Document normalFilter = new Document("$and", dList2);
        Document noDataFilter = new Document("$and", dList3);
        Document downFilter = new Document("$and", dList4);
        Document lessFilter = new Document("$and", dList5);
        List<Document> lists = Arrays.asList(normalFilter, noDataFilter,downFilter,lessFilter);
        List<String> rList = lists.stream().map(filter -> {
            // 构建聚合管道
            List<Document> pipeline = Arrays.asList(
@@ -2245,18 +2354,27 @@
        for (Document doc : result) {
            dataCount = doc.getInteger("dataCount");
        }
        rList.add(0,dataCount+"");
        List<CheckIndexFace> videoList = new LambdaQueryChainWrapper<>(checkIndexFaceService.getBaseMapper())
                .select(CheckIndexFace::getViewConnectStability)
                .eq(params.getDataType().equals(1), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Province)
                .eq(params.getDataType().equals(2), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Dept)
                .between(CheckIndexFace::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
                .list();
        rList.add(0, dataCount + "");
//        List<CheckIndexFace> videoList = new LambdaQueryChainWrapper<>(checkIndexFaceService.getBaseMapper())
//                .select(CheckIndexFace::getViewConnectStability)
//                .eq(params.getDataType().equals(1), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Province)
//                .eq(params.getDataType().equals(2), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Dept)
//                .between(CheckIndexFace::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
//                .list();
//        BigDecimal onlineRate = BigDecimal.ZERO;
//        if (CollectionUtils.isNotEmpty(videoList)) {
//            BigDecimal sum = videoList.stream().map(CheckIndexFace::getViewConnectStability).reduce(BigDecimal.ZERO, BigDecimal::add);
//            BigDecimal count = BigDecimal.valueOf(videoList.size());
//            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
//        }
        BigDecimal normal = new BigDecimal(rList.get(1));
        BigDecimal noData = new BigDecimal(rList.get(2));
        BigDecimal down = new BigDecimal(rList.get(3));
        BigDecimal less = new BigDecimal(rList.get(4));
        BigDecimal totalCount = normal.add(noData).add(down).add(less);
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (CollectionUtils.isNotEmpty(videoList)) {
            BigDecimal sum = videoList.stream().map(CheckIndexFace::getViewConnectStability).reduce(BigDecimal.ZERO, BigDecimal::add);
            BigDecimal count = BigDecimal.valueOf(videoList.size());
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        if (totalCount.compareTo(BigDecimal.ZERO)>0) {
            onlineRate = normal.divide(totalCount, 3,RoundingMode.DOWN).multiply(new BigDecimal("100"));
        }
        rList.add(this.remove0(onlineRate));
        HashMap<String, Object> map = new HashMap<>();
@@ -2307,7 +2425,7 @@
                item.setOnlineStr("未知");
            }
            List<String> offLineTime = item.getOffLineTimeStr();
            if(!CollectionUtils.isEmpty(offLineTime)) {
            if (!CollectionUtils.isEmpty(offLineTime)) {
                //后续可以改成配置的离线次数(提取前n次,n为配置的离线次数)
                if (offLineTime.size() > 1) {
                    offLineTime = offLineTime.subList(0, 2);
@@ -2353,19 +2471,22 @@
            onlineCount = (Integer) result.getOrDefault("onlineCount", 0L);
            totalCount = offlineCount + unknownCount + onlineCount;
        }
        List<CheckIndexFace> videoList = new LambdaQueryChainWrapper<>(checkIndexFaceService.getBaseMapper())
                .select(CheckIndexFace::getSiteOnline)
                .eq(params.getDataType().equals(1), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Province)
                .eq(params.getDataType().equals(2), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Dept)
                .between(CheckIndexFace::getCreateTime, params.getStartTime(), params.getEndTime())
                .list();
//        List<CheckIndexFace> videoList = new LambdaQueryChainWrapper<>(checkIndexFaceService.getBaseMapper())
//                .select(CheckIndexFace::getSiteOnline)
//                .eq(params.getDataType().equals(1), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Province)
//                .eq(params.getDataType().equals(2), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Dept)
//                .between(CheckIndexFace::getCreateTime, params.getStartTime(), params.getEndTime())
//                .list();
//        BigDecimal onlineRate = BigDecimal.ZERO;
//        if (CollectionUtils.isNotEmpty(videoList)) {
//            BigDecimal sum = videoList.stream().map(CheckIndexFace::getSiteOnline).reduce(BigDecimal.ZERO, BigDecimal::add);
//            BigDecimal count = BigDecimal.valueOf(videoList.size());
//            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
//        }
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (CollectionUtils.isNotEmpty(videoList)) {
            BigDecimal sum = videoList.stream().map(CheckIndexFace::getSiteOnline).reduce(BigDecimal.ZERO, BigDecimal::add);
            BigDecimal count = BigDecimal.valueOf(videoList.size());
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        if (totalCount!=0) {
            onlineRate = new BigDecimal(onlineCount).divide(new BigDecimal(totalCount), 3,RoundingMode.DOWN).multiply(new BigDecimal("100"));
        }
        HashMap<String, Object> map = new HashMap<>();
        map.put("count", Arrays.asList(totalCount + "", onlineCount + "", offlineCount + "", unknownCount + "", this.remove0(onlineRate)));
        map.put("list", resultList);
@@ -2387,10 +2508,10 @@
        andCriteria.add(Criteria.where("sxjgnlx.value").regex(pattern));
        Query query = new Query();
        Criteria and = new Criteria();
        if(params.getOption()!=null){
            if(params.getOption() ==1){
        if (params.getOption() != null) {
            if (params.getOption() == 1) {
                andCriteria.add(Criteria.where("newDevice").is(Boolean.TRUE));
            }else if(params.getOption() ==-1){
            } else if (params.getOption() == -1) {
                andCriteria.add(Criteria.where("newDevice").is(Boolean.FALSE));
            }
        }
@@ -2411,13 +2532,13 @@
        List<Document> dList1 = new ArrayList<>(2);
        setTag(params, dList1);
        dList1.add(new Document("sxjgnlx.value", new Document("$regex", ".*3.*")));
        Document totalFilter = new Document("$and",dList1);
        Document totalFilter = new Document("$and", dList1);
        //新设备数
        List<Document> dList2 = new ArrayList<>(2);
        setTag(params, dList2);
        dList2.add(new Document("sxjgnlx.value", new Document("$regex", ".*3.*")));
        dList2.add(new Document("newDevice",Boolean.TRUE));
        Document newFilter = new Document("$and",dList2);
        dList2.add(new Document("newDevice", Boolean.TRUE));
        Document newFilter = new Document("$and", dList2);
        List<Document> lists = Arrays.asList(totalFilter, newFilter);
        List<String> rList = lists.stream().map(filter -> {
@@ -2438,17 +2559,21 @@
            return uniqueDeviceIdCount + "";
        }).collect(Collectors.toList());
        List<CheckIndexFace> videoList = new LambdaQueryChainWrapper<>(checkIndexFaceService.getBaseMapper())
                .select(CheckIndexFace::getDeviceDirectoryConsistent)
                .eq(params.getDataType().equals(1), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Province)
                .eq(params.getDataType().equals(2), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Dept)
                .between(CheckIndexFace::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
                .list();
//        List<CheckIndexFace> videoList = new LambdaQueryChainWrapper<>(checkIndexFaceService.getBaseMapper())
//                .select(CheckIndexFace::getDeviceDirectoryConsistent)
//                .eq(params.getDataType().equals(1), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Province)
//                .eq(params.getDataType().equals(2), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Dept)
//                .between(CheckIndexFace::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
//                .list();
//        BigDecimal onlineRate = BigDecimal.ZERO;
//        if (CollectionUtils.isNotEmpty(videoList)) {
//            BigDecimal sum = videoList.stream().map(CheckIndexFace::getDeviceDirectoryConsistent).reduce(BigDecimal.ZERO, BigDecimal::add);
//            BigDecimal count = BigDecimal.valueOf(videoList.size());
//            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
//        }
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (CollectionUtils.isNotEmpty(videoList)) {
            BigDecimal sum = videoList.stream().map(CheckIndexFace::getDeviceDirectoryConsistent).reduce(BigDecimal.ZERO, BigDecimal::add);
            BigDecimal count = BigDecimal.valueOf(videoList.size());
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        if (!StringUtils.isEmpty(rList.get(0)) && !"0".equals(rList.get(0))) {
            onlineRate = new BigDecimal(rList.get(0)).subtract(new BigDecimal(rList.get(1))).divide(new BigDecimal(rList.get(0)), 3,RoundingMode.DOWN).multiply(new BigDecimal("100"));
        }
        rList.add(this.remove0(onlineRate));
        HashMap<String, Object> map = new HashMap<>();
@@ -2471,11 +2596,11 @@
        Criteria and = new Criteria();
        and.andOperator(andCriteria);
        query = Query.query(and);
        if(params.getOption()!=null){
            if(params.getOption() ==1){
        if (params.getOption() != null) {
            if (params.getOption() == 1) {
                query.addCriteria(Criteria.where("lalType").is(ApiConstants.HK_Info_LayType_Normal));
                query.addCriteria(Criteria.where("gbCodeType").is(ApiConstants.HK_Info_GbCodeType_Normal));
            }else if(params.getOption() ==-1){
            } else if (params.getOption() == -1) {
                Criteria lalType = Criteria.where("lalType").ne(ApiConstants.HK_Info_LayType_Normal);
                Criteria gbCodeType = Criteria.where("gbCodeType").ne(ApiConstants.HK_Info_GbCodeType_Normal);
                Criteria orOperator = new Criteria().orOperator(lalType, gbCodeType);
@@ -2501,9 +2626,9 @@
        List<Document> dList3 = new ArrayList<>(2);
        setTag(params, dList3);
        List<Document> errorConditions = new ArrayList<>();
        errorConditions.add(new Document("lalType",new Document("$ne",1)));
        errorConditions.add(new Document("gbCodeType",new Document("$ne",1)));
        Document errorDoc = new Document("$or",errorConditions);
        errorConditions.add(new Document("lalType", new Document("$ne", 1)));
        errorConditions.add(new Document("gbCodeType", new Document("$ne", 1)));
        Document errorDoc = new Document("$or", errorConditions);
        dList3.add(errorDoc);
        Document totalFilter = new Document("$and", dList1);
        Document correctFilter = new Document("$and", dList2);
@@ -2528,17 +2653,21 @@
            return uniqueDeviceIdCount + "";
        }).collect(Collectors.toList());
        List<CheckIndexFace> videoList = new LambdaQueryChainWrapper<>(checkIndexFaceService.getBaseMapper())
                .select(CheckIndexFace::getFaceInformationCollectionAccuracy)
                .eq(params.getDataType().equals(1), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Province)
                .eq(params.getDataType().equals(2), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Dept)
                .between(CheckIndexFace::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
                .list();
//        List<CheckIndexFace> videoList = new LambdaQueryChainWrapper<>(checkIndexFaceService.getBaseMapper())
//                .select(CheckIndexFace::getFaceInformationCollectionAccuracy)
//                .eq(params.getDataType().equals(1), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Province)
//                .eq(params.getDataType().equals(2), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Dept)
//                .between(CheckIndexFace::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
//                .list();
//        BigDecimal onlineRate = BigDecimal.ZERO;
//        if (CollectionUtils.isNotEmpty(videoList)) {
//            BigDecimal sum = videoList.stream().map(CheckIndexFace::getFaceInformationCollectionAccuracy).reduce(BigDecimal.ZERO, BigDecimal::add);
//            BigDecimal count = BigDecimal.valueOf(videoList.size());
//            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
//        }
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (CollectionUtils.isNotEmpty(videoList)) {
            BigDecimal sum = videoList.stream().map(CheckIndexFace::getFaceInformationCollectionAccuracy).reduce(BigDecimal.ZERO, BigDecimal::add);
            BigDecimal count = BigDecimal.valueOf(videoList.size());
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        if (!StringUtils.isEmpty(rList.get(0)) && !"0".equals(rList.get(0))) {
            onlineRate = new BigDecimal(rList.get(1)).divide(new BigDecimal(rList.get(0)), 3,RoundingMode.DOWN).multiply(new BigDecimal("100"));
        }
        rList.add(this.remove0(onlineRate));
        HashMap<String, Object> map = new HashMap<>();
@@ -2557,10 +2686,10 @@
    public Result faceImgQualification(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("externalIndexCode", "cameraName");
        Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        if(params.getOption()!=null){
            if(params.getOption()==1){
        if (params.getOption() != null) {
            if (params.getOption() == 1) {
                query.addCriteria(Criteria.where("faceEligibility.unfaceEligCount").is(0));
            }else if(params.getOption()==-1){
            } else if (params.getOption() == -1) {
                query.addCriteria(Criteria.where("faceEligibility.unfaceEligCount").gt(0));
            }
        }
@@ -2569,7 +2698,7 @@
        MongoUtil.setPage(query, params, TIME_FIELD);
        List<FaceDeviceSamplingResult> resultList = mongoTemplate.find(query, FaceDeviceSamplingResult.class);
        List<BigPicUsefulVO> voList = new ArrayList<>();
        resultList.forEach(item->{
        resultList.forEach(item -> {
            BigPicUsefulVO picVO = FaceDeviceSamplingResult.getEligeVO(item);
            voList.add(picVO);
        });
@@ -2596,20 +2725,24 @@
        }
        List<String> countList = new ArrayList<>();
        List<CheckIndexFace> videoList = new LambdaQueryChainWrapper<>(checkIndexFaceService.getBaseMapper())
                .select(CheckIndexFace::getFacePictureQualification)
                .eq(params.getDataType().equals(1), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Province)
                .eq(params.getDataType().equals(2), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Dept)
                .between(CheckIndexFace::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
                .list();
//        List<CheckIndexFace> videoList = new LambdaQueryChainWrapper<>(checkIndexFaceService.getBaseMapper())
//                .select(CheckIndexFace::getFacePictureQualification)
//                .eq(params.getDataType().equals(1), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Province)
//                .eq(params.getDataType().equals(2), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Dept)
//                .between(CheckIndexFace::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
//                .list();
//        BigDecimal onlineRate = BigDecimal.ZERO;
//        if (CollectionUtils.isNotEmpty(videoList)) {
//            BigDecimal sum = videoList.stream().map(CheckIndexFace::getFacePictureQualification).reduce(BigDecimal.ZERO, BigDecimal::add);
//            BigDecimal count = BigDecimal.valueOf(videoList.size());
//            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
//        }
        countList.add(sampleCount + "");
        countList.add(expCount + "");
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (CollectionUtils.isNotEmpty(videoList)) {
            BigDecimal sum = videoList.stream().map(CheckIndexFace::getFacePictureQualification).reduce(BigDecimal.ZERO, BigDecimal::add);
            BigDecimal count = BigDecimal.valueOf(videoList.size());
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        if (sampleCount!=0) {
            onlineRate = new BigDecimal(sampleCount-expCount).divide(new BigDecimal(sampleCount), 3,RoundingMode.DOWN).multiply(new BigDecimal("100"));
        }
        countList.add(sampleCount+"");
        countList.add(expCount+"");
        countList.add(this.remove0(onlineRate));
        HashMap<String, Object> map = new HashMap<>();
        map.put("count", countList);
@@ -2627,11 +2760,11 @@
    public Result faceCapturesImagesAccuracy(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("externalIndexCode", "deviceName");
        Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        if(params.getOption()!=null){
        if (params.getOption() != null) {
            //当日时钟异常
            if(params.getOption()==1){
            if (params.getOption() == 1) {
                query.addCriteria(Criteria.where("majorDiffCount").gt(0));
            }else if(params.getOption()==-1){
            } else if (params.getOption() == -1) {
                //全部时钟异常
                query.addCriteria(Criteria.where("importantDiffCount").gt(0));
            }
@@ -2640,7 +2773,7 @@
        MongoUtil.setPage(query, params, TIME_FIELD);
        List<FaceDeviceInspectionResult> resultList = mongoTemplate.find(query, FaceDeviceInspectionResult.class);
        List<SnapClockVO> resultVos = new ArrayList<>();
        resultList.forEach(item->{
        resultList.forEach(item -> {
            SnapClockVO vo = FaceDeviceInspectionResult.getVO(item);
            resultVos.add(vo);
        });
@@ -2667,7 +2800,7 @@
        Document allErrFilter = new Document("$and", dList4);
        List<Document> lists = Arrays.asList(todayFilter, todayErrFilter, allFilter,allErrFilter);
        List<Document> lists = Arrays.asList(todayFilter, todayErrFilter, allFilter, allErrFilter);
        List<String> rList = lists.stream().map(filter -> {
            // 构建聚合管道
            List<Document> pipeline = Arrays.asList(
@@ -2686,17 +2819,24 @@
            return uniqueDeviceIdCount + "";
        }).collect(Collectors.toList());
        List<CheckIndexFace> videoList = new LambdaQueryChainWrapper<>(checkIndexFaceService.getBaseMapper())
                .select(CheckIndexFace::getFaceTimingAccuracy)
                .eq(params.getDataType().equals(1), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Province)
                .eq(params.getDataType().equals(2), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Dept)
                .between(CheckIndexFace::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
                .list();
//        List<CheckIndexFace> videoList = new LambdaQueryChainWrapper<>(checkIndexFaceService.getBaseMapper())
//                .select(CheckIndexFace::getFaceTimingAccuracy)
//                .eq(params.getDataType().equals(1), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Province)
//                .eq(params.getDataType().equals(2), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Dept)
//                .between(CheckIndexFace::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
//                .list();
//        BigDecimal onlineRate = BigDecimal.ZERO;
//        if (CollectionUtils.isNotEmpty(videoList)) {
//            BigDecimal sum = videoList.stream().map(CheckIndexFace::getFaceTimingAccuracy).reduce(BigDecimal.ZERO, BigDecimal::add);
//            BigDecimal count = BigDecimal.valueOf(videoList.size());
//            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
//        }
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (CollectionUtils.isNotEmpty(videoList)) {
            BigDecimal sum = videoList.stream().map(CheckIndexFace::getFaceTimingAccuracy).reduce(BigDecimal.ZERO, BigDecimal::add);
            BigDecimal count = BigDecimal.valueOf(videoList.size());
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        BigDecimal normal = new BigDecimal(rList.get(0));
        BigDecimal abnormal = new BigDecimal(rList.get(1));
        BigDecimal totalCount = normal.add(abnormal);
        if (totalCount.compareTo(BigDecimal.ZERO)>0) {
            onlineRate = normal.divide(totalCount, 3,RoundingMode.DOWN).multiply(new BigDecimal("100"));
        }
        rList.add(this.remove0(onlineRate));
        HashMap<String, Object> map = new HashMap<>();
@@ -2716,11 +2856,11 @@
        List<String> likeFileds = Arrays.asList("externalIndexCode", "deviceName");
        Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        query.addCriteria(Criteria.where("dataType").is(ApiConstants.HK_DataType_FACE));
        if(params.getOption()!=null){
        if (params.getOption() != null) {
            //正常
            if(params.getOption()==1){
            if (params.getOption() == 1) {
                query.addCriteria(Criteria.where("delayCount").is(0));
            }else if(params.getOption()==-1){
            } else if (params.getOption() == -1) {
                //延迟
                query.addCriteria(Criteria.where("delayCount").gt(0));
            }
@@ -2734,15 +2874,15 @@
        List<Document> dList1 = new ArrayList<>(2);
        setTag(params, dList1);
        dList1.add(new Document("dataType" ,new Document("$eq",ApiConstants.HK_DataType_FACE)));
        dList1.add(new Document("dataType", new Document("$eq", ApiConstants.HK_DataType_FACE)));
        Document allFilter = new Document("$and", dList1);
        List<Document> dList2 = new ArrayList<>(2);
        dList2.add(new Document("dataType" ,new Document("$eq",ApiConstants.HK_DataType_FACE)));
        dList2.add(new Document("dataType", new Document("$eq", ApiConstants.HK_DataType_FACE)));
        dList2.add(new Document("delayCount", new Document("$gt", 0)));
        setTag(params, dList2);
        Document delayFilter = new Document("$and", dList2);
        List<Document> lists = Arrays.asList(allFilter,delayFilter);
        List<Document> lists = Arrays.asList(allFilter, delayFilter);
        List<String> rList = lists.stream().map(filter -> {
            // 构建聚合管道
            List<Document> pipeline = Arrays.asList(
@@ -2762,17 +2902,21 @@
        }).collect(Collectors.toList());
        List<CheckIndexFace> videoList = new LambdaQueryChainWrapper<>(checkIndexFaceService.getBaseMapper())
                .select(CheckIndexFace::getFaceUploadTimeliness)
                .eq(params.getDataType().equals(1), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Province)
                .eq(params.getDataType().equals(2), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Dept)
                .between(CheckIndexFace::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
                .list();
//        List<CheckIndexFace> videoList = new LambdaQueryChainWrapper<>(checkIndexFaceService.getBaseMapper())
//                .select(CheckIndexFace::getFaceUploadTimeliness)
//                .eq(params.getDataType().equals(1), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Province)
//                .eq(params.getDataType().equals(2), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Dept)
//                .between(CheckIndexFace::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
//                .list();
//        BigDecimal onlineRate = BigDecimal.ZERO;
//        if (CollectionUtils.isNotEmpty(videoList)) {
//            BigDecimal sum = videoList.stream().map(CheckIndexFace::getFaceUploadTimeliness).reduce(BigDecimal.ZERO, BigDecimal::add);
//            BigDecimal count = BigDecimal.valueOf(videoList.size());
//            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
//        }
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (CollectionUtils.isNotEmpty(videoList)) {
            BigDecimal sum = videoList.stream().map(CheckIndexFace::getFaceUploadTimeliness).reduce(BigDecimal.ZERO, BigDecimal::add);
            BigDecimal count = BigDecimal.valueOf(videoList.size());
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        if (!StringUtils.isEmpty(rList.get(0)) && !"0".equals(rList.get(0))) {
            onlineRate = new BigDecimal(rList.get(0)).subtract(new BigDecimal(rList.get(1))).divide(new BigDecimal(rList.get(0)), 3,RoundingMode.DOWN).multiply(new BigDecimal("100"));
        }
        rList.add(this.remove0(onlineRate));
        HashMap<String, Object> map = new HashMap<>();
@@ -2791,10 +2935,10 @@
    public Result faceAvailabilityOfLargeImg(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("externalIndexCode", "deviceName");
        Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        if(params.getOption()!=null){
            if(params.getOption()==1){
        if (params.getOption() != null) {
            if (params.getOption() == 1) {
                query.addCriteria(Criteria.where("bigUseful.bigPicExpCount").is(0));
            }else if(params.getOption()==-1){
            } else if (params.getOption() == -1) {
                query.addCriteria(Criteria.where("bigUseful.bigPicExpCount").gt(0));
            }
        }
@@ -2803,7 +2947,7 @@
        query.with(Sort.by(Sort.Order.desc("bigUseful.bigPicExpCount")));
        List<FaceDeviceSamplingResult> resultList = mongoTemplate.find(query, FaceDeviceSamplingResult.class);
        List<BigPicUsefulVO> voList = new ArrayList<>();
        resultList.forEach(item->{
        resultList.forEach(item -> {
            BigPicUsefulVO picVO = FaceDeviceSamplingResult.getPicVO(item);
            voList.add(picVO);
        });
@@ -2830,20 +2974,24 @@
        List<String> countList = new ArrayList<>();
        // 统计数
        List<CheckIndexFace> videoList = new LambdaQueryChainWrapper<>(checkIndexFaceService.getBaseMapper())
                .select(CheckIndexFace::getFacePictureAvailability)
                .eq(params.getDataType().equals(1), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Province)
                .eq(params.getDataType().equals(2), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Dept)
                .between(CheckIndexFace::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
                .list();
//        List<CheckIndexFace> videoList = new LambdaQueryChainWrapper<>(checkIndexFaceService.getBaseMapper())
//                .select(CheckIndexFace::getFacePictureAvailability)
//                .eq(params.getDataType().equals(1), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Province)
//                .eq(params.getDataType().equals(2), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Dept)
//                .between(CheckIndexFace::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
//                .list();
//        BigDecimal onlineRate = BigDecimal.ZERO;
//        if (CollectionUtils.isNotEmpty(videoList)) {
//            BigDecimal sum = videoList.stream().map(CheckIndexFace::getFacePictureAvailability).reduce(BigDecimal.ZERO, BigDecimal::add);
//            BigDecimal count = BigDecimal.valueOf(videoList.size());
//            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
//        }
        countList.add(sampleCount + "");
        countList.add(expCount + "");
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (CollectionUtils.isNotEmpty(videoList)) {
            BigDecimal sum = videoList.stream().map(CheckIndexFace::getFacePictureAvailability).reduce(BigDecimal.ZERO, BigDecimal::add);
            BigDecimal count = BigDecimal.valueOf(videoList.size());
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        if (sampleCount!=0) {
            onlineRate = new BigDecimal(sampleCount-expCount).divide(new BigDecimal(sampleCount), 3,RoundingMode.DOWN).multiply(new BigDecimal("100"));
        }
        countList.add(sampleCount+"");
        countList.add(expCount+"");
        countList.add(this.remove0(onlineRate));
        HashMap<String, Object> map = new HashMap<>();
        map.put("count", countList);
@@ -2894,8 +3042,8 @@
            dList.add(new Document("deptTag", new Document("$eq", Boolean.TRUE)));
        }
        Document mongoCreateTimeRange = new Document();
        if (params.getStartTime()!=null) mongoCreateTimeRange.append("$gte", params.getStartTime());
        if (params.getEndTime()!=null) mongoCreateTimeRange .append("$lt", params.getEndTime());
        if (params.getStartTime() != null) mongoCreateTimeRange.append("$gte", params.getStartTime());
        if (params.getEndTime() != null) mongoCreateTimeRange.append("$lt", params.getEndTime());
        dList.add(new Document("mongoCreateTime", mongoCreateTimeRange));
    }
}