From 71f61d13531b3e2a0099ba5afe3f268c99c5bacf Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期四, 29 五月 2025 18:13:33 +0800
Subject: [PATCH] 修改大屏录像可用率指标,点位在线指标,数据中心录像可用率,
---
ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java | 219 ++++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 171 insertions(+), 48 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 1397a1e..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;
@@ -630,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;
}
/**
@@ -1370,45 +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);
// 鏋勫缓鑱氬悎绠¢亾
@@ -1435,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);
@@ -1448,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);
@@ -1474,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瀛楁鐨勬�绘暟
@@ -1548,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);
// 鏋勫缓鑱氬悎绠¢亾
@@ -1655,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