From ee03b526152d335dd1e42bc01a1f717d1205204c Mon Sep 17 00:00:00 2001 From: zxl <763096477@qq.com> Date: 星期一, 26 五月 2025 15:27:04 +0800 Subject: [PATCH] (部级录像可用率,重点录像可用率,录像可用率)计算可用率bug修复,hk接口bug修复, --- ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java | 206 +++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 181 insertions(+), 25 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 65543d8..1397a1e 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 @@ -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<>(); @@ -1261,6 +1356,21 @@ } private final ISysConfigService configService; + + public double getSySMinTime(){ + //鑾峰彇绯荤粺鍙傛暟 + String dictLabel = configService.selectConfigByKey("recording_min_time"); + double recordingMinTime; + try { + recordingMinTime = Double.parseDouble(dictLabel) / 60; // 濡傛灉 dictLabel 鏄互灏忔椂涓哄崟浣嶏紝鍒欐棤闇�闄や互 60 + } catch (Exception e) { + log.error("閰嶇疆鐨勫垹闄ゆ椂闂磋寖鍥存牸寮忎笉姝g‘: {}", dictLabel, e); + return 12.0; // 榛樿 12 灏忔椂锛堜互灏忔椂涓哄崟浣嶏級 + } + + return recordingMinTime; + } + /** * 瑙嗛锛氬綍鍍忓彲鐢ㄧ巼 * @@ -1268,18 +1378,7 @@ * @return */ @Override - public Result videoAvailabilityRate(DataCenterQuery params) { - //鑾峰彇绯荤粺鍙傛暟 - String dictLabel = configService.selectConfigByKey("recording_min_time"); - - double recordingMinTime; - try { - recordingMinTime = Double.parseDouble(dictLabel) / 60; // 濡傛灉 dictLabel 鏄互灏忔椂涓哄崟浣嶏紝鍒欐棤闇�闄や互 60 - } catch (Exception e) { - log.error("閰嶇疆鐨勫垹闄ゆ椂闂磋寖鍥存牸寮忎笉姝g‘: {}", dictLabel, e); - recordingMinTime = 12.0; // 榛樿 12 灏忔椂锛堜互灏忔椂涓哄崟浣嶏級 - } List<String> likeFileds = Arrays.asList("deviceId", "deviceName"); Query query = MongoUtil.getQuery(params, "createTime", likeFileds, null); @@ -1333,12 +1432,13 @@ MongoDatabase databaes2 = mongoTemplate.getDb(); MongoCollection<Document> collection2 = databaes2.getCollection("uy_record_meta_d_sum"); - double finalRecordingMinTime = recordingMinTime; + double finalRecordingMinTime = getSySMinTime(); - List<Document> documentList = new ArrayList<>(3); + List<Document> documentList = new ArrayList<>(2); setTag(params, documentList); Document recording = new Document("recordDuration",new Document("$gte", finalRecordingMinTime)); documentList.add(recording); + Document filter = new Document("$and", documentList); // 鏋勫缓鑱氬悎绠¢亾 List<Document> pipeline = Arrays.asList( @@ -1353,7 +1453,7 @@ uniqueDeviceIdCount = doc.getInteger("uniqueDeviceIds"); break; // 涓嶉渶瑕佺户缁亶鍘嗭紝鍥犱负 $count 鍙細浜х敓涓�涓粨鏋� } - log.error("鎵撳嵃锛歿}",uniqueDeviceIdCount); + log.error("褰曞儚鍙敤鐜囨墦鍗帮細{}",uniqueDeviceIdCount); // List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper()) // .select(CheckIndexVideo::getVideoAvailable) // .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province) @@ -1378,6 +1478,7 @@ // 1锛氬畬鏁� 0锛氶棿姝� -1锛氬紓甯� | if (!StringUtils.isEmpty(resultCount.get(0)) && !"0".equals(resultCount.get(0))) { + //resultCount.get(0)鏄�绘暟 uniqueDeviceIdCount鏄洿鍏风郴缁熷弬鏁版煡璇㈠埌mongodb涓ぇ浜庣瓑浜� recordDuration瀛楁鐨勬�绘暟 onlineRate = new BigDecimal(uniqueDeviceIdCount).divide(new BigDecimal(resultCount.get(0)), 3,RoundingMode.DOWN).multiply(new BigDecimal("100")); } resultCount.add(this.remove0(onlineRate)); @@ -1438,6 +1539,35 @@ return uniqueDeviceIdCount + ""; }).collect(Collectors.toList()); + + //璁$畻閮ㄧ骇褰曞儚鍙敤鐜� + MongoDatabase database2 = mongoTemplate.getDb(); + MongoCollection<Document> collection2 = database2.getCollection("uy_record_meta_d_sum"); + double finalRecordingMinTime = getSySMinTime(); + + List<Document> documentList = new ArrayList<>(4); + documentList.add(new Document("deptTag", new Document("$eq", Boolean.TRUE))); + setTag(params, documentList); + Document recording = new Document("recordDuration",new Document("$gte", finalRecordingMinTime)); + documentList.add(recording); + Document filter = new Document("$and", documentList); + // 鏋勫缓鑱氬悎绠¢亾 + List<Document> pipeline = Arrays.asList( + new Document("$match", filter), + // $group 鍘婚噸 + new Document("$group", new Document("_id", "$deviceId")), + new Document("$count", "uniqueDeviceIds") + ); + AggregateIterable<Document> result = collection2.aggregate(pipeline); + Integer uniqueDeviceIdCount = 0; + for (Document doc : result) { + uniqueDeviceIdCount = doc.getInteger("uniqueDeviceIds"); + break; // 涓嶉渶瑕佺户缁亶鍘嗭紝鍥犱负 $count 鍙細浜х敓涓�涓粨鏋� + } + log.error("閮ㄧ骇褰曞儚鍙敤鐜噞}:",uniqueDeviceIdCount); + + + // List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper()) // .select(CheckIndexVideo::getMinistryVideoAvailable) // .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province) @@ -1458,7 +1588,7 @@ resultCount.add(0, totalCount + ""); BigDecimal onlineRate = BigDecimal.ZERO; if (!StringUtils.isEmpty(resultCount.get(0)) && !"0".equals(resultCount.get(0))) { - onlineRate = new BigDecimal(resultCount.get(1)).divide(new BigDecimal(resultCount.get(0)), 3,RoundingMode.DOWN).multiply(new BigDecimal("100")); + onlineRate = new BigDecimal(uniqueDeviceIdCount).divide(new BigDecimal(resultCount.get(0)), 3,RoundingMode.DOWN).multiply(new BigDecimal("100")); } resultCount.add(this.remove0(onlineRate)); HashMap<String, Object> map = new HashMap<>(); @@ -1517,6 +1647,32 @@ return uniqueDeviceIdCount + ""; }).collect(Collectors.toList()); + //璁$畻閲嶇偣鐐逛綅褰曞儚鍙敤鐜� + MongoDatabase database2 = mongoTemplate.getDb(); + MongoCollection<Document> collection2 = database2.getCollection("uy_record_meta_d_sum"); + double finalRecordingMinTime = getSySMinTime(); + + List<Document> documentList = new ArrayList<>(4); + documentList.add(new Document("importantTag", new Document("$eq", Boolean.TRUE))); + setTag(params, documentList); + Document recording = new Document("recordDuration",new Document("$gte", finalRecordingMinTime)); + documentList.add(recording); + Document filter = new Document("$and", documentList); + // 鏋勫缓鑱氬悎绠¢亾 + List<Document> pipeline = Arrays.asList( + new Document("$match", filter), + // $group 鍘婚噸 + new Document("$group", new Document("_id", "$deviceId")), + new Document("$count", "uniqueDeviceIds") + ); + AggregateIterable<Document> result = collection2.aggregate(pipeline); + Integer uniqueDeviceIdCount = 0; + for (Document doc : result) { + uniqueDeviceIdCount = doc.getInteger("uniqueDeviceIds"); + break; // 涓嶉渶瑕佺户缁亶鍘嗭紝鍥犱负 $count 鍙細浜х敓涓�涓粨鏋� + } + log.error("閲嶇偣鐐逛綅褰曞儚鍙敤鐜噞}:",uniqueDeviceIdCount); + // List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper()) // .select(CheckIndexVideo::getKeyVideoAvailable) // .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province) @@ -1537,7 +1693,7 @@ resultCount.add(0, totalCount + ""); BigDecimal onlineRate = BigDecimal.ZERO; if (!StringUtils.isEmpty(resultCount.get(0)) && !"0".equals(resultCount.get(0))) { - onlineRate = new BigDecimal(resultCount.get(1)).divide(new BigDecimal(resultCount.get(0)), 3,RoundingMode.DOWN).multiply(new BigDecimal("100")); + onlineRate = new BigDecimal(uniqueDeviceIdCount).divide(new BigDecimal(resultCount.get(0)), 3,RoundingMode.DOWN).multiply(new BigDecimal("100")); } resultCount.add(this.remove0(onlineRate)); HashMap<String, Object> map = new HashMap<>(); -- Gitblit v1.8.0