From 0ba453c66cd5d20b970c894358031c9c06df7071 Mon Sep 17 00:00:00 2001 From: zxl <763096477@qq.com> Date: 星期四, 05 六月 2025 10:43:26 +0800 Subject: [PATCH] 大屏修改,以及报错日志添加 --- ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java | 335 +++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 275 insertions(+), 60 deletions(-) diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java index f2297b8..aff9843 100644 --- a/ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java +++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java @@ -20,6 +20,7 @@ import com.ycl.platform.domain.vo.DynamicColumnVO; import com.ycl.platform.mapper.DynamicColumnMapper; import com.ycl.platform.mapper.ImageResourceSecurityDetailMapper; +import com.ycl.platform.mapper.TMonitorMapper; import com.ycl.platform.mapper.YwPointMapper; import com.ycl.platform.service.*; import com.ycl.system.Result; @@ -66,7 +67,6 @@ private final MongoTemplate mongoTemplate; private final ImageResourceSecurityDetailMapper securityDetailMapper; private final YwPointMapper pointMapper; - private final ICheckIndexVideoService checkIndexVideoService; private final ICheckIndexCarService checkIndexCarService; private final ICheckIndexFaceService checkIndexFaceService; private final DynamicColumnMapper dynamicColumnMapper; @@ -77,14 +77,35 @@ private static DecimalFormat DF = new DecimalFormat("#.####"); + + + public Map<String,List<DynamicColumnVO>> getDynamicByConditions(DataCenterQuery params,List<DynamicColumnVO> list){ + //鑾峰緱鍒板搴攊d锛屼笖鍖呭惈浼犲叆瀛楃涓� 鍔ㄦ�佸垪闆嗗悎 + List<DynamicColumnVO> likeFieldDynamicColumnVOList = list.stream() + .filter(dynamicColumnVO -> + dynamicColumnVO.getLabelId().equals(params.getDyId()) && + dynamicColumnVO.getColumnValue().contains(params.getDyValue()) + ).collect(Collectors.toList()); + //鑾峰緱婊¤冻鏉′欢鐨刬d闆嗗悎 + List<String> ids = likeFieldDynamicColumnVOList.stream().map(DynamicColumnVO::getRefStringId).toList(); + Map<String,List<DynamicColumnVO>> groupByRefStringIdMap = list.stream().collect(Collectors.groupingBy(DynamicColumnVO::getRefStringId)); + Set<String> removeSet = new HashSet<>(ids); + //绉婚櫎鎺変笉绗﹀悎鏉′欢鐨刱ey + groupByRefStringIdMap.keySet().retainAll(removeSet); + + return groupByRefStringIdMap; + } + @Override public void recordingAvailabilityExport(HttpServletResponse response,DataCenterQuery params) throws IOException { + List<String> likeFileds = Arrays.asList("deviceId", "deviceName"); Query query = MongoUtil.getQuery(params, "createTime", likeFileds, null); //涓嬫媺妗嗗綍鍍忔儏鍐垫煡璇㈡潯浠� if (params.getOption() != null) { query.addCriteria(Criteria.where("recordStatus").is(params.getOption())); } + MongoUtil.setNoPage(query, params, TIME_FIELD); List<RecordMetaDSumResult> resultList = mongoTemplate.find(query, RecordMetaDSumResult.class); //缈昏瘧琛屾斂鍖哄煙 resultList.forEach(item -> { @@ -92,8 +113,19 @@ AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromCode(areaCode); if (areaDeptEnum != null) item.setArealayername(areaDeptEnum.getName()); }); + //鑾峰緱鍔ㄦ�佸垪鏁版嵁 List<DynamicColumnVO> dynamicColumnVOList = dynamicColumnMapper.getDynamicColumnByTableName(TableNameConstants.COLUMN_NAME_VIDEO); - Map<String,List<DynamicColumnVO>> groupByRefStringIdMap = dynamicColumnVOList.stream().collect(Collectors.groupingBy(DynamicColumnVO::getRefStringId)); + + //鍒ゆ柇鏄惁鏈夋煡璇㈡潯浠� + boolean conditions = false; + Map<String,List<DynamicColumnVO>> groupByRefStringIdMap = new HashMap<>(); + if (params.getDyId() != null && StringUtils.isNotEmpty(params.getDyValue())){ + conditions = true; + //鑾峰緱鍔ㄦ�佸垪闆嗗悎涓寘鍚簡鐨勫瓧绗︿覆鍊肩殑闆嗗悎 鍖哄垎澶у皬鍐� + groupByRefStringIdMap = getDynamicByConditions(params,dynamicColumnVOList); + }else{ + groupByRefStringIdMap = dynamicColumnVOList.stream().collect(Collectors.groupingBy(DynamicColumnVO::getRefStringId)); + } //鍥哄畾琛ㄥご LinkedHashSet<String> headers = new LinkedHashSet<>(); headers.add(RecordingAvailabilityHeaders.arealayername); @@ -115,21 +147,28 @@ headersList.addAll(dynamicsHeaders); headers.addAll(headersList); } - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat dateFormat2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - +// SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + //鏌ヨ鍒版湁鍔ㄦ�佸垪鏌ヨ鏉′欢 + //鑾峰緱瀵瑰簲鍔ㄦ�佸垪涓璻ef鐨勫璞d 涓� 鏌ヨ缁撴灉id杩囨护 + if (conditions){ + Map<String, List<DynamicColumnVO>> finalGroupByRefStringIdMap = groupByRefStringIdMap; + resultList = resultList.stream() + .filter(obj -> finalGroupByRefStringIdMap.containsKey(obj.getId())) + .collect(Collectors.toList()); + } + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); List<List<Object>> data = new ArrayList<>(); for (RecordMetaDSumResult result : resultList){ List<Object> row = new ArrayList<>(); row.add(result.getArealayername()); row.add(result.getArealayerno()); - row.add(dateFormat2.format(result.getCreateTime())); + row.add(dateFormat.format(result.getCreateTime())); row.add(result.getDeviceId()); row.add(result.getMissDuration()); row.add(result.getPlatId()); row.add(result.getRecordDuration()); row.add(result.getRecordStatusText()); - row.add(dateFormat2.format(result.getCreateTime())); + row.add(dateFormat.format(result.getCreateTime())); //娣诲姞鍔ㄦ�佸垪鏁版嵁 for (String header : headersList){ boolean flag = false; @@ -201,8 +240,23 @@ item.setOffLineTimeStr(offLineTime); } }); + + + List<DynamicColumnVO> dynamicColumnVOList = dynamicColumnMapper.getDynamicColumnByTableName(TableNameConstants.COLUMN_NAME_FACE_POINT); - Map<String,List<DynamicColumnVO>> groupByRefStringIdMap = dynamicColumnVOList.stream().collect(Collectors.groupingBy(DynamicColumnVO::getRefStringId)); + + + //鍒ゆ柇鏄惁鏈夋煡璇㈡潯浠� + boolean conditions = false; + Map<String,List<DynamicColumnVO>> groupByRefStringIdMap = new HashMap<>(); + if (params.getDyId() != null && StringUtils.isNotEmpty(params.getDyValue())){ + conditions = true; + //鑾峰緱鍔ㄦ�佸垪闆嗗悎涓寘鍚簡鐨勫瓧绗︿覆鍊肩殑闆嗗悎 鍖哄垎澶у皬鍐� + groupByRefStringIdMap = getDynamicByConditions(params,dynamicColumnVOList); + }else{ + groupByRefStringIdMap = dynamicColumnVOList.stream().collect(Collectors.groupingBy(DynamicColumnVO::getRefStringId)); + } + //鍥哄畾琛ㄥご LinkedHashSet<String> headers = new LinkedHashSet<>(); headers.add(PointOnlineHeaders.no); @@ -223,6 +277,13 @@ //浣跨敤閾捐〃淇濊瘉鍚庣画琛ュ厖鏁版嵁鏃惰幏鍙栨暟鎹『搴忎竴鑷� headersList.addAll(dynamicsHeaders); headers.addAll(headersList); + } + + if (conditions){ + Map<String, List<DynamicColumnVO>> finalGroupByRefStringIdMap = groupByRefStringIdMap; + resultList = resultList.stream() + .filter(obj -> finalGroupByRefStringIdMap.containsKey(obj.getNo())) + .collect(Collectors.toList()); } List<List<Object>> data = new ArrayList<>(); @@ -313,7 +374,16 @@ } }); List<DynamicColumnVO> dynamicColumnVOList = dynamicColumnMapper.getDynamicColumnByTableName(TableNameConstants.COLUMN_NAME_VIDEO_POINT); - Map<String,List<DynamicColumnVO>> groupByRefStringIdMap = dynamicColumnVOList.stream().collect(Collectors.groupingBy(DynamicColumnVO::getRefStringId)); + //鍒ゆ柇鏄惁鏈夋煡璇㈡潯浠� + boolean conditions = false; + Map<String,List<DynamicColumnVO>> groupByRefStringIdMap = new HashMap<>(); + if (params.getDyId() != null && StringUtils.isNotEmpty(params.getDyValue())){ + conditions = true; + //鑾峰緱鍔ㄦ�佸垪闆嗗悎涓寘鍚簡鐨勫瓧绗︿覆鍊肩殑闆嗗悎 鍖哄垎澶у皬鍐� + groupByRefStringIdMap = getDynamicByConditions(params,dynamicColumnVOList); + }else{ + groupByRefStringIdMap = dynamicColumnVOList.stream().collect(Collectors.groupingBy(DynamicColumnVO::getRefStringId)); + } //鍥哄畾琛ㄥご LinkedHashSet<String> headers = new LinkedHashSet<>(); headers.add(PointOnlineHeaders.no); @@ -334,6 +404,14 @@ //浣跨敤閾捐〃淇濊瘉鍚庣画琛ュ厖鏁版嵁鏃惰幏鍙栨暟鎹『搴忎竴鑷� headersList.addAll(dynamicsHeaders); headers.addAll(headersList); + } + + + if (conditions){ + Map<String, List<DynamicColumnVO>> finalGroupByRefStringIdMap = groupByRefStringIdMap; + resultList = resultList.stream() + .filter(obj -> finalGroupByRefStringIdMap.containsKey(obj.getNo())) + .collect(Collectors.toList()); } List<List<Object>> data = new ArrayList<>(); @@ -428,7 +506,16 @@ } }); List<DynamicColumnVO> dynamicColumnVOList = dynamicColumnMapper.getDynamicColumnByTableName(TableNameConstants.COLUMN_NAME_CAR_POINT); - Map<String,List<DynamicColumnVO>> groupByRefStringIdMap = dynamicColumnVOList.stream().collect(Collectors.groupingBy(DynamicColumnVO::getRefStringId)); + //鍒ゆ柇鏄惁鏈夋煡璇㈡潯浠� + boolean conditions = false; + Map<String,List<DynamicColumnVO>> groupByRefStringIdMap = new HashMap<>(); + if (params.getDyId() != null && StringUtils.isNotEmpty(params.getDyValue())){ + conditions = true; + //鑾峰緱鍔ㄦ�佸垪闆嗗悎涓寘鍚簡鐨勫瓧绗︿覆鍊肩殑闆嗗悎 鍖哄垎澶у皬鍐� + groupByRefStringIdMap = getDynamicByConditions(params,dynamicColumnVOList); + }else{ + groupByRefStringIdMap = dynamicColumnVOList.stream().collect(Collectors.groupingBy(DynamicColumnVO::getRefStringId)); + } //鍥哄畾琛ㄥご LinkedHashSet<String> headers = new LinkedHashSet<>(); headers.add(PointOnlineHeaders.no); @@ -449,6 +536,14 @@ //浣跨敤閾捐〃淇濊瘉鍚庣画琛ュ厖鏁版嵁鏃惰幏鍙栨暟鎹『搴忎竴鑷� headersList.addAll(dynamicsHeaders); headers.addAll(headersList); + } + + + if (conditions){ + Map<String, List<DynamicColumnVO>> finalGroupByRefStringIdMap = groupByRefStringIdMap; + resultList = resultList.stream() + .filter(obj -> finalGroupByRefStringIdMap.containsKey(obj.getNo())) + .collect(Collectors.toList()); } List<List<Object>> data = new ArrayList<>(); @@ -535,6 +630,50 @@ + } + + //zxl + @Override + public BigDecimal videoPointOnlineRateCount(DataCenterQuery 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; + } + BigDecimal onlineRate = BigDecimal.ZERO; + if (totalCount!=0) { + onlineRate = new BigDecimal(onlineCount).divide(new BigDecimal(totalCount), 3,RoundingMode.DOWN).multiply(new BigDecimal("100")); + } + return onlineRate; } /** @@ -1275,48 +1414,23 @@ return recordingMinTime; } + private final TMonitorMapper tMonitorMapper; - /** - * 瑙嗛锛氬綍鍍忓彲鐢ㄧ巼 - * - * @param params - * @return - */ + //zxl @Override - public Result videoAvailabilityRate(DataCenterQuery params) { - - - - - List<String> likeFileds = Arrays.asList("deviceId", "deviceName"); - Query query = MongoUtil.getQuery(params, "createTime", likeFileds, null); - //涓嬫媺妗嗗綍鍍忔儏鍐垫煡璇㈡潯浠� - if (params.getOption() != null) { - query.addCriteria(Criteria.where("recordStatus").is(params.getOption())); - } - long total = mongoTemplate.count(query, RecordMetaDSumResult.class); - MongoUtil.setPage(query, params, "createTime"); - List<RecordMetaDSumResult> resultList = mongoTemplate.find(query, RecordMetaDSumResult.class); - //鏌ヨ鍔ㄦ�佸垪鏁版嵁 - //鏌ヨ鍔ㄦ�佸垪鏁版嵁鏇村叿id鏌ヨ -// List<DynamicColumnVO> dynamicColumnNames = dynamicColumnMapper.getDynamicColumnByTableName("uy_record_meta_d_sum"); - //缈昏瘧琛屾斂鍖哄煙 - resultList.forEach(item -> { - String areaCode = item.getArealayername().substring(0, 6); - AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromCode(areaCode); - if (areaDeptEnum != null) item.setArealayername(areaDeptEnum.getName()); - - List<DynamicColumnVO> list = dynamicColumnMapper.getDynamicColumnByTable(TableNameConstants.COLUMN_NAME_VIDEO,item.getId()); - item.setDynamicColumnList(list); - - }); + public BigDecimal videoAvailabilityRateCount(DataCenterQuery params){ + System.out.println("------------------------------------------------------------------------------------"); + System.out.println(params); // 缁熻鏁伴噺 + List<String> noString = tMonitorMapper.getIdListVideo(); MongoDatabase database = mongoTemplate.getDb(); MongoCollection<Document> collection = database.getCollection("uy_record_meta_d_sum"); List<Integer> status = Arrays.asList(1, 0, -1); List<String> resultCount = status.stream().map(item -> { List<Document> dList = new ArrayList<>(2); + dList.add(new Document("recordStatus", new Document("$eq", item))); + dList.add(new Document("no", new Document("$in", noString))); setTag(params, dList); Document filter = new Document("$and", dList); // 鏋勫缓鑱氬悎绠¢亾 @@ -1343,8 +1457,9 @@ double finalRecordingMinTime = getSySMinTime(); List<Document> documentList = new ArrayList<>(2); + documentList.add(new Document("no", new Document("$in", noString))); setTag(params, documentList); - Document recording = new Document("recordDuration",new Document("$gte", finalRecordingMinTime)); + Document recording = new Document("missDuration",new Document("$lte", finalRecordingMinTime)); documentList.add(recording); Document filter = new Document("$and", documentList); @@ -1356,25 +1471,13 @@ new Document("$count", "uniqueDeviceIds") ); AggregateIterable<Document> result = collection2.aggregate(pipeline); + + Integer uniqueDeviceIdCount = 0; for (Document doc : result) { uniqueDeviceIdCount = doc.getInteger("uniqueDeviceIds"); break; // 涓嶉渶瑕佺户缁亶鍘嗭紝鍥犱负 $count 鍙細浜х敓涓�涓粨鏋� } - log.error("褰曞儚鍙敤鐜囨墦鍗帮細{}",uniqueDeviceIdCount); -// List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper()) -// .select(CheckIndexVideo::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) { totalCount += Integer.parseInt(s); @@ -1382,8 +1485,120 @@ resultCount.add(0, totalCount + ""); BigDecimal onlineRate = BigDecimal.ZERO; +// 1锛氬畬鏁� 0锛氶棿姝� -1锛氬紓甯� | + if (!StringUtils.isEmpty(resultCount.get(0)) && !"0".equals(resultCount.get(0))) { + //resultCount.get(0)鏄�绘暟 uniqueDeviceIdCount鏄洿鍏风郴缁熷弬鏁版煡璇㈠埌mongodb涓ぇ浜庣瓑浜� recordDuration瀛楁鐨勬�绘暟 + onlineRate = new BigDecimal(uniqueDeviceIdCount).divide(new BigDecimal(resultCount.get(0)), 3,RoundingMode.DOWN).multiply(new BigDecimal("100")); + } + System.out.println(resultCount); + System.out.println(onlineRate); + return onlineRate; + } + + + /** + * 瑙嗛锛氬綍鍍忓彲鐢ㄧ巼 + * + * @param params + * @return + */ + @Override + public Result videoAvailabilityRate(DataCenterQuery params) { + List<String> noString = tMonitorMapper.getIdListVideo(); + + List<String> likeFileds = Arrays.asList("deviceId", "deviceName"); + Query query = MongoUtil.getQuery(params, "createTime", likeFileds, null); + if (CollectionUtils.isNotEmpty(noString)) { // 闃叉绌洪泦鍚堝紓甯� + query.addCriteria(Criteria.where("no").in(noString)); + } + //涓嬫媺妗嗗綍鍍忔儏鍐垫煡璇㈡潯浠� + if (params.getOption() != null) { + query.addCriteria(Criteria.where("recordStatus").is(params.getOption())); + } + long total = mongoTemplate.count(query, RecordMetaDSumResult.class); + MongoUtil.setPage(query, params, "createTime"); + + List<RecordMetaDSumResult> resultList = mongoTemplate.find(query, RecordMetaDSumResult.class); + //鏌ヨ鍔ㄦ�佸垪鏁版嵁 + //鏌ヨ鍔ㄦ�佸垪鏁版嵁鏇村叿id鏌ヨ +// List<DynamicColumnVO> dynamicColumnNames = dynamicColumnMapper.getDynamicColumnByTableName("uy_record_meta_d_sum"); + //缈昏瘧琛屾斂鍖哄煙 + resultList.forEach(item -> { + String areaCode = item.getArealayername().substring(0, 6); + AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromCode(areaCode); + if (areaDeptEnum != null) item.setArealayername(areaDeptEnum.getName()); + + List<DynamicColumnVO> list = dynamicColumnMapper.getDynamicColumnByTable(TableNameConstants.COLUMN_NAME_VIDEO,item.getId()); + item.setDynamicColumnList(list); + + }); + // 缁熻鏁伴噺 + + MongoDatabase database = mongoTemplate.getDb(); + MongoCollection<Document> collection = database.getCollection("uy_record_meta_d_sum"); + List<Integer> status = Arrays.asList(1, 0, -1); + List<String> resultCount = status.stream().map(item -> { + List<Document> dList = new ArrayList<>(2); + + dList.add(new Document("recordStatus", new Document("$eq", item))); + dList.add(new Document("no", new Document("$in", noString))); + setTag(params, dList); + 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 鍙細浜х敓涓�涓粨鏋� + } + return uniqueDeviceIdCount + ""; + }).collect(Collectors.toList()); + + //璁$畻褰曞儚鍙敤鐜� + MongoDatabase databaes2 = mongoTemplate.getDb(); + MongoCollection<Document> collection2 = databaes2.getCollection("uy_record_meta_d_sum"); + + double finalRecordingMinTime = getSySMinTime(); + + List<Document> documentList = new ArrayList<>(2); + documentList.add(new Document("no", new Document("$in", noString))); + setTag(params, documentList); + Document recording = new Document("missDuration",new Document("$lte", finalRecordingMinTime)); + documentList.add(recording); + + Document filter = new Document("$and", documentList); + // 鏋勫缓鑱氬悎绠¢亾 + List<Document> pipeline = Arrays.asList( + new Document("$match", filter), + // $group 鍘婚噸 + new Document("$group", new Document("_id", "$deviceId")), + new Document("$count", "uniqueDeviceIds") + ); + AggregateIterable<Document> result = collection2.aggregate(pipeline); + + + Integer uniqueDeviceIdCount = 0; + for (Document doc : result) { + uniqueDeviceIdCount = doc.getInteger("uniqueDeviceIds"); + break; // 涓嶉渶瑕佺户缁亶鍘嗭紝鍥犱负 $count 鍙細浜х敓涓�涓粨鏋� + } + log.error("褰曞儚鍙敤鐜囨墦鍗帮細{}",uniqueDeviceIdCount); + int totalCount = 0; + for (String s : resultCount) { + totalCount += Integer.parseInt(s); + } + resultCount.add(0, totalCount + ""); + + BigDecimal onlineRate = BigDecimal.ZERO; // 1锛氬畬鏁� 0锛氶棿姝� -1锛氬紓甯� | if (!StringUtils.isEmpty(resultCount.get(0)) && !"0".equals(resultCount.get(0))) { //resultCount.get(0)鏄�绘暟 uniqueDeviceIdCount鏄洿鍏风郴缁熷弬鏁版煡璇㈠埌mongodb涓ぇ浜庣瓑浜� recordDuration瀛楁鐨勬�绘暟 @@ -1456,7 +1671,7 @@ List<Document> documentList = new ArrayList<>(4); documentList.add(new Document("deptTag", new Document("$eq", Boolean.TRUE))); setTag(params, documentList); - Document recording = new Document("recordDuration",new Document("$gte", finalRecordingMinTime)); + Document recording = new Document("missDuration",new Document("$lte", finalRecordingMinTime)); documentList.add(recording); Document filter = new Document("$and", documentList); // 鏋勫缓鑱氬悎绠¢亾 @@ -1563,7 +1778,7 @@ List<Document> documentList = new ArrayList<>(4); documentList.add(new Document("importantTag", new Document("$eq", Boolean.TRUE))); setTag(params, documentList); - Document recording = new Document("recordDuration",new Document("$gte", finalRecordingMinTime)); + Document recording = new Document("missDuration",new Document("$lte", finalRecordingMinTime)); documentList.add(recording); Document filter = new Document("$and", documentList); // 鏋勫缓鑱氬悎绠¢亾 -- Gitblit v1.8.0