fuliqi
2024-10-23 d74864fb938883b9c2b69abaf8b3ff740f03d930
ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java
@@ -1,5 +1,6 @@
package com.ycl.platform.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.github.pagehelper.Page;
@@ -10,6 +11,7 @@
import com.ycl.platform.domain.entity.*;
import com.ycl.platform.domain.query.DataCenterQuery;
import com.ycl.platform.domain.result.HK.*;
import com.ycl.platform.domain.result.SYS.TMonitorResult;
import com.ycl.platform.domain.result.UY.*;
import com.ycl.platform.domain.vo.PointDetailVO;
import com.ycl.platform.mapper.ImageResourceSecurityDetailMapper;
@@ -19,12 +21,14 @@
import com.ycl.system.page.PageUtil;
import com.ycl.utils.DateUtils;
import com.ycl.utils.MongoUtil;
import constant.ApiConstants;
import constant.CheckConstants;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections.CollectionUtils;
import org.bson.Document;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.aggregation.*;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.TextCriteria;
@@ -66,19 +70,91 @@
     */
    @Override
    public Result videoPointOnlineRate(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("name", "no", "ip");
        Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        //查视频设备
        query.addCriteria(Criteria.where("monitorType").regex(".*" + CheckConstants.Rule_Category_Video + ".*"));
        //下拉框在线情况查询条件
        if(params.getOption()!=null) {
            query.addCriteria(Criteria.where("online").is(params.getOption()));
        }
        // 通过pingOnline字段排序,为false的排在前面
        query.with(Sort.by(Sort.Order.asc("pingOnline")));
        //分页数量
        long total = mongoTemplate.count(query, TMonitorResult.class);
        MongoUtil.setPage(query, params, TIME_FIELD);
        List<TMonitorResult> resultList = mongoTemplate.find(query, TMonitorResult.class);
        resultList.forEach(item -> {
            if(item.getPingOnline() ==null){
                item.setPingOnlineStr("未知");
            } else if (item.getPingOnline()) {
                item.setPingOnlineStr("在线");
            } else if(!item.getPingOnline()){
                item.setPingOnlineStr("离线");
            }
            if(1== item.getOnline() ){
                item.setOnlineStr("在线");
            }else if(-1==item.getOnline()){
                item.setOnlineStr("离线");
            }else {
                item.setOnlineStr("未知");
            }
        });
        params.setDeptTag(-1);
        params.setDeviceType(1);
        IPage<PointDetailVO> page = PageUtil.getPage(params, PointDetailVO.class);
        pointMapper.dataCenterPage(page, params);
        // 统计设备数量
        Integer distinctCount = pointMapper.distinctCount(params);
        //卡片统计
        int totalCount =0;
        int onlineCount =0;
        int offlineCount =0;
        int unknownCount =0;
        //构建条件
        List<Criteria> criteriaList = new ArrayList<>();
        // 添加固定条件
        criteriaList.add(Criteria.where("monitorType").regex(".*" + CheckConstants.Rule_Category_Video + ".*"));
        criteriaList.add(Criteria.where("mongoCreateTime").gte(params.getStartTime()).lte(params.getEndTime()));
        // 根据dataType动态添加条件
        if (params.getDataType() == 1) {
            criteriaList.add(Criteria.where("provinceTag").is(Boolean.TRUE));
        } else if (params.getDataType() == 2) {
            criteriaList.add(Criteria.where("deptTag").is(Boolean.TRUE));
        }
        // 构建match操作
        MatchOperation match = Aggregation.match(
                new Criteria().andOperator(criteriaList.toArray(new Criteria[0]))
        );
        GroupOperation group = Aggregation.group()
                .sum(ConditionalOperators.when(Criteria.where("online").is(ApiConstants.UY_OnlineSite_Online)).then(1).otherwise(0)).as("onlineCount")
                .sum(ConditionalOperators.when(Criteria.where("online").is(ApiConstants.UY_OnlineSite_Offline)).then(1).otherwise(0)).as("offlineCount")
                .sum(ConditionalOperators.when(Criteria.where("online").is(ApiConstants.UY_OnlineSite_Unknown)).then(1).otherwise(0)).as("unknownCount");
        // 将匹配阶段和分组阶段组合起来
        Aggregation aggregation = Aggregation.newAggregation(match, group);
        // 执行聚合查询
        AggregationResults<Map> results = mongoTemplate.aggregate(aggregation, "t_monitor_online", Map.class); // 替换为你的集合名称
        for (Map<String, Object> result : results.getMappedResults()) {
            offlineCount =(Integer) result.getOrDefault("offlineCount",0L);
            unknownCount =(Integer) result.getOrDefault("unknownCount",0L);
            onlineCount = (Integer) result.getOrDefault("onlineCount",0L);
            totalCount = offlineCount + unknownCount + onlineCount;
        }
        /** 查询当天在线率 */
        // 创建一个QueryWrapper实例
        QueryWrapper<CheckIndexVideo> queryWrapper = new QueryWrapper<>();
        queryWrapper.lambda().select(CheckIndexVideo::getSiteOnline) // 选择要查询的字段
                .between(CheckIndexVideo::getCreateTime, params.getStartTime(), params.getEndTime()); // 设置时间范围条件
        if (params.getDataType() == 0) {
            //区县
            queryWrapper.lambda().eq(CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_County);
        }else if(params.getDataType() == 1){
            //省厅
            queryWrapper.lambda().eq(CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province);
        }else if(params.getDataType() == 2){
            //公安部
            queryWrapper.lambda().eq(CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Dept);
        }
        // 使用QueryWrapper执行查询
        List<CheckIndexVideo> videoList = checkIndexVideoService.getBaseMapper().selectList(queryWrapper);
        Date now = new Date();
        List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper())
                .select(CheckIndexVideo::getSiteOnline)
                .between(CheckIndexVideo::getCreateTime, DateUtils.getDayStart(now), DateUtils.getDayEnd(now))
                .list();
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (CollectionUtils.isNotEmpty(videoList)) {
            BigDecimal sum = videoList.stream().map(CheckIndexVideo::getSiteOnline).reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -86,9 +162,9 @@
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        }
        HashMap<String, Object> map = new HashMap<>();
        map.put("count", Arrays.asList(distinctCount + "",this.remove0(onlineRate)));
        map.put("list", page.getRecords());
        return Result.ok().data(map).total(page.getTotal());
        map.put("count", Arrays.asList(totalCount + "",onlineCount +"",offlineCount+"" ,unknownCount+"", this.remove0(onlineRate)));
        map.put("list", resultList);
        return Result.ok().data(map).total(total);
    }
    /**
@@ -99,19 +175,79 @@
     */
    @Override
    public Result deptVideoPointOnlineRate(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("name", "no", "ip");
        Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        //查视频设备
        query.addCriteria(Criteria.where("monitorType").regex(".*" + CheckConstants.Rule_Category_Video + ".*"));
        query.addCriteria(Criteria.where("deptTag").is(Boolean.TRUE));
        //下拉框在线情况查询条件
        if(params.getOption()!=null) {
            query.addCriteria(Criteria.where("online").is(params.getOption()));
        }
        // 通过pingOnline字段排序,为false的排在前面
        query.with(Sort.by(Sort.Order.asc("pingOnline")));
        //分页数量
        long total = mongoTemplate.count(query, TMonitorResult.class);
        MongoUtil.setPage(query, params, TIME_FIELD);
        List<TMonitorResult> resultList = mongoTemplate.find(query, TMonitorResult.class);
        resultList.forEach(item -> {
            if(item.getPingOnline() ==null){
                item.setPingOnlineStr("未知");
            } else if (item.getPingOnline()) {
                item.setPingOnlineStr("在线");
            } else if(!item.getPingOnline()){
                item.setPingOnlineStr("离线");
            }
            if (1 == item.getOnline()) {
                item.setOnlineStr("在线");
            } else if (-1 == item.getOnline()) {
                item.setOnlineStr("离线");
            } else {
                item.setOnlineStr("未知");
            }
        });
        // 统计设备数量
        //卡片统计
        int totalCount =0;
        int onlineCount =0;
        int offlineCount =0;
        int unknownCount =0;
        //构建条件
        List<Criteria> criteriaList = new ArrayList<>();
        // 添加固定条件
        criteriaList.add(Criteria.where("monitorType").regex(".*" + CheckConstants.Rule_Category_Video + ".*"));
        criteriaList.add(Criteria.where("mongoCreateTime").gte(params.getStartTime()).lte(params.getEndTime()));
        // 根据dataType动态添加条件
        if (params.getDataType() == 1) {
            criteriaList.add(Criteria.where("provinceTag").is(Boolean.TRUE));
        } else if (params.getDataType() == 2) {
            criteriaList.add(Criteria.where("deptTag").is(Boolean.TRUE));
        }
        // 构建match操作
        MatchOperation match = Aggregation.match(
                new Criteria().andOperator(criteriaList.toArray(new Criteria[0]))
        );
        GroupOperation group = Aggregation.group()
                .sum(ConditionalOperators.when(Criteria.where("online").is(ApiConstants.UY_OnlineSite_Online)).then(1).otherwise(0)).as("onlineCount")
                .sum(ConditionalOperators.when(Criteria.where("online").is(ApiConstants.UY_OnlineSite_Offline)).then(1).otherwise(0)).as("offlineCount")
                .sum(ConditionalOperators.when(Criteria.where("online").is(ApiConstants.UY_OnlineSite_Unknown)).then(1).otherwise(0)).as("unknownCount");
        // 将匹配阶段和分组阶段组合起来
        Aggregation aggregation = Aggregation.newAggregation(match, group);
        // 执行聚合查询
        AggregationResults<Map> results = mongoTemplate.aggregate(aggregation, "t_monitor_online", Map.class); // 替换为你的集合名称
        for (Map<String, Object> result : results.getMappedResults()) {
            offlineCount =(Integer) result.getOrDefault("offlineCount",0L);
            unknownCount =(Integer) result.getOrDefault("unknownCount",0L);
            onlineCount = (Integer) result.getOrDefault("onlineCount",0L);
            totalCount = offlineCount + unknownCount + onlineCount;
        }
        params.setDeptTag(1);
        params.setDeviceType(1);
        IPage<PointDetailVO> page = PageUtil.getPage(params, PointDetailVO.class);
        pointMapper.dataCenterPage(page, params);
        // 统计设备数量
        Integer distinctCount = pointMapper.distinctCount(params);
        Date now = new Date();
        List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper())
                .select(CheckIndexVideo::getMinistrySiteOnline)
                .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province)
                .between(CheckIndexVideo::getCreateTime, DateUtils.getDayStart(now), DateUtils.getDayEnd(now))
                .between(CheckIndexVideo::getCreateTime, params.getStartTime(),  params.getEndTime())
                .list();
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (CollectionUtils.isNotEmpty(videoList)) {
@@ -120,9 +256,9 @@
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        }
        HashMap<String, Object> map = new HashMap<>();
        map.put("count", Arrays.asList(distinctCount + "", this.remove0(onlineRate)));
        map.put("list", page.getRecords());
        return Result.ok().data(map).total(page.getTotal());
        map.put("count", Arrays.asList(totalCount + "",onlineCount +"",offlineCount+"" ,unknownCount+"", this.remove0(onlineRate)));
        map.put("list", resultList);
        return Result.ok().data(map).total(total);
    }
    /**
@@ -133,19 +269,79 @@
     */
    @Override
    public Result videoImportantPointOnlineRate(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("name", "no", "ip");
        Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        //查视频设备
        query.addCriteria(Criteria.where("monitorType").regex(".*" + CheckConstants.Rule_Category_Video + ".*"));
        query.addCriteria(Criteria.where("importantTag").is(Boolean.TRUE));
        //下拉框在线情况查询条件
        if(params.getOption()!=null) {
            query.addCriteria(Criteria.where("online").is(params.getOption()));
        }
        // 通过pingOnline字段排序,为false的排在前面
        query.with(Sort.by(Sort.Order.asc("pingOnline")));
        //分页数量
        long total = mongoTemplate.count(query, TMonitorResult.class);
        MongoUtil.setPage(query, params, TIME_FIELD);
        List<TMonitorResult> resultList = mongoTemplate.find(query, TMonitorResult.class);
        params.setDeptTag(3);
        params.setDeviceType(1);
        IPage<PointDetailVO> page = PageUtil.getPage(params, PointDetailVO.class);
        pointMapper.dataCenterPage(page, params);
        resultList.forEach(item -> {
            if(item.getPingOnline() ==null){
                item.setPingOnlineStr("未知");
            } else if (item.getPingOnline()) {
                item.setPingOnlineStr("在线");
            } else if(!item.getPingOnline()){
                item.setPingOnlineStr("离线");
            }
            if (1 == item.getOnline()) {
                item.setOnlineStr("在线");
            } else if (-1 == item.getOnline()) {
                item.setOnlineStr("离线");
            } else {
                item.setOnlineStr("未知");
            }
        });
        // 统计设备数量
        Integer distinctCount = pointMapper.distinctCount(params);
        Date now = new Date();
        //卡片统计
        int totalCount =0;
        int onlineCount =0;
        int offlineCount =0;
        int unknownCount =0;
        //构建条件
        List<Criteria> criteriaList = new ArrayList<>();
        // 添加固定条件
        criteriaList.add(Criteria.where("monitorType").regex(".*" + CheckConstants.Rule_Category_Video + ".*"));
        criteriaList.add(Criteria.where("mongoCreateTime").gte(params.getStartTime()).lte(params.getEndTime()));
        // 根据dataType动态添加条件
        if (params.getDataType() == 1) {
            criteriaList.add(Criteria.where("provinceTag").is(Boolean.TRUE));
        } else if (params.getDataType() == 2) {
            criteriaList.add(Criteria.where("deptTag").is(Boolean.TRUE));
        }
        // 构建match操作
        MatchOperation match = Aggregation.match(
                new Criteria().andOperator(criteriaList.toArray(new Criteria[0]))
        );
        GroupOperation group = Aggregation.group()
                .sum(ConditionalOperators.when(Criteria.where("online").is(ApiConstants.UY_OnlineSite_Online)).then(1).otherwise(0)).as("onlineCount")
                .sum(ConditionalOperators.when(Criteria.where("online").is(ApiConstants.UY_OnlineSite_Offline)).then(1).otherwise(0)).as("offlineCount")
                .sum(ConditionalOperators.when(Criteria.where("online").is(ApiConstants.UY_OnlineSite_Unknown)).then(1).otherwise(0)).as("unknownCount");
        // 将匹配阶段和分组阶段组合起来
        Aggregation aggregation = Aggregation.newAggregation(match, group);
        // 执行聚合查询
        AggregationResults<Map> results = mongoTemplate.aggregate(aggregation, "t_monitor_online", Map.class); // 替换为你的集合名称
        for (Map<String, Object> result : results.getMappedResults()) {
            offlineCount =(Integer) result.getOrDefault("offlineCount",0L);
            unknownCount =(Integer) result.getOrDefault("unknownCount",0L);
            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)
                .between(CheckIndexVideo::getCreateTime, DateUtils.getDayStart(now), DateUtils.getDayEnd(now))
                .between(CheckIndexVideo::getCreateTime, params.getStartTime(),  params.getEndTime())
                .list();
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (CollectionUtils.isNotEmpty(videoList)) {
@@ -154,9 +350,9 @@
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        }
        HashMap<String, Object> map = new HashMap<>();
        map.put("count", Arrays.asList(distinctCount + "", this.remove0(onlineRate)));
        map.put("list", page.getRecords());
        return Result.ok().data(map).total(page.getTotal());
        map.put("count", Arrays.asList(totalCount + "",onlineCount +"",offlineCount+"" ,unknownCount+"", this.remove0(onlineRate)));
        map.put("list", resultList);
        return Result.ok().data(map).total(total);
    }
    /**
@@ -167,19 +363,81 @@
     */
    @Override
    public Result videoImportantPointImageOnlineRate(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("name", "no", "ip");
        Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        //查视频设备
        query.addCriteria(Criteria.where("monitorType").regex(".*" + CheckConstants.Rule_Category_Video + ".*"));
        query.addCriteria(Criteria.where("importantCommandImageTag").is(Boolean.TRUE));
        //下拉框在线情况查询条件
        if(params.getOption()!=null) {
            query.addCriteria(Criteria.where("online").is(params.getOption()));
        }
        // 通过pingOnline字段排序,为false的排在前面
        query.with(Sort.by(Sort.Order.asc("pingOnline")));
        //分页数量
        long total = mongoTemplate.count(query, TMonitorResult.class);
        MongoUtil.setPage(query, params, TIME_FIELD);
        List<TMonitorResult> resultList = mongoTemplate.find(query, TMonitorResult.class);
        params.setDeptTag(4);
        params.setDeviceType(1);
        IPage<PointDetailVO> page = PageUtil.getPage(params, PointDetailVO.class);
        pointMapper.dataCenterPage(page, params);
        resultList.forEach(item -> {
            if(item.getPingOnline() ==null){
                item.setPingOnlineStr("未知");
            } else if (item.getPingOnline()) {
                item.setPingOnlineStr("在线");
            } else if(!item.getPingOnline()){
                item.setPingOnlineStr("离线");
            }
            if (1 == item.getOnline()) {
                item.setOnlineStr("在线");
            } else if (-1 == item.getOnline()) {
                item.setOnlineStr("离线");
            } else {
                item.setOnlineStr("未知");
            }
        });
        // 统计设备数量
        Integer distinctCount = pointMapper.distinctCount(params);
        //卡片统计
        int totalCount =0;
        int onlineCount =0;
        int offlineCount =0;
        int unknownCount =0;
        //构建条件
        List<Criteria> criteriaList = new ArrayList<>();
        // 添加固定条件
        criteriaList.add(Criteria.where("monitorType").regex(".*" + CheckConstants.Rule_Category_Video + ".*"));
        criteriaList.add(Criteria.where("mongoCreateTime").gte(params.getStartTime()).lte(params.getEndTime()));
        // 根据dataType动态添加条件
        if (params.getDataType() == 1) {
            criteriaList.add(Criteria.where("provinceTag").is(Boolean.TRUE));
        } else if (params.getDataType() == 2) {
            criteriaList.add(Criteria.where("deptTag").is(Boolean.TRUE));
        }
        // 构建match操作
        MatchOperation match = Aggregation.match(
                new Criteria().andOperator(criteriaList.toArray(new Criteria[0]))
        );
        GroupOperation group = Aggregation.group()
                .sum(ConditionalOperators.when(Criteria.where("online").is(ApiConstants.UY_OnlineSite_Online)).then(1).otherwise(0)).as("onlineCount")
                .sum(ConditionalOperators.when(Criteria.where("online").is(ApiConstants.UY_OnlineSite_Offline)).then(1).otherwise(0)).as("offlineCount")
                .sum(ConditionalOperators.when(Criteria.where("online").is(ApiConstants.UY_OnlineSite_Unknown)).then(1).otherwise(0)).as("unknownCount");
        // 将匹配阶段和分组阶段组合起来
        Aggregation aggregation = Aggregation.newAggregation(match, group);
        // 执行聚合查询
        AggregationResults<Map> results = mongoTemplate.aggregate(aggregation, "t_monitor_online", Map.class); // 替换为你的集合名称
        for (Map<String, Object> result : results.getMappedResults()) {
            offlineCount =(Integer) result.getOrDefault("offlineCount",0L);
            unknownCount =(Integer) result.getOrDefault("unknownCount",0L);
            onlineCount = (Integer) result.getOrDefault("onlineCount",0L);
            totalCount = offlineCount + unknownCount + onlineCount;
        }
        Date now = new Date();
        List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper())
                .select(CheckIndexVideo::getKeyCommandImageOnline)
                .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province)
                .between(CheckIndexVideo::getCreateTime, DateUtils.getDayStart(now), DateUtils.getDayEnd(now))
                .between(CheckIndexVideo::getCreateTime, params.getStartTime(),  params.getEndTime())
                .list();
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (CollectionUtils.isNotEmpty(videoList)) {
@@ -188,9 +446,9 @@
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        }
        HashMap<String, Object> map = new HashMap<>();
        map.put("count", Arrays.asList(distinctCount + "", this.remove0(onlineRate)));
        map.put("list", page.getRecords());
        return Result.ok().data(map).total(page.getTotal());
        map.put("count", Arrays.asList(totalCount + "",onlineCount +"",offlineCount+"" ,unknownCount+"", this.remove0(onlineRate)));
        map.put("list", resultList);
        return Result.ok().data(map).total(total);
    }
    /**
@@ -214,16 +472,16 @@
        List<Document> dList1 = new ArrayList<>(2);
        dList1.add(new Document("ip.error", new Document("$eq", Boolean.TRUE)));
        setTag(params,dList1);
        setTag(params, dList1);
        List<Document> dList2 = new ArrayList<>(2);
        dList2.add(new Document("macdz.error", new Document("$eq", Boolean.TRUE)));
        setTag(params,dList2);
        setTag(params, dList2);
        List<Document> dList3 = new ArrayList<>(2);
        dList3.add(new Document("latitude.error", new Document("$eq", Boolean.TRUE)));
        setTag(params,dList3);
        setTag(params, dList3);
        List<Document> dList4 = new ArrayList<>(2);
        dList4.add(new Document("longitude.error", new Document("$eq", Boolean.TRUE)));
        setTag(params,dList4);
        setTag(params, dList4);
        Document ipErrFilter = new Document("$and", dList1);
        Document macdzErrFilter = new Document("$and", dList2);
        Document latitudeErrFilter = new Document("$and", dList3);
@@ -288,16 +546,16 @@
        List<Document> dList1 = new ArrayList<>(2);
        dList1.add(new Document("ip.error", new Document("$eq", Boolean.TRUE)));
        setTag(params,dList1);
        setTag(params, dList1);
        List<Document> dList2 = new ArrayList<>(2);
        dList2.add(new Document("macdz.error", new Document("$eq", Boolean.TRUE)));
        setTag(params,dList2);
        setTag(params, dList2);
        List<Document> dList3 = new ArrayList<>(2);
        dList3.add(new Document("latitude.error", new Document("$eq", Boolean.TRUE)));
        setTag(params,dList3);
        setTag(params, dList3);
        List<Document> dList4 = new ArrayList<>(2);
        dList4.add(new Document("longitude.error", new Document("$eq", Boolean.TRUE)));
        setTag(params,dList4);
        setTag(params, dList4);
        Document ipErrFilter = new Document("$and", dList1);
        Document macdzErrFilter = new Document("$and", dList2);
        Document latitudeErrFilter = new Document("$and", dList3);
@@ -362,16 +620,16 @@
        List<Document> dList1 = new ArrayList<>(2);
        dList1.add(new Document("ip.error", new Document("$eq", Boolean.TRUE)));
        setTag(params,dList1);
        setTag(params, dList1);
        List<Document> dList2 = new ArrayList<>(2);
        dList2.add(new Document("macdz.error", new Document("$eq", Boolean.TRUE)));
        setTag(params,dList2);
        setTag(params, dList2);
        List<Document> dList3 = new ArrayList<>(2);
        dList3.add(new Document("latitude.error", new Document("$eq", Boolean.TRUE)));
        setTag(params,dList3);
        setTag(params, dList3);
        List<Document> dList4 = new ArrayList<>(2);
        dList4.add(new Document("longitude.error", new Document("$eq", Boolean.TRUE)));
        setTag(params,dList4);
        setTag(params, dList4);
        Document ipErrFilter = new Document("$and", dList1);
        Document macdzErrFilter = new Document("$and", dList2);
        Document latitudeErrFilter = new Document("$and", dList3);
@@ -412,7 +670,7 @@
    @Override
    public Result videoAvailabilityRate(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("deviceId", "deviceName");
        Query query = MongoUtil.getQuery(params,"createTime", likeFileds, null);
        Query query = MongoUtil.getQuery(params, "createTime", likeFileds, null);
        long total = mongoTemplate.count(query, RecordMetaDSumResult.class);
        MongoUtil.setPage(query, params, "createTime");
@@ -472,7 +730,7 @@
    @Override
    public Result deptVideoAvailabilityRate(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("deviceId", "deviceName");
        Query query = MongoUtil.getQuery(params,"createTime", likeFileds, 1);
        Query query = MongoUtil.getQuery(params, "createTime", likeFileds, 1);
        long total = mongoTemplate.count(query, RecordMetaDSumResult.class);
        MongoUtil.setPage(query, params, "createTime");
@@ -485,8 +743,8 @@
        List<String> resultCount = status.stream().map(item -> {
            List<Document> dList = new ArrayList<>(4);
            dList.add(new Document("deptTag", new Document("$eq", Boolean.TRUE)));
            dList.add(new Document("recordStatus",  new Document("$eq", item)));
            setTag(params,dList);
            dList.add(new Document("recordStatus", new Document("$eq", item)));
            setTag(params, dList);
            Document filter = new Document("$and", dList);
            // 构建聚合管道
            List<Document> pipeline = Arrays.asList(
@@ -533,7 +791,7 @@
    @Override
    public Result videoImportantPointAvailabilityRate(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("deviceId", "deviceName");
        Query query = MongoUtil.getQuery(params,"createTime", likeFileds, 3);
        Query query = MongoUtil.getQuery(params, "createTime", likeFileds, 3);
        long total = mongoTemplate.count(query, RecordMetaDSumResult.class);
        MongoUtil.setPage(query, params, "createTime");
@@ -547,7 +805,7 @@
            List<Document> dList = new ArrayList<>(4);
            dList.add(new Document("importantTag", new Document("$eq", Boolean.TRUE)));
            dList.add(new Document("recordStatus", new Document("$eq", item)));
            setTag(params,dList);
            setTag(params, dList);
            Document filter = new Document("$and", dList);
            // 构建聚合管道
            List<Document> pipeline = Arrays.asList(
@@ -619,7 +877,7 @@
    @Override
    public Result videoImportantPointLabelingAccuracy(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("deviceNo", "osdName");
        Query query = MongoUtil.getQuery(params,"checkTime", likeFileds, 3);
        Query query = MongoUtil.getQuery(params, "checkTime", likeFileds, 3);
        long total = mongoTemplate.count(query, OsdCheckResult.class);
        MongoUtil.setPage(query, params, "checkTime");
@@ -632,19 +890,19 @@
        List<Document> dList1 = new ArrayList<>(2);
        dList1.add(new Document("importantTag", Boolean.TRUE));
        dList1.add(new Document("osdNameCorrect", new Document("$eq", 1)));
        setTag(params,dList1);
        setTag(params, dList1);
        List<Document> dList2 = new ArrayList<>(2);
        dList2.add(new Document("importantTag", Boolean.TRUE));
        dList2.add(new Document("osdNameCorrect", new Document("$eq", -1)));
        setTag(params,dList2);
        setTag(params, dList2);
        List<Document> dList3 = new ArrayList<>(2);
        dList3.add(new Document("importantTag", Boolean.TRUE));
        dList3.add(new Document("osdTimeCorrect", new Document("$eq", 1)));
        setTag(params,dList3);
        setTag(params, dList3);
        List<Document> dList4 = new ArrayList<>(2);
        dList4.add(new Document("importantTag", Boolean.TRUE));
        dList4.add(new Document("osdTimeCorrect", new Document("$eq", -1)));
        setTag(params,dList4);
        setTag(params, dList4);
        Document osdNameFilter = new Document("$and", dList1);
        Document osdNameErrFilter = new Document("$and", dList2);
        Document osdTimeFilter = new Document("$and", dList3);
@@ -723,7 +981,7 @@
    public Result videoImportantPointCheckTimeAccuracy(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("deviceNo", "osdName");
        Query query = MongoUtil.getQuery(params,"checkTime", likeFileds, 3);
        Query query = MongoUtil.getQuery(params, "checkTime", likeFileds, 3);
        long total = mongoTemplate.count(query, OsdCheckResult.class);
        MongoUtil.setPage(query, params, "checkTime");
@@ -736,11 +994,11 @@
        List<Document> dList1 = new ArrayList<>(2);
        dList1.add(new Document("importantTag", Boolean.TRUE));
        dList1.add(new Document("osdTimeCorrect", new Document("$eq", 1)));
        setTag(params,dList1);
        setTag(params, dList1);
        List<Document> dList2 = new ArrayList<>(2);
        dList2.add(new Document("importantTag", Boolean.TRUE));
        dList2.add(new Document("osdTimeCorrect", new Document("$eq", -1)));
        setTag(params,dList2);
        setTag(params, dList2);
        Document osdTimeFilter = new Document("$and", dList1);
        Document osdTimeErrFilter = new Document("$and", dList2);
        List<Document> lists = Arrays.asList(osdTimeFilter, osdTimeErrFilter);
@@ -804,19 +1062,19 @@
        List<Document> dList1 = new ArrayList<>(2);
        dList1.add(new Document("importantTag", Boolean.TRUE));
        dList1.add(new Document("resultType", new Document("$eq", 1)));
        setTag(params,dList1);
        setTag(params, dList1);
        List<Document> dList2 = new ArrayList<>(2);
        dList2.add(new Document("importantTag", Boolean.TRUE));
        dList2.add(new Document("resultType", new Document("$eq", 2)));
        setTag(params,dList2);
        setTag(params, dList2);
        List<Document> dList3 = new ArrayList<>(2);
        dList3.add(new Document("importantTag", Boolean.TRUE));
        dList3.add(new Document("resultType", new Document("$eq", 3)));
        setTag(params,dList3);
        setTag(params, dList3);
        List<Document> dList4 = new ArrayList<>(2);
        dList4.add(new Document("importantTag", Boolean.TRUE));
        dList4.add(new Document("resultType", new Document("$eq", 4)));
        setTag(params,dList4);
        setTag(params, dList4);
        Document normalFilter = new Document("$and", dList1);
        Document noDataFilter = new Document("$and", dList2);
        Document trFilter = new Document("$and", dList3);
@@ -867,19 +1125,80 @@
     */
    @Override
    public Result vehiclePointOnlineRate(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("name", "no", "ip");
        Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        //查车辆设备
        query.addCriteria(Criteria.where("monitorType").regex(".*" + CheckConstants.Rule_Category_Car + ".*"));
        //下拉框在线情况查询条件
        if(params.getOption()!=null) {
            query.addCriteria(Criteria.where("online").is(params.getOption()));
        }
        // 通过pingOnline字段排序,为false的排在前面
        query.with(Sort.by(Sort.Order.asc("pingOnline")));
        //分页数量
        long total = mongoTemplate.count(query, TMonitorResult.class);
        MongoUtil.setPage(query, params, TIME_FIELD);
        //系统ping的结果
        List<TMonitorResult> resultList = mongoTemplate.find(query, TMonitorResult.class);
        params.setDeptTag(-1);
        params.setDeviceType(2);
        IPage<PointDetailVO> page = PageUtil.getPage(params, PointDetailVO.class);
        pointMapper.dataCenterPage(page, params);
        resultList.forEach(item -> {
            if(item.getPingOnline() ==null){
                item.setPingOnlineStr("未知");
            } else if (item.getPingOnline()) {
                item.setPingOnlineStr("在线");
            } else if(!item.getPingOnline()){
                item.setPingOnlineStr("离线");
            }
            if (1 == item.getOnline()) {
                item.setOnlineStr("在线");
            } else if (-1 == item.getOnline()) {
                item.setOnlineStr("离线");
            } else {
                item.setOnlineStr("未知");
            }
        });
        // 统计设备数量
        Integer distinctCount = pointMapper.distinctCount(params);
        //卡片统计
        int totalCount =0;
        int onlineCount =0;
        int offlineCount =0;
        int unknownCount =0;
        //构建条件
        List<Criteria> criteriaList = new ArrayList<>();
        // 添加固定条件
        criteriaList.add(Criteria.where("monitorType").regex(".*" + CheckConstants.Rule_Category_Car + ".*"));
        criteriaList.add(Criteria.where("mongoCreateTime").gte(params.getStartTime()).lte(params.getEndTime()));
        // 根据dataType动态添加条件
        if (params.getDataType() == 1) {
            criteriaList.add(Criteria.where("provinceTag").is(Boolean.TRUE));
        } else if (params.getDataType() == 2) {
            criteriaList.add(Criteria.where("deptTag").is(Boolean.TRUE));
        }
        // 构建match操作
        MatchOperation match = Aggregation.match(
                new Criteria().andOperator(criteriaList.toArray(new Criteria[0]))
        );
        GroupOperation group = Aggregation.group()
                .sum(ConditionalOperators.when(Criteria.where("online").is(ApiConstants.UY_OnlineSite_Online)).then(1).otherwise(0)).as("onlineCount")
                .sum(ConditionalOperators.when(Criteria.where("online").is(ApiConstants.UY_OnlineSite_Offline)).then(1).otherwise(0)).as("offlineCount")
                .sum(ConditionalOperators.when(Criteria.where("online").is(ApiConstants.UY_OnlineSite_Unknown)).then(1).otherwise(0)).as("unknownCount");
        // 将匹配阶段和分组阶段组合起来
        Aggregation aggregation = Aggregation.newAggregation(match, group);
        // 执行聚合查询
        AggregationResults<Map> results = mongoTemplate.aggregate(aggregation, "t_monitor_online", Map.class); // 替换为你的集合名称
        for (Map<String, Object> result : results.getMappedResults()) {
            offlineCount =(Integer) result.getOrDefault("offlineCount",0L);
            unknownCount =(Integer) result.getOrDefault("unknownCount",0L);
            onlineCount = (Integer) result.getOrDefault("onlineCount",0L);
            totalCount = offlineCount + unknownCount + onlineCount;
        }
        Date now = new Date();
        List<CheckIndexCar> videoList = new LambdaQueryChainWrapper<>(checkIndexCarService.getBaseMapper())
                .select(CheckIndexCar::getSiteOnline)
                .eq(params.getDataType().equals(1), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Province)
                .between(CheckIndexCar::getCreateTime, DateUtils.getDayStart(now), DateUtils.getDayEnd(now))
                .between(CheckIndexCar::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime()))
                .list();
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (CollectionUtils.isNotEmpty(videoList)) {
@@ -888,9 +1207,9 @@
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        }
        HashMap<String, Object> map = new HashMap<>();
        map.put("count", Arrays.asList(distinctCount + "", this.remove0(onlineRate)));
        map.put("list", page.getRecords());
        return Result.ok().data(map).total(page.getTotal());
        map.put("count", Arrays.asList(totalCount + "",onlineCount +"",offlineCount+"" ,unknownCount+"", this.remove0(onlineRate)));
        map.put("list", resultList);
        return Result.ok().data(map).total(total);
    }
    /**
@@ -914,16 +1233,16 @@
        List<Document> dList1 = new ArrayList<>(2);
        dList1.add(new Document("ip.error", new Document("$eq", Boolean.TRUE)));
        setTag(params,dList1);
        setTag(params, dList1);
        List<Document> dList2 = new ArrayList<>(2);
        dList2.add(new Document("macdz.error", new Document("$eq", Boolean.TRUE)));
        setTag(params,dList2);
        setTag(params, dList2);
        List<Document> dList3 = new ArrayList<>(2);
        dList3.add(new Document("latitude.error", new Document("$eq", Boolean.TRUE)));
        setTag(params,dList3);
        setTag(params, dList3);
        List<Document> dList4 = new ArrayList<>(2);
        dList4.add(new Document("longitude.error", new Document("$eq", Boolean.TRUE)));
        setTag(params,dList4);
        setTag(params, dList4);
        Document ipErrFilter = new Document("$and", dList1);
        Document macdzErrFilter = new Document("$and", dList2);
        Document latitudeErrFilter = new Document("$and", dList3);
@@ -987,16 +1306,16 @@
        List<Document> dList1 = new ArrayList<>(2);
        dList1.add(new Document("lalType", new Document("$eq", 1)));
        setTag(params,dList1);
        setTag(params, dList1);
        List<Document> dList2 = new ArrayList<>(2);
        dList2.add(new Document("lalType", new Document("$eq", 2)));
        setTag(params,dList2);
        setTag(params, dList2);
        List<Document> dList3 = new ArrayList<>(2);
        dList3.add(new Document("lalType", new Document("$eq", 3)));
        setTag(params,dList3);
        setTag(params, dList3);
        List<Document> dList4 = new ArrayList<>(2);
        dList4.add(new Document("lalType", new Document("$eq", 4)));
        setTag(params,dList4);
        setTag(params, dList4);
        Document ipErrFilter = new Document("$and", dList1);
        Document macdzErrFilter = new Document("$and", dList2);
        Document latitudeErrFilter = new Document("$and", dList3);
@@ -1133,13 +1452,13 @@
        List<Document> dList1 = new ArrayList<>(2);
        dList1.add(new Document("snapResult", new Document("$eq", 1)));
        setTag(params,dList1);
        setTag(params, dList1);
        List<Document> dList2 = new ArrayList<>(2);
        dList2.add(new Document("snapResult", new Document("$eq", 2)));
        setTag(params,dList2);
        setTag(params, dList2);
        List<Document> dList3 = new ArrayList<>(2);
        dList3.add(new Document("snapResult", new Document("$eq", 4)));
        setTag(params,dList3);
        setTag(params, dList3);
        Document ipErrFilter = new Document("$and", dList1);
        Document macdzErrFilter = new Document("$and", dList2);
        Document longitudeErrFilter = new Document("$and", dList3);
@@ -1305,16 +1624,16 @@
        List<Document> dList1 = new ArrayList<>(2);
        dList1.add(new Document("resultType", new Document("$eq", 1)));
        setTag(params,dList1);
        setTag(params, dList1);
        List<Document> dList2 = new ArrayList<>(2);
        dList2.add(new Document("resultType", new Document("$eq", 2)));
        setTag(params,dList2);
        setTag(params, dList2);
        List<Document> dList3 = new ArrayList<>(2);
        dList3.add(new Document("resultType", new Document("$eq", 3)));
        setTag(params,dList3);
        setTag(params, dList3);
        List<Document> dList4 = new ArrayList<>(2);
        dList4.add(new Document("resultType", new Document("$eq", 4)));
        setTag(params,dList4);
        setTag(params, dList4);
        Document normalFilter = new Document("$and", dList1);
        Document noDataFilter = new Document("$and", dList2);
        Document trFilter = new Document("$and", dList3);
@@ -1365,19 +1684,78 @@
     */
    @Override
    public Result facePointOnlineRate(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("name", "no", "ip");
        Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        //查人脸设备
        query.addCriteria(Criteria.where("monitorType").regex(".*" + CheckConstants.Rule_Category_Face + ".*"));
        //下拉框在线情况查询条件
        if(params.getOption()!=null) {
            query.addCriteria(Criteria.where("online").is(params.getOption()));
        }
        // 通过pingOnline字段排序,为false的排在前面
        query.with(Sort.by(Sort.Order.asc("pingOnline")));
        //分页数量
        long total = mongoTemplate.count(query, TMonitorResult.class);
        MongoUtil.setPage(query, params, TIME_FIELD);
        List<TMonitorResult> resultList = mongoTemplate.find(query, TMonitorResult.class);
        resultList.forEach(item -> {
            if(item.getPingOnline() ==null){
                item.setPingOnlineStr("未知");
            } else if (item.getPingOnline()) {
                item.setPingOnlineStr("在线");
            } else if(!item.getPingOnline()){
                item.setPingOnlineStr("离线");
            }
            if (1 == item.getOnline()) {
                item.setOnlineStr("在线");
            } else if (-1 == item.getOnline()) {
                item.setOnlineStr("离线");
            } else {
                item.setOnlineStr("未知");
            }
        });
        params.setDeptTag(-1);
        params.setDeviceType(3);
        IPage<PointDetailVO> page = PageUtil.getPage(params, PointDetailVO.class);
        pointMapper.dataCenterPage(page, params);
        // 统计设备数量
        Integer distinctCount = pointMapper.distinctCount(params);
        Date now = new Date();
// 统计设备数量
        //卡片统计
        int totalCount =0;
        int onlineCount =0;
        int offlineCount =0;
        int unknownCount =0;
        //构建条件
        List<Criteria> criteriaList = new ArrayList<>();
        // 添加固定条件
        criteriaList.add(Criteria.where("monitorType").regex(".*" + CheckConstants.Rule_Category_Face + ".*"));
        criteriaList.add(Criteria.where("mongoCreateTime").gte(params.getStartTime()).lte(params.getEndTime()));
        // 根据dataType动态添加条件
        if (params.getDataType() == 1) {
            criteriaList.add(Criteria.where("provinceTag").is(Boolean.TRUE));
        } else if (params.getDataType() == 2) {
            criteriaList.add(Criteria.where("deptTag").is(Boolean.TRUE));
        }
        // 构建match操作
        MatchOperation match = Aggregation.match(
                new Criteria().andOperator(criteriaList.toArray(new Criteria[0]))
        );
        GroupOperation group = Aggregation.group()
                .sum(ConditionalOperators.when(Criteria.where("online").is(ApiConstants.UY_OnlineSite_Online)).then(1).otherwise(0)).as("onlineCount")
                .sum(ConditionalOperators.when(Criteria.where("online").is(ApiConstants.UY_OnlineSite_Offline)).then(1).otherwise(0)).as("offlineCount")
                .sum(ConditionalOperators.when(Criteria.where("online").is(ApiConstants.UY_OnlineSite_Unknown)).then(1).otherwise(0)).as("unknownCount");
        // 将匹配阶段和分组阶段组合起来
        Aggregation aggregation = Aggregation.newAggregation(match, group);
        // 执行聚合查询
        AggregationResults<Map> results = mongoTemplate.aggregate(aggregation, "t_monitor_online", Map.class); // 替换为你的集合名称
        for (Map<String, Object> result : results.getMappedResults()) {
            offlineCount =(Integer) result.getOrDefault("offlineCount",0L);
            unknownCount =(Integer) result.getOrDefault("unknownCount",0L);
            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)
                .between(CheckIndexFace::getCreateTime, DateUtils.getDayStart(now), DateUtils.getDayEnd(now))
                .between(CheckIndexFace::getCreateTime, params.getStartTime(),  params.getEndTime())
                .list();
        BigDecimal onlineRate = BigDecimal.ZERO;
        if (CollectionUtils.isNotEmpty(videoList)) {
@@ -1385,13 +1763,11 @@
            BigDecimal count = BigDecimal.valueOf(videoList.size());
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        }
        List<String> rList = new ArrayList<>(2);
        rList.add(distinctCount + "");
        rList.add(this.remove0(onlineRate));
        HashMap<String, Object> map = new HashMap<>();
        map.put("count", rList);
        map.put("list", page.getRecords());
        return Result.ok().data(map).total(page.getTotal());
        map.put("count", Arrays.asList(totalCount + "",onlineCount +"",offlineCount+"" ,unknownCount+"", this.remove0(onlineRate)));
        map.put("list", resultList);
        return Result.ok().data(map).total(total);
    }
    /**
@@ -1415,16 +1791,16 @@
        List<Document> dList1 = new ArrayList<>(2);
        dList1.add(new Document("ip.error", new Document("$eq", Boolean.TRUE)));
        setTag(params,dList1);
        setTag(params, dList1);
        List<Document> dList2 = new ArrayList<>(2);
        dList2.add(new Document("macdz.error", new Document("$eq", Boolean.TRUE)));
        setTag(params,dList2);
        setTag(params, dList2);
        List<Document> dList3 = new ArrayList<>(2);
        dList3.add(new Document("latitude.error", new Document("$eq", Boolean.TRUE)));
        setTag(params,dList3);
        setTag(params, dList3);
        List<Document> dList4 = new ArrayList<>(2);
        dList4.add(new Document("longitude.error", new Document("$eq", Boolean.TRUE)));
        setTag(params,dList4);
        setTag(params, dList4);
        Document ipErrFilter = new Document("$and", dList1);
        Document macdzErrFilter = new Document("$and", dList2);
        Document latitudeErrFilter = new Document("$and", dList3);
@@ -1488,16 +1864,16 @@
        List<Document> dList1 = new ArrayList<>(2);
        dList1.add(new Document("lalType", new Document("$eq", 1)));
        setTag(params,dList1);
        setTag(params, dList1);
        List<Document> dList2 = new ArrayList<>(2);
        dList2.add(new Document("lalType", new Document("$eq", 2)));
        setTag(params,dList2);
        setTag(params, dList2);
        List<Document> dList3 = new ArrayList<>(2);
        dList3.add(new Document("lalType", new Document("$eq", 3)));
        setTag(params,dList3);
        setTag(params, dList3);
        List<Document> dList4 = new ArrayList<>(2);
        dList4.add(new Document("lalType", new Document("$eq", 4)));
        setTag(params,dList4);
        setTag(params, dList4);
        Document ipErrFilter = new Document("$and", dList1);
        Document macdzErrFilter = new Document("$and", dList2);
        Document latitudeErrFilter = new Document("$and", dList3);
@@ -1561,16 +1937,16 @@
        List<Document> dList1 = new ArrayList<>(2);
        dList1.add(new Document("lalType", new Document("$eq", 1)));
        setTag(params,dList1);
        setTag(params, dList1);
        List<Document> dList2 = new ArrayList<>(2);
        dList2.add(new Document("lalType", new Document("$eq", 2)));
        setTag(params,dList2);
        setTag(params, dList2);
        List<Document> dList3 = new ArrayList<>(2);
        dList3.add(new Document("lalType", new Document("$eq", 3)));
        setTag(params,dList3);
        setTag(params, dList3);
        List<Document> dList4 = new ArrayList<>(2);
        dList4.add(new Document("lalType", new Document("$eq", 4)));
        setTag(params,dList4);
        setTag(params, dList4);
        Document ipErrFilter = new Document("$and", dList1);
        Document macdzErrFilter = new Document("$and", dList2);
        Document latitudeErrFilter = new Document("$and", dList3);
@@ -1635,13 +2011,13 @@
        List<Document> dList1 = new ArrayList<>(2);
        dList1.add(new Document("snapResult", new Document("$eq", 1)));
        setTag(params,dList1);
        setTag(params, dList1);
        List<Document> dList2 = new ArrayList<>(2);
        dList2.add(new Document("snapResult", new Document("$eq", 2)));
        setTag(params,dList2);
        setTag(params, dList2);
        List<Document> dList3 = new ArrayList<>(2);
        dList3.add(new Document("snapResult", new Document("$eq", 4)));
        setTag(params,dList3);
        setTag(params, dList3);
        Document ipErrFilter = new Document("$and", dList1);
        Document macdzErrFilter = new Document("$and", dList2);
        Document longitudeErrFilter = new Document("$and", dList3);
@@ -1705,13 +2081,13 @@
        List<Document> dList1 = new ArrayList<>(2);
        dList1.add(new Document("snapResult", new Document("$eq", 1)));
        setTag(params,dList1);
        setTag(params, dList1);
        List<Document> dList2 = new ArrayList<>(2);
        dList2.add(new Document("snapResult", new Document("$eq", 2)));
        setTag(params,dList2);
        setTag(params, dList2);
        List<Document> dList3 = new ArrayList<>(2);
        dList3.add(new Document("snapResult", new Document("$eq", 4)));
        setTag(params,dList3);
        setTag(params, dList3);
        Document ipErrFilter = new Document("$and", dList1);
        Document macdzErrFilter = new Document("$and", dList2);
        Document longitudeErrFilter = new Document("$and", dList3);
@@ -1788,6 +2164,7 @@
        map.put("list", resultList);
        return Result.ok().data(map).total(total);
    }
    /**
     * 视频:视频图像资源安全管理
     *
@@ -1809,6 +2186,7 @@
    /**
     * 删除尾部的0
     *
     * @param rate
     * @return
     */
@@ -1819,6 +2197,7 @@
    /**
     * 设置标签搜索条件
     *
     * @param params
     * @param dList
     */