From 72dd95fdcde21b4641162d418d6fe8423bb74507 Mon Sep 17 00:00:00 2001 From: fuliqi <fuliqi@qq.com> Date: 星期五, 01 十一月 2024 02:05:52 +0800 Subject: [PATCH] 数据中心优化完成、车辆url算法优化、大图可用算法优化 --- ycl-server/src/main/java/com/ycl/calculate/CarDeviceSampleCalculation.java | 31 - ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/PicAccessResult.java | 16 ycl-pojo/src/main/java/com/ycl/platform/domain/vo/DataCenter/SnapClockVO.java | 114 ++++++ ycl-server/src/main/java/com/ycl/task/CarTask.java | 15 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/FaceDeviceSamplingResult.java | 32 + ycl-server/src/main/java/com/ycl/calculate/FaceDeviceSampleCalculation.java | 10 ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java | 550 ++++++++++++++++++++++++-------- ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java | 23 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/FaceDeviceInspectionResult.java | 15 ycl-server/src/main/java/com/ycl/factory/IndexCalculationFactory.java | 4 ycl-server/src/main/java/com/ycl/calculate/CarUrlCalculation.java | 93 +++++ ycl-common/src/main/java/constant/CalculationStrategyConstants.java | 8 ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/VehicleDeviceInspectionResult.java | 15 ycl-pojo/src/main/java/com/ycl/platform/domain/vo/DataCenter/BigPicUsefulVO.java | 67 +++ ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/VehicleDeviceSamplingResult.java | 24 15 files changed, 820 insertions(+), 197 deletions(-) diff --git a/ycl-common/src/main/java/constant/CalculationStrategyConstants.java b/ycl-common/src/main/java/constant/CalculationStrategyConstants.java index 58ed241..96e7bfb 100644 --- a/ycl-common/src/main/java/constant/CalculationStrategyConstants.java +++ b/ycl-common/src/main/java/constant/CalculationStrategyConstants.java @@ -13,9 +13,13 @@ */ public static final String Car_ViewStability = "carViewStability"; /** - * 杞﹁締鎶撴媿鏁版嵁鍑嗙‘鎬с�乽rl銆佸ぇ鍥惧彲鐢ㄦ�� + * 杞﹁締鎶撴媿鏁版嵁鍑嗙‘鎬с�佸ぇ鍥惧彲鐢ㄦ�� */ - public static final String Car_DataAccuracy_Url_PicUsability = "carDataAccuracyUrlPicUsability"; + public static final String Car_DataAccuracy_PicUsability = "carDataAccuracyPicUsability"; + /** + * 杞﹁締鎶撴媿鏁版嵁鍑嗙‘鎬с�佸ぇ鍥惧彲鐢ㄦ�� + */ + public static final String Car_Url = "carUrl"; /** * 杞﹁締鍗″彛灞炴�х洃娴嬬粨鏋� */ diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/FaceDeviceInspectionResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/FaceDeviceInspectionResult.java index b7b4fa0..97a0b15 100644 --- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/FaceDeviceInspectionResult.java +++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/FaceDeviceInspectionResult.java @@ -1,7 +1,9 @@ package com.ycl.platform.domain.result.HK; import com.ycl.platform.domain.result.BaseResult; +import com.ycl.platform.domain.vo.DataCenter.SnapClockVO; import lombok.Data; +import org.springframework.beans.BeanUtils; import org.springframework.data.mongodb.core.index.TextIndexed; import org.springframework.data.mongodb.core.mapping.Document; @@ -308,4 +310,17 @@ */ private Integer nouniqueCount; } + + public static SnapClockVO getVO(FaceDeviceInspectionResult result){ + SnapClockVO snapClockVO = new SnapClockVO(); + BeanUtils.copyProperties(result,snapClockVO); + snapClockVO.setClockPercent(result.getSnapClock().getClockPercent()); + snapClockVO.setTodayClockCount(result.getSnapClock().getTodayClockCount()); + snapClockVO.setTodayClockResult(result.getSnapClock().getTodayClockResult()); + snapClockVO.setAllClockCount(result.getSnapClock().getAllClockCount()); + snapClockVO.setAllClockResult(result.getSnapClock().getAllClockResult()); + snapClockVO.setAllClockResultText(result.getSnapClock().getAllClockResultText()); + snapClockVO.setTodayClockResultText(result.getSnapClock().getTodayClockResultText()); + return snapClockVO; + } } diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/FaceDeviceSamplingResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/FaceDeviceSamplingResult.java index 0c1fcfb..92d85be 100644 --- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/FaceDeviceSamplingResult.java +++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/FaceDeviceSamplingResult.java @@ -1,7 +1,9 @@ package com.ycl.platform.domain.result.HK; import com.ycl.platform.domain.result.BaseResult; +import com.ycl.platform.domain.vo.DataCenter.BigPicUsefulVO; import lombok.Data; +import org.springframework.beans.BeanUtils; import org.springframework.data.mongodb.core.index.TextIndexed; import org.springframework.data.mongodb.core.mapping.Document; @@ -94,17 +96,6 @@ */ private Integer osdExpCount; - public static BigDecimal calUrl(BigUsefulness bigUseful) { - BigDecimal url = BigDecimal.ZERO; - if (bigUseful.getSampleCount() != 0) { - //鍥剧墖璁块棶姝e父閲� = 鎶芥閲�-寮傚父閲� - BigDecimal picNormalCount = new BigDecimal(bigUseful.getSampleCount() - bigUseful.getBigPicExpCount()); - //鍥剧墖鎶芥閲� - BigDecimal sampleCount = new BigDecimal(bigUseful.getSampleCount()); - url = picNormalCount.divide(sampleCount, 4, RoundingMode.HALF_UP); - } - return url; - } } @Data @@ -124,4 +115,23 @@ */ private Integer unfaceEligCount; } + + public static BigPicUsefulVO getPicVO(FaceDeviceSamplingResult result){ + BigPicUsefulVO vo = new BigPicUsefulVO(); + BeanUtils.copyProperties(result,vo); + vo.setBigPicExpCount(result.getBigUseful().getBigPicExpCount()); + vo.setBigUsefulPercent(result.getBigUseful().getBigUsefulPercent()); + vo.setSampleCount(result.getBigUseful().getSampleCount()); + vo.setOsdExpCount(result.getBigUseful().getOsdExpCount()); + vo.setImgDiffCount(result.getBigUseful().getImgDiffCount()); + return vo; + } + public static BigPicUsefulVO getEligeVO(FaceDeviceSamplingResult result){ + BigPicUsefulVO vo = new BigPicUsefulVO(); + BeanUtils.copyProperties(result,vo); + vo.setSampleCount(result.getFaceEligibility().getSampleCount()); + vo.setUnfaceEligCount(result.getFaceEligibility().getUnfaceEligCount()); + vo.setFaceEligPercent(result.getFaceEligibility().getFaceEligPercent()); + return vo; + } } diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/PicAccessResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/PicAccessResult.java index bd8c2f9..29815f6 100644 --- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/PicAccessResult.java +++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/PicAccessResult.java @@ -5,6 +5,9 @@ import org.springframework.data.mongodb.core.index.TextIndexed; import org.springframework.data.mongodb.core.mapping.Document; +import java.math.BigDecimal; +import java.math.RoundingMode; + /** * 鍥剧墖璁块棶鐩戞祴缁撴灉 * @@ -12,8 +15,10 @@ */ @Data @Document(collection = "hk_pic_access") +//鍙瓨浜嗚溅杈嗙殑 public class PicAccessResult extends BaseResult { + private Integer dataType; /** * 鏁版嵁绫诲瀷涓�1鏃惰〃绀哄崱鍙e唴鐮侊紝鏁版嵁绫诲瀷涓�2鎴�11鏃惰〃绀轰汉鑴搁噰闆嗚澶囧唴鐮� */ @@ -78,4 +83,15 @@ */ private int bigDisableCount; + public static BigDecimal calUrl(PicAccessResult result) { + BigDecimal url = BigDecimal.ZERO; + if (result.getSampleCount() != 0) { + //鍥剧墖璁块棶姝e父閲� = 鎶芥閲�-寮傚父閲� + BigDecimal picNormalCount = new BigDecimal(result.getSampleCount() - result.getExpCount()); + //鍥剧墖鎶芥閲� + BigDecimal sampleCount = new BigDecimal(result.getSampleCount()); + url = picNormalCount.divide(sampleCount, 4, RoundingMode.HALF_UP); + } + return url; + } } diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/VehicleDeviceInspectionResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/VehicleDeviceInspectionResult.java index cc7673d..9914bcf 100644 --- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/VehicleDeviceInspectionResult.java +++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/VehicleDeviceInspectionResult.java @@ -1,7 +1,9 @@ package com.ycl.platform.domain.result.HK; import com.ycl.platform.domain.result.BaseResult; +import com.ycl.platform.domain.vo.DataCenter.SnapClockVO; import lombok.Data; +import org.springframework.beans.BeanUtils; import org.springframework.data.mongodb.core.index.TextIndexed; import org.springframework.data.mongodb.core.mapping.Document; @@ -354,4 +356,17 @@ */ private Integer noIntegrityCount; } + + public static SnapClockVO getVO(VehicleDeviceInspectionResult result){ + SnapClockVO snapClockVO = new SnapClockVO(); + BeanUtils.copyProperties(result,snapClockVO); + snapClockVO.setClockPercent(result.getSnapClock().getClockPercent()); + snapClockVO.setTodayClockCount(result.getSnapClock().getTodayClockCount()); + snapClockVO.setTodayClockResult(result.getSnapClock().getTodayClockResult()); + snapClockVO.setAllClockCount(result.getSnapClock().getAllClockCount()); + snapClockVO.setAllClockResult(result.getSnapClock().getAllClockResult()); + snapClockVO.setAllClockResultText(result.getSnapClock().getAllClockResultText()); + snapClockVO.setTodayClockResultText(result.getSnapClock().getTodayClockResultText()); + return snapClockVO; + } } diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/VehicleDeviceSamplingResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/VehicleDeviceSamplingResult.java index b564d6d..02e1390 100644 --- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/VehicleDeviceSamplingResult.java +++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/HK/VehicleDeviceSamplingResult.java @@ -1,7 +1,9 @@ package com.ycl.platform.domain.result.HK; import com.ycl.platform.domain.result.BaseResult; +import com.ycl.platform.domain.vo.DataCenter.BigPicUsefulVO; import lombok.Data; +import org.springframework.beans.BeanUtils; import org.springframework.data.mongodb.core.index.TextIndexed; import org.springframework.data.mongodb.core.mapping.Document; @@ -83,17 +85,7 @@ */ private Integer osdExpCount; - public static BigDecimal calUrl(BigUsefulness bigUseful) { - BigDecimal url = BigDecimal.ZERO; - if (bigUseful.getSampleCount() != 0) { - //鍥剧墖璁块棶姝e父閲� = 鎶芥閲�-寮傚父閲� - BigDecimal picNormalCount = new BigDecimal(bigUseful.getSampleCount() - bigUseful.getBigPicExpCount()); - //鍥剧墖鎶芥閲� - BigDecimal sampleCount = new BigDecimal(bigUseful.getSampleCount()); - url = picNormalCount.divide(sampleCount, 4, RoundingMode.HALF_UP); - } - return url; - } + } @Data @@ -144,5 +136,13 @@ private Float importantConPercent; } - + public static BigPicUsefulVO getPicVO(VehicleDeviceSamplingResult result){ + BigPicUsefulVO vo = new BigPicUsefulVO(); + BeanUtils.copyProperties(result,vo); + vo.setBigPicExpCount(result.getBigUseful().getBigPicExpCount()); + vo.setBigUsefulPercent(result.getBigUseful().getBigUsefulPercent()); + vo.setSampleCount(result.getBigUseful().getSampleCount()); + vo.setOsdExpCount(result.getBigUseful().getOsdExpCount()); + return vo; + } } diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/DataCenter/BigPicUsefulVO.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/DataCenter/BigPicUsefulVO.java new file mode 100644 index 0000000..1a39afd --- /dev/null +++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/DataCenter/BigPicUsefulVO.java @@ -0,0 +1,67 @@ +package com.ycl.platform.domain.vo.DataCenter; + +import lombok.Data; +import org.springframework.data.mongodb.core.index.TextIndexed; + +@Data +public class BigPicUsefulVO { + /** + * 鍗″彛鍐呯爜鎴栭噰闆嗚澶囧唴鐮侊紝dataType涓�1鏃惰〃绀哄崱鍙e唴鐮侊紝dataType涓�11鏃惰〃绀洪噰闆嗚澶囧唴鐮� + */ + private String indexCode; + + /** + * 璁惧鎴栧崱鍙e浗鏍囩紪鐮� + */ + private String externalIndexCode; + + /** + * 璁惧鎴栧崱鍙e悕绉� + */ + private String deviceName; + + /** + * 缁勭粐缂栧彿 + */ + private String orgCode; + + /** + * 缁勭粐鍚嶇О + */ + private String orgName; + + /** + * 澶у浘鍙敤鎬ф暟鎹娊妫�閲�/浜鸿劯鍚堟牸鎬ф娊妫� + */ + private Integer sampleCount; + + /** + * 澶у浘鍙敤鐜� + */ + private Float bigUsefulPercent; + + /** + * 澶у浘璁块棶寮傚父鏁版嵁閲� + */ + private Integer bigPicExpCount; + + /** + * OSD鏍囨敞寮傚父鏁版嵁閲� + */ + private Integer osdExpCount; + /** + * 浜鸿劯澶у皬鍥句笉涓�鑷存暟鎹噺锛氬皬鍥句笉鍦ㄥぇ鍥句腑 + */ + private Integer imgDiffCount; + + + /** + * 浜鸿劯鍚堟牸鐜� + */ + private Float faceEligPercent; + + /** + * 浜鸿劯涓嶅敮涓�閲� + */ + private Integer unfaceEligCount; +} diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/DataCenter/SnapClockVO.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/DataCenter/SnapClockVO.java new file mode 100644 index 0000000..94b381c --- /dev/null +++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/DataCenter/SnapClockVO.java @@ -0,0 +1,114 @@ +package com.ycl.platform.domain.vo.DataCenter; + +import com.ycl.platform.domain.result.BaseResult; +import lombok.Data; +import org.springframework.data.mongodb.core.index.TextIndexed; +import org.springframework.data.mongodb.core.mapping.Document; + +/** + * 杞﹁締璁惧鍏ㄦ鎸囨爣鐩戞祴缁撴灉锛氳溅杈嗭紙杞﹁締鍗″彛璁惧鏃堕挓鍑嗙‘鎬с�侊級 + * + * @author gonghl + */ +@Data +public class SnapClockVO extends BaseResult { + + /** + * 璁惧缂栧彿锛宒ataType涓�1鏃惰〃绀哄崱鍙e唴鐮侊紝dataType涓�11鏃惰〃绀洪噰闆嗚澶囧唴鐮� + */ + @TextIndexed + private String externalIndexCode; + + /** + * 璁惧鍚嶇О + */ + @TextIndexed + private String deviceName; + + + /** + * 鍗″彛鍐呯爜鎴栭噰闆嗚澶囧唴鐮� + */ + @TextIndexed + private String indexCode; + + /** + * 缁勭粐缂栧彿 + */ + @TextIndexed + private String orgCode; + + /** + * 缁勭粐鍚嶇О + */ + @TextIndexed + private String orgName; + + /** + * 褰撴棩鎺ユ敹鍒扮殑褰撴棩鎶撴媿閲� + */ + private Integer dataCount; + + /** + * 褰撴棩鎺ユ敹鍒扮殑鐧藉ぉ鎶撴媿閲� + */ + private Integer daySnapCount; + + /** + * 褰撴棩鎺ユ敹鍒扮殑闈炲綋鏃ユ姄鎷嶉噺 + */ + private Integer noTodayCount; + + /** + * 鎸佺画鏃犳暟鎹ぉ鏁� + */ + private Integer continueNoDataCount; + + /** + * 鎶撴媿鏁版嵁閲忕洃娴嬬粨鏋滐紝1:姝e父 2:鏃犳暟鎹� 4:鏁版嵁閲忓皯 + */ + private Integer snapResult; + + /** + * 鎶撴媿鏁版嵁閲忕洃娴嬬粨鏋滐紝1:姝e父 2:鏃犳暟鎹� 4:鏁版嵁閲忓皯 + */ + private String snapResultText; + + // 浠ヤ笅涓哄祵濂楀璞$殑瀛楁 + + /** + * 鏃堕挓鍑嗙‘鐜囷細1 == 100% + */ + private Float clockPercent; + + /** + * 褰撴棩鎺ユ敹鐨勫綋鏃ユ姄鎷嶆暟鎹椂閽熷噯纭暟鎹噺 + */ + private Integer todayClockCount; + + /** + * 褰撴棩鎺ユ敹鐨勫綋鏃ユ姄鎷嶆暟鎹椂閽熷噯纭�у垽瀹氱粨鏋滐細1鏄悎鏍硷紝0鏄笉鍚堟牸 + */ + private Integer todayClockResult; + + /** + * 褰撴棩鎺ユ敹鐨勫綋鏃ユ姄鎷嶆暟鎹椂閽熷噯纭�у垽瀹氱粨鏋滐細1鏄悎鏍硷紝0鏄笉鍚堟牸 + */ + private String todayClockResultText; + + /** + * 褰撴棩鎺ユ敹鐨勫叏閮ㄦ姄鎷嶆暟鎹椂閽熷噯纭暟鎹噺 + */ + private Integer allClockCount; + + /** + * 褰撴棩鎺ユ敹鐨勫叏閮ㄦ姄鎷嶆暟鎹椂閽熷噯纭�у垽瀹氱粨鏋滐細1鏄悎鏍硷紝0鏄笉鍚堟牸 + */ + private Integer allClockResult; + + /** + * 褰撴棩鎺ユ敹鐨勫叏閮ㄦ姄鎷嶆暟鎹椂閽熷噯纭�у垽瀹氱粨鏋滐細1鏄悎鏍硷紝0鏄笉鍚堟牸 + */ + private String allClockResultText; + +} diff --git a/ycl-server/src/main/java/com/ycl/calculate/CarDeviceSampleCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/CarDeviceSampleCalculation.java index 42ca3ce..1595b0b 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/CarDeviceSampleCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/CarDeviceSampleCalculation.java @@ -38,10 +38,10 @@ int accuracySites = 0; //灞炴�ц瘑鍒噯纭殑閲嶇偣鐐逛綅鏁� int importantAccuracySites = 0; - //url鍙闂殑鐐逛綅鏁� - int urlUsabilitySites = 0; //鍥剧墖鍙敤鐨勭偣浣嶆暟 int picUsabilitySites = 0; + //鍥剧墖鎬荤偣浣嶆暟 + int picSites = 0; } @Override @@ -86,25 +86,24 @@ stats.importantAccuracySites++; } } - //澶у浘鍙敤鐜囧ぇ浜�90%瑙嗕负鍚堟牸 - if (bigUseful.getBigUsefulPercent() >= 0.9) { - stats.picUsabilitySites++; - } - //鍥剧墖璁块棶鐜�>=90% 瑙嗕负鍚堟牸 - if (VehicleDeviceSamplingResult.BigUsefulness.calUrl(bigUseful).compareTo(new BigDecimal("0.9")) >= 0) { - stats.urlUsabilitySites++; + //鍙绠楁娊妫�鐨� + if(bigUseful.getSampleCount() !=0){ + stats.picSites++; + //澶у浘鍙敤鐜囧ぇ浜�90%瑙嗕负鍚堟牸, + if (bigUseful.getBigUsefulPercent() >= 0.9) { + stats.picUsabilitySites++; + } } } /** - * 杞﹁締鎶撴媿鏁版嵁鍑嗙‘鎬с�乽rl鍙敤鎬с�佸ぇ鍥惧彲鐢ㄦ�� + * 杞﹁締鎶撴媿鏁版嵁鍑嗙‘鎬с�佸ぇ鍥惧彲鐢ㄦ�� */ private CheckIndexCar createOrUpdateCheckIndexCar(String key, AreaStats stats, List<CheckIndexCar> checkIndexCarList) { CheckIndexCar checkIndexCar = getCheckIndex(key, checkIndexCarList, CheckIndexCar.class); if (checkIndexCar == null) { return null; } - log.info("key:{},杞﹁締鎶撴媿鏁版嵁鍑嗙‘鎬э細totalSites锛歿}锛宨mportantTotalSites:{}锛宎ccuracySites:{}锛宨mportantAccuracySites:{}", key, stats.totalSites, stats.importantTotalSites, stats.accuracySites, stats.importantAccuracySites); //璋冪敤杞﹁締鎶撴媿鏁版嵁鍑嗙‘鎬ц绠楁柟娉� Map<String, Object> accuracyParam = new HashMap<>(); accuracyParam.put("totalSites", stats.totalSites); @@ -113,17 +112,9 @@ accuracyParam.put("importantAccuracySites", stats.importantAccuracySites); BigDecimal dataAccuracy = dataAccuracy(accuracyParam); checkIndexCar.setVehicleCaptureAccuracy(dataAccuracy); - log.info("url鍙敤鎬�: totalSites:{},urlQualifySites:{}", stats.totalSites, stats.urlUsabilitySites); - //璋冪敤url鍙敤鎬ц绠楁柟娉� - Map<String, Object> urlParam = new HashMap<>(); - urlParam.put("totalSites", stats.totalSites); - urlParam.put("urlQualifySites", stats.urlUsabilitySites); - BigDecimal urlUsability = urlUsability(urlParam); - checkIndexCar.setVehicleUrlAvailability(urlUsability); - log.info("澶у浘鍙敤鎬�: totalSites:{},picUsabilitySites:{}", stats.totalSites, stats.picUsabilitySites); //璋冪敤澶у浘鍙敤鎬ц绠楁柟娉� Map<String, Object> usabilityParam = new HashMap<>(); - usabilityParam.put("totalSites", stats.totalSites); + usabilityParam.put("totalSites", stats.picSites); usabilityParam.put("picUsabilitySites", stats.picUsabilitySites); BigDecimal picUsability = picUsability(usabilityParam); checkIndexCar.setVehiclePictureAvailability(picUsability); diff --git a/ycl-server/src/main/java/com/ycl/calculate/CarUrlCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/CarUrlCalculation.java new file mode 100644 index 0000000..73d081f --- /dev/null +++ b/ycl-server/src/main/java/com/ycl/calculate/CarUrlCalculation.java @@ -0,0 +1,93 @@ +package com.ycl.calculate; + +import com.ycl.platform.domain.entity.CheckIndexCar; +import com.ycl.platform.domain.result.HK.PicAccessResult; +import com.ycl.platform.domain.result.HK.VehicleDeviceSamplingResult; +import com.ycl.platform.mapper.CheckIndexCarMapper; +import com.ycl.platform.service.ICheckIndexCarService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import utils.DateUtils; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 璁$畻杞﹁締鎶撴媿鏁版嵁鍑嗙‘鎬с�乽rl鍙敤鎬с�佸ぇ鍥惧彲鐢ㄦ�� + * 杞﹁締鏁版嵁鎶芥鎺ュ彛 + * 鑾峰彇鍒嗙渷鍘呫�佸尯鍩熺殑map<k,v> k涓篸eptId鎴栬�匬rovince_deptId + * 鏇存柊鎴栨柊澧� + */ +@Component +@Slf4j +public class CarUrlCalculation extends IndexCalculationServe<PicAccessResult, CarUrlCalculation.AreaStats> implements CalculationStrategy<PicAccessResult> { + @Autowired + private CheckIndexCarMapper checkIndexCarMapper; + @Autowired + private ICheckIndexCarService checkIndexCarService; + + //鍖哄煙杞﹁締鎶芥鎸囨爣 + protected static class AreaStats { + int totalSites = 0; + //url鍙闂殑鐐逛綅鏁� + int urlUsabilitySites = 0; + } + + @Override + public void calculate(List<PicAccessResult> list) { + //鑾峰彇鍒嗗尯鍩熺殑鎸囨爣鏁伴噺 + Map<String, CarUrlCalculation.AreaStats> areaStatsMap = getAreaStatsMap(list,Boolean.FALSE); + if (areaStatsMap == null) return; + + // 鏌ヨ鏄惁index琛ㄥ凡缁忓瓨鍦ㄤ粖鏃ユ暟鎹� + List<CheckIndexCar> checkIndexCarList = checkIndexCarMapper.selectToday(DateUtils.getDate()); + List<CheckIndexCar> checkIndexCars = new ArrayList<>(); + areaStatsMap.forEach((deptId, stats) -> { + if (stats.totalSites > 0) { + CheckIndexCar checkIndexCar = createOrUpdateCheckIndexCar(deptId, stats, checkIndexCarList); + if (checkIndexCar != null) { + checkIndexCars.add(checkIndexCar); + } + } + }); + + checkIndexCarService.saveOrUpdateBatch(checkIndexCars); + } + + /** + * 绱鎶撴媿鏁版嵁鍑嗙‘璁惧鏁板拰璁惧鎬绘暟锛屽尯鍒嗛噸鐐圭偣浣� + */ + @Override + public void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, PicAccessResult result) { + //杩斿洖瀵硅薄鐨勫紩鐢紝濡傛灉涓嶅瓨鍦ㄤ細鏀惧叆鏂扮殑key,value + AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats()); + stats.totalSites++; + //鍥剧墖璁块棶鐜�>=90% 瑙嗕负鍚堟牸 + if (PicAccessResult.calUrl(result).compareTo(new BigDecimal("0.9")) >= 0) { + stats.urlUsabilitySites++; + } + } + + /** + * 杞﹁締url鍙敤鎬� + */ + private CheckIndexCar createOrUpdateCheckIndexCar(String key, AreaStats stats, List<CheckIndexCar> checkIndexCarList) { + CheckIndexCar checkIndexCar = getCheckIndex(key, checkIndexCarList, CheckIndexCar.class); + if (checkIndexCar == null) { + return null; + } + //璋冪敤url鍙敤鎬ц绠楁柟娉� + Map<String, Object> urlParam = new HashMap<>(); + urlParam.put("totalSites", stats.totalSites); + urlParam.put("urlQualifySites", stats.urlUsabilitySites); + BigDecimal urlUsability = urlUsability(urlParam); + checkIndexCar.setVehicleUrlAvailability(urlUsability); + return checkIndexCar; + } + + +} diff --git a/ycl-server/src/main/java/com/ycl/calculate/FaceDeviceSampleCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/FaceDeviceSampleCalculation.java index 4a6d767..62007de 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/FaceDeviceSampleCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/FaceDeviceSampleCalculation.java @@ -42,6 +42,8 @@ int picQualifySites = 0; //鍥剧墖鍙敤鐨勭偣浣嶆暟 int picUsabilitySites = 0; + //鍥剧墖鎬荤偣浣嶆暟 + int picSites = 0; } @Override @@ -81,8 +83,10 @@ stats.picQualifySites++; } } - //澶у浘鍙敤鐜囧ぇ浜�90%瑙嗕负鍚堟牸 - if (bigUseful != null) { + //鍙绠楁娊妫�鐨� + if(bigUseful.getSampleCount() !=0){ + stats.picSites++; + //澶у浘鍙敤鐜囧ぇ浜�90%瑙嗕负鍚堟牸, if (bigUseful.getBigUsefulPercent() >= 0.9) { stats.picUsabilitySites++; } @@ -105,7 +109,7 @@ checkIndexFace.setFacePictureQualification(dataQualify); //璋冪敤澶у浘鍙敤鎬ц绠楁柟娉� Map<String, Object> usabilityParam = new HashMap<>(); - usabilityParam.put("totalSites", stats.totalSites); + usabilityParam.put("totalSites", stats.picSites); usabilityParam.put("picUsabilitySites", stats.picUsabilitySites); BigDecimal picUsability = picUsability(usabilityParam); checkIndexFace.setFacePictureAvailability(picUsability); diff --git a/ycl-server/src/main/java/com/ycl/factory/IndexCalculationFactory.java b/ycl-server/src/main/java/com/ycl/factory/IndexCalculationFactory.java index 283b32b..42b764a 100644 --- a/ycl-server/src/main/java/com/ycl/factory/IndexCalculationFactory.java +++ b/ycl-server/src/main/java/com/ycl/factory/IndexCalculationFactory.java @@ -27,7 +27,9 @@ //杞﹁締鏁版嵁鎶撴媿瀹屾暣鎬� calculatorClasses.put(CalculationStrategyConstants.Car_DataIntegrity, CarDataIntegrityCalculation.class); //杞﹁締鏁版嵁鎶撴媿鍑嗙‘鎬с�乽rl銆佸ぇ鍥惧彲鐢� - calculatorClasses.put(CalculationStrategyConstants.Car_DataAccuracy_Url_PicUsability, CarDeviceSampleCalculation.class); + calculatorClasses.put(CalculationStrategyConstants.Car_DataAccuracy_PicUsability, CarDeviceSampleCalculation.class); + //杞﹁締url + calculatorClasses.put(CalculationStrategyConstants.Car_Url, CarUrlCalculation.class); //杞﹁締鏃堕挓鍑嗙‘鎬� calculatorClasses.put(CalculationStrategyConstants.Car_ClockAccuracy, CarClockAccuracyCalculation.class); //杞﹁締鐩綍涓�鑷� 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 0c7bf7f..8da0676 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 @@ -13,7 +13,9 @@ 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.DataCenter.BigPicUsefulVO; import com.ycl.platform.domain.vo.DataCenter.MonitorQualifyResultVO; +import com.ycl.platform.domain.vo.DataCenter.SnapClockVO; import com.ycl.platform.domain.vo.PointDetailVO; import com.ycl.platform.domain.vo.home.HomeFaceVO; import com.ycl.platform.mapper.ImageResourceSecurityDetailMapper; @@ -1566,8 +1568,12 @@ if(params.getOption() ==1){ query.addCriteria(Criteria.where("lalType").is(ApiConstants.HK_Info_LayType_Normal)); query.addCriteria(Criteria.where("gbCodeType").is(ApiConstants.HK_Info_GbCodeType_Normal)); - }else if(params.getOption() !=-1){ - + }else if(params.getOption() ==-1){ + Criteria lalType = Criteria.where("lalType").ne(ApiConstants.HK_Info_LayType_Normal); + Criteria gbCodeType = Criteria.where("gbCodeType").ne(ApiConstants.HK_Info_GbCodeType_Normal); + Criteria orOperator = new Criteria().orOperator(lalType, gbCodeType); + orOperator.andOperator(andCriteria); + query = Query.query(orOperator); } } @@ -1588,8 +1594,8 @@ List<Document> dList3 = new ArrayList<>(2); setTag(params, dList3); List<Document> errorConditions = new ArrayList<>(); - errorConditions.add(new Document("lalType",new Document("$eq",-1))); - errorConditions.add(new Document("gbCodeType",new Document("$eq",-1))); + errorConditions.add(new Document("lalType",new Document("$ne",1))); + errorConditions.add(new Document("gbCodeType",new Document("$ne",1))); Document errorDoc = new Document("$or",errorConditions); dList3.add(errorDoc); Document totalFilter = new Document("$and", dList1); @@ -1644,7 +1650,15 @@ public Result vehicleCollectionDataIntegrity(DataCenterQuery params) { List<String> likeFileds = Arrays.asList("externalIndexCode", "deviceName"); Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null); - + if(params.getOption()!=null){ + //涓昏灞炴�т笉瀹屾暣 + if(params.getOption()==1){ + query.addCriteria(Criteria.where("noIntegrityCount").gt(0)); + }else if(params.getOption()==-1){ + //灞炴�т笉瀹屾暣 + query.addCriteria(Criteria.where("mainNoIntegrityCount").gt(0)); + } + } long total = mongoTemplate.count(query, DataIntegrityMonitoringResult.class); MongoUtil.setPage(query, params, TIME_FIELD); List<DataIntegrityMonitoringResult> resultList = mongoTemplate.find(query, DataIntegrityMonitoringResult.class); @@ -1653,11 +1667,33 @@ MongoDatabase database = mongoTemplate.getDb(); MongoCollection<Document> collection = database.getCollection("hk_data_integrity_monitoring"); - Date now = new Date(); + //鎶撴媿閲忔眰鍜� + // 鏋勫缓鍩烘湰鐨�$match鏉′欢 + List<Document> matchConditions = new ArrayList<>(); + setTag(params, matchConditions); + List<Document> pipeline = Arrays.asList( + new Document("$match", new Document("$and", matchConditions)), + new Document("$group", new Document("_id", "$mongoCreateTime") + .append("dataCount", new Document("$sum", "$dataCount")) + .append("noIntegrityCount", new Document("$sum", "$noIntegrityCount")) + .append("mainNoIntegrityCount", new Document("$sum", "$mainNoIntegrityCount")) + )); + // 鎵ц鑱氬悎鏌ヨ骞惰幏鍙栫粨鏋� + AggregateIterable<Document> result = collection.aggregate(pipeline); + int dataCount = 0; + int noIntegrityCount = 0; + int mainNoIntegrityCount = 0; + for (Document doc : result) { + dataCount = doc.getInteger("dataCount"); + noIntegrityCount = doc.getInteger("noIntegrityCount"); + mainNoIntegrityCount = doc.getInteger("mainNoIntegrityCount"); + } + List<CheckIndexCar> videoList = new LambdaQueryChainWrapper<>(checkIndexCarService.getBaseMapper()) .select(CheckIndexCar::getVehicleCaptureIntegrity) .eq(params.getDataType().equals(1), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Province) - .between(CheckIndexCar::getCreateTime, DateUtils.getDayStart(now), DateUtils.getDayEnd(now)) + .eq(params.getDataType().equals(2), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Dept) + .between(CheckIndexCar::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime())) .list(); BigDecimal onlineRate = BigDecimal.ZERO; if (CollectionUtils.isNotEmpty(videoList)) { @@ -1665,9 +1701,13 @@ BigDecimal count = BigDecimal.valueOf(videoList.size()); onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); } - + List<String> countList = new ArrayList<>(); + countList.add(dataCount+""); + countList.add(noIntegrityCount+""); + countList.add(mainNoIntegrityCount+""); + countList.add(this.remove0(onlineRate)); HashMap<String, Object> map = new HashMap<>(); - map.put("count", Arrays.asList(this.remove0(onlineRate))); + map.put("count", countList); map.put("list", resultList); return Result.ok().data(map).total(total); } @@ -1682,16 +1722,49 @@ public Result vehicleCollectionDataCaptured(DataCenterQuery params) { List<String> likeFileds = Arrays.asList("externalIndexCode", "deviceName"); Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null); - + if(params.getOption()!=null){ + //涓昏灞炴�т笉涓�鑷� + if(params.getOption()==1){ + query.addCriteria(Criteria.where("majorDiffCount").gt(0)); + }else if(params.getOption()==-1){ + //閲嶈灞炴�т笉涓�鑷� + query.addCriteria(Criteria.where("importantDiffCount").gt(0)); + } + } long total = mongoTemplate.count(query, AttrRecognitionMonitorResult.class); MongoUtil.setPage(query, params, TIME_FIELD); List<AttrRecognitionMonitorResult> resultList = mongoTemplate.find(query, AttrRecognitionMonitorResult.class); - Date now = new Date(); + // 缁熻鏁伴噺 + MongoDatabase database = mongoTemplate.getDb(); + MongoCollection<Document> collection = database.getCollection("hk_attr_recognition_monitor"); + + // 鏋勫缓鍩烘湰鐨�$match鏉′欢 + List<Document> matchConditions = new ArrayList<>(); + setTag(params, matchConditions); + List<Document> pipeline = Arrays.asList( + new Document("$match", new Document("$and", matchConditions)), + new Document("$group", new Document("_id", "$mongoCreateTime") + .append("sampleCount", new Document("$sum", "$sampleCount")) + .append("majorDiffCount", new Document("$sum", "$majorDiffCount")) + .append("importantDiffCount", new Document("$sum", "$importantDiffCount")) + )); + // 鎵ц鑱氬悎鏌ヨ骞惰幏鍙栫粨鏋� + AggregateIterable<Document> result = collection.aggregate(pipeline); + int sampleCount = 0; + int majorDiffCount = 0; + int importantDiffCount = 0; + for (Document doc : result) { + sampleCount = doc.getInteger("sampleCount"); + majorDiffCount = doc.getInteger("majorDiffCount"); + importantDiffCount = doc.getInteger("importantDiffCount"); + } + List<CheckIndexCar> videoList = new LambdaQueryChainWrapper<>(checkIndexCarService.getBaseMapper()) .select(CheckIndexCar::getVehicleCaptureAccuracy) .eq(params.getDataType().equals(1), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Province) - .between(CheckIndexCar::getCreateTime, DateUtils.getDayStart(now), DateUtils.getDayEnd(now)) + .eq(params.getDataType().equals(2), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Dept) + .between(CheckIndexCar::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime())) .list(); BigDecimal onlineRate = BigDecimal.ZERO; if (CollectionUtils.isNotEmpty(videoList)) { @@ -1699,8 +1772,14 @@ BigDecimal count = BigDecimal.valueOf(videoList.size()); onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); } + + List<String> countList = new ArrayList<>(); + countList.add(sampleCount+""); + countList.add(majorDiffCount+""); + countList.add(importantDiffCount+""); + countList.add(this.remove0(onlineRate)); HashMap<String, Object> map = new HashMap<>(); - map.put("count", Arrays.asList(this.remove0(onlineRate))); + map.put("count", countList); map.put("list", resultList); return Result.ok().data(map).total(total); } @@ -1715,30 +1794,46 @@ public Result vehicleClockAccuracy(DataCenterQuery params) { List<String> likeFileds = Arrays.asList("externalIndexCode", "deviceName"); Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null); - + if(params.getOption()!=null){ + //褰撴棩鏃堕挓寮傚父 + if(params.getOption()==1){ + query.addCriteria(Criteria.where("majorDiffCount").gt(0)); + }else if(params.getOption()==-1){ + //鍏ㄩ儴鏃堕挓寮傚父 + query.addCriteria(Criteria.where("importantDiffCount").gt(0)); + } + } long total = mongoTemplate.count(query, VehicleDeviceInspectionResult.class); MongoUtil.setPage(query, params, TIME_FIELD); List<VehicleDeviceInspectionResult> resultList = mongoTemplate.find(query, VehicleDeviceInspectionResult.class); - + List<SnapClockVO> resultVos = new ArrayList<>(); + resultList.forEach(item->{ + SnapClockVO vo = VehicleDeviceInspectionResult.getVO(item); + resultVos.add(vo); + }); // 缁熻鏁伴噺 MongoDatabase database = mongoTemplate.getDb(); MongoCollection<Document> collection = database.getCollection("hk_vehicle_device_inspection"); List<Document> dList1 = new ArrayList<>(2); - dList1.add(new Document("snapResult", new Document("$eq", 1))); + dList1.add(new Document("snapClock.todayClockResult", new Document("$eq", 1))); setTag(params, dList1); List<Document> dList2 = new ArrayList<>(2); - dList2.add(new Document("snapResult", new Document("$eq", 2))); + dList2.add(new Document("snapClock.todayClockResult", new Document("$eq", 0))); setTag(params, dList2); List<Document> dList3 = new ArrayList<>(2); - dList3.add(new Document("snapResult", new Document("$eq", 4))); + dList3.add(new Document("snapClock.allClockResult", new Document("$eq", 1))); setTag(params, dList3); - Document ipErrFilter = new Document("$and", dList1); - Document macdzErrFilter = new Document("$and", dList2); - Document longitudeErrFilter = new Document("$and", dList3); + List<Document> dList4 = new ArrayList<>(2); + dList4.add(new Document("snapClock.allClockResult", new Document("$eq", 0))); + setTag(params, dList4); + Document todayFilter = new Document("$and", dList1); + Document todayErrFilter = new Document("$and", dList2); + Document allFilter = new Document("$and", dList3); + Document allErrFilter = new Document("$and", dList4); - List<Document> lists = Arrays.asList(ipErrFilter, macdzErrFilter, longitudeErrFilter); + List<Document> lists = Arrays.asList(todayFilter, todayErrFilter, allFilter,allErrFilter); List<String> rList = lists.stream().map(filter -> { // 鏋勫缓鑱氬悎绠¢亾 List<Document> pipeline = Arrays.asList( @@ -1757,11 +1852,11 @@ return uniqueDeviceIdCount + ""; }).collect(Collectors.toList()); - Date now = new Date(); List<CheckIndexCar> videoList = new LambdaQueryChainWrapper<>(checkIndexCarService.getBaseMapper()) .select(CheckIndexCar::getVehicleTimingAccuracy) .eq(params.getDataType().equals(1), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Province) - .between(CheckIndexCar::getCreateTime, DateUtils.getDayStart(now), DateUtils.getDayEnd(now)) + .eq(params.getDataType().equals(2), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Dept) + .between(CheckIndexCar::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime())) .list(); BigDecimal onlineRate = BigDecimal.ZERO; if (CollectionUtils.isNotEmpty(videoList)) { @@ -1772,7 +1867,7 @@ rList.add(this.remove0(onlineRate)); HashMap<String, Object> map = new HashMap<>(); map.put("count", rList); - map.put("list", resultList); + map.put("list", resultVos); return Result.ok().data(map).total(total); } @@ -1786,17 +1881,58 @@ public Result vehicleTimelyUploadAccuracy(DataCenterQuery params) { List<String> likeFileds = Arrays.asList("externalIndexCode", "deviceName"); Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null); - + query.addCriteria(Criteria.where("dataType").is(ApiConstants.HK_DataType_CAR)); + if(params.getOption()!=null){ + //姝e父 + if(params.getOption()==1){ + query.addCriteria(Criteria.where("delayCount").is(0)); + }else if(params.getOption()==-1){ + //寤惰繜 + query.addCriteria(Criteria.where("delayCount").gt(0)); + } + } long total = mongoTemplate.count(query, SnapshotDelayMonitorResult.class); MongoUtil.setPage(query, params, TIME_FIELD); List<SnapshotDelayMonitorResult> resultList = mongoTemplate.find(query, SnapshotDelayMonitorResult.class); - // 缁熻鏁� - Date now = new Date(); + MongoDatabase database = mongoTemplate.getDb(); + MongoCollection<Document> collection = database.getCollection("hk_snapshop_delay_monitor"); + + List<Document> dList1 = new ArrayList<>(2); + setTag(params, dList1); + dList1.add(new Document("dataType" ,new Document("$eq",ApiConstants.HK_DataType_CAR))); + Document allFilter = new Document("$and", dList1); + List<Document> dList2 = new ArrayList<>(2); + dList2.add(new Document("dataType" ,new Document("$eq",ApiConstants.HK_DataType_CAR))); + dList2.add(new Document("delayCount", new Document("$gt", 0))); + setTag(params, dList2); + Document delayFilter = new Document("$and", dList2); + + List<Document> lists = Arrays.asList(allFilter,delayFilter); + 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 鍙細浜х敓涓�涓粨鏋� + } + return uniqueDeviceIdCount + ""; + }).collect(Collectors.toList()); + + List<CheckIndexCar> videoList = new LambdaQueryChainWrapper<>(checkIndexCarService.getBaseMapper()) .select(CheckIndexCar::getVehicleUploadTimeliness) .eq(params.getDataType().equals(1), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Province) - .between(CheckIndexCar::getCreateTime, DateUtils.getDayStart(now), DateUtils.getDayEnd(now)) + .eq(params.getDataType().equals(2), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Dept) + .between(CheckIndexCar::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime())) .list(); BigDecimal onlineRate = BigDecimal.ZERO; if (CollectionUtils.isNotEmpty(videoList)) { @@ -1804,8 +1940,9 @@ BigDecimal count = BigDecimal.valueOf(videoList.size()); onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); } + rList.add(this.remove0(onlineRate)); HashMap<String, Object> map = new HashMap<>(); - map.put("count", Arrays.asList(this.remove0(onlineRate))); + map.put("count", rList); map.put("list", resultList); return Result.ok().data(map).total(total); } @@ -1820,17 +1957,44 @@ public Result vehicleUrlAccuracy(DataCenterQuery params) { List<String> likeFileds = Arrays.asList("externalIndexCode", "deviceName"); Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null); - + if(params.getOption()!=null){ + if(params.getOption()==1){ + query.addCriteria(Criteria.where("expCount").is(0)); + }else if(params.getOption()==-1){ + query.addCriteria(Criteria.where("expCount").gt(0)); + } + } long total = mongoTemplate.count(query, PicAccessResult.class); MongoUtil.setPage(query, params, TIME_FIELD); + query.with(Sort.by(Sort.Order.desc("expCount"))); List<PicAccessResult> resultList = mongoTemplate.find(query, PicAccessResult.class); // 缁熻鏁� - Date now = new Date(); + MongoDatabase database = mongoTemplate.getDb(); + MongoCollection<Document> collection = database.getCollection("hk_pic_access"); + // 鏋勫缓鍩烘湰鐨�$match鏉′欢 + List<Document> matchConditions = new ArrayList<>(); + setTag(params, matchConditions); + List<Document> pipeline = Arrays.asList( + new Document("$match", new Document("$and", matchConditions)), + new Document("$group", new Document("_id", "$mongoCreateTime") + .append("sampleCount", new Document("$sum", "$sampleCount")) + .append("expCount", new Document("$sum", "$expCount")) + )); + // 鎵ц鑱氬悎鏌ヨ骞惰幏鍙栫粨鏋� + AggregateIterable<Document> result = collection.aggregate(pipeline); + int sampleCount = 0; + int expCount = 0; + for (Document doc : result) { + sampleCount = doc.getInteger("sampleCount"); + expCount = doc.getInteger("expCount"); + } + List<CheckIndexCar> videoList = new LambdaQueryChainWrapper<>(checkIndexCarService.getBaseMapper()) .select(CheckIndexCar::getVehicleUrlAvailability) .eq(params.getDataType().equals(1), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Province) - .between(CheckIndexCar::getCreateTime, DateUtils.getDayStart(now), DateUtils.getDayEnd(now)) + .eq(params.getDataType().equals(2), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Dept) + .between(CheckIndexCar::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime())) .list(); BigDecimal onlineRate = BigDecimal.ZERO; if (CollectionUtils.isNotEmpty(videoList)) { @@ -1838,8 +2002,13 @@ BigDecimal count = BigDecimal.valueOf(videoList.size()); onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); } + List<String> rList = new ArrayList<>(); + rList.add(sampleCount+""); + rList.add(expCount+""); + rList.add(this.remove0(onlineRate)); + HashMap<String, Object> map = new HashMap<>(); - map.put("count", Arrays.asList(this.remove0(onlineRate))); + map.put("count", rList); map.put("list", resultList); return Result.ok().data(map).total(total); } @@ -1854,17 +2023,48 @@ public Result vehicleBigImgAccuracy(DataCenterQuery params) { List<String> likeFileds = Arrays.asList("externalIndexCode", "deviceName"); Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null); - + if(params.getOption()!=null){ + if(params.getOption()==1){ + query.addCriteria(Criteria.where("bigUseful.bigPicExpCount").is(0)); + }else if(params.getOption()==-1){ + query.addCriteria(Criteria.where("bigUseful.bigPicExpCount").gt(0)); + } + } long total = mongoTemplate.count(query, VehicleDeviceSamplingResult.class); MongoUtil.setPage(query, params, TIME_FIELD); + query.with(Sort.by(Sort.Order.desc("bigUseful.bigPicExpCount"))); List<VehicleDeviceSamplingResult> resultList = mongoTemplate.find(query, VehicleDeviceSamplingResult.class); - + List<BigPicUsefulVO> voList = new ArrayList<>(); + resultList.forEach(item->{ + BigPicUsefulVO picVO = VehicleDeviceSamplingResult.getPicVO(item); + voList.add(picVO); + }); // 缁熻鏁� - Date now = new Date(); + MongoDatabase database = mongoTemplate.getDb(); + MongoCollection<Document> collection = database.getCollection("hk_vehicle_device_sampling"); + // 鏋勫缓鍩烘湰鐨�$match鏉′欢 + List<Document> matchConditions = new ArrayList<>(); + setTag(params, matchConditions); + List<Document> pipeline = Arrays.asList( + new Document("$match", new Document("$and", matchConditions)), + new Document("$group", new Document("_id", "$mongoCreateTime") + .append("sampleCount", new Document("$sum", "$bigUseful.sampleCount")) + .append("expCount", new Document("$sum", "$bigUseful.bigPicExpCount")) + )); + // 鎵ц鑱氬悎鏌ヨ骞惰幏鍙栫粨鏋� + AggregateIterable<Document> result = collection.aggregate(pipeline); + int sampleCount = 0; + int expCount = 0; + for (Document doc : result) { + sampleCount = doc.getInteger("sampleCount"); + expCount = doc.getInteger("expCount"); + } + List<String> countList = new ArrayList<>(); List<CheckIndexCar> videoList = new LambdaQueryChainWrapper<>(checkIndexCarService.getBaseMapper()) .select(CheckIndexCar::getVehiclePictureAvailability) .eq(params.getDataType().equals(1), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Province) - .between(CheckIndexCar::getCreateTime, DateUtils.getDayStart(now), DateUtils.getDayEnd(now)) + .eq(params.getDataType().equals(2), CheckIndexCar::getExamineTag, CheckConstants.Examine_Tag_Dept) + .between(CheckIndexCar::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime())) .list(); BigDecimal onlineRate = BigDecimal.ZERO; if (CollectionUtils.isNotEmpty(videoList)) { @@ -1872,9 +2072,12 @@ BigDecimal count = BigDecimal.valueOf(videoList.size()); onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); } + countList.add(sampleCount+""); + countList.add(expCount+""); + countList.add(this.remove0(onlineRate)); HashMap<String, Object> map = new HashMap<>(); - map.put("count", Arrays.asList(this.remove0(onlineRate))); - map.put("list", resultList); + map.put("count", countList); + map.put("list", voList); return Result.ok().data(map).total(total); } @@ -1938,6 +2141,7 @@ } return uniqueDeviceIdCount + ""; }).collect(Collectors.toList()); + //鎶撴媿閲忔眰鍜� // 鏋勫缓鍩烘湰鐨�$match鏉′欢 List<Document> matchConditions = new ArrayList<>(); setTag(params, matchConditions); @@ -2162,33 +2366,50 @@ @Override public Result faceCollectionConsistency(DataCenterQuery params) { List<String> likeFileds = Arrays.asList("externalIndexCode", "crossName"); - Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null); + List<Criteria> andCriteria = MongoUtil.getAndCriteria(params, TIME_FIELD, likeFileds, null); + Query query = new Query(); + Criteria and = new Criteria(); + and.andOperator(andCriteria); + query = Query.query(and); + if(params.getOption()!=null){ + if(params.getOption() ==1){ + query.addCriteria(Criteria.where("lalType").is(ApiConstants.HK_Info_LayType_Normal)); + query.addCriteria(Criteria.where("gbCodeType").is(ApiConstants.HK_Info_GbCodeType_Normal)); + }else if(params.getOption() ==-1){ + Criteria lalType = Criteria.where("lalType").ne(ApiConstants.HK_Info_LayType_Normal); + Criteria gbCodeType = Criteria.where("gbCodeType").ne(ApiConstants.HK_Info_GbCodeType_Normal); + Criteria orOperator = new Criteria().orOperator(lalType, gbCodeType); + orOperator.andOperator(andCriteria); + query = Query.query(orOperator); + } + } - long total = mongoTemplate.count(query, CrossDetailResult.class); + long total = mongoTemplate.count(query, MonitoringDetailResult.class); MongoUtil.setPage(query, params, TIME_FIELD); - List<CrossDetailResult> resultList = mongoTemplate.find(query, CrossDetailResult.class); + List<MonitoringDetailResult> resultList = mongoTemplate.find(query, MonitoringDetailResult.class); // 缁熻鏁伴噺 MongoDatabase database = mongoTemplate.getDb(); - MongoCollection<Document> collection = database.getCollection("hk_cross_detail"); + MongoCollection<Document> collection = database.getCollection("hk_monitoring_detail"); List<Document> dList1 = new ArrayList<>(2); - dList1.add(new Document("lalType", new Document("$eq", 1))); setTag(params, dList1); List<Document> dList2 = new ArrayList<>(2); - dList2.add(new Document("lalType", new Document("$eq", 2))); + dList2.add(new Document("lalType", new Document("$eq", 1))); + dList2.add(new Document("gbCodeType", new Document("$eq", 1))); setTag(params, dList2); List<Document> dList3 = new ArrayList<>(2); - dList3.add(new Document("lalType", new Document("$eq", 3))); setTag(params, dList3); - List<Document> dList4 = new ArrayList<>(2); - dList4.add(new Document("lalType", new Document("$eq", 4))); - setTag(params, dList4); - Document ipErrFilter = new Document("$and", dList1); - Document macdzErrFilter = new Document("$and", dList2); - Document latitudeErrFilter = new Document("$and", dList3); - Document longitudeErrFilter = new Document("$and", dList4); - List<Document> lists = Arrays.asList(ipErrFilter, macdzErrFilter, latitudeErrFilter, longitudeErrFilter); + List<Document> errorConditions = new ArrayList<>(); + errorConditions.add(new Document("lalType",new Document("$ne",1))); + errorConditions.add(new Document("gbCodeType",new Document("$ne",1))); + Document errorDoc = new Document("$or",errorConditions); + dList3.add(errorDoc); + Document totalFilter = new Document("$and", dList1); + Document correctFilter = new Document("$and", dList2); + Document errorFilter = new Document("$and", dList3); + + List<Document> lists = Arrays.asList(totalFilter, correctFilter, errorFilter); List<String> rList = lists.stream().map(filter -> { // 鏋勫缓鑱氬悎绠¢亾 List<Document> pipeline = Arrays.asList( @@ -2207,11 +2428,11 @@ return uniqueDeviceIdCount + ""; }).collect(Collectors.toList()); - Date now = new Date(); List<CheckIndexFace> videoList = new LambdaQueryChainWrapper<>(checkIndexFaceService.getBaseMapper()) .select(CheckIndexFace::getFaceInformationCollectionAccuracy) .eq(params.getDataType().equals(1), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Province) - .between(CheckIndexFace::getCreateTime, DateUtils.getDayStart(now), DateUtils.getDayEnd(now)) + .eq(params.getDataType().equals(2), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Dept) + .between(CheckIndexFace::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime())) .list(); BigDecimal onlineRate = BigDecimal.ZERO; if (CollectionUtils.isNotEmpty(videoList)) { @@ -2236,56 +2457,50 @@ public Result faceImgQualification(DataCenterQuery params) { List<String> likeFileds = Arrays.asList("externalIndexCode", "cameraName"); Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null); - - long total = mongoTemplate.count(query, MonitoringDetailResult.class); + if(params.getOption()!=null){ + if(params.getOption()==1){ + query.addCriteria(Criteria.where("faceEligibility.unfaceEligCount").is(0)); + }else if(params.getOption()==-1){ + query.addCriteria(Criteria.where("faceEligibility.unfaceEligCount").gt(0)); + } + } + long total = mongoTemplate.count(query, FaceDeviceSamplingResult.class); + query.with(Sort.by(Sort.Order.desc("faceEligibility.unfaceEligCount"))); MongoUtil.setPage(query, params, TIME_FIELD); - List<MonitoringDetailResult> resultList = mongoTemplate.find(query, MonitoringDetailResult.class); + List<FaceDeviceSamplingResult> resultList = mongoTemplate.find(query, FaceDeviceSamplingResult.class); + List<BigPicUsefulVO> voList = new ArrayList<>(); + resultList.forEach(item->{ + BigPicUsefulVO picVO = FaceDeviceSamplingResult.getEligeVO(item); + voList.add(picVO); + }); // 缁熻鏁伴噺 MongoDatabase database = mongoTemplate.getDb(); - MongoCollection<Document> collection = database.getCollection("hk_monitoring_detail"); + MongoCollection<Document> collection = database.getCollection("hk_face_device_sampling"); + // 鏋勫缓鍩烘湰鐨�$match鏉′欢 + List<Document> matchConditions = new ArrayList<>(); + setTag(params, matchConditions); + List<Document> pipeline = Arrays.asList( + new Document("$match", new Document("$and", matchConditions)), + new Document("$group", new Document("_id", "$mongoCreateTime") + .append("sampleCount", new Document("$sum", "$faceEligibility.sampleCount")) + .append("expCount", new Document("$sum", "$faceEligibility.unfaceEligCount")) + )); + // 鎵ц鑱氬悎鏌ヨ骞惰幏鍙栫粨鏋� + AggregateIterable<Document> result = collection.aggregate(pipeline); + int sampleCount = 0; + int expCount = 0; + for (Document doc : result) { + sampleCount = doc.getInteger("sampleCount"); + expCount = doc.getInteger("expCount"); + } + List<String> countList = new ArrayList<>(); - List<Document> dList1 = new ArrayList<>(2); - dList1.add(new Document("lalType", new Document("$eq", 1))); - setTag(params, dList1); - List<Document> dList2 = new ArrayList<>(2); - dList2.add(new Document("lalType", new Document("$eq", 2))); - setTag(params, dList2); - List<Document> dList3 = new ArrayList<>(2); - dList3.add(new Document("lalType", new Document("$eq", 3))); - setTag(params, dList3); - List<Document> dList4 = new ArrayList<>(2); - dList4.add(new Document("lalType", new Document("$eq", 4))); - setTag(params, dList4); - Document ipErrFilter = new Document("$and", dList1); - Document macdzErrFilter = new Document("$and", dList2); - Document latitudeErrFilter = new Document("$and", dList3); - Document longitudeErrFilter = new Document("$and", dList4); - - List<Document> lists = Arrays.asList(ipErrFilter, macdzErrFilter, latitudeErrFilter, longitudeErrFilter); - 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 鍙細浜х敓涓�涓粨鏋� - } - return uniqueDeviceIdCount + ""; - }).collect(Collectors.toList()); - - Date now = new Date(); List<CheckIndexFace> videoList = new LambdaQueryChainWrapper<>(checkIndexFaceService.getBaseMapper()) .select(CheckIndexFace::getFacePictureQualification) .eq(params.getDataType().equals(1), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Province) - .between(CheckIndexFace::getCreateTime, DateUtils.getDayStart(now), DateUtils.getDayEnd(now)) + .eq(params.getDataType().equals(2), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Dept) + .between(CheckIndexFace::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime())) .list(); BigDecimal onlineRate = BigDecimal.ZERO; if (CollectionUtils.isNotEmpty(videoList)) { @@ -2293,10 +2508,12 @@ BigDecimal count = BigDecimal.valueOf(videoList.size()); onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); } - rList.add(this.remove0(onlineRate)); + countList.add(sampleCount+""); + countList.add(expCount+""); + countList.add(this.remove0(onlineRate)); HashMap<String, Object> map = new HashMap<>(); - map.put("count", rList); - map.put("list", resultList); + map.put("count", countList); + map.put("list", voList); return Result.ok().data(map).total(total); } @@ -2310,29 +2527,47 @@ public Result faceCapturesImagesAccuracy(DataCenterQuery params) { List<String> likeFileds = Arrays.asList("externalIndexCode", "deviceName"); Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null); - + if(params.getOption()!=null){ + //褰撴棩鏃堕挓寮傚父 + if(params.getOption()==1){ + query.addCriteria(Criteria.where("majorDiffCount").gt(0)); + }else if(params.getOption()==-1){ + //鍏ㄩ儴鏃堕挓寮傚父 + query.addCriteria(Criteria.where("importantDiffCount").gt(0)); + } + } long total = mongoTemplate.count(query, FaceDeviceInspectionResult.class); MongoUtil.setPage(query, params, TIME_FIELD); List<FaceDeviceInspectionResult> resultList = mongoTemplate.find(query, FaceDeviceInspectionResult.class); + List<SnapClockVO> resultVos = new ArrayList<>(); + resultList.forEach(item->{ + SnapClockVO vo = FaceDeviceInspectionResult.getVO(item); + resultVos.add(vo); + }); // 缁熻鏁伴噺 MongoDatabase database = mongoTemplate.getDb(); - MongoCollection<Document> collection = database.getCollection("hk_vehicle_device_inspection"); + MongoCollection<Document> collection = database.getCollection("hk_face_device_inspection"); List<Document> dList1 = new ArrayList<>(2); - dList1.add(new Document("snapResult", new Document("$eq", 1))); + dList1.add(new Document("snapClock.todayClockResult", new Document("$eq", 1))); setTag(params, dList1); List<Document> dList2 = new ArrayList<>(2); - dList2.add(new Document("snapResult", new Document("$eq", 2))); + dList2.add(new Document("snapClock.todayClockResult", new Document("$eq", 0))); setTag(params, dList2); List<Document> dList3 = new ArrayList<>(2); - dList3.add(new Document("snapResult", new Document("$eq", 4))); + dList3.add(new Document("snapClock.allClockResult", new Document("$eq", 1))); setTag(params, dList3); - Document ipErrFilter = new Document("$and", dList1); - Document macdzErrFilter = new Document("$and", dList2); - Document longitudeErrFilter = new Document("$and", dList3); + List<Document> dList4 = new ArrayList<>(2); + dList4.add(new Document("snapClock.allClockResult", new Document("$eq", 0))); + setTag(params, dList4); + Document todayFilter = new Document("$and", dList1); + Document todayErrFilter = new Document("$and", dList2); + Document allFilter = new Document("$and", dList3); + Document allErrFilter = new Document("$and", dList4); - List<Document> lists = Arrays.asList(ipErrFilter, macdzErrFilter, longitudeErrFilter); + + List<Document> lists = Arrays.asList(todayFilter, todayErrFilter, allFilter,allErrFilter); List<String> rList = lists.stream().map(filter -> { // 鏋勫缓鑱氬悎绠¢亾 List<Document> pipeline = Arrays.asList( @@ -2351,11 +2586,11 @@ return uniqueDeviceIdCount + ""; }).collect(Collectors.toList()); - Date now = new Date(); List<CheckIndexFace> videoList = new LambdaQueryChainWrapper<>(checkIndexFaceService.getBaseMapper()) .select(CheckIndexFace::getFaceTimingAccuracy) .eq(params.getDataType().equals(1), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Province) - .between(CheckIndexFace::getCreateTime, DateUtils.getDayStart(now), DateUtils.getDayEnd(now)) + .eq(params.getDataType().equals(2), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Dept) + .between(CheckIndexFace::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime())) .list(); BigDecimal onlineRate = BigDecimal.ZERO; if (CollectionUtils.isNotEmpty(videoList)) { @@ -2366,7 +2601,7 @@ rList.add(this.remove0(onlineRate)); HashMap<String, Object> map = new HashMap<>(); map.put("count", rList); - map.put("list", resultList); + map.put("list", resultVos); return Result.ok().data(map).total(total); } @@ -2380,29 +2615,34 @@ public Result faceTimelyUpload(DataCenterQuery params) { List<String> likeFileds = Arrays.asList("externalIndexCode", "deviceName"); Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null); - - long total = mongoTemplate.count(query, FaceDeviceInspectionResult.class); + query.addCriteria(Criteria.where("dataType").is(ApiConstants.HK_DataType_FACE)); + if(params.getOption()!=null){ + //姝e父 + if(params.getOption()==1){ + query.addCriteria(Criteria.where("delayCount").is(0)); + }else if(params.getOption()==-1){ + //寤惰繜 + query.addCriteria(Criteria.where("delayCount").gt(0)); + } + } + long total = mongoTemplate.count(query, SnapshotDelayMonitorResult.class); MongoUtil.setPage(query, params, TIME_FIELD); - List<FaceDeviceInspectionResult> resultList = mongoTemplate.find(query, FaceDeviceInspectionResult.class); - - // 缁熻鏁伴噺 + List<SnapshotDelayMonitorResult> resultList = mongoTemplate.find(query, SnapshotDelayMonitorResult.class); + // 缁熻鏁� MongoDatabase database = mongoTemplate.getDb(); - MongoCollection<Document> collection = database.getCollection("hk_vehicle_device_inspection"); + MongoCollection<Document> collection = database.getCollection("hk_snapshop_delay_monitor"); List<Document> dList1 = new ArrayList<>(2); - dList1.add(new Document("snapResult", new Document("$eq", 1))); setTag(params, dList1); + dList1.add(new Document("dataType" ,new Document("$eq",ApiConstants.HK_DataType_FACE))); + Document allFilter = new Document("$and", dList1); List<Document> dList2 = new ArrayList<>(2); - dList2.add(new Document("snapResult", new Document("$eq", 2))); + dList2.add(new Document("dataType" ,new Document("$eq",ApiConstants.HK_DataType_FACE))); + dList2.add(new Document("delayCount", new Document("$gt", 0))); setTag(params, dList2); - List<Document> dList3 = new ArrayList<>(2); - dList3.add(new Document("snapResult", new Document("$eq", 4))); - setTag(params, dList3); - Document ipErrFilter = new Document("$and", dList1); - Document macdzErrFilter = new Document("$and", dList2); - Document longitudeErrFilter = new Document("$and", dList3); + Document delayFilter = new Document("$and", dList2); - List<Document> lists = Arrays.asList(ipErrFilter, macdzErrFilter, longitudeErrFilter); + List<Document> lists = Arrays.asList(allFilter,delayFilter); List<String> rList = lists.stream().map(filter -> { // 鏋勫缓鑱氬悎绠¢亾 List<Document> pipeline = Arrays.asList( @@ -2421,11 +2661,12 @@ return uniqueDeviceIdCount + ""; }).collect(Collectors.toList()); - Date now = new Date(); + List<CheckIndexFace> videoList = new LambdaQueryChainWrapper<>(checkIndexFaceService.getBaseMapper()) .select(CheckIndexFace::getFaceUploadTimeliness) .eq(params.getDataType().equals(1), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Province) - .between(CheckIndexFace::getCreateTime, DateUtils.getDayStart(now), DateUtils.getDayEnd(now)) + .eq(params.getDataType().equals(2), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Dept) + .between(CheckIndexFace::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime())) .list(); BigDecimal onlineRate = BigDecimal.ZERO; if (CollectionUtils.isNotEmpty(videoList)) { @@ -2450,17 +2691,50 @@ public Result faceAvailabilityOfLargeImg(DataCenterQuery params) { List<String> likeFileds = Arrays.asList("externalIndexCode", "deviceName"); Query query = MongoUtil.getQuery(params, TIME_FIELD, likeFileds, null); - + if(params.getOption()!=null){ + if(params.getOption()==1){ + query.addCriteria(Criteria.where("bigUseful.bigPicExpCount").is(0)); + }else if(params.getOption()==-1){ + query.addCriteria(Criteria.where("bigUseful.bigPicExpCount").gt(0)); + } + } long total = mongoTemplate.count(query, FaceDeviceSamplingResult.class); MongoUtil.setPage(query, params, TIME_FIELD); + query.with(Sort.by(Sort.Order.desc("bigUseful.bigPicExpCount"))); List<FaceDeviceSamplingResult> resultList = mongoTemplate.find(query, FaceDeviceSamplingResult.class); + List<BigPicUsefulVO> voList = new ArrayList<>(); + resultList.forEach(item->{ + BigPicUsefulVO picVO = FaceDeviceSamplingResult.getPicVO(item); + voList.add(picVO); + }); + // 缁熻鏁� + MongoDatabase database = mongoTemplate.getDb(); + MongoCollection<Document> collection = database.getCollection("hk_face_device_sampling"); + // 鏋勫缓鍩烘湰鐨�$match鏉′欢 + List<Document> matchConditions = new ArrayList<>(); + setTag(params, matchConditions); + List<Document> pipeline = Arrays.asList( + new Document("$match", new Document("$and", matchConditions)), + new Document("$group", new Document("_id", "$mongoCreateTime") + .append("sampleCount", new Document("$sum", "$bigUseful.sampleCount")) + .append("expCount", new Document("$sum", "$bigUseful.bigPicExpCount")) + )); + // 鎵ц鑱氬悎鏌ヨ骞惰幏鍙栫粨鏋� + AggregateIterable<Document> result = collection.aggregate(pipeline); + int sampleCount = 0; + int expCount = 0; + for (Document doc : result) { + sampleCount = doc.getInteger("sampleCount"); + expCount = doc.getInteger("expCount"); + } + List<String> countList = new ArrayList<>(); // 缁熻鏁� - Date now = new Date(); List<CheckIndexFace> videoList = new LambdaQueryChainWrapper<>(checkIndexFaceService.getBaseMapper()) .select(CheckIndexFace::getFacePictureAvailability) .eq(params.getDataType().equals(1), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Province) - .between(CheckIndexFace::getCreateTime, DateUtils.getDayStart(now), DateUtils.getDayEnd(now)) + .eq(params.getDataType().equals(2), CheckIndexFace::getExamineTag, CheckConstants.Examine_Tag_Dept) + .between(CheckIndexFace::getCreateTime, DateUtils.getDayStart(params.getStartTime()), DateUtils.getDayEnd(params.getEndTime())) .list(); BigDecimal onlineRate = BigDecimal.ZERO; if (CollectionUtils.isNotEmpty(videoList)) { @@ -2468,10 +2742,12 @@ BigDecimal count = BigDecimal.valueOf(videoList.size()); onlineRate = sum.divide(count, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); } - + countList.add(sampleCount+""); + countList.add(expCount+""); + countList.add(this.remove0(onlineRate)); HashMap<String, Object> map = new HashMap<>(); - map.put("count", Arrays.asList(this.remove0(onlineRate))); - map.put("list", resultList); + map.put("count", countList); + map.put("list", voList); return Result.ok().data(map).total(total); } diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java index 5968f2b..1ef0de4 100644 --- a/ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java +++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java @@ -14,10 +14,7 @@ import com.ycl.platform.domain.query.DataCenterQuery; import com.ycl.platform.domain.query.HomeQuery; import com.ycl.platform.domain.result.BaseResult; -import com.ycl.platform.domain.result.HK.FaceDeviceInspectionResult; -import com.ycl.platform.domain.result.HK.FaceDeviceSamplingResult; -import com.ycl.platform.domain.result.HK.VehicleDeviceInspectionResult; -import com.ycl.platform.domain.result.HK.VehicleDeviceSamplingResult; +import com.ycl.platform.domain.result.HK.*; import com.ycl.platform.domain.result.SYS.TMonitorResult; import com.ycl.platform.domain.result.UY.MonitorQualifyResult; import com.ycl.platform.domain.result.UY.OsdCheckResult; @@ -189,21 +186,30 @@ } // 杞﹁締鐩戞帶璁惧 if (Objects.equals(tMonitor.getCameraFunType(), "2")) { - //灞炴�т竴鑷寸巼銆佸ぇ鍥俱�乽rl + //灞炴�т竴鑷寸巼銆佸ぇ鍥� List<VehicleDeviceSamplingResult> sampleResults = mongoTemplate.find(query, VehicleDeviceSamplingResult.class); + List<PicAccessResult> picAccessResults = mongoTemplate.find(query, PicAccessResult.class); //鎶撴媿閲忋�佹椂閽熴�佷笂浼� List<VehicleDeviceInspectionResult> inspectResults = mongoTemplate.find(query, VehicleDeviceInspectionResult.class); for (TMonitorVO monitor : monitors) { monitor.setMongoCreateTime(now); //涓�鏈轰竴妗� setOneFile(monitorQualifyResults, monitor); - //灞炴�т竴鑷寸巼銆佸ぇ鍥俱�乽rl + //url + if (!CollectionUtils.isEmpty(sampleResults)) { + for (PicAccessResult picAccessResult : picAccessResults) { + if (monitor.getSerialNumber().equals(picAccessResult.getNo())) { + BigDecimal bigDecimal = PicAccessResult.calUrl(picAccessResult); + monitor.setUrlPercent(bigDecimal); + } + } + } + //灞炴�т竴鑷寸巼銆佸ぇ鍥� if (!CollectionUtils.isEmpty(sampleResults)) { for (VehicleDeviceSamplingResult sampleResult : sampleResults) { if (monitor.getSerialNumber().equals(sampleResult.getNo())) { if (sampleResult.getBigUseful() != null) { monitor.setBigUsefulPercent(sampleResult.getBigUseful().getBigUsefulPercent()); - monitor.setUrlPercent(VehicleDeviceSamplingResult.BigUsefulness.calUrl(sampleResult.getBigUseful())); } if (sampleResult.getVehDiff() != null) { monitor.setImportantConPercent(sampleResult.getVehDiff().getImportantConPercent()); @@ -237,13 +243,12 @@ monitor.setMongoCreateTime(now); //涓�鏈轰竴妗� setOneFile(monitorQualifyResults, monitor); - //浜鸿劯鍚堟牸銆佸ぇ鍥俱�乽rl璁块棶寮傚父 + //浜鸿劯鍚堟牸銆佸ぇ鍥� if (!CollectionUtils.isEmpty(sampleResults)) { for (FaceDeviceSamplingResult sampleResult : sampleResults) { if (monitor.getSerialNumber().equals(sampleResult.getNo())) { if (sampleResult.getBigUseful() != null) { monitor.setBigUsefulPercent(sampleResult.getBigUseful().getBigUsefulPercent()); - monitor.setUrlPercent(FaceDeviceSamplingResult.BigUsefulness.calUrl(sampleResult.getBigUseful())); } if (sampleResult.getFaceEligibility() != null) monitor.setFacePercent(sampleResult.getFaceEligibility().getFaceEligPercent()); 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 47b66a5..e11a81a 100644 --- a/ycl-server/src/main/java/com/ycl/task/CarTask.java +++ b/ycl-server/src/main/java/com/ycl/task/CarTask.java @@ -78,11 +78,22 @@ query.addCriteria(Criteria .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday))); List<VehicleDeviceSamplingResult> results = mongoTemplate.find(query, VehicleDeviceSamplingResult.class); - CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Car_DataAccuracy_Url_PicUsability); + CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Car_DataAccuracy_PicUsability); calculator.calculate(results); log.info("缁撴潫璁$畻杞﹁締鍗″彛璁惧鏁版嵁璇嗗埆鍑嗙‘鎬с�乽rl鍙敤鎬с�佸ぇ鍥惧彲鐢ㄦ��"); } - + public void carUrlTask() { + log.info("寮�濮嬭绠楄溅杈唘rl鍙敤鎬�"); + Date yesterday = DateUtils.addDays(new Date(), -1); + //璁$畻杞﹁締鍗″彛璁惧鏁版嵁璇嗗埆鍑嗙‘鎬с�乽rl鍙敤鎬с�佸ぇ鍥惧彲鐢ㄦ�� + Query query = new Query(); + query.addCriteria(Criteria + .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday))); + List<PicAccessResult> results = mongoTemplate.find(query, PicAccessResult.class); + CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Car_Url); + calculator.calculate(results); + log.info("缁撴潫璁$畻url鍙敤鎬�"); + } public void infoAccuracyTask() { log.info("寮�濮嬭绠楄溅杈嗗崱鍙d俊鎭噰闆嗗噯纭巼"); Date yesterday = DateUtils.addDays(new Date(), -1); -- Gitblit v1.8.0