fuliqi
2024-10-10 d268f82d25c25ebdc7a1ea30614f6cda6d3a9ae3
ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java
@@ -10,7 +10,9 @@
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;
import com.ycl.platform.mapper.YwPointMapper;
import com.ycl.platform.service.*;
@@ -65,19 +67,24 @@
     */
    @Override
    public Result videoPointOnlineRate(DataCenterQuery params) {
        // 生成查询
        List<String> likeFileds = Arrays.asList("arealayerName", "ipAddr", "deviceName", "deviceId");
        Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        // 先查总数再分页
        long total = mongoTemplate.count(query, VideoOnlineResult.class);
        List<String> likeFileds = Arrays.asList("name", "no","ip");
        Query query = MongoUtil.getQuery(params,TIME_FIELD, likeFileds, null);
        //分页数量
        long total = mongoTemplate.count(query, TMonitorResult.class);
        MongoUtil.setPage(query, params, TIME_FIELD);
        List<VideoOnlineResult> resultList = mongoTemplate.find(query, VideoOnlineResult.class);
        List<TMonitorResult> resultList = mongoTemplate.find(query, TMonitorResult.class);
        resultList.forEach(item->{
            if(null != item.getOnline() && item.getOnline()){
                item.setOnlineStr("在线");
            }else {
                item.setOnlineStr("离线");
            }
        });
        params.setDeptTag(-1);
        params.setDeviceType(1);
        // 统计设备数量
        Integer distinctCount = pointMapper.distinctCount(params);
        // 统计数量
        MongoDatabase database = mongoTemplate.getDb();
        MongoCollection<Document> collection = database.getCollection("uy_online");
        long distinctCount = collection.distinct("deviceId", String.class).into(new ArrayList<>()).size();
        Date now = new Date();
        List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper())
                .select(CheckIndexVideo::getSiteOnline)
@@ -103,40 +110,24 @@
     */
    @Override
    public Result deptVideoPointOnlineRate(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("arealayerName", "ipAddr", "deviceName", "deviceId");
        // 生成查询
        Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, 1);
        // 先查总数再分页
        long total = mongoTemplate.count(query, VideoOnlineResult.class);
        List<String> likeFileds = Arrays.asList("name", "no","ip");
        Query query = MongoUtil.getQuery(params,TIME_FIELD, likeFileds, null);
        //分页数量
        long total = mongoTemplate.count(query, TMonitorResult.class);
        MongoUtil.setPage(query, params, TIME_FIELD);
        List<VideoOnlineResult> resultList = mongoTemplate.find(query, VideoOnlineResult.class);
        List<TMonitorResult> resultList = mongoTemplate.find(query, TMonitorResult.class);
        resultList.forEach(item->{
            if(null != item.getOnline() && item.getOnline()){
                item.setOnlineStr("在线");
            }else {
                item.setOnlineStr("离线");
            }
        });
        // 统计设备数量
        params.setDeptTag(1);
        params.setDeviceType(1);
        Integer distinctCount = pointMapper.distinctCount(params);
        // 统计数量
        MongoDatabase database = mongoTemplate.getDb();
        MongoCollection<Document> collection = database.getCollection("uy_online");
        List<Document> dList = new ArrayList<>(2);
        dList.add(new Document("deptTag", new Document("$eq", Boolean.TRUE)));
        if (params.getDataType().equals(1)) {
            dList.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        Document filter = new Document("$and", dList);
        // 构建聚合管道
        List<Document> pipeline = Arrays.asList(
                // 只要部级的
                new Document("$match", filter),
                // $group 去重
                new Document("$group", new Document("_id", "$deviceId")),
                new Document("$count", "uniqueDeviceIds")
        );
        // 执行聚合查询并获取结果
        AggregateIterable<Document> result = collection.aggregate(pipeline);
        Integer uniqueDeviceIdCount = 0;
        for (Document doc : result) {
            uniqueDeviceIdCount = doc.getInteger("uniqueDeviceIds");
            break; // 不需要继续遍历,因为 $count 只会产生一个结果
        }
        Date now = new Date();
        List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper())
                .select(CheckIndexVideo::getMinistrySiteOnline)
