From d7e02365ad8cec3702657d3a949fdb028c423e60 Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期一, 19 八月 2024 13:41:12 +0800
Subject: [PATCH] 车辆点位和视图库稳定性测试
---
ycl-common/src/main/java/constant/ApiConstants.java | 8 ++
ycl-server/src/main/java/com/ycl/calculate/CarSnapshopDataCalculation.java | 69 ++++++++++++++++------
ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CheckIndexCar.java | 2
ycl-server/src/main/java/com/ycl/task/CarTask.java | 29 +++++++--
ycl-server/src/main/resources/application-dev.yml | 2
ycl-server/src/main/java/com/ycl/calculate/IndexCalculationServe.java | 2
ycl-server/src/main/java/com/ycl/calculate/VideoOnlineCalculation.java | 28 ++++++---
7 files changed, 99 insertions(+), 41 deletions(-)
diff --git a/ycl-common/src/main/java/constant/ApiConstants.java b/ycl-common/src/main/java/constant/ApiConstants.java
index db00b75..420f200 100644
--- a/ycl-common/src/main/java/constant/ApiConstants.java
+++ b/ycl-common/src/main/java/constant/ApiConstants.java
@@ -69,4 +69,12 @@
//鐪佸巺鍓嶇紑
public final static String Province = "Province_";
+
+
+
+ /** 鑰冩牳鎸囨爣 鏉′欢鍙傛暟 */
+ //杞﹁締鑰冩牳锛岀偣浣嶅湪绾跨巼锛屽尯鍘夸笉灏戜簬40璺�
+ public final static Integer Check_Car_SiteOnline = 40;
+ //杞﹁締鍦ㄧ嚎鐜� Redis 姣忔湀鏁版嵁涓柇娆℃暟 Hash key
+ public final static String Check_Car_ViewConnect = "ViewConnectNoData";
}
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CheckIndexCar.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CheckIndexCar.java
index 5155291..102550b 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CheckIndexCar.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/CheckIndexCar.java
@@ -16,7 +16,7 @@
* @author ruoyi
* @date 2024-04-29
*/
-@TableName("check_index_car")
+@TableName("t_check_index_car")
public class CheckIndexCar extends CheckIndex
{
private static final long serialVersionUID = 1L;
diff --git a/ycl-server/src/main/java/com/ycl/calculate/CarSnapshopDataCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/CarSnapshopDataCalculation.java
index 926be4b..e447cec 100644
--- a/ycl-server/src/main/java/com/ycl/calculate/CarSnapshopDataCalculation.java
+++ b/ycl-server/src/main/java/com/ycl/calculate/CarSnapshopDataCalculation.java
@@ -1,28 +1,25 @@
package com.ycl.calculate;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ycl.platform.domain.entity.CheckIndexCar;
-import com.ycl.platform.domain.entity.TMonitor;
-import com.ycl.platform.domain.result.HK.CrossDetailResult;
import com.ycl.platform.domain.result.HK.SnapshotDataMonitorResult;
import com.ycl.platform.domain.vo.TMonitorVO;
import com.ycl.platform.mapper.CheckIndexCarMapper;
import com.ycl.platform.mapper.TMonitorMapper;
import com.ycl.platform.service.ICheckIndexCarService;
-import com.ycl.platform.service.ITMonitorService;
import com.ycl.system.mapper.SysConfigMapper;
+import com.ycl.utils.DateUtils;
import constant.ApiConstants;
-import constant.CheckConstants;
import constant.CheckSnapCountConstants;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
-import utils.DateUtils;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
+import java.time.temporal.TemporalAdjusters;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -45,6 +42,8 @@
private TMonitorMapper monitorMapper;
@Autowired
private ICheckIndexCarService checkIndexCarService;
+ @Autowired
+ private RedisTemplate redisTemplate;
//鍖哄煙杞﹁締鐐逛綅鍦ㄧ嚎鎸囨爣鐨勫唴閮ㄧ被
private static class AreaStats {
@@ -67,6 +66,15 @@
List<String> provinceIds = getProvince();
Map<String, AreaStats> areaStatsMap = new HashMap<>();
+ // 鑾峰彇褰撳墠鏃ユ湡
+ LocalDate today = LocalDate.now();
+ // 鑾峰彇鏈湀鐨勭涓�澶�
+ LocalDate firstDayOfMonth = today.with(TemporalAdjusters.firstDayOfMonth());
+ // 鍒ゆ柇浠婂ぉ鏄惁鏄湰鏈堢殑绗竴澶�
+ if (today.equals(firstDayOfMonth)) {
+ // 濡傛灉鏄紝鍒欐竻闄edis涓褰曚腑鏂鏁扮殑鏁版嵁
+ redisTemplate.delete(ApiConstants.Check_Car_ViewConnect);
+ }
for (SnapshotDataMonitorResult result : list) {
TMonitorVO monitor = monitorMap.get(result.getExternalIndexCode());
if (monitor == null) continue;
@@ -88,9 +96,9 @@
// 鏌ヨ鏄惁index琛ㄥ凡缁忓瓨鍦ㄤ粖鏃ユ暟鎹�
List<CheckIndexCar> checkIndexCarList = checkIndexCarMapper.selectToday(DateUtils.getDate());
List<CheckIndexCar> checkIndexCars = new ArrayList<>();
- areaStatsMap.forEach((deptId, stats) -> {
+ areaStatsMap.forEach((key, stats) -> {
if (stats.totalSites > 0) {
- CheckIndexCar checkIndexCar = createOrUpdateCheckIndexCar(deptId, stats, cityCountAvg, countyCountAvg, checkIndexCarList);
+ CheckIndexCar checkIndexCar = createOrUpdateCheckIndexCar(key, stats, cityCountAvg, countyCountAvg, checkIndexCarList);
if (checkIndexCar != null) {
checkIndexCars.add(checkIndexCar);
}
@@ -103,15 +111,17 @@
/**
* 绱鎬荤偣浣嶆暟銆佺绾挎暟銆佹�绘姄鎷嶉噺
*/
+ //TODO:鏃犳暟鎹鐞�
private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, SnapshotDataMonitorResult result) {
//杩斿洖瀵硅薄鐨勫紩鐢紝濡傛灉涓嶅瓨鍦ㄤ細鏀惧叆鏂扮殑key,value
AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats());
stats.totalSites++;
+
if (ApiConstants.HK_SnapCount_ResultType_Null != result.getResultType()) {
stats.onlineSites++;
- } else {
stats.totalDataSum += result.getDataCount();
}
+
}
/**
@@ -133,19 +143,38 @@
if (checkIndexCar == null) {
return null;
}
+
//璋冪敤鐐逛綅鍦ㄧ嚎璁$畻鏂规硶
- Map<String, Object> siteOnlineParam = new HashMap<>();
- siteOnlineParam.put("totalSites", stats.totalSites);
- siteOnlineParam.put("onlineSites", stats.onlineSites);
- BigDecimal siteOnline = siteOnline(siteOnlineParam);
- checkIndexCar.setSiteOnline(siteOnline);
+ if (stats.totalSites >= ApiConstants.Check_Car_SiteOnline) {
+ Map<String, Object> siteOnlineParam = new HashMap<>();
+ siteOnlineParam.put("totalSites", stats.totalSites);
+ siteOnlineParam.put("onlineSites", stats.onlineSites);
+ BigDecimal siteOnline = siteOnline(siteOnlineParam);
+ checkIndexCar.setSiteOnline(siteOnline.min(BigDecimal.ONE));
+ } else {
+ checkIndexCar.setSiteOnline(BigDecimal.ZERO);
+ }
//瑙嗗浘搴撳鎺ョǔ瀹氭��
- BigDecimal avgCount = key.startsWith(ApiConstants.Province) ? cityCountAvg : countyCountAvg;
- Map<String, Object> viewConnectParam = new HashMap<>();
- viewConnectParam.put("totalDataSum", stats.totalDataSum);
- viewConnectParam.put("avgCount", avgCount);
- BigDecimal viewConnectStability = viewConnectStability(viewConnectParam);
- checkIndexCar.setViewConnectStability(viewConnectStability);
+ //Redis璁板綍璇ュ尯鍘垮綋鏈堟棤鏁版嵁涓婁紶娆℃暟
+ Integer noDateCount = (Integer) redisTemplate.opsForHash().get(ApiConstants.Check_Car_ViewConnect, key);
+ // 濡傛灉鍊间负null锛屽垯鍒濆鍖栦负0
+ if (noDateCount == null) {
+ noDateCount = 0;
+ }
+ Double deductScore = 0.1 * noDateCount;
+ if (stats.totalDataSum != 0) {
+ BigDecimal avgCount = key.startsWith(ApiConstants.Province) ? cityCountAvg : countyCountAvg;
+ Map<String, Object> viewConnectParam = new HashMap<>();
+ viewConnectParam.put("totalDataSum", stats.totalDataSum);
+ viewConnectParam.put("avgCount", avgCount);
+ BigDecimal viewConnectStability = viewConnectStability(viewConnectParam);
+ viewConnectStability = viewConnectStability.subtract(new BigDecimal(deductScore)).max(BigDecimal.ZERO).min(BigDecimal.ONE);
+ checkIndexCar.setViewConnectStability(viewConnectStability);
+ } else {
+ noDateCount++;
+ }
+ // 灏嗘柊鐨勫�兼斁鍥濰ash涓�
+ redisTemplate.opsForHash().put(ApiConstants.Check_Car_ViewConnect, key, noDateCount);
return checkIndexCar;
}
}
diff --git a/ycl-server/src/main/java/com/ycl/calculate/IndexCalculationServe.java b/ycl-server/src/main/java/com/ycl/calculate/IndexCalculationServe.java
index 6b3f80d..aa66e08 100644
--- a/ycl-server/src/main/java/com/ycl/calculate/IndexCalculationServe.java
+++ b/ycl-server/src/main/java/com/ycl/calculate/IndexCalculationServe.java
@@ -100,7 +100,7 @@
//瑙嗗浘搴撳鎺ョǔ瀹氭��
public BigDecimal viewConnectStability(Map<String, Object> param) {
BigDecimal totalDataSum = new BigDecimal((Integer) param.get("totalDataSum"));
- BigDecimal avgCount = new BigDecimal((Integer) param.get("avgCount"));
+ BigDecimal avgCount = (BigDecimal) param.get("avgCount");
return avgCount.divide(totalDataSum, 4, RoundingMode.HALF_UP);
}
diff --git a/ycl-server/src/main/java/com/ycl/calculate/VideoOnlineCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/VideoOnlineCalculation.java
index 0f25d77..d90b901 100644
--- a/ycl-server/src/main/java/com/ycl/calculate/VideoOnlineCalculation.java
+++ b/ycl-server/src/main/java/com/ycl/calculate/VideoOnlineCalculation.java
@@ -142,17 +142,25 @@
BigDecimal siteOnline = siteOnline(param);
checkIndexVideo.setSiteOnline(siteOnline);
//璋冪敤鐐逛綅鍦ㄧ嚎鐜囪绠楁柟娉� 璁$畻閲嶇偣鐐逛綅鍦ㄧ嚎鐜�
- Map<String, Object> importantParam = new HashMap<>();
- importantParam.put("totalSites", stats.importantSites);
- importantParam.put("onlineSites", stats.importantOnlineSites);
- BigDecimal importantSiteOnline = siteOnline(importantParam);
- checkIndexVideo.setKeySiteOnline(importantSiteOnline);
+ if(stats.importantSites!=0) {
+ Map<String, Object> importantParam = new HashMap<>();
+ importantParam.put("totalSites", stats.importantSites);
+ importantParam.put("onlineSites", stats.importantOnlineSites);
+ BigDecimal importantSiteOnline = siteOnline(importantParam);
+ checkIndexVideo.setKeySiteOnline(importantSiteOnline);
+ }else {
+ log.info("閲嶇偣鐐逛綅鏁颁负0");
+ }
//璋冪敤鐐逛綅鍦ㄧ嚎鐜囪绠楁柟娉� 璁$畻鎸囨尌鍥惧儚鍦ㄧ嚎鐜�
- Map<String, Object> commandParam = new HashMap<>();
- commandParam.put("totalSites", stats.commandSites);
- commandParam.put("onlineSites", stats.commandOnlineSites);
- BigDecimal commandSiteOnline = siteOnline(commandParam);
- checkIndexVideo.setKeyCommandImageOnline(commandSiteOnline);
+ if(stats.commandSites!=0) {
+ Map<String, Object> commandParam = new HashMap<>();
+ commandParam.put("totalSites", stats.commandSites);
+ commandParam.put("onlineSites", stats.commandOnlineSites);
+ BigDecimal commandSiteOnline = siteOnline(commandParam);
+ checkIndexVideo.setKeyCommandImageOnline(commandSiteOnline);
+ }else {
+ log.info("鎸囨尌鍥惧儚鐐逛綅鏁颁负0");
+ }
return checkIndexVideo;
}
}
diff --git a/ycl-server/src/main/java/com/ycl/task/CarTask.java b/ycl-server/src/main/java/com/ycl/task/CarTask.java
index fd36a2a..98e0042 100644
--- a/ycl-server/src/main/java/com/ycl/task/CarTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/CarTask.java
@@ -7,6 +7,7 @@
import com.ycl.platform.domain.vo.TMonitorVO;
import com.ycl.platform.mapper.TMonitorMapper;
import com.ycl.utils.DateUtils;
+import com.ycl.utils.StringUtils;
import constant.ApiConstants;
import constant.CalculationStrategyConstants;
import constant.CheckConstants;
@@ -34,10 +35,12 @@
private TMonitorMapper monitorMapper;
public void siteOnlineTask() {
Date yesterday = DateUtils.addDays(new Date(), -1);
+ //TODO:鏃堕棿鍐欐浜�
+ Date date = DateUtils.getDay(2024,7,13);
//璁$畻鐐逛綅鍦ㄧ嚎鐜囧拰瑙嗗浘搴撳鎺ョǔ瀹氭��
Query query = new Query();
query.addCriteria(Criteria
- .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday))
+ .where("mongoCreateTime").gte(DateUtils.getDayStart(date)).lt(DateUtils.getDayEnd(date))
.and("dataType").is(ApiConstants.HK_DataType_CAR));
List<SnapshotDataMonitorResult> results = mongoTemplate.find(query, SnapshotDataMonitorResult.class);
CalculationStrategy<SnapshotDataMonitorResult> calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Car_SiteOnline_ViewStability);
@@ -46,10 +49,12 @@
public void deviceSampleTask() {
Date yesterday = DateUtils.addDays(new Date(), -1);
+ //TODO:鏃堕棿鍐欐浜�
+ Date date = DateUtils.getDay(2024,7,13);
//璁$畻杞﹁締鍗″彛璁惧鏁版嵁璇嗗埆鍑嗙‘鎬с�乽rl鍙敤鎬с�佸ぇ鍥惧彲鐢ㄦ��
Query query = new Query();
query.addCriteria(Criteria
- .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday)));
+ .where("mongoCreateTime").gte(DateUtils.getDayStart(date)).lt(DateUtils.getDayEnd(date)));
List<VehicleDeviceSamplingResult> results = mongoTemplate.find(query, VehicleDeviceSamplingResult.class);
CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Car_DataAccuracy_Url_PicUsability);
calculator.calculate(results);
@@ -57,21 +62,25 @@
public void infoAccuracyTask() {
Date yesterday = DateUtils.addDays(new Date(), -1);
+ //TODO:鏃堕棿鍐欐浜�
+ Date date = DateUtils.getDay(2024,7,13);
//璁$畻杞﹁締鍗″彛淇℃伅閲囬泦鍑嗙‘鐜�
Query query = new Query();
query.addCriteria(Criteria
- .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday)));
+ .where("mongoCreateTime").gte(DateUtils.getDayStart(date)).lt(DateUtils.getDayEnd(date)));
List<CrossDetailResult> results = mongoTemplate.find(query, CrossDetailResult.class);
CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Car_InfoAccuracy);
calculator.calculate(results);
}
- public void snapShopDelay() {
+ public void snapShopDelayTask() {
Date yesterday = DateUtils.addDays(new Date(), -1);
+ //TODO:鏃堕棿鍐欐浜�
+ Date date = DateUtils.getDay(2024,7,13);
//璁$畻杞﹁締鎶撴媿鏁版嵁涓婁紶鍙婃椂鎬�
Query query = new Query();
query.addCriteria(Criteria
- .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday))
+ .where("mongoCreateTime").gte(DateUtils.getDayStart(date)).lt(DateUtils.getDayEnd(date))
.and("dataType").is(ApiConstants.HK_DataType_CAR));
List<SnapshotDelayMonitorResult> results = mongoTemplate.find(query, SnapshotDelayMonitorResult.class);
CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Car_SnapshotDelay);
@@ -80,10 +89,12 @@
public void snapShopDataIntegrity() {
Date yesterday = DateUtils.addDays(new Date(), -1);
+ //TODO:鏃堕棿鍐欐浜�
+ Date date = DateUtils.getDay(2024,7,13);
//璁$畻杞﹁締鏁版嵁鎶撴媿瀹屾暣鎬�
Query query = new Query();
query.addCriteria(Criteria
- .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday)));
+ .where("mongoCreateTime").gte(DateUtils.getDayStart(date)).lt(DateUtils.getDayEnd(date)));
List<DataIntegrityMonitoringResult> results = mongoTemplate.find(query, DataIntegrityMonitoringResult.class);
CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Car_DataIntegrity);
calculator.calculate(results);
@@ -91,10 +102,12 @@
public void clockAccuracyTask() {
Date yesterday = DateUtils.addDays(new Date(), -1);
+ //TODO:鏃堕棿鍐欐浜�
+ Date date = DateUtils.getDay(2024,7,13);
//璁$畻杞﹁締鍗″彛璁惧鏃堕挓鍑嗙‘鎬�
Query query = new Query();
query.addCriteria(Criteria
- .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday)));
+ .where("mongoCreateTime").gte(DateUtils.getDayStart(date)).lt(DateUtils.getDayEnd(date)));
List<VehicleDeviceInspectionResult> results = mongoTemplate.find(query, VehicleDeviceInspectionResult.class);
CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Car_ClockAccuracy);
calculator.calculate(results);
@@ -103,7 +116,7 @@
public void directConsistentTask() {
//杞﹁締鐩綍涓�鑷寸巼
List<TMonitorVO> tMonitorVOS = monitorMapper.selectMonitorVOList();
- List<TMonitorVO> list = tMonitorVOS.stream().filter(tMonitorVO -> tMonitorVO.getCameraFunType().contains(CheckConstants.Rule_Category_Car + "")).collect(Collectors.toList());
+ List<TMonitorVO> list = tMonitorVOS.stream().filter(tMonitorVO -> !StringUtils.isEmpty(tMonitorVO.getCameraFunType()) && tMonitorVO.getCameraFunType().contains(CheckConstants.Rule_Category_Car + "")).collect(Collectors.toList());
CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Car_DirectConsistent);
calculator.calculate(list);
}
diff --git a/ycl-server/src/main/resources/application-dev.yml b/ycl-server/src/main/resources/application-dev.yml
index ab4cea3..e56e2d7 100644
--- a/ycl-server/src/main/resources/application-dev.yml
+++ b/ycl-server/src/main/resources/application-dev.yml
@@ -36,7 +36,7 @@
spring:
# 鏁版嵁婧愰厤缃�
datasource:
- url: jdbc:mysql://101.35.247.188/zgyw?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true
+ url: jdbc:mysql://101.35.247.188/zgyw?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&rewriteBat1chedStatements=true
username: root
password: ycl@202466
type: com.alibaba.druid.pool.DruidDataSource
--
Gitblit v1.8.0