@@ -150,8 +141,8 @@
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        }
        HashMap<String, Object> map = new HashMap<>();
        map.put("count", Arrays.asList(uniqueDeviceIdCount + "", this.remove0(onlineRate)));
        map.put("list", resultList);
        map.put("count", Arrays.asList(distinctCount + "", this.remove0(onlineRate)));
        map.put("list",resultList);
        return Result.ok().data(map).total(total);
    }
@@ -163,38 +154,23 @@
     */
    @Override
    public Result videoImportantPointOnlineRate(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("arealayerName", "ipAddr", "deviceName", "deviceId");
        Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, 3);
        long total = mongoTemplate.count(query, VideoOnlineResult.class);
        List<String> likeFileds = Arrays.asList("name", "no","ip");
        Query query = MongoUtil.getQuery(params,TIME_FIELD, likeFileds, null);
        //分页数量
        long total = mongoTemplate.count(query, TMonitorResult.class);
        MongoUtil.setPage(query, params, TIME_FIELD);
        List<VideoOnlineResult> resultList = mongoTemplate.find(query, VideoOnlineResult.class);
        // 统计数量
        MongoDatabase database = mongoTemplate.getDb();
        MongoCollection<Document> collection = database.getCollection("uy_online");
        List<Document> dList = new ArrayList<>(2);
        dList.add(new Document("importantTag", new Document("$eq", Boolean.TRUE)));
        if (params.getDataType().equals(1)) {
            dList.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        Document filter = new Document("$and", dList);
        // 构建聚合管道
        List<Document> pipeline = Arrays.asList(
                new Document("$match", filter),
                // $group 去重
                new Document("$group", new Document("_id", "$deviceId")),
                new Document("$count", "uniqueDeviceIds")
        );
        // 执行聚合查询并获取结果
        AggregateIterable<Document> result = collection.aggregate(pipeline);
        Integer uniqueDeviceIdCount = 0;
        for (Document doc : result) {
            uniqueDeviceIdCount = doc.getInteger("uniqueDeviceIds");
            break; // 不需要继续遍历,因为 $count 只会产生一个结果
        }
        List<TMonitorResult> resultList = mongoTemplate.find(query, TMonitorResult.class);
        params.setDeptTag(3);
        params.setDeviceType(1);
        // 统计设备数量
        Integer distinctCount = pointMapper.distinctCount(params);
        resultList.forEach(item->{
            if(null != item.getOnline() && item.getOnline()){
                item.setOnlineStr("在线");
            }else {
                item.setOnlineStr("离线");
            }
        });
        Date now = new Date();
        List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper())
                .select(CheckIndexVideo::getKeySiteOnline)
@@ -208,7 +184,7 @@
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        }
        HashMap<String, Object> map = new HashMap<>();
        map.put("count", Arrays.asList(uniqueDeviceIdCount + "", this.remove0(onlineRate)));
        map.put("count", Arrays.asList(distinctCount + "", this.remove0(onlineRate)));
        map.put("list", resultList);
        return Result.ok().data(map).total(total);
    }
@@ -221,38 +197,24 @@
     */
    @Override
    public Result videoImportantPointImageOnlineRate(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("arealayerName", "ipAddr", "deviceName", "deviceId");
        Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, 4);
        long total = mongoTemplate.count(query, VideoOnlineResult.class);
        List<String> likeFileds = Arrays.asList("name", "no","ip");
        Query query = MongoUtil.getQuery(params,TIME_FIELD, likeFileds, null);
        //分页数量
        long total = mongoTemplate.count(query, TMonitorResult.class);
        MongoUtil.setPage(query, params, TIME_FIELD);
        List<VideoOnlineResult> resultList = mongoTemplate.find(query, VideoOnlineResult.class);
        List<TMonitorResult> resultList = mongoTemplate.find(query, TMonitorResult.class);
        // 统计数量
        MongoDatabase database = mongoTemplate.getDb();
        MongoCollection<Document> collection = database.getCollection("uy_online");
        List<Document> dList = new ArrayList<>(2);
        dList.add(new Document("importantCommandImageTag", new Document("$eq", Boolean.TRUE)));
        if (params.getDataType().equals(1)) {
            dList.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        Document filter = new Document("$and", dList);
        // 构建聚合管道
        List<Document> pipeline = Arrays.asList(
                new Document("$match", filter),
                // $group 去重
                new Document("$group", new Document("_id", "$deviceId")),
                new Document("$count", "uniqueDeviceIds")
        );
        // 执行聚合查询并获取结果
        AggregateIterable<Document> result = collection.aggregate(pipeline);
        Integer uniqueDeviceIdCount = 0;
        for (Document doc : result) {
            uniqueDeviceIdCount = doc.getInteger("uniqueDeviceIds");
            break; // 不需要继续遍历,因为 $count 只会产生一个结果
        }
        params.setDeptTag(4);
        params.setDeviceType(1);
        // 统计设备数量
        Integer distinctCount = pointMapper.distinctCount(params);
        resultList.forEach(item->{
            if(null != item.getOnline() && item.getOnline()){
                item.setOnlineStr("在线");
            }else {
                item.setOnlineStr("离线");
            }
        });
        Date now = new Date();
        List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper())
                .select(CheckIndexVideo::getKeyCommandImageOnline)
@@ -266,7 +228,7 @@
            onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
        }
        HashMap<String, Object> map = new HashMap<>();
        map.put("count", Arrays.asList(uniqueDeviceIdCount + "", this.remove0(onlineRate)));
        map.put("count", Arrays.asList(distinctCount + "", this.remove0(onlineRate)));
        map.put("list", resultList);
        return Result.ok().data(map).total(total);
    }
@@ -292,24 +254,16 @@
        List<Document> dList1 = new ArrayList<>(2);
        dList1.add(new Document("ip.error", new Document("$eq", Boolean.TRUE)));
        if (params.getDataType().equals(1)) {
            dList1.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList1);
        List<Document> dList2 = new ArrayList<>(2);
        dList2.add(new Document("macdz.error", new Document("$eq", Boolean.TRUE)));
        if (params.getDataType().equals(1)) {
            dList2.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList2);
        List<Document> dList3 = new ArrayList<>(2);
        dList3.add(new Document("latitude.error", new Document("$eq", Boolean.TRUE)));
        if (params.getDataType().equals(1)) {
            dList3.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList3);
        List<Document> dList4 = new ArrayList<>(2);
        dList4.add(new Document("longitude.error", new Document("$eq", Boolean.TRUE)));
        if (params.getDataType().equals(1)) {
            dList4.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList4);
        Document ipErrFilter = new Document("$and", dList1);
        Document macdzErrFilter = new Document("$and", dList2);
        Document latitudeErrFilter = new Document("$and", dList3);
@@ -374,24 +328,16 @@
        List<Document> dList1 = new ArrayList<>(2);
        dList1.add(new Document("ip.error", new Document("$eq", Boolean.TRUE)));
        if (params.getDataType().equals(1)) {
            dList1.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList1);
        List<Document> dList2 = new ArrayList<>(2);
        dList2.add(new Document("macdz.error", new Document("$eq", Boolean.TRUE)));
        if (params.getDataType().equals(1)) {
            dList2.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList2);
        List<Document> dList3 = new ArrayList<>(2);
        dList3.add(new Document("latitude.error", new Document("$eq", Boolean.TRUE)));
        if (params.getDataType().equals(1)) {
            dList3.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList3);
        List<Document> dList4 = new ArrayList<>(2);
        dList4.add(new Document("longitude.error", new Document("$eq", Boolean.TRUE)));
        if (params.getDataType().equals(1)) {
            dList4.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList4);
        Document ipErrFilter = new Document("$and", dList1);
        Document macdzErrFilter = new Document("$and", dList2);
        Document latitudeErrFilter = new Document("$and", dList3);
@@ -443,7 +389,6 @@
     */
    @Override
    public Result videoAssessmentFileRatio(DataCenterQuery params) {
        // TODO 新增一张表记录每次的档案考核
        List<String> likeFileds = Arrays.asList("ip.showValue", "name.showValue", "serialNumber.showValue");
        Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
@@ -457,24 +402,16 @@
        List<Document> dList1 = new ArrayList<>(2);
        dList1.add(new Document("ip.error", new Document("$eq", Boolean.TRUE)));
        if (params.getDataType().equals(1)) {
            dList1.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList1);
        List<Document> dList2 = new ArrayList<>(2);
        dList2.add(new Document("macdz.error", new Document("$eq", Boolean.TRUE)));
        if (params.getDataType().equals(1)) {
            dList2.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList2);
        List<Document> dList3 = new ArrayList<>(2);
        dList3.add(new Document("latitude.error", new Document("$eq", Boolean.TRUE)));
        if (params.getDataType().equals(1)) {
            dList3.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList3);
        List<Document> dList4 = new ArrayList<>(2);
        dList4.add(new Document("longitude.error", new Document("$eq", Boolean.TRUE)));
        if (params.getDataType().equals(1)) {
            dList4.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList4);
        Document ipErrFilter = new Document("$and", dList1);
        Document macdzErrFilter = new Document("$and", dList2);
        Document latitudeErrFilter = new Document("$and", dList3);
@@ -528,9 +465,7 @@
        List<String> resultCount = status.stream().map(item -> {
            List<Document> dList = new ArrayList<>(2);
            dList.add(new Document("recordStatus", new Document("$eq", item)));
            if (params.getDataType().equals(1)) {
                dList.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
            }
            setTag(params, dList);
            Document filter = new Document("$and", dList);
            // 构建聚合管道
            List<Document> pipeline = Arrays.asList(
@@ -591,9 +526,7 @@
            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)));
            if (params.getDataType().equals(1)) {
                dList.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
            }
            setTag(params,dList);
            Document filter = new Document("$and", dList);
            // 构建聚合管道
            List<Document> pipeline = Arrays.asList(
@@ -654,9 +587,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)));
            if (params.getDataType().equals(1)) {
                dList.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
            }
            setTag(params,dList);
            Document filter = new Document("$and", dList);
            // 构建聚合管道
            List<Document> pipeline = Arrays.asList(
@@ -672,7 +603,7 @@
                uniqueDeviceIdCount = doc.getInteger("uniqueDeviceIds");
                break; // 不需要继续遍历,因为 $count 只会产生一个结果
            }
            return uniqueDeviceIdCount + "%";
            return uniqueDeviceIdCount + "";
        }).collect(Collectors.toList());
        Date now = new Date();
@@ -741,27 +672,19 @@
        List<Document> dList1 = new ArrayList<>(2);
        dList1.add(new Document("importantTag", Boolean.TRUE));
        dList1.add(new Document("osdNameCorrect", new Document("$eq", 1)));
        if (params.getDataType().equals(1)) {
            dList1.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        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)));
        if (params.getDataType().equals(1)) {
            dList2.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        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)));
        if (params.getDataType().equals(1)) {
            dList3.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        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)));
        if (params.getDataType().equals(1)) {
            dList4.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList4);
        Document osdNameFilter = new Document("$and", dList1);
        Document osdNameErrFilter = new Document("$and", dList2);
        Document osdTimeFilter = new Document("$and", dList3);
@@ -853,15 +776,11 @@
        List<Document> dList1 = new ArrayList<>(2);
        dList1.add(new Document("importantTag", Boolean.TRUE));
        dList1.add(new Document("osdTimeCorrect", new Document("$eq", 1)));
        if (params.getDataType().equals(1)) {
            dList1.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        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)));
        if (params.getDataType().equals(1)) {
            dList2.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList2);
        Document osdTimeFilter = new Document("$and", dList1);
        Document osdTimeErrFilter = new Document("$and", dList2);
        List<Document> lists = Arrays.asList(osdTimeFilter, osdTimeErrFilter);
@@ -925,27 +844,19 @@
        List<Document> dList1 = new ArrayList<>(2);
        dList1.add(new Document("importantTag", Boolean.TRUE));
        dList1.add(new Document("resultType", new Document("$eq", 1)));
        if (params.getDataType().equals(1)) {
            dList1.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        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)));
        if (params.getDataType().equals(1)) {
            dList2.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        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)));
        if (params.getDataType().equals(1)) {
            dList3.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        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)));
        if (params.getDataType().equals(1)) {
            dList4.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList4);
        Document normalFilter = new Document("$and", dList1);
        Document noDataFilter = new Document("$and", dList2);
        Document trFilter = new Document("$and", dList3);
@@ -996,18 +907,24 @@
     */
    @Override
    public Result vehiclePointOnlineRate(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("externalIndexCode", "deviceName");
        Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        long total = mongoTemplate.count(query, SnapshotDataMonitorResult.class);
        List<String> likeFileds = Arrays.asList("name", "no","ip");
        Query query = MongoUtil.getQuery(params,TIME_FIELD, likeFileds, null);
        //分页数量
        long total = mongoTemplate.count(query, TMonitorResult.class);
        MongoUtil.setPage(query, params, TIME_FIELD);
        List<SnapshotDataMonitorResult> resultList = mongoTemplate.find(query, SnapshotDataMonitorResult.class);
        List<TMonitorResult> resultList = mongoTemplate.find(query, TMonitorResult.class);
        // 统计数量
        MongoDatabase database = mongoTemplate.getDb();
        MongoCollection<Document> collection = database.getCollection("hk_snapshot_data_monitor");
        long distinctCount = collection.distinct("externalIndexCode", String.class).into(new ArrayList<>()).size();
        params.setDeptTag(-1);
        params.setDeviceType(2);
        // 统计设备数量
        Integer distinctCount = pointMapper.distinctCount(params);
        resultList.forEach(item->{
            if(null != item.getOnline() && item.getOnline()){
                item.setOnlineStr("在线");
            }else {
                item.setOnlineStr("离线");
            }
        });
        Date now = new Date();
        List<CheckIndexCar> videoList = new LambdaQueryChainWrapper<>(checkIndexCarService.getBaseMapper())
                .select(CheckIndexCar::getSiteOnline)
@@ -1047,24 +964,16 @@
        List<Document> dList1 = new ArrayList<>(2);
        dList1.add(new Document("ip.error", new Document("$eq", Boolean.TRUE)));
        if (params.getDataType().equals(1)) {
            dList1.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList1);
        List<Document> dList2 = new ArrayList<>(2);
        dList2.add(new Document("macdz.error", new Document("$eq", Boolean.TRUE)));
        if (params.getDataType().equals(1)) {
            dList2.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList2);
        List<Document> dList3 = new ArrayList<>(2);
        dList3.add(new Document("latitude.error", new Document("$eq", Boolean.TRUE)));
        if (params.getDataType().equals(1)) {
            dList3.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList3);
        List<Document> dList4 = new ArrayList<>(2);
        dList4.add(new Document("longitude.error", new Document("$eq", Boolean.TRUE)));
        if (params.getDataType().equals(1)) {
            dList4.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList4);
        Document ipErrFilter = new Document("$and", dList1);
        Document macdzErrFilter = new Document("$and", dList2);
        Document latitudeErrFilter = new Document("$and", dList3);
@@ -1128,24 +1037,16 @@
        List<Document> dList1 = new ArrayList<>(2);
        dList1.add(new Document("lalType", new Document("$eq", 1)));
        if (params.getDataType().equals(1)) {
            dList1.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList1);
        List<Document> dList2 = new ArrayList<>(2);
        dList2.add(new Document("lalType", new Document("$eq", 2)));
        if (params.getDataType().equals(1)) {
            dList2.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList2);
        List<Document> dList3 = new ArrayList<>(2);
        dList3.add(new Document("lalType", new Document("$eq", 3)));
        if (params.getDataType().equals(1)) {
            dList3.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList3);
        List<Document> dList4 = new ArrayList<>(2);
        dList4.add(new Document("lalType", new Document("$eq", 4)));
        if (params.getDataType().equals(1)) {
            dList4.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList4);
        Document ipErrFilter = new Document("$and", dList1);
        Document macdzErrFilter = new Document("$and", dList2);
        Document latitudeErrFilter = new Document("$and", dList3);
@@ -1282,19 +1183,13 @@
        List<Document> dList1 = new ArrayList<>(2);
        dList1.add(new Document("snapResult", new Document("$eq", 1)));
        if (params.getDataType().equals(1)) {
            dList1.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList1);
        List<Document> dList2 = new ArrayList<>(2);
        dList2.add(new Document("snapResult", new Document("$eq", 2)));
        if (params.getDataType().equals(1)) {
            dList2.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList2);
        List<Document> dList3 = new ArrayList<>(2);
        dList3.add(new Document("snapResult", new Document("$eq", 4)));
        if (params.getDataType().equals(1)) {
            dList3.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList3);
        Document ipErrFilter = new Document("$and", dList1);
        Document macdzErrFilter = new Document("$and", dList2);
        Document longitudeErrFilter = new Document("$and", dList3);
@@ -1460,24 +1355,16 @@
        List<Document> dList1 = new ArrayList<>(2);
        dList1.add(new Document("resultType", new Document("$eq", 1)));
        if (params.getDataType().equals(1)) {
            dList1.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList1);
        List<Document> dList2 = new ArrayList<>(2);
        dList2.add(new Document("resultType", new Document("$eq", 2)));
        if (params.getDataType().equals(1)) {
            dList2.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList2);
        List<Document> dList3 = new ArrayList<>(2);
        dList3.add(new Document("resultType", new Document("$eq", 3)));
        if (params.getDataType().equals(1)) {
            dList3.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList3);
        List<Document> dList4 = new ArrayList<>(2);
        dList4.add(new Document("resultType", new Document("$eq", 4)));
        if (params.getDataType().equals(1)) {
            dList4.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList4);
        Document normalFilter = new Document("$and", dList1);
        Document noDataFilter = new Document("$and", dList2);
        Document trFilter = new Document("$and", dList3);
@@ -1528,59 +1415,23 @@
     */
    @Override
    public Result facePointOnlineRate(DataCenterQuery params) {
        List<String> likeFileds = Arrays.asList("externalIndexCode", "deviceName");
        Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null);
        long total = mongoTemplate.count(query, SnapshotDataMonitorResult.class);
        List<String> likeFileds = Arrays.asList("name", "no","ip");
        Query query = MongoUtil.getQuery(params,TIME_FIELD, likeFileds, null);
        //分页数量
        long total = mongoTemplate.count(query, TMonitorResult.class);
        MongoUtil.setPage(query, params, TIME_FIELD);
        List<SnapshotDataMonitorResult> resultList = mongoTemplate.find(query, SnapshotDataMonitorResult.class);
        // 统计数量
        MongoDatabase database = mongoTemplate.getDb();
        MongoCollection<Document> collection = database.getCollection("hk_snapshot_data_monitor");
        List<Document> dList1 = new ArrayList<>(2);
        dList1.add(new Document("resultType", new Document("$eq", 1)));
        if (params.getDataType().equals(1)) {
            dList1.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        List<Document> dList2 = new ArrayList<>(2);
        dList2.add(new Document("resultType", new Document("$eq", 2)));
        if (params.getDataType().equals(1)) {
            dList2.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        List<Document> dList3 = new ArrayList<>(2);
        dList3.add(new Document("resultType", new Document("$eq", 3)));
        if (params.getDataType().equals(1)) {
            dList3.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        List<Document> dList4 = new ArrayList<>(2);
        dList4.add(new Document("resultType", new Document("$eq", 4)));
        if (params.getDataType().equals(1)) {
            dList4.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        Document normalFilter = new Document("$and", dList1);
        Document noDataFilter = new Document("$and", dList2);
        Document trFilter = new Document("$and", dList3);
        Document littleFilter = new Document("$and", dList4);
        List<Document> lists = Arrays.asList(normalFilter, noDataFilter, trFilter, littleFilter);
        List<String> rList = lists.stream().map(filter -> {
            // 构建聚合管道
            List<Document> pipeline = Arrays.asList(
                    new Document("$match", filter),
                    // $group 去重
                    new Document("$group", new Document("_id", "$externalIndexCode")),
                    new Document("$count", "uniqueDeviceIds")
            );
            // 执行聚合查询并获取结果
            AggregateIterable<Document> result = collection.aggregate(pipeline);
            Integer uniqueDeviceIdCount = 0;
            for (Document doc : result) {
                uniqueDeviceIdCount = doc.getInteger("uniqueDeviceIds");
                break; // 不需要继续遍历,因为 $count 只会产生一个结果
        List<TMonitorResult> resultList = mongoTemplate.find(query, TMonitorResult.class);
        resultList.forEach(item->{
            if(null != item.getOnline() && item.getOnline()){
                item.setOnlineStr("在线");
            }else {
                item.setOnlineStr("离线");
            }
            return uniqueDeviceIdCount + "";
        }).collect(Collectors.toList());
        });
        params.setDeptTag(-1);
        params.setDeviceType(3);
        // 统计设备数量
        Integer distinctCount = pointMapper.distinctCount(params);
        Date now = new Date();
        List<CheckIndexFace> videoList = new LambdaQueryChainWrapper<>(checkIndexFaceService.getBaseMapper())
@@ -1594,6 +1445,8 @@
            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);
@@ -1622,24 +1475,16 @@
        List<Document> dList1 = new ArrayList<>(2);
        dList1.add(new Document("ip.error", new Document("$eq", Boolean.TRUE)));
        if (params.getDataType().equals(1)) {
            dList1.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList1);
        List<Document> dList2 = new ArrayList<>(2);
        dList2.add(new Document("macdz.error", new Document("$eq", Boolean.TRUE)));
        if (params.getDataType().equals(1)) {
            dList2.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList2);
        List<Document> dList3 = new ArrayList<>(2);
        dList3.add(new Document("latitude.error", new Document("$eq", Boolean.TRUE)));
        if (params.getDataType().equals(1)) {
            dList3.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList3);
        List<Document> dList4 = new ArrayList<>(2);
        dList4.add(new Document("longitude.error", new Document("$eq", Boolean.TRUE)));
        if (params.getDataType().equals(1)) {
            dList4.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList4);
        Document ipErrFilter = new Document("$and", dList1);
        Document macdzErrFilter = new Document("$and", dList2);
        Document latitudeErrFilter = new Document("$and", dList3);
@@ -1703,24 +1548,16 @@
        List<Document> dList1 = new ArrayList<>(2);
        dList1.add(new Document("lalType", new Document("$eq", 1)));
        if (params.getDataType().equals(1)) {
            dList1.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList1);
        List<Document> dList2 = new ArrayList<>(2);
        dList2.add(new Document("lalType", new Document("$eq", 2)));
        if (params.getDataType().equals(1)) {
            dList2.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList2);
        List<Document> dList3 = new ArrayList<>(2);
        dList3.add(new Document("lalType", new Document("$eq", 3)));
        if (params.getDataType().equals(1)) {
            dList3.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList3);
        List<Document> dList4 = new ArrayList<>(2);
        dList4.add(new Document("lalType", new Document("$eq", 4)));
        if (params.getDataType().equals(1)) {
            dList4.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList4);
        Document ipErrFilter = new Document("$and", dList1);
        Document macdzErrFilter = new Document("$and", dList2);
        Document latitudeErrFilter = new Document("$and", dList3);
@@ -1784,24 +1621,16 @@
        List<Document> dList1 = new ArrayList<>(2);
        dList1.add(new Document("lalType", new Document("$eq", 1)));
        if (params.getDataType().equals(1)) {
            dList1.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList1);
        List<Document> dList2 = new ArrayList<>(2);
        dList2.add(new Document("lalType", new Document("$eq", 2)));
        if (params.getDataType().equals(1)) {
            dList2.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList2);
        List<Document> dList3 = new ArrayList<>(2);
        dList3.add(new Document("lalType", new Document("$eq", 3)));
        if (params.getDataType().equals(1)) {
            dList3.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList3);
        List<Document> dList4 = new ArrayList<>(2);
        dList4.add(new Document("lalType", new Document("$eq", 4)));
        if (params.getDataType().equals(1)) {
            dList4.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList4);
        Document ipErrFilter = new Document("$and", dList1);
        Document macdzErrFilter = new Document("$and", dList2);
        Document latitudeErrFilter = new Document("$and", dList3);
@@ -1866,19 +1695,13 @@
        List<Document> dList1 = new ArrayList<>(2);
        dList1.add(new Document("snapResult", new Document("$eq", 1)));
        if (params.getDataType().equals(1)) {
            dList1.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList1);
        List<Document> dList2 = new ArrayList<>(2);
        dList2.add(new Document("snapResult", new Document("$eq", 2)));
        if (params.getDataType().equals(1)) {
            dList2.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList2);
        List<Document> dList3 = new ArrayList<>(2);
        dList3.add(new Document("snapResult", new Document("$eq", 4)));
        if (params.getDataType().equals(1)) {
            dList3.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList3);
        Document ipErrFilter = new Document("$and", dList1);
        Document macdzErrFilter = new Document("$and", dList2);
        Document longitudeErrFilter = new Document("$and", dList3);
@@ -1942,19 +1765,13 @@
        List<Document> dList1 = new ArrayList<>(2);
        dList1.add(new Document("snapResult", new Document("$eq", 1)));
        if (params.getDataType().equals(1)) {
            dList1.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList1);
        List<Document> dList2 = new ArrayList<>(2);
        dList2.add(new Document("snapResult", new Document("$eq", 2)));
        if (params.getDataType().equals(1)) {
            dList2.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList2);
        List<Document> dList3 = new ArrayList<>(2);
        dList3.add(new Document("snapResult", new Document("$eq", 4)));
        if (params.getDataType().equals(1)) {
            dList3.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        }
        setTag(params,dList3);
        Document ipErrFilter = new Document("$and", dList1);
        Document macdzErrFilter = new Document("$and", dList2);
        Document longitudeErrFilter = new Document("$and", dList3);
@@ -2059,4 +1876,17 @@
        DF.setDecimalSeparatorAlwaysShown(false);
        return DF.format(rate) + "%";
    }
    /**
     * 设置标签搜索条件
     * @param params
     * @param dList
     */
    private void setTag(DataCenterQuery params, List<Document> dList) {
        if (params.getDataType().equals(1)) {
            dList.add(new Document("provinceTag", new Document("$eq", Boolean.TRUE)));
        } else if (params.getDataType().equals(2)) {
            dList.add(new Document("deptTag", new Document("$eq", Boolean.TRUE)));
        }
    }
}