From 66544379029bdc7ecce13e6b3a32b59be1527495 Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期四, 01 八月 2024 18:23:10 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ycl-common/src/main/java/constant/RedisConstant.java | 6 ycl-server/src/main/java/com/ycl/calculate/FaceSiteOnlineCalculation.java | 33 ycl-server/src/main/java/com/ycl/calculate/FaceInFoAccuracyCalculation.java | 132 ++++++ ycl-server/src/main/java/com/ycl/task/CarTask.java | 31 + ycl-server/src/main/java/com/ycl/feign/UYClient.java | 2 ycl-common/src/main/java/constant/ApiConstants.java | 28 + ycl-server/src/main/java/com/ycl/calculate/CarSiteOnlineCalculation.java | 15 ycl-common/src/main/java/constant/CalculationStrategyConstants.java | 18 ycl-server/src/main/java/com/ycl/calculate/CarInFoAccuracyCalculation.java | 136 ++++++ ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDelayCalculation.java | 136 ++++++ ycl-pojo/src/main/java/com/ycl/platform/domain/entity/TMonitor.java | 49 -- ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateReportServiceImpl.java | 2 ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java | 51 +- ycl-server/src/main/java/com/ycl/task/MonitorTask.java | 88 ++++ ycl-server/src/main/java/com/ycl/platform/service/impl/YwPointServiceImpl.java | 41 ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml | 60 +- ycl-pojo/src/main/java/com/ycl/platform/domain/entity/YwPoint.java | 15 ycl-server/src/main/java/com/ycl/platform/service/impl/CheckIndexCarServiceImpl.java | 1 ycl-server/src/main/java/com/ycl/task/HKTask.java | 30 ycl-server/src/main/java/com/ycl/platform/service/ITMonitorService.java | 2 ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java | 10 ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/OneMachineFileResult.java | 89 ++- ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java | 19 ycl-server/src/main/java/com/ycl/factory/IndexCalculationFactory.java | 10 /dev/null | 30 - ycl-server/src/main/java/com/ycl/task/FaceTask.java | 33 + ycl-server/src/main/java/com/ycl/calculate/CarSnapshotDelayCalculation.java | 141 ++++++ ycl-server/src/main/resources/mapper/zgyw/CheckScoreMapper.xml | 12 ycl-server/src/main/java/com/ycl/task/UYTask.java | 5 ycl-server/src/main/java/com/ycl/feign/UYFeignConfig.java | 2 ycl-server/src/main/java/com/ycl/calculate/IndexCalculationServe.java | 69 +++ ycl-server/src/main/java/com/ycl/platform/service/YwPointService.java | 9 32 files changed, 1,033 insertions(+), 272 deletions(-) diff --git a/ycl-common/src/main/java/constant/ApiConstants.java b/ycl-common/src/main/java/constant/ApiConstants.java index c4fcf99..105d11d 100644 --- a/ycl-common/src/main/java/constant/ApiConstants.java +++ b/ycl-common/src/main/java/constant/ApiConstants.java @@ -10,19 +10,37 @@ public final static Integer pageNo = 1; public final static Integer pageSize = 5000; //璇锋眰鍙傛暟dataType-鍗″彛杩囪溅 - public final static Integer HK_DATATYPE_CAR = 1; + public final static Integer HK_DataType_CAR = 1; //璇锋眰鍙傛暟dataType-浜鸿劯鏁版嵁 - public final static Integer HK_DATATYPE_FACE = 2; + public final static Integer HK_DataType_FACE = 2; //鎶撴媿鏁版嵁閲忕洃娴嬬粨鏋� 姝e父 public final static Integer HK_SnapCount_ResultType_Normal = 1; - //鎶撴媿鏁版嵁閲忕洃娴嬬粨鏋� 鏃犳暟鎹� public final static Integer HK_SnapCount_ResultType_Null = 2; - //鎶撴媿鏁版嵁閲忕洃娴嬬粨鏋� 鏁版嵁绐侀檷 public final static Integer HK_SnapCount_ResultType_Descent = 3; //璇锋眰鍙傛暟dataType 鏁版嵁閲忓皯 - public final static Integer HK_DATATYPE_ResultType_Low = 4; + public final static Integer HK_DataType_ResultType_Low = 4; + + //缁忕含搴︽娴嬬粨鏋� 姝e父 + public final static Integer HK_Info_LayType_Normal = 1; + //缁忕含搴︽娴嬬粨鏋� 缁忕含搴︾己澶� + public final static Integer HK_Info_LayType_Absent = 2; + //缁忕含搴︽娴嬬粨鏋� 涓嶅湪杈栧尯 + public final static Integer HK_Info_LayType_NotIn = 3; + //缁忕含搴︽娴嬬粨鏋� 绮惧害浣� + public final static Integer HK_Info_LayType_Low = 4; + + //鍥介檯缂栫爜鐩戞祴缁撴灉 姝e父 + public final static Integer HK_Info_GbCodeType_Normal = 1; + //鍥介檯缂栫爜鐩戞祴缁撴灉 缂栫爜闀垮害涓嶇瓑浜�20浣� + public final static Integer HK_Info_GbCodeType_NotEq = 2; + //鍥介檯缂栫爜鐩戞祴缁撴灉 鍓�6浣嶄笉鍚堟爣鍑� + public final static Integer HK_Info_GbCodeType_6NotStandard = 3; + //鍥介檯缂栫爜鐩戞祴缁撴灉 11-13浣嶄笉鍚堟爣鍑� + public final static Integer HK_Info_GbCodeType_11NotStandard = 4; + + } diff --git a/ycl-common/src/main/java/constant/CalculationStrategyConstants.java b/ycl-common/src/main/java/constant/CalculationStrategyConstants.java index c749b7e..667e3d1 100644 --- a/ycl-common/src/main/java/constant/CalculationStrategyConstants.java +++ b/ycl-common/src/main/java/constant/CalculationStrategyConstants.java @@ -8,9 +8,25 @@ /** * 杞﹁締鐐逛綅鍦ㄧ嚎鐜囧拰瑙嗗浘搴撳鎺ョǔ瀹氭�� */ - public static final String CAR_SiteOnline_ViewStability = "carSiteOnlineViewStability"; + public static final String Car_SiteOnline_ViewStability = "carSiteOnlineViewStability"; /** * 浜鸿劯鐐逛綅鍦ㄧ嚎鐜囧拰瑙嗗浘搴撳鎺ョǔ瀹氭�� */ public static final String Face_SiteOnline_ViewStability = "faceSiteOnlineViewStability"; + /** + * 杞﹁締鍗″彛灞炴�х洃娴嬬粨鏋� + */ + public static final String Car_InfoAccuracy = "carInfoAccuracy"; + /** + * 浜鸿劯灞炴�х洃娴嬬粨鏋� + */ + public static final String Face_InfoAccuracy = "faceInfoAccuracy"; + /** + * 杞﹁締鏁版嵁涓婁紶鍙婃椂鎬� + */ + public static final String Car_SnapshotDelay = "carSnapshotDelay"; + /** + * 浜鸿劯鏁版嵁涓婁紶鍙婃椂鎬� + */ + public static final String Face_SnapshotDelay = "faceSnapshotDelay"; } diff --git a/ycl-common/src/main/java/constant/RedisConstant.java b/ycl-common/src/main/java/constant/RedisConstant.java new file mode 100644 index 0000000..2e024e8 --- /dev/null +++ b/ycl-common/src/main/java/constant/RedisConstant.java @@ -0,0 +1,6 @@ +package constant; + +public class RedisConstant { + /** 涓�鏈轰竴妗g洰褰曚竴鑷寸巼 澶氬嚭鏉ョ殑璁惧 Set闆嗗悎 */ + public static final String New_Monitor_Set="New_Monitor_Set"; +} diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/TMonitor.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/TMonitor.java index c3fe608..296b1ba 100644 --- a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/TMonitor.java +++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/TMonitor.java @@ -1,6 +1,7 @@ package com.ycl.platform.domain.entity; import annotation.Excel; +import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonFormat; import com.ycl.system.entity.BaseEntity; @@ -141,18 +142,8 @@ @Excel(name = "绫诲瀷缂栫爜 : [131.鎽勫儚鏈虹紪鐮�;132.缃戠粶鎽勫儚鏈虹紪鐮�;]") private Long lxbm; - @Excel(name = "寮傚父鍘熷洜") - private String reason; - - @Excel(name = "鏄惁鐢熸垚寮傚父宸ュ崟") - private Long defaultOrder; - - @Excel(name ="寮傚父鎭㈠鏍囪瘑") - private Long recovery; - - @Excel(name = "寮傚父鎭㈠鏃堕棿") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date recoveryTime; + @TableField(exist = false) + private Integer recovery; private Long deptId; @@ -164,14 +155,6 @@ this.deptId = deptId; } - public Long getDefaultOrder() { - return defaultOrder; - } - - public void setDefaultOrder(Long defaultOrder) { - this.defaultOrder = defaultOrder; - } - public void setInstalledTime(Date installedTime) { this.installedTime = installedTime; } @@ -180,31 +163,13 @@ return installedTime; } - public Date getRecoveryTime() { - return recoveryTime; - } - - public void setRecoveryTime(Date recoveryTime) { - this.recoveryTime = recoveryTime; - } - - public Long getRecovery() { + public Integer getRecovery() { return recovery; } - public void setRecovery(Long recovery) { + public void setRecovery(Integer recovery) { this.recovery = recovery; } - - public String getReason() { - return reason; - } - - public void setReason(String reason) { - this.reason = reason; - } - - public void setId(Long id) { @@ -512,10 +477,6 @@ ", cameraDept='" + cameraDept + '\'' + ", hybm='" + hybm + '\'' + ", lxbm=" + lxbm + - ", reason='" + reason + '\'' + - ", defaultOrder=" + defaultOrder + - ", recovery=" + recovery + - ", recoveryTime=" + recoveryTime + ", deptId=" + deptId + '}'; } diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/YwPoint.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/YwPoint.java index e041929..4fd4a81 100644 --- a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/YwPoint.java +++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/YwPoint.java @@ -3,13 +3,15 @@ import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; -import java.time.LocalDateTime; - +import com.fasterxml.jackson.annotation.JsonFormat; import com.ycl.platform.base.AbsEntity; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.experimental.Accessors; + +import java.time.LocalDateTime; +import java.util.Date; /** * 杩愮淮鐐逛綅 @@ -60,5 +62,14 @@ @TableField("point_tag") private String pointTag; + @TableField("reason") + private String reason; + + @TableField("recovery") + private Integer recovery; + + @TableField("recovery_time") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date recoveryTime; } diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/OneMachineFileResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/OneMachineFileResult.java index f6d6087..99e9cc0 100644 --- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/OneMachineFileResult.java +++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/OneMachineFileResult.java @@ -27,6 +27,54 @@ private String SBMC; /** + * 鎽勫儚鏈洪噰闆嗗尯鍩燂紙鍙傝�冩枃妗hВ鏋愶級 + */ + private String SXJCJQY; + + /** + * 鐩戞帶鐐逛綅绫诲瀷锛�1-涓�绫昏棰戠洃鎺х偣锛�2-浜岀被瑙嗛鐩戞帶鐐癸紱3-涓夌被瑙嗛鐩戞帶鐐癸紱4-鍏畨鍐呴儴瑙嗛鐩戞帶鐐癸紱9-鍏朵粬鐐逛綅銆� + * 鍙傜収鍏畨閮ㄣ�婂叧浜庤繘涓�姝ュ姞寮哄叕瀹夋満鍏宠棰戝浘鍍忎俊鎭簲鐢ㄥ伐浣滅殑鎰忚銆嬶紙鍏�氬瓧锕�2015锕�4鍙凤級瀹氫箟銆� + */ + private String JKDWLX; + + /** + * IPV4鍦板潃锛屾憚鍍忔満IP鍦板潃銆� + */ + private String IP; + + /** + * IPV6鍦板潃锛屾憚鍍忔満鎵╁睍IP鍦板潃銆� + */ +// private String IPV6; + + /** + * 缁忓害銆� + */ + private Double JD; + + /** + * 绾害銆� + */ + private Double WD; + + /** + * 鎽勫儚鏈哄姛鑳界被鍨嬶紝鍙栧�艰寖鍥�(澶氶��) : [1.瑙嗛鐩戞帶;2.杞﹁締璇嗗埆;3.浜哄憳璇嗗埆;] 鏁版嵁鏍煎紡[濉叆澶氫釜鍊煎苟浠�/闅斿紑銆備緥濡� 1/2] + */ + private String SXJGNLX; + + /** + * MAC鍦板潃锛屾憚鍍忔満MAC鍦板潃銆� + */ + private String MACDZ; + + /** + * 璁惧鐘舵�侊紝1-鍦ㄧ敤锛�2-缁翠慨锛�3-鎷嗛櫎銆� + */ + private String SBZT; + + //--------------------------------------------------------------------- + + /** * 璁惧鍘傚晢锛岀紪鐮�1-娴峰悍濞佽锛�2-澶у崕锛�3-澶╁湴浼熶笟锛�4-绉戣揪锛�5-瀹夎澹紱6-鍗氫笘锛�7-浜氬畨锛�8-鑻遍鎷擄紱9-瀹囪锛�10-娴蜂俊锛�11-涓槦鐢靛瓙锛�12-鏄庢櫙锛�13-鑱旀兂锛�14-涓叴锛�99-鍏朵粬銆� */ private String SBCS; @@ -35,12 +83,6 @@ * 琛屾斂鍖哄煙锛岃鏀垮尯鍒掋�佺睄璐渷甯傚幙浠g爜銆傚弬鐓с�奊B/T 2260 涓崕浜烘皯鍏卞拰鍥借鏀垮尯鍒掍唬鐮併�嬨�� */ private String XZQY; - - /** - * 鐩戞帶鐐逛綅绫诲瀷锛�1-涓�绫昏棰戠洃鎺х偣锛�2-浜岀被瑙嗛鐩戞帶鐐癸紱3-涓夌被瑙嗛鐩戞帶鐐癸紱4-鍏畨鍐呴儴瑙嗛鐩戞帶鐐癸紱9-鍏朵粬鐐逛綅銆� - * 鍙傜収鍏畨閮ㄣ�婂叧浜庤繘涓�姝ュ姞寮哄叕瀹夋満鍏宠棰戝浘鍍忎俊鎭簲鐢ㄥ伐浣滅殑鎰忚銆嬶紙鍏�氬瓧锕�2015锕�4鍙凤級瀹氫箟銆� - */ - private String JKDWLX; /** * 璁惧鍨嬪彿锛屾弿杩拌澶囩殑鍏蜂綋鍨嬪彿銆� @@ -53,29 +95,9 @@ private String DWSC; /** - * IPV4鍦板潃锛屾憚鍍忔満IP鍦板潃銆� - */ - private String IPV4; - - /** - * IPV6鍦板潃锛屾憚鍍忔満鎵╁睍IP鍦板潃銆� - */ - private String IPV6; - - /** - * MAC鍦板潃锛屾憚鍍忔満MAC鍦板潃銆� - */ - private String MACDZ; - - /** * 鎽勫儚鏈虹被鍨嬶紝1-鐞冩満锛�2-鍗婄悆锛�3-鍥哄畾鏋満锛�4-閬ユ帶鏋満锛�5-鍗″彛鏋満锛�99-鏈煡銆� */ private String SXJLX; - - /** - * 鎽勫儚鏈哄姛鑳界被鍨嬶紝1-杞﹁締鍗″彛锛�2-浜哄憳鍗″彛锛�3-寰崱鍙o紱4-鐗瑰緛鎽勫儚鏈猴紱5-鏅�氱洃鎺э紱99-鍏朵粬锛屽閫夊悇鍙傛暟浠モ��/鈥濆垎闅斻�� - */ - private String SXJGNLX; /** * 琛ュ厜灞炴�э紝1-鏃犺ˉ鍏夈��2-绾㈠琛ュ厜銆�3-鐧藉厜琛ュ厜銆�9-鍏朵粬琛ュ厜銆� @@ -92,16 +114,6 @@ * 鍙傝�冭寖寮忥細琛楅亾+闂ㄧ墝鍙风爜+鍗曚綅鍚嶇О銆傞珮閫熷叕璺�佸浗閬撶瓑鐐逛綅鍙弬鐓р�滃叕璺悕绉�+鍏噷鏁扳�濊寖寮忋�� */ private String AZDZ; - - /** - * 缁忓害銆� - */ - private Double JD; - - /** - * 绾害銆� - */ - private Double WD; /** * 鎽勫儚鏈轰綅缃被鍨嬶紝1-鐪侀檯妫�鏌ョ珯銆�2-鍏氭斂鏈哄叧銆�3-杞︾珯鐮佸ご銆�4-涓績骞垮満銆�5-浣撹偛鍦洪銆�6-鍟嗕笟涓績銆�7-瀹楁暀鍦烘墍銆�8-鏍″洯鍛ㄨ竟銆�9-娌诲畨澶嶆潅鍖哄煙銆�10-浜ら�氬共绾裤��11-鍖婚櫌鍛ㄨ竟銆�12-閲戣瀺鏈烘瀯鍛ㄨ竟銆�13-鍗遍櫓鐗╁搧鍦烘墍鍛ㄨ竟銆�14-鍗氱墿棣嗗睍瑙堥銆�15-閲嶇偣姘村煙銆佽埅閬撱��96-甯傞檯鍏畨妫�鏌ョ珯锛�97-娑夊鍦烘墍锛�98-杈瑰娌跨嚎锛�99-鏃呮父鏅尯锛屽閫夊悇鍙傛暟浠モ��/鈥濆垎闅斻�� @@ -147,11 +159,6 @@ * 褰曞儚淇濆瓨澶╂暟銆� */ private Integer LXBCTS; - - /** - * 璁惧鐘舵�侊紝1-鍦ㄧ敤锛�2-缁翠慨锛�3-鎷嗛櫎銆� - */ - private String SBZT; /** * 鎵�灞為儴闂�/琛屼笟锛�1-鍏畨鏈哄叧锛�2-鐜繚閮ㄩ棬锛�3-鏂囧崥閮ㄩ棬锛�4-鍖荤枟閮ㄩ棬锛�5-鏃呮父绠$悊锛�6-鏂伴椈骞跨數锛�7-椋熷搧鍖昏嵂鐩戠潱绠$悊閮ㄩ棬锛�8-鏁欒偛绠$悊閮ㄩ棬锛�9-妫�瀵熼櫌锛�10-娉曢櫌锛�11-閲戣瀺閮ㄩ棬锛�12-浜ら�氶儴闂紱13-浣忔埧鍜屽煄涔″缓璁鹃儴闂紱14-姘村埄閮ㄩ棬锛�15-鏋椾笟閮ㄩ棬锛�16-瀹夊叏鐢熶骇鐩戠潱閮ㄩ棬锛�17-甯傛斂甯傚濮旓紱18-鍥藉湡灞�锛屽彲鎵╁睍锛屽閫夊悇鍙傛暟浠モ��/鈥濆垎闅斻�� diff --git a/ycl-server/src/main/java/com/ycl/calculate/CarInFoAccuracyCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/CarInFoAccuracyCalculation.java new file mode 100644 index 0000000..f1d31d6 --- /dev/null +++ b/ycl-server/src/main/java/com/ycl/calculate/CarInFoAccuracyCalculation.java @@ -0,0 +1,136 @@ +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.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 constant.ApiConstants; +import constant.CheckConstants; +import constant.CheckSnapCountConstants; +import org.springframework.beans.factory.annotation.Autowired; +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.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 璁$畻杞﹁締鍗″彛淇℃伅閲囬泦鍑嗙‘鐜� 璁惧缂栫爜銆佽鏀垮尯鍒掍唬鐮併�佸畨瑁呬綅缃�佸潗鏍囩粡绾害淇℃伅瀹屾暣鍑嗙‘ + * 鑾峰彇鍒嗙渷鍘呫�佸尯鍩熺殑map<k,v> k涓篸eptId鎴栬�匬rovince_deptId + * 鏇存柊鎴栨柊澧� + */ +@Component +public class CarInFoAccuracyCalculation extends IndexCalculationServe implements CalculationStrategy<CrossDetailResult> { + @Autowired + private CheckIndexCarMapper checkIndexCarMapper; + @Autowired + private SysConfigMapper sysConfigMapper; + @Autowired + private ITMonitorService monitorService; + @Autowired + private TMonitorMapper monitorMapper; + @Autowired + private ICheckIndexCarService checkIndexCarService; + + //鍖哄煙杞﹁締淇℃伅閲囬泦鍑嗙‘鐜囩殑鍐呴儴绫� + private static class AreaStats { + int totalSites = 0; + int qualifySite = 0; + } + + @Override + public void calculate(List<CrossDetailResult> list) { + if (CollectionUtils.isEmpty(list)) { + return; + } + //杩斿洖浠ュ浗鏍囩爜涓簁ey鐨勮澶噈ap + //TODO锛歮onitor鍘绘帀浜哾eptId + Map<String, TMonitor> monitorMap = monitorService.list(new QueryWrapper<TMonitor>() + .in("serial_number", list.stream().map(CrossDetailResult::getExternalIndexCode).collect(Collectors.toList()))) + .stream().collect(Collectors.toMap(TMonitor::getSerialNumber, Function.identity())); + //鑾峰彇鐪佸巺鍥芥爣鐮侀泦鍚� + List<String> provinceIds = getProvince(); + Map<String, AreaStats> areaStatsMap = new HashMap<>(); + + for (CrossDetailResult result : list) { + TMonitor monitor = monitorMap.get(result.getExternalIndexCode()); + if (monitor == null) continue; + + String deptId = monitor.getDeptId().toString(); + + updateAreaStats(areaStatsMap, deptId, result); + + // 澶勭悊鐪佸巺鏁版嵁 + if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { + String provinceKey = "Province_" + deptId; + updateAreaStats(areaStatsMap, provinceKey, result); + } + } + + // 鏌ヨ鏄惁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); + checkIndexCars.add(checkIndexCar); + } + }); + + checkIndexCarService.saveOrUpdateBatch(checkIndexCars); + } + + + /** + * 绱鎬荤偣浣嶆暟銆佹爣娉ㄥ紓甯哥偣浣嶆暟 + */ + private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, CrossDetailResult result) { + //杩斿洖瀵硅薄鐨勫紩鐢紝濡傛灉涓嶅瓨鍦ㄤ細鏀惧叆鏂扮殑key,value + AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats()); + stats.totalSites++; + if (ApiConstants.HK_Info_LayType_Normal.equals(result.getLalType()) && ApiConstants.HK_Info_GbCodeType_Normal.equals(result.getGbCodeType())) { + stats.qualifySite++; + } + } + + /** + * 杞﹁締淇℃伅閲囬泦姝g‘鐜� + */ + private CheckIndexCar createOrUpdateCheckIndexCar(String key, AreaStats stats, List<CheckIndexCar> checkIndexCarList) { + CheckIndexCar checkIndexCar; + + // 妫�鏌ユ槸鍚﹀凡瀛樺湪浠婃棩鏁版嵁 + Optional<CheckIndexCar> existingCar = checkIndexCarList.stream() + .filter(car -> key.equals(car.getDeptId().toString()) && + (key.startsWith("Province_") ? CheckConstants.Examine_Tag_City.equals(car.getExamineTag()) + : CheckConstants.Examine_Tag_County.equals(car.getExamineTag()))) + .findFirst(); + + if (existingCar.isPresent()) { + checkIndexCar = existingCar.get(); + } else { + checkIndexCar = new CheckIndexCar(); + checkIndexCar.setDeptId(key.startsWith("Province_") ? Long.parseLong(key.split("_")[1]) : Long.parseLong(key)); + checkIndexCar.setExamineTag(key.startsWith("Province_") ? CheckConstants.Examine_Tag_City : CheckConstants.Examine_Tag_County); + checkIndexCar.setCreateTime(new Date()); + } + //璋冪敤璁$畻鏂规硶 + Map<String, Object> siteOnlineParam = new HashMap<>(); + siteOnlineParam.put("totalSites", stats.totalSites); + siteOnlineParam.put("qualifySite", stats.qualifySite); + BigDecimal infoAccuracy = infoAccuracy(siteOnlineParam); + checkIndexCar.setVehicleInformationCollectionAccuracy(infoAccuracy); + return checkIndexCar; + } +} diff --git a/ycl-server/src/main/java/com/ycl/calculate/CarSiteOnlineCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/CarSiteOnlineCalculation.java index fa6cffc..2b64436 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/CarSiteOnlineCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/CarSiteOnlineCalculation.java @@ -30,7 +30,7 @@ * 鏇存柊鎴栨柊澧� */ @Component -public class CarSiteOnlineCalculation implements CalculationStrategy<SnapshotDataMonitorResult> { +public class CarSiteOnlineCalculation extends IndexCalculationServe implements CalculationStrategy<SnapshotDataMonitorResult> { @Autowired private CheckIndexCarMapper checkIndexCarMapper; @Autowired @@ -52,14 +52,15 @@ if (CollectionUtils.isEmpty(list)) { return; } - Map<String, AreaStats> areaStatsMap = new HashMap<>(); + + //鑾峰緱鍥芥爣鐮佷负key鐨勮澶噈ap Map<String, TMonitor> monitorMap = monitorService.list(new QueryWrapper<TMonitor>() .in("serial_number", list.stream().map(SnapshotDataMonitorResult::getExternalIndexCode).collect(Collectors.toList()))) .stream().collect(Collectors.toMap(TMonitor::getSerialNumber, Function.identity())); + //鑾峰彇鐪佸巺鍥芥爣鐮侀泦鍚� + List<String> provinceIds = getProvince(); - // TODO: 鍒嗙渷鍘呭競灞� 闇�瑕佽ˉ鍏呴泦鍚堟暟鎹� - List<String> provinceIds = new ArrayList<>(); // 杩欓噷闇�瑕佹牴鎹偣浣嶈ˉ鍏� - + Map<String, AreaStats> areaStatsMap = new HashMap<>(); for (SnapshotDataMonitorResult result : list) { TMonitor monitor = monitorMap.get(result.getExternalIndexCode()); if (monitor == null) continue; @@ -135,14 +136,14 @@ Map<String, Object> siteOnlineParam = new HashMap<>(); siteOnlineParam.put("totalSites", stats.totalSites); siteOnlineParam.put("offlineSites", stats.offlineSites); - BigDecimal siteOnline = IndexCalculationUtils.siteOnline(siteOnlineParam); + BigDecimal siteOnline = siteOnline(siteOnlineParam); checkIndexCar.setSiteOnline(siteOnline); //瑙嗗浘搴撳鎺ョǔ瀹氭�� BigDecimal avgCount = key.startsWith("Province_") ? cityCountAvg : countyCountAvg; Map<String, Object> viewConnectParam = new HashMap<>(); viewConnectParam.put("totalDataSum", stats.totalDataSum); viewConnectParam.put("avgCount", avgCount); - BigDecimal viewConnectStability = IndexCalculationUtils.viewConnectStability(viewConnectParam); + BigDecimal viewConnectStability = viewConnectStability(viewConnectParam); checkIndexCar.setViewConnectStability(viewConnectStability); return checkIndexCar; } diff --git a/ycl-server/src/main/java/com/ycl/calculate/CarSnapshotDelayCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/CarSnapshotDelayCalculation.java new file mode 100644 index 0000000..f58e3e9 --- /dev/null +++ b/ycl-server/src/main/java/com/ycl/calculate/CarSnapshotDelayCalculation.java @@ -0,0 +1,141 @@ +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.SnapshotDataMonitorResult; +import com.ycl.platform.domain.result.HK.SnapshotDelayMonitorResult; +import com.ycl.platform.mapper.CheckIndexCarMapper; +import com.ycl.platform.service.ICheckIndexCarService; +import com.ycl.platform.service.ITMonitorService; +import com.ycl.system.mapper.SysConfigMapper; +import constant.ApiConstants; +import constant.CheckConstants; +import constant.CheckSnapCountConstants; +import org.springframework.beans.factory.annotation.Autowired; +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.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 璁$畻杞﹁締澶囨姄鎷嶆暟鎹笂浼犲強鏃舵�� + * 鑾峰彇鍒嗙渷鍘呫�佸尯鍩熺殑map<k,v> k涓篸eptId鎴栬�匬rovince_deptId + * 寰幆map璁$畻鏁版嵁涓婁紶鍙婃椂鎬� + * 鏇存柊鎴栨柊澧� + */ +@Component +public class CarSnapshotDelayCalculation extends IndexCalculationServe implements CalculationStrategy<SnapshotDelayMonitorResult> { + @Autowired + private CheckIndexCarMapper checkIndexCarMapper; + @Autowired + private SysConfigMapper sysConfigMapper; + @Autowired + private ITMonitorService monitorService; + @Autowired + private ICheckIndexCarService checkIndexCarService; + + //鍖哄煙杞﹁締鐐逛綅鍦ㄧ嚎鎸囨爣鐨勫唴閮ㄧ被 + private static class AreaStats { + int totalCount = 0; + //0-180s + int delayCount1 = 0; + //180-300s + int delayCount2 = 0; + //300-600s + int delayCount3 = 0; + } + + @Override + public void calculate(List<SnapshotDelayMonitorResult> list) { + if (CollectionUtils.isEmpty(list)) { + return; + } + + //鑾峰緱鍥芥爣鐮佷负key鐨勮澶噈ap + Map<String, TMonitor> monitorMap = monitorService.list(new QueryWrapper<TMonitor>() + .in("serial_number", list.stream().map(SnapshotDelayMonitorResult::getExternalIndexCode).collect(Collectors.toList()))) + .stream().collect(Collectors.toMap(TMonitor::getSerialNumber, Function.identity())); + //鑾峰彇鐪佸巺鍥芥爣鐮侀泦鍚� + List<String> provinceIds = getProvince(); + + Map<String, AreaStats> areaStatsMap = new HashMap<>(); + for (SnapshotDelayMonitorResult result : list) { + TMonitor monitor = monitorMap.get(result.getExternalIndexCode()); + if (monitor == null) continue; + + String deptId = monitor.getDeptId().toString(); + updateAreaStats(areaStatsMap, deptId, result); + + // 澶勭悊鐪佸巺鏁版嵁 + if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { + String provinceKey = "Province_" + deptId; + updateAreaStats(areaStatsMap, provinceKey, result); + } + } + + // 鏌ヨ鏄惁index琛ㄥ凡缁忓瓨鍦ㄤ粖鏃ユ暟鎹� + List<CheckIndexCar> checkIndexCarList = checkIndexCarMapper.selectToday(DateUtils.getDate()); + List<CheckIndexCar> checkIndexCars = new ArrayList<>(); + areaStatsMap.forEach((deptId, stats) -> { + if (stats.totalCount > 0) { + CheckIndexCar checkIndexCar = createOrUpdateCheckIndexCar(deptId, stats, checkIndexCarList); + checkIndexCars.add(checkIndexCar); + } + }); + + checkIndexCarService.saveOrUpdateBatch(checkIndexCars); + } + + /** + * 绱鎬荤偣浣嶆暟銆佺绾挎暟銆佹�绘姄鎷嶉噺 + */ + private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, SnapshotDelayMonitorResult result) { + //杩斿洖瀵硅薄鐨勫紩鐢紝濡傛灉涓嶅瓨鍦ㄤ細鏀惧叆鏂扮殑key,value + AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats()); + stats.totalCount += result.getDataCount(); + stats.delayCount1 += result.getDataDelayCount1(); + stats.delayCount2 += result.getDataDelayCount2(); + stats.delayCount3 += result.getDataDelayCount3(); + } + + + /** + * 杞﹁締鐐逛綅鍦ㄧ嚎鐜囧拰瑙嗗浘搴撳鎺ョǔ瀹氭�� + */ + private CheckIndexCar createOrUpdateCheckIndexCar(String key, AreaStats stats, List<CheckIndexCar> checkIndexCarList) { + CheckIndexCar checkIndexCar; + + // 妫�鏌ユ槸鍚﹀凡瀛樺湪浠婃棩鏁版嵁 + Optional<CheckIndexCar> existingCar = checkIndexCarList.stream() + .filter(car -> key.equals(car.getDeptId().toString()) && + (key.startsWith("Province_") ? CheckConstants.Examine_Tag_City.equals(car.getExamineTag()) + : CheckConstants.Examine_Tag_County.equals(car.getExamineTag()))) + .findFirst(); + + if (existingCar.isPresent()) { + checkIndexCar = existingCar.get(); + } else { + checkIndexCar = new CheckIndexCar(); + checkIndexCar.setDeptId(key.startsWith("Province_") ? Long.parseLong(key.split("_")[1]) : Long.parseLong(key)); + checkIndexCar.setExamineTag(key.startsWith("Province_") ? CheckConstants.Examine_Tag_City : CheckConstants.Examine_Tag_County); + checkIndexCar.setCreateTime(new Date()); + } + + //璋冪敤鎶撴媿涓婁紶鍙婃椂鎬ц绠楁柟娉� + Map<String, Object> param = new HashMap<>(); + param.put("totalCount", stats.totalCount); + param.put("delayCount1", stats.delayCount1); + param.put("delayCount2", stats.delayCount2); + param.put("delayCount3", stats.delayCount3); + BigDecimal index = snapshopDelay(param); + checkIndexCar.setSiteOnline(index); + return checkIndexCar; + } +} diff --git a/ycl-server/src/main/java/com/ycl/calculate/FaceInFoAccuracyCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/FaceInFoAccuracyCalculation.java new file mode 100644 index 0000000..3eef548 --- /dev/null +++ b/ycl-server/src/main/java/com/ycl/calculate/FaceInFoAccuracyCalculation.java @@ -0,0 +1,132 @@ +package com.ycl.calculate; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.ycl.platform.domain.entity.CheckIndexFace; +import com.ycl.platform.domain.entity.TMonitor; +import com.ycl.platform.domain.result.HK.MonitoringDetailResult; +import com.ycl.platform.mapper.CheckIndexFaceMapper; +import com.ycl.platform.mapper.TMonitorMapper; +import com.ycl.platform.service.ICheckIndexFaceService; +import com.ycl.platform.service.ITMonitorService; +import com.ycl.system.mapper.SysConfigMapper; +import constant.ApiConstants; +import constant.CheckConstants; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import utils.DateUtils; + +import java.math.BigDecimal; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 浜鸿劯鍗″彛淇℃伅閲囬泦鍑嗙‘鐜� 璁惧缂栫爜銆佽鏀垮尯鍒掍唬鐮併�佸畨瑁呬綅缃�佸潗鏍囩粡绾害淇℃伅瀹屾暣鍑嗙‘ + * 鑾峰彇鍒嗙渷鍘呫�佸尯鍩熺殑map<k,v> k涓篸eptId鎴栬�匬rovince_deptId + * 鏇存柊鎴栨柊澧� + */ +@Component +public class FaceInFoAccuracyCalculation extends IndexCalculationServe implements CalculationStrategy<MonitoringDetailResult> { + @Autowired + private CheckIndexFaceMapper checkIndexFaceMapper; + @Autowired + private ICheckIndexFaceService checkIndexFaceService; + @Autowired + private SysConfigMapper sysConfigMapper; + @Autowired + private ITMonitorService monitorService; + @Autowired + private TMonitorMapper monitorMapper; + + //鍖哄煙杞﹁締淇℃伅閲囬泦鍑嗙‘鐜囩殑鍐呴儴绫� + private static class AreaStats { + int totalSites = 0; + int qualifySite = 0; + } + + @Override + public void calculate(List<MonitoringDetailResult> list) { + if (CollectionUtils.isEmpty(list)) { + return; + } + //杩斿洖浠ュ浗鏍囩爜涓簁ey鐨勮澶噈ap + //TODO锛歮onitor鍘绘帀浜哾eptId + Map<String, TMonitor> monitorMap = monitorService.list(new QueryWrapper<TMonitor>() + .in("serial_number", list.stream().map(MonitoringDetailResult::getExternalIndexCode).collect(Collectors.toList()))) + .stream().collect(Collectors.toMap(TMonitor::getSerialNumber, Function.identity())); + //鑾峰彇鐪佸巺鍥芥爣鐮侀泦鍚� + List<String> provinceIds = getProvince(); + Map<String, AreaStats> areaStatsMap = new HashMap<>(); + + for (MonitoringDetailResult result : list) { + TMonitor monitor = monitorMap.get(result.getExternalIndexCode()); + if (monitor == null) continue; + + String deptId = monitor.getDeptId().toString(); + + updateAreaStats(areaStatsMap, deptId, result); + + // 澶勭悊鐪佸巺鏁版嵁 + if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { + String provinceKey = "Province_" + deptId; + updateAreaStats(areaStatsMap, provinceKey, result); + } + } + + // 鏌ヨ鏄惁index琛ㄥ凡缁忓瓨鍦ㄤ粖鏃ユ暟鎹� + List<CheckIndexFace> checkIndexFaceList = checkIndexFaceMapper.selectToday(DateUtils.getDate()); + List<CheckIndexFace> checkIndexFaces = new ArrayList<>(); + areaStatsMap.forEach((deptId, stats) -> { + if (stats.totalSites > 0) { + CheckIndexFace checkIndexFace = createOrUpdateCheckIndexFace(deptId, stats, checkIndexFaceList); + checkIndexFaces.add(checkIndexFace); + } + }); + + checkIndexFaceService.saveOrUpdateBatch(checkIndexFaces); + } + + + /** + * 绱鎬荤偣浣嶆暟銆佹爣娉ㄥ紓甯哥偣浣嶆暟 + */ + private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, MonitoringDetailResult result) { + //杩斿洖瀵硅薄鐨勫紩鐢紝濡傛灉涓嶅瓨鍦ㄤ細鏀惧叆鏂扮殑key,value + AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats()); + stats.totalSites++; + if (ApiConstants.HK_Info_LayType_Normal.equals(result.getLalType()) && ApiConstants.HK_Info_GbCodeType_Normal.equals(result.getGbCodeType())) { + stats.qualifySite++; + } + } + + /** + * 杞﹁締淇℃伅閲囬泦姝g‘鐜� + */ + private CheckIndexFace createOrUpdateCheckIndexFace(String key, AreaStats stats, List<CheckIndexFace> checkIndexFaceList) { + CheckIndexFace checkIndexFace; + + // 妫�鏌ユ槸鍚﹀凡瀛樺湪浠婃棩鏁版嵁 + Optional<CheckIndexFace> existingFace = checkIndexFaceList.stream() + .filter(car -> key.equals(car.getDeptId().toString()) && + (key.startsWith("Province_") ? CheckConstants.Examine_Tag_City.equals(car.getExamineTag()) + : CheckConstants.Examine_Tag_County.equals(car.getExamineTag()))) + .findFirst(); + + if (existingFace.isPresent()) { + checkIndexFace = existingFace.get(); + } else { + checkIndexFace = new CheckIndexFace(); + checkIndexFace.setDeptId(key.startsWith("Province_") ? Long.parseLong(key.split("_")[1]) : Long.parseLong(key)); + checkIndexFace.setExamineTag(key.startsWith("Province_") ? CheckConstants.Examine_Tag_City : CheckConstants.Examine_Tag_County); + checkIndexFace.setCreateTime(new Date()); + } + //璋冪敤璁$畻鏂规硶 + Map<String, Object> siteOnlineParam = new HashMap<>(); + siteOnlineParam.put("totalSites", stats.totalSites); + siteOnlineParam.put("qualifySite", stats.qualifySite); + BigDecimal infoAccuracy = infoAccuracy(siteOnlineParam); + checkIndexFace.setFaceInformationCollectionAccuracy(infoAccuracy); + return checkIndexFace; + } +} diff --git a/ycl-server/src/main/java/com/ycl/calculate/FaceSiteOnlineCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/FaceSiteOnlineCalculation.java index 524a2b4..0058832 100644 --- a/ycl-server/src/main/java/com/ycl/calculate/FaceSiteOnlineCalculation.java +++ b/ycl-server/src/main/java/com/ycl/calculate/FaceSiteOnlineCalculation.java @@ -1,18 +1,13 @@ 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.CheckIndexFace; import com.ycl.platform.domain.entity.TMonitor; import com.ycl.platform.domain.result.HK.SnapshotDataMonitorResult; -import com.ycl.platform.mapper.CheckIndexCarMapper; import com.ycl.platform.mapper.CheckIndexFaceMapper; -import com.ycl.platform.service.ICheckIndexCarService; import com.ycl.platform.service.ICheckIndexFaceService; import com.ycl.platform.service.ITMonitorService; -import com.ycl.platform.service.impl.CheckIndexFaceServiceImpl; import com.ycl.system.mapper.SysConfigMapper; -import com.ycl.system.mapper.SysDeptMapper; import constant.ApiConstants; import constant.CheckConstants; import constant.CheckSnapCountConstants; @@ -35,7 +30,7 @@ * 鏇存柊鎴栨柊澧� */ @Component -public class FaceSiteOnlineCalculation implements CalculationStrategy<SnapshotDataMonitorResult> { +public class FaceSiteOnlineCalculation extends IndexCalculationServe implements CalculationStrategy<SnapshotDataMonitorResult> { @Autowired private CheckIndexFaceMapper checkIndexFaceMapper; @Autowired @@ -57,14 +52,14 @@ if (CollectionUtils.isEmpty(list)) { return; } - - Map<String, AreaStats> areaStatsMap = new HashMap<>(); + //杩斿洖浠ュ浗鏍囩爜涓簁ey鐨勮澶噈ap Map<String, TMonitor> monitorMap = monitorService.list(new QueryWrapper<TMonitor>() .in("serial_number", list.stream().map(SnapshotDataMonitorResult::getExternalIndexCode).collect(Collectors.toList()))) .stream().collect(Collectors.toMap(TMonitor::getSerialNumber, Function.identity())); + //鑾峰彇鐪佸巺鍥芥爣鐮侀泦鍚� + List<String> provinceIds = getProvince(); - // TODO: 鍒嗙渷鍘呭競灞� 闇�瑕佽ˉ鍏呴泦鍚堟暟鎹� - List<String> provinceIds = new ArrayList<>(); // 杩欓噷闇�瑕佹牴鎹偣浣嶈ˉ鍏� + Map<String, AreaStats> areaStatsMap = new HashMap<>(); for (SnapshotDataMonitorResult result : list) { TMonitor monitor = monitorMap.get(result.getExternalIndexCode()); @@ -138,15 +133,19 @@ checkIndexFace.setCreateTime(new Date()); } - // 鐐逛綅鍦ㄧ嚎鐜� - BigDecimal totalSitesBd = new BigDecimal(stats.totalSites); - BigDecimal offlineSitesBd = new BigDecimal(stats.offlineSites); - BigDecimal onlineSitesBd = totalSitesBd.subtract(offlineSitesBd); - checkIndexFace.setSiteOnline(onlineSitesBd.divide(totalSitesBd, 4, RoundingMode.HALF_UP)); + //璋冪敤鐐逛綅鍦ㄧ嚎璁$畻鏂规硶 + Map<String, Object> siteOnlineParam = new HashMap<>(); + siteOnlineParam.put("totalSites", stats.totalSites); + siteOnlineParam.put("offlineSites", stats.offlineSites); + BigDecimal siteOnline = siteOnline(siteOnlineParam); + checkIndexFace.setSiteOnline(siteOnline); //瑙嗗浘搴撳鎺ョǔ瀹氭�� BigDecimal avgCount = key.startsWith("Province_") ? cityCountAvg : countyCountAvg; - checkIndexFace.setViewConnectStability(new BigDecimal(stats.totalDataSum).divide(avgCount, 4, RoundingMode.HALF_UP)); - + Map<String, Object> viewConnectParam = new HashMap<>(); + viewConnectParam.put("totalDataSum", stats.totalDataSum); + viewConnectParam.put("avgCount", avgCount); + BigDecimal viewConnectStability = viewConnectStability(viewConnectParam); + checkIndexFace.setViewConnectStability(viewConnectStability); return checkIndexFace; } } diff --git a/ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDelayCalculation.java b/ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDelayCalculation.java new file mode 100644 index 0000000..8013800 --- /dev/null +++ b/ycl-server/src/main/java/com/ycl/calculate/FaceSnapshotDelayCalculation.java @@ -0,0 +1,136 @@ +package com.ycl.calculate; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.ycl.platform.domain.entity.CheckIndexFace; +import com.ycl.platform.domain.entity.TMonitor; +import com.ycl.platform.domain.result.HK.SnapshotDelayMonitorResult; +import com.ycl.platform.mapper.CheckIndexFaceMapper; +import com.ycl.platform.service.ICheckIndexFaceService; +import com.ycl.platform.service.ITMonitorService; +import com.ycl.system.mapper.SysConfigMapper; +import constant.CheckConstants; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import utils.DateUtils; + +import java.math.BigDecimal; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 璁$畻浜鸿劯璁惧鎶撴媿鏁版嵁涓婁紶鍙婃椂鎬� + * 鑾峰彇鍒嗙渷鍘呫�佸尯鍩熺殑map<k,v> k涓篸eptId鎴栬�匬rovince_deptId + * 寰幆map璁$畻鏁版嵁涓婁紶鍙婃椂鎬� + * 鏇存柊鎴栨柊澧� + */ +@Component +public class FaceSnapshotDelayCalculation extends IndexCalculationServe implements CalculationStrategy<SnapshotDelayMonitorResult> { + @Autowired + private CheckIndexFaceMapper checkIndexFaceMapper; + @Autowired + private SysConfigMapper sysConfigMapper; + @Autowired + private ITMonitorService monitorService; + @Autowired + private ICheckIndexFaceService checkIndexFaceService; + + //鍖哄煙杞﹁締鐐逛綅鍦ㄧ嚎鎸囨爣鐨勫唴閮ㄧ被 + private static class AreaStats { + int totalCount = 0; + //0-180s + int delayCount1 = 0; + //180-300s + int delayCount2 = 0; + //300-600s + int delayCount3 = 0; + } + + @Override + public void calculate(List<SnapshotDelayMonitorResult> list) { + if (CollectionUtils.isEmpty(list)) { + return; + } + + //鑾峰緱鍥芥爣鐮佷负key鐨勮澶噈ap + Map<String, TMonitor> monitorMap = monitorService.list(new QueryWrapper<TMonitor>() + .in("serial_number", list.stream().map(SnapshotDelayMonitorResult::getExternalIndexCode).collect(Collectors.toList()))) + .stream().collect(Collectors.toMap(TMonitor::getSerialNumber, Function.identity())); + //鑾峰彇鐪佸巺鍥芥爣鐮侀泦鍚� + List<String> provinceIds = getProvince(); + + Map<String, AreaStats> areaStatsMap = new HashMap<>(); + for (SnapshotDelayMonitorResult result : list) { + TMonitor monitor = monitorMap.get(result.getExternalIndexCode()); + if (monitor == null) continue; + + String deptId = monitor.getDeptId().toString(); + updateAreaStats(areaStatsMap, deptId, result); + + // 澶勭悊鐪佸巺鏁版嵁 + if (!CollectionUtils.isEmpty(provinceIds) && provinceIds.contains(monitor.getSerialNumber())) { + String provinceKey = "Province_" + deptId; + updateAreaStats(areaStatsMap, provinceKey, result); + } + } + + // 鏌ヨ鏄惁index琛ㄥ凡缁忓瓨鍦ㄤ粖鏃ユ暟鎹� + List<CheckIndexFace> checkIndexFaceList = checkIndexFaceMapper.selectToday(DateUtils.getDate()); + List<CheckIndexFace> checkIndexFaces = new ArrayList<>(); + areaStatsMap.forEach((deptId, stats) -> { + if (stats.totalCount > 0) { + CheckIndexFace checkIndexFace = createOrUpdateCheckIndexFace(deptId, stats, checkIndexFaceList); + checkIndexFaces.add(checkIndexFace); + } + }); + + checkIndexFaceService.saveOrUpdateBatch(checkIndexFaces); + } + + /** + * 绱鎬荤偣浣嶆暟銆佺绾挎暟銆佹�绘姄鎷嶉噺 + */ + private void updateAreaStats(Map<String, AreaStats> areaStatsMap, String key, SnapshotDelayMonitorResult result) { + //杩斿洖瀵硅薄鐨勫紩鐢紝濡傛灉涓嶅瓨鍦ㄤ細鏀惧叆鏂扮殑key,value + AreaStats stats = areaStatsMap.computeIfAbsent(key, k -> new AreaStats()); + stats.totalCount += result.getDataCount(); + stats.delayCount1 += result.getDataDelayCount1(); + stats.delayCount2 += result.getDataDelayCount2(); + stats.delayCount3 += result.getDataDelayCount3(); + } + + + /** + * 杞﹁締鐐逛綅鍦ㄧ嚎鐜囧拰瑙嗗浘搴撳鎺ョǔ瀹氭�� + */ + private CheckIndexFace createOrUpdateCheckIndexFace(String key, AreaStats stats, List<CheckIndexFace> checkIndexFaceList) { + CheckIndexFace checkIndexFace; + + // 妫�鏌ユ槸鍚﹀凡瀛樺湪浠婃棩鏁版嵁 + Optional<CheckIndexFace> existingFace = checkIndexFaceList.stream() + .filter(face -> key.equals(face.getDeptId().toString()) && + (key.startsWith("Province_") ? CheckConstants.Examine_Tag_City.equals(face.getExamineTag()) + : CheckConstants.Examine_Tag_County.equals(face.getExamineTag()))) + .findFirst(); + + if (existingFace.isPresent()) { + checkIndexFace = existingFace.get(); + } else { + checkIndexFace = new CheckIndexFace(); + checkIndexFace.setDeptId(key.startsWith("Province_") ? Long.parseLong(key.split("_")[1]) : Long.parseLong(key)); + checkIndexFace.setExamineTag(key.startsWith("Province_") ? CheckConstants.Examine_Tag_City : CheckConstants.Examine_Tag_County); + checkIndexFace.setCreateTime(new Date()); + } + + //璋冪敤鎶撴媿涓婁紶鍙婃椂鎬ц绠楁柟娉� + Map<String, Object> param = new HashMap<>(); + param.put("totalCount", stats.totalCount); + param.put("delayCount1", stats.delayCount1); + param.put("delayCount2", stats.delayCount2); + param.put("delayCount3", stats.delayCount3); + BigDecimal index = snapshopDelay(param); + checkIndexFace.setSiteOnline(index); + return checkIndexFace; + } +} diff --git a/ycl-server/src/main/java/com/ycl/calculate/IndexCalculationServe.java b/ycl-server/src/main/java/com/ycl/calculate/IndexCalculationServe.java new file mode 100644 index 0000000..6d5d7b7 --- /dev/null +++ b/ycl-server/src/main/java/com/ycl/calculate/IndexCalculationServe.java @@ -0,0 +1,69 @@ +package com.ycl.calculate; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.ycl.platform.domain.entity.TMonitor; +import com.ycl.platform.domain.result.HK.SnapshotDataMonitorResult; +import com.ycl.platform.service.ITMonitorService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 璁$畻鍏紡 + */ +@Component +public class IndexCalculationServe { + + @Autowired + private ITMonitorService monitorService; + + //鐐逛綅鍦ㄧ嚎鐜� + public BigDecimal siteOnline(Map<String, Object> param) { + BigDecimal totalSites = new BigDecimal((Integer) param.get("totalSites")); + BigDecimal offlineSites = new BigDecimal((Integer) param.get("offlineSites")); + BigDecimal onlineSites = totalSites.subtract(offlineSites); + return onlineSites.divide(totalSites, 4, RoundingMode.HALF_UP); + } + + //瑙嗗浘搴撳鎺ョǔ瀹氭�� + public BigDecimal viewConnectStability(Map<String, Object> param) { + BigDecimal totalDataSum = new BigDecimal((Integer) param.get("totalDataSum")); + BigDecimal avgCount = new BigDecimal((Integer) param.get("avgCount")); + return avgCount.divide(totalDataSum, 4, RoundingMode.HALF_UP); + } + + //鏍囨敞姝g‘鐜� + public BigDecimal infoAccuracy(Map<String, Object> param) { + BigDecimal totalSitesCount = new BigDecimal((Integer) param.get("totalSites")); + BigDecimal qualifySiteCount = new BigDecimal((Integer) param.get("qualifySite")); + return qualifySiteCount.divide(totalSitesCount, 4, RoundingMode.HALF_UP); + } + + //鏁版嵁涓婁紶鍙婃椂鎬� + public BigDecimal snapshopDelay(Map<String, Object> param) { + BigDecimal totalCount = new BigDecimal((Integer) param.get("totalCount")); + BigDecimal delayCount1 = new BigDecimal((Integer) param.get("delayCount1")); + BigDecimal delayCount2 = new BigDecimal((Integer) param.get("delayCount2")); + BigDecimal delayCount3 = new BigDecimal((Integer) param.get("delayCount3")); + + BigDecimal result = delayCount1.divide(totalCount, 10, RoundingMode.HALF_UP).multiply(BigDecimal.ONE) + .add(delayCount2.divide(totalCount, 10, RoundingMode.HALF_UP).multiply(new BigDecimal("0.8"))) + .add(delayCount3.divide(totalCount, 10, RoundingMode.HALF_UP).multiply(new BigDecimal("0.6"))); + return result.setScale(4, RoundingMode.HALF_UP); + } + //杩斿洖鐪佸巺鍥芥爣鐮侀泦鍚� + public List<String> getProvince() { + // TODO: 鍒嗙渷鍘呭競灞� 闇�瑕佽ˉ鍏呴泦鍚堟暟鎹� + List<String> list = new ArrayList<>(); + return list; + } +} diff --git a/ycl-server/src/main/java/com/ycl/calculate/IndexCalculationUtils.java b/ycl-server/src/main/java/com/ycl/calculate/IndexCalculationUtils.java deleted file mode 100644 index 919e9c1..0000000 --- a/ycl-server/src/main/java/com/ycl/calculate/IndexCalculationUtils.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.ycl.calculate; - - -import org.springframework.stereotype.Service; - -import java.math.BigDecimal; -import java.math.RoundingMode; -import java.util.Map; - -/** - * 璁$畻鍏紡 - */ -public class IndexCalculationUtils { - - //鐐逛綅鍦ㄧ嚎鐜� - public static BigDecimal siteOnline(Map<String, Object> param) { - BigDecimal totalSitesBd = new BigDecimal((Integer) param.get("totalSites")); - BigDecimal offlineSitesBd = new BigDecimal((Integer) param.get("offlineSites")); - BigDecimal onlineSitesBd = totalSitesBd.subtract(offlineSitesBd); - return onlineSitesBd.divide(totalSitesBd, 4, RoundingMode.HALF_UP); - } - - //瑙嗗浘搴撳鎺ョǔ瀹氭�� - public static BigDecimal viewConnectStability(Map<String, Object> param){ - BigDecimal totalDataSum = new BigDecimal((Integer) param.get("totalDataSum")); - BigDecimal avgCount = new BigDecimal((Integer) param.get("avgCount")); - return totalDataSum.divide(avgCount, 4, RoundingMode.HALF_UP); - } - -} 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 faa06c8..912cd56 100644 --- a/ycl-server/src/main/java/com/ycl/factory/IndexCalculationFactory.java +++ b/ycl-server/src/main/java/com/ycl/factory/IndexCalculationFactory.java @@ -1,8 +1,6 @@ package com.ycl.factory; -import com.ycl.calculate.CalculationStrategy; -import com.ycl.calculate.CarSiteOnlineCalculation; -import com.ycl.calculate.FaceSiteOnlineCalculation; +import com.ycl.calculate.*; import constant.CalculationStrategyConstants; import java.util.HashMap; @@ -12,8 +10,12 @@ private static final Map<String, CalculationStrategy> calculators = new HashMap<>(); static { - calculators.put(CalculationStrategyConstants.CAR_SiteOnline_ViewStability, new CarSiteOnlineCalculation()); + calculators.put(CalculationStrategyConstants.Car_SiteOnline_ViewStability, new CarSiteOnlineCalculation()); calculators.put(CalculationStrategyConstants.Face_SiteOnline_ViewStability, new FaceSiteOnlineCalculation()); + calculators.put(CalculationStrategyConstants.Car_InfoAccuracy, new CarInFoAccuracyCalculation()); + calculators.put(CalculationStrategyConstants.Face_InfoAccuracy, new FaceInFoAccuracyCalculation()); + calculators.put(CalculationStrategyConstants.Car_SnapshotDelay, new CarSnapshotDelayCalculation()); + calculators.put(CalculationStrategyConstants.Face_SnapshotDelay, new FaceSnapshotDelayCalculation()); } public static CalculationStrategy getCalculator(String indexName) { diff --git a/ycl-server/src/main/java/com/ycl/feign/UYClient.java b/ycl-server/src/main/java/com/ycl/feign/UYClient.java index 44d25b8..7a5ccad 100644 --- a/ycl-server/src/main/java/com/ycl/feign/UYClient.java +++ b/ycl-server/src/main/java/com/ycl/feign/UYClient.java @@ -15,7 +15,7 @@ */ @Component -@FeignClient(name = "UYClient", url = "${request.youYunDomain}", configuration = YYFeignConfig.class) +@FeignClient(name = "UYClient", url = "${request.youYunDomain}", configuration = UYFeignConfig.class) public interface UYClient { /** diff --git a/ycl-server/src/main/java/com/ycl/feign/YYFeignConfig.java b/ycl-server/src/main/java/com/ycl/feign/UYFeignConfig.java similarity index 95% rename from ycl-server/src/main/java/com/ycl/feign/YYFeignConfig.java rename to ycl-server/src/main/java/com/ycl/feign/UYFeignConfig.java index cdc7833..d11f33e 100644 --- a/ycl-server/src/main/java/com/ycl/feign/YYFeignConfig.java +++ b/ycl-server/src/main/java/com/ycl/feign/UYFeignConfig.java @@ -11,7 +11,7 @@ * 浼樹簯鎺ュ彛閰嶇疆 */ @Configuration -public class YYFeignConfig { +public class UYFeignConfig { /** * 娉ㄥ叆鎷︽埅鍣� */ diff --git a/ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java b/ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java index 0132e86..552305c 100644 --- a/ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java +++ b/ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java @@ -65,10 +65,16 @@ /** * 鑾峰彇瑙嗛缁熻 - * @param cameraFunType 绫诲瀷 + * @param tMonitor 鏉′欢 * @return 缁熻鏁� */ Map<String, String> getVideoCount(TMonitor tMonitor); - Map<String, String> recoveryException(); + Map<String, String> recoveryException(String time); + + /** + * 鑾峰彇鎭㈠寮傚父鎸佺画鍏虫敞璁惧 + * @return 璁惧 + */ + List<TMonitorVO> selectRecoveryMonitor(String time); } diff --git a/ycl-server/src/main/java/com/ycl/platform/service/ITMonitorService.java b/ycl-server/src/main/java/com/ycl/platform/service/ITMonitorService.java index 38de510..5cfb83e 100644 --- a/ycl-server/src/main/java/com/ycl/platform/service/ITMonitorService.java +++ b/ycl-server/src/main/java/com/ycl/platform/service/ITMonitorService.java @@ -66,7 +66,7 @@ /** * 鑾峰彇鎸囧畾鎽勫儚澶村姛鑳界被鍨嬩笅鐨勮棰戞暟閲忋�� * - * @param cameraFunType 鎽勫儚澶村姛鑳界被鍨嬶紝鐢ㄤ簬绛涢�夎棰戙�� + * @param tMonitor 鏉′欢 * @return 杩斿洖涓�涓寘鍚棰戞暟閲忕殑Map瀵硅薄锛屽叾涓璳ey涓虹粺璁℃寚鏍囷紝value涓哄搴斿姛鑳界被鍨嬩笅鐨勭粺璁℃暟閲忋�� */ Map<String, String> getVideoCount(TMonitor tMonitor); diff --git a/ycl-server/src/main/java/com/ycl/platform/service/YwPointService.java b/ycl-server/src/main/java/com/ycl/platform/service/YwPointService.java index e9603bd..a6e6d44 100644 --- a/ycl-server/src/main/java/com/ycl/platform/service/YwPointService.java +++ b/ycl-server/src/main/java/com/ycl/platform/service/YwPointService.java @@ -85,4 +85,13 @@ * @return */ Result select(String keyword); + + /** + * 鎵归噺鍚屾鐘舵�� + * + * @param pointIds 鐐逛綅id + * @param recovery 鐘舵�� + * @return 鏁伴噺 + */ + boolean updateRecovery(List<Integer> pointIds, int recovery); } diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateReportServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateReportServiceImpl.java index e603c06..992dcee 100644 --- a/ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateReportServiceImpl.java +++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/CalculateReportServiceImpl.java @@ -204,7 +204,7 @@ CalculateExport calculateExport = new CalculateExport(); calculateExport.setRuleName("鍚堣"); calculateExport.setNum(list.stream().mapToInt(CalculateExport::getNum).sum()); - calculateExport.setScore(list.stream().mapToInt(CalculateExport::getScore).sum()); + calculateExport.setScore(100 + list.stream().mapToInt(CalculateExport::getScore).sum()); list.add(calculateExport); // 杈撳嚭鏂囦欢 response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/CheckIndexCarServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/CheckIndexCarServiceImpl.java index 45313ed..40e0402 100644 --- a/ycl-server/src/main/java/com/ycl/platform/service/impl/CheckIndexCarServiceImpl.java +++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/CheckIndexCarServiceImpl.java @@ -1,7 +1,6 @@ package com.ycl.platform.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.ycl.calculate.IndexCalculationUtils; import com.ycl.platform.domain.entity.CheckIndexCar; import com.ycl.platform.mapper.CheckIndexCarMapper; import com.ycl.platform.service.ICheckIndexCarService; 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 57e65f8..88610bb 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 @@ -6,11 +6,14 @@ import com.ycl.platform.domain.vo.TMonitorVO; import com.ycl.platform.mapper.TMonitorMapper; import com.ycl.platform.service.ITMonitorService; +import com.ycl.system.service.ISysConfigService; +import com.ycl.utils.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; import java.util.Map; +import java.util.Objects; /** * 璁惧璧勪骇Service涓氬姟灞傚鐞� @@ -23,6 +26,8 @@ { @Autowired private TMonitorMapper tMonitorMapper; + @Autowired + private ISysConfigService configService; /** * 鏌ヨ璁惧璧勪骇 @@ -46,7 +51,16 @@ @DataScope(deptAlias = "d",userAlias = "u") public List<TMonitorVO> selectTMonitorList(TMonitor tMonitor) { - return tMonitorMapper.selectTMonitorList(tMonitor); + List<TMonitorVO> monitors = tMonitorMapper.selectTMonitorList(tMonitor); + if (Objects.equals(tMonitor.getRecovery(), 1)) { + String time = configService.selectConfigByKey("abnormal.equipment.continuous.attention.time"); + if (StringUtils.isBlank(time)) { + throw new RuntimeException("璇烽厤缃紓甯歌澶囪繛缁叧娉ㄦ椂闂�"); + } + List<TMonitorVO> recoveryMonitors = tMonitorMapper.selectRecoveryMonitor(time); + monitors.addAll(recoveryMonitors); + } + return monitors; } /** @@ -105,6 +119,7 @@ @Override public Map<String, String> recoveryException() { - return tMonitorMapper.recoveryException(); + String time = configService.selectConfigByKey("abnormal.equipment.continuous.attention.time"); + return tMonitorMapper.recoveryException(time); } } diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java index 7b6af3f..32c27db 100644 --- a/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java +++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java @@ -19,6 +19,7 @@ import com.ycl.platform.service.NotifyService; import com.ycl.platform.service.WorkOrderAuditingRecordService; import com.ycl.platform.service.WorkOrderService; +import com.ycl.platform.service.YwPointService; import com.ycl.system.Result; import com.ycl.system.model.LoginUser; import com.ycl.system.page.PageUtil; @@ -26,6 +27,10 @@ import com.ycl.utils.SecurityUtils; import com.ycl.utils.redis.RedisCache; import com.ycl.utils.uuid.IdUtils; +import enumeration.general.NotifyTypeEnum; +import enumeration.general.UrgentLevelEnum; +import enumeration.general.WorkOrderDistributeWayEnum; +import enumeration.general.WorkOrderStatusEnum; import enumeration.general.*; import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; @@ -40,6 +45,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; /** @@ -53,8 +59,7 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder> implements WorkOrderService { private final WorkOrderMapper workOrderMapper; - private final YwUnitMapper ywUnitMapper; - private final YwPeopleMapper ywPeopleMapper; + private final YwPointService ywPointService; private final WorkOrderAuditingRecordMapper workOrderAuditingRecordMapper; private final WorkOrderAuditingRecordService workOrderAuditingRecordService; private final WorkOrderYwConditionRecordMapper workOrderYwConditionRecordMapper; @@ -124,6 +129,10 @@ UrgentLevelEnum.WARNING, workOrder.getWorkOrderNo()); notifyService.save(notify); + // 鍚屾鐐逛綅鐘舵�� + if (form.getAuditingResult() == WorkOrderStatusEnum.AUDITING_SUCCESS) { + ywPointService.updateRecovery(Collections.singletonList(workOrder.getPointId()), 0); + } return Result.ok("鎿嶄綔鎴愬姛"); } @@ -267,53 +276,49 @@ } @Override + @Transactional public Result distributeFast(DistributeWorkOrderVO data) { // 鑾峰彇褰撳墠鏃堕棿 LocalDateTime now = LocalDateTime.now(ZoneId.systemDefault()); + data.setEnd(now); switch (data.getFastWay()) { case LAST_HALF_HOUR: data.setStart(now.minusMinutes(30)); - data.setEnd(now); break; case LAST_HOUR: data.setStart(now.minusHours(1)); - data.setEnd(now); break; case LAST_TWO_HOUR: data.setStart(now.minusHours(2)); - data.setEnd(now); break; case LAST_DAY: data.setStart(now.minusDays(1)); - data.setEnd(now); break; } // 鏌ヨ绗﹀悎鏉′欢鐨勫伐鍗� - List<Integer> ids = new LambdaQueryChainWrapper<>(baseMapper) + List<WorkOrder> list = new LambdaQueryChainWrapper<>(baseMapper) + .select(WorkOrder::getId, WorkOrder::getPointId) .eq(WorkOrder::getStatus, WorkOrderStatusEnum.WAIT_DISTRIBUTE) .eq(Objects.nonNull(data.getUnitId()), WorkOrder::getUnitId, data.getUnitId()) .eq(WorkOrder::getErrorType, data.getErrorType()) .between(WorkOrder::getCreateTime, data.getStart(), data.getEnd()) .orderByDesc(WorkOrder::getCreateTime) .last("limit " + data.getFastNumLimit()) - .list() - .stream() - .map(WorkOrder::getId) - .toList(); + .list(); + List<Integer> ids = list.stream().map(WorkOrder::getId).toList(); + List<Integer> pointIds = list.stream().map(WorkOrder::getPointId).toList(); - if (ids.isEmpty()) { - return Result.error("娌℃湁绗﹀悎鏉′欢鐨勫伐鍗�"); - } - if (!getDistributeLock()) { - return Result.error("姝ゅ埢鏈変汉涓嬪彂涓紝涓洪伩鍏嶅啿绐侊紝璇风◢鍚庨噸璇�"); - } + if (ids.isEmpty()) { return Result.error("娌℃湁绗﹀悎鏉′欢鐨勫伐鍗�"); } + if (!getDistributeLock()) { return Result.error("姝ゅ埢鏈変汉涓嬪彂涓紝涓洪伩鍏嶅啿绐侊紝璇风◢鍚庨噸璇�"); } try { new LambdaUpdateChainWrapper<>(baseMapper) .set(WorkOrder::getStatus, WorkOrderStatusEnum.DISTRIBUTED) .in(WorkOrder::getId, ids) .update(); addDistributeRecord(ids, WorkOrderDistributeWayEnum.FAST_DISTRIBUTE); + // 鍚屾鐐逛綅鐘舵�� + ywPointService.updateRecovery(pointIds, 1); return Result.ok("鎴愬姛涓嬪彂" + ids.size() + "鏉″伐鍗�"); } catch (Exception e) { return Result.error("鎿嶄綔澶辫触"); @@ -323,11 +328,10 @@ } @Override + @Transactional public Result selectedIdsDistribute(DistributeWorkOrderQuery query) { WorkOrderDistributeWayEnum distributeWayEnum = WorkOrderDistributeWayEnum.SELECTED_DISTRIBUTE; - if (!getDistributeLock()) { - return Result.error("姝ゅ埢鏈変汉涓嬪彂涓紝涓洪伩鍏嶅啿绐侊紝璇风◢鍚庨噸璇�"); - } + if (!getDistributeLock()) { return Result.error("姝ゅ埢鏈変汉涓嬪彂涓紝涓洪伩鍏嶅啿绐侊紝璇风◢鍚庨噸璇�"); } try { if (query.getIds().isEmpty()) { query.setIds(new LambdaQueryChainWrapper<>(baseMapper) @@ -340,14 +344,15 @@ .collect(Collectors.toList())); distributeWayEnum = WorkOrderDistributeWayEnum.ALL_DISTRIBUTE; } - if (query.getIds().isEmpty()) { - return Result.error("娌℃湁宸ュ崟寰呬笅鍙�"); - } + if (query.getIds().isEmpty()) { return Result.error("娌℃湁宸ュ崟寰呬笅鍙�"); } new LambdaUpdateChainWrapper<>(baseMapper) .set(WorkOrder::getStatus, WorkOrderStatusEnum.DISTRIBUTED) .in(WorkOrder::getId, query.getIds()) .update(); addDistributeRecord(query.getIds(), distributeWayEnum); + // 鍚屾鐐逛綅鐘舵�� + List<Integer> pointIds = new LambdaQueryChainWrapper<>(baseMapper).select(WorkOrder::getPointId).in(WorkOrder::getId, query.getIds()).list().stream().map(WorkOrder::getPointId).toList(); + ywPointService.updateRecovery(pointIds, 1); return Result.ok("鎴愬姛涓嬪彂" + query.getIds().size() + "鏉″伐鍗�"); } catch (Exception e) { return Result.error("鎿嶄綔澶辫触"); diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/YwPointServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/YwPointServiceImpl.java index b18d3a5..258f830 100644 --- a/ycl-server/src/main/java/com/ycl/platform/service/impl/YwPointServiceImpl.java +++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/YwPointServiceImpl.java @@ -1,43 +1,35 @@ package com.ycl.platform.service.impl; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ycl.platform.base.BaseSelect; -import com.ycl.platform.domain.entity.Region; import com.ycl.platform.domain.entity.YwPeople; import com.ycl.platform.domain.entity.YwPoint; -import com.ycl.platform.domain.entity.YwUnit; import com.ycl.platform.domain.form.BatchEditPointForm; -import com.ycl.platform.mapper.RegionMapper; +import com.ycl.platform.domain.form.YwPointForm; +import com.ycl.platform.domain.query.YwPointQuery; +import com.ycl.platform.domain.vo.YwPointVO; import com.ycl.platform.mapper.YwPeopleMapper; import com.ycl.platform.mapper.YwPointMapper; -import com.ycl.platform.mapper.YwUnitMapper; import com.ycl.platform.service.YwPointService; import com.ycl.platform.service.YwUnitService; import com.ycl.system.Result; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.ycl.platform.domain.form.YwPointForm; -import com.ycl.platform.domain.vo.YwPointVO; -import com.ycl.platform.domain.query.YwPointQuery; -import java.util.List; - -import com.ycl.system.entity.SysUser; import com.ycl.system.mapper.SysDeptMapper; -import com.ycl.system.service.ISysDeptService; - -import com.baomidou.mybatisplus.core.metadata.IPage; import com.ycl.system.page.PageUtil; +import com.ycl.utils.DateUtils; import com.ycl.utils.SecurityUtils; -import enumeration.general.RegionLevelEnum; -import org.springframework.stereotype.Service; +import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; -import java.util.ArrayList; +import org.springframework.util.StringUtils; + +import java.util.List; import java.util.Objects; import java.util.stream.Collectors; -import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; -import lombok.RequiredArgsConstructor; -import org.springframework.util.StringUtils; /** * 杩愮淮鐐逛綅 鏈嶅姟瀹炵幇绫� @@ -214,4 +206,13 @@ }).collect(Collectors.toList()); return Result.ok().data(data); } + + @Override + public boolean updateRecovery(List<Integer> pointIds, int recovery) { + return new LambdaUpdateChainWrapper<>(baseMapper) + .in(YwPoint::getId, pointIds) + .set(YwPoint::getRecovery, recovery) + .set(recovery == 0, YwPoint::getRecoveryTime, DateUtils.getNowDate()) + .update(); + } } 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 0834c2b..5608389 100644 --- a/ycl-server/src/main/java/com/ycl/task/CarTask.java +++ b/ycl-server/src/main/java/com/ycl/task/CarTask.java @@ -3,7 +3,9 @@ import com.ycl.calculate.CalculationStrategy; import com.ycl.factory.IndexCalculationFactory; +import com.ycl.platform.domain.result.HK.CrossDetailResult; import com.ycl.platform.domain.result.HK.SnapshotDataMonitorResult; +import com.ycl.platform.domain.result.HK.SnapshotDelayMonitorResult; import com.ycl.utils.DateUtils; import constant.ApiConstants; import constant.CalculationStrategyConstants; @@ -33,10 +35,31 @@ Query query = new Query(); query.addCriteria(Criteria .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday)) - .and("dataType").is(ApiConstants.HK_DATATYPE_CAR)); - List<SnapshotDataMonitorResult> snapshotDataMonitorResults = mongoTemplate.find(query, SnapshotDataMonitorResult.class); - CalculationStrategy<SnapshotDataMonitorResult> siteOnlineCalculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.CAR_SiteOnline_ViewStability); - siteOnlineCalculator.calculate(snapshotDataMonitorResults); + .and("dataType").is(ApiConstants.HK_DataType_CAR)); + List<SnapshotDataMonitorResult> results = mongoTemplate.find(query, SnapshotDataMonitorResult.class); + CalculationStrategy<SnapshotDataMonitorResult> calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Car_SiteOnline_ViewStability); + calculator.calculate(results); + } + public void infoAccuracyTask(){ + Date yesterday = DateUtils.addDays(new Date(), -1); + //璁$畻杞﹁締鍗″彛淇℃伅閲囬泦鍑嗙‘鐜� + Query query = new Query(); + query.addCriteria(Criteria + .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday))); + List<CrossDetailResult> results = mongoTemplate.find(query, CrossDetailResult.class); + CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Car_InfoAccuracy); + calculator.calculate(results); + } + public void snapShopDelay(){ + Date yesterday = DateUtils.addDays(new Date(), -1); + //璁$畻杞﹁締鍗″彛淇℃伅閲囬泦鍑嗙‘鐜� + Query query = new Query(); + query.addCriteria(Criteria + .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday)) + .and("dataType").is(ApiConstants.HK_DataType_CAR)); + List<SnapshotDelayMonitorResult> results = mongoTemplate.find(query, SnapshotDelayMonitorResult.class); + CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Car_SnapshotDelay); + calculator.calculate(results); } diff --git a/ycl-server/src/main/java/com/ycl/task/FaceTask.java b/ycl-server/src/main/java/com/ycl/task/FaceTask.java index aa29496..f258b5a 100644 --- a/ycl-server/src/main/java/com/ycl/task/FaceTask.java +++ b/ycl-server/src/main/java/com/ycl/task/FaceTask.java @@ -3,7 +3,10 @@ import com.ycl.calculate.CalculationStrategy; import com.ycl.factory.IndexCalculationFactory; +import com.ycl.platform.domain.result.HK.CrossDetailResult; +import com.ycl.platform.domain.result.HK.MonitoringDetailResult; import com.ycl.platform.domain.result.HK.SnapshotDataMonitorResult; +import com.ycl.platform.domain.result.HK.SnapshotDelayMonitorResult; import com.ycl.utils.DateUtils; import constant.ApiConstants; import constant.CalculationStrategyConstants; @@ -33,10 +36,30 @@ Query query = new Query(); query.addCriteria(Criteria .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday)) - .and("dataType").is(ApiConstants.HK_DATATYPE_FACE)); - List<SnapshotDataMonitorResult> snapshotDataMonitorResults = mongoTemplate.find(query, SnapshotDataMonitorResult.class); - CalculationStrategy<SnapshotDataMonitorResult> siteOnlineCalculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Face_SiteOnline_ViewStability); - siteOnlineCalculator.calculate(snapshotDataMonitorResults); + .and("dataType").is(ApiConstants.HK_DataType_FACE)); + List<SnapshotDataMonitorResult> results = mongoTemplate.find(query, SnapshotDataMonitorResult.class); + CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Face_SiteOnline_ViewStability); + calculator.calculate(results); } - + public void InfoAccuracyTask(){ + Date yesterday = DateUtils.addDays(new Date(), -1); + //璁$畻杞﹁締鍗″彛淇℃伅閲囬泦鍑嗙‘鐜� + Query query = new Query(); + query.addCriteria(Criteria + .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday))); + List<MonitoringDetailResult> results = mongoTemplate.find(query, MonitoringDetailResult.class); + CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Face_InfoAccuracy); + calculator.calculate(results); + } + public void snapShopDelay(){ + Date yesterday = DateUtils.addDays(new Date(), -1); + //璁$畻杞﹁締鍗″彛淇℃伅閲囬泦鍑嗙‘鐜� + Query query = new Query(); + query.addCriteria(Criteria + .where("mongoCreateTime").gte(DateUtils.getDayStart(yesterday)).lt(DateUtils.getDayEnd(yesterday)) + .and("dataType").is(ApiConstants.HK_DataType_FACE)); + List<SnapshotDelayMonitorResult> results = mongoTemplate.find(query, SnapshotDelayMonitorResult.class); + CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Face_SnapshotDelay); + calculator.calculate(results); + } } diff --git a/ycl-server/src/main/java/com/ycl/task/HKTask.java b/ycl-server/src/main/java/com/ycl/task/HKTask.java index dd81b77..376f750 100644 --- a/ycl-server/src/main/java/com/ycl/task/HKTask.java +++ b/ycl-server/src/main/java/com/ycl/task/HKTask.java @@ -86,33 +86,33 @@ log.info("寮�濮嬫墽琛屾姄鎷嶆暟鎹噺妫�娴嬬粨鏋滄暟鎹悓姝�"); /** 杞﹁締鏁版嵁 */ SnapshotDataMonitorParam carParam = new SnapshotDataMonitorParam(); - carParam.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(DateUtils.getDate()).setDataType(ApiConstants.HK_DATATYPE_CAR); + carParam.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(DateUtils.getDate()).setDataType(ApiConstants.HK_DataType_CAR); JSONObject carJsonObject = hkClient.SnapshotDataMonitor(carParam); List<SnapshotDataMonitorResult> carList = getDataList(carJsonObject, SnapshotDataMonitorResult.class, "杞﹁締鎶撴媿鏁版嵁閲忔娴嬬粨鏋滄暟鎹�"); if (!CollectionUtils.isEmpty(carList)) { //濡傛灉浠婂ぉ瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎 Query query = new Query(Criteria .where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())) - .and("dataType").is(ApiConstants.HK_DATATYPE_CAR)); + .and("dataType").is(ApiConstants.HK_DataType_CAR)); DeleteResult result = mongoTemplate.remove(query, SnapshotDataMonitorResult.class); //瀛樻斁鍦╩ongo涓� - carList.forEach(item -> item.setDataType(ApiConstants.HK_DATATYPE_CAR)); + carList.forEach(item -> item.setDataType(ApiConstants.HK_DataType_CAR)); mongoTemplate.insert(carList); } /** 浜鸿劯鏁版嵁 */ SnapshotDataMonitorParam faceParam = new SnapshotDataMonitorParam(); - faceParam.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(DateUtils.getDate()).setDataType(ApiConstants.HK_DATATYPE_FACE); + faceParam.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(DateUtils.getDate()).setDataType(ApiConstants.HK_DataType_FACE); JSONObject faceJsonObject = hkClient.SnapshotDataMonitor(carParam); List<SnapshotDataMonitorResult> faceList = getDataList(faceJsonObject, SnapshotDataMonitorResult.class, "浜鸿劯鎶撴媿鏁版嵁閲忔娴嬬粨鏋滄暟鎹负绌�"); if (!CollectionUtils.isEmpty(faceList)) { //濡傛灉浠婂ぉ瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎 Query query = new Query(Criteria .where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())) - .and("dataType").is(ApiConstants.HK_DATATYPE_FACE)); + .and("dataType").is(ApiConstants.HK_DataType_FACE)); DeleteResult result = mongoTemplate.remove(query, SnapshotDataMonitorResult.class); //瀛樻斁鍦╩ongo涓� - carList.forEach(item -> item.setDataType(ApiConstants.HK_DATATYPE_FACE)); + carList.forEach(item -> item.setDataType(ApiConstants.HK_DataType_FACE)); mongoTemplate.insert(faceList); } //TODO:宸ュ崟 @@ -164,7 +164,7 @@ log.info("寮�濮嬫墽琛屾暟鎹畬鏁存�х洃娴嬬粨鏋滄暟鎹悓姝�"); //杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁瀹屾暣鎬� DataIntegrityMonitoringParam param = new DataIntegrityMonitoringParam(); - param.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(DateUtils.getDate()).setDataType(ApiConstants.HK_DATATYPE_CAR); + param.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(DateUtils.getDate()).setDataType(ApiConstants.HK_DataType_CAR); JSONObject jsonObject = hkClient.DataIntegrityMonitoring(param); List<DataIntegrityMonitoringResult> faceList = getDataList(jsonObject, DataIntegrityMonitoringResult.class, "鏁版嵁瀹屾暣鎬х洃娴嬬粨鏋滄暟鎹负绌�"); if (!CollectionUtils.isEmpty(faceList)) { @@ -184,7 +184,7 @@ log.info("寮�濮嬫墽琛屽睘鎬ц瘑鍒噯纭洃娴嬬粨鏋滄暟鎹悓姝�"); //杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁鍑嗙‘鎬� AttrRecognitionParam param = new AttrRecognitionParam(); - param.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(DateUtils.getDate()).setDataType(ApiConstants.HK_DATATYPE_CAR); + param.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(DateUtils.getDate()).setDataType(ApiConstants.HK_DataType_CAR); JSONObject jsonObject = hkClient.AttrRecognitionMonitor(param); List<AttrRecognitionMonitorResult> faceList = getDataList(jsonObject, AttrRecognitionMonitorResult.class, "灞炴�ц瘑鍒噯纭洃娴嬬粨鏋滄暟鎹负绌�"); if (!CollectionUtils.isEmpty(faceList)) { @@ -206,33 +206,33 @@ //杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁涓婁紶鍙婃椂鎬� /** 杞﹁締鏁版嵁 */ SnapshotDelayMonitorParam carParam = new SnapshotDelayMonitorParam(); - carParam.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(DateUtils.getDate()).setDataType(ApiConstants.HK_DATATYPE_CAR); + carParam.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(DateUtils.getDate()).setDataType(ApiConstants.HK_DataType_CAR); JSONObject carJsonObject = hkClient.SnapshotDelayMonitor(carParam); List<SnapshotDelayMonitorResult> carList = getDataList(carJsonObject, SnapshotDelayMonitorResult.class, "杞﹁締鎶撴媿鏁版嵁閲忔娴嬬粨鏋滄暟鎹�"); if (!CollectionUtils.isEmpty(carList)) { //濡傛灉浠婂ぉ瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎 Query query = new Query(Criteria .where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())) - .and("dataType").is(ApiConstants.HK_DATATYPE_CAR)); + .and("dataType").is(ApiConstants.HK_DataType_CAR)); DeleteResult result = mongoTemplate.remove(query, SnapshotDelayMonitorParam.class); //瀛樻斁鍦╩ongo涓� - carList.forEach(item -> item.setDataType(ApiConstants.HK_DATATYPE_CAR)); + carList.forEach(item -> item.setDataType(ApiConstants.HK_DataType_CAR)); mongoTemplate.insert(carList); } /** 浜鸿劯鏁版嵁 */ SnapshotDelayMonitorParam faceParam = new SnapshotDelayMonitorParam(); - faceParam.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(DateUtils.getDate()).setDataType(ApiConstants.HK_DATATYPE_FACE); + faceParam.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(DateUtils.getDate()).setDataType(ApiConstants.HK_DataType_FACE); JSONObject faceJsonObject = hkClient.SnapshotDelayMonitor(faceParam); List<SnapshotDelayMonitorParam> faceList = getDataList(faceJsonObject, SnapshotDelayMonitorParam.class, "浜鸿劯鎶撴媿鏁版嵁閲忔娴嬬粨鏋滄暟鎹负绌�"); if (!CollectionUtils.isEmpty(faceList)) { //濡傛灉浠婂ぉ瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎 Query query = new Query(Criteria .where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date())) - .and("dataType").is(ApiConstants.HK_DATATYPE_FACE)); + .and("dataType").is(ApiConstants.HK_DataType_FACE)); DeleteResult result = mongoTemplate.remove(query, SnapshotDelayMonitorParam.class); //瀛樻斁鍦╩ongo涓� - carList.forEach(item -> item.setDataType(ApiConstants.HK_DATATYPE_FACE)); + carList.forEach(item -> item.setDataType(ApiConstants.HK_DataType_FACE)); mongoTemplate.insert(faceList); } //TODO:宸ュ崟 @@ -244,7 +244,7 @@ log.info("寮�濮嬫墽琛屽浘鐗囪闂洃娴嬬粨鏋滄暟鎹悓姝�"); //杞﹁締鍗″彛淇℃伅閲囬泦鍑嗙‘鐜囥�佽溅杈嗗崱鍙h澶噓rl鍙敤鎬� PicAccessParam param = new PicAccessParam(); - param.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(DateUtils.getDate()).setDataType(ApiConstants.HK_DATATYPE_CAR); + param.setPageNO(ApiConstants.pageNo).setPageSize(ApiConstants.pageSize).setDate(DateUtils.getDate()).setDataType(ApiConstants.HK_DataType_CAR); JSONObject jsonObject = hkClient.PicAccessMonitor(param); List<PicAccessResult> faceList = getDataList(jsonObject, PicAccessResult.class, "鍥剧墖璁块棶鐩戞祴缁撴灉鏁版嵁涓虹┖"); if (!CollectionUtils.isEmpty(faceList)) { diff --git a/ycl-server/src/main/java/com/ycl/task/MonitorTask.java b/ycl-server/src/main/java/com/ycl/task/MonitorTask.java new file mode 100644 index 0000000..ae6b11e --- /dev/null +++ b/ycl-server/src/main/java/com/ycl/task/MonitorTask.java @@ -0,0 +1,88 @@ +package com.ycl.task; + + +import com.alibaba.druid.support.json.JSONUtils; +import com.alibaba.fastjson2.JSONArray; +import com.ycl.platform.domain.entity.TMonitor; +import com.ycl.platform.domain.result.UY.OneMachineFileResult; +import com.ycl.platform.domain.vo.TMonitorVO; +import com.ycl.platform.service.ITMonitorService; +import com.ycl.system.entity.SysDictData; +import com.ycl.system.service.ISysDictDataService; +import com.ycl.utils.DateUtils; +import constant.RedisConstant; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 褰撳ぉ鏅氫笂 鍚屾mongodb涓�鏈轰竴妗e埌鏁版嵁搴� + */ +@Slf4j +@Component("monitorTask") +public class MonitorTask { + @Autowired + private MongoTemplate mongoTemplate; + @Autowired + private ITMonitorService monitorService; + @Autowired + private ISysDictDataService dictDataService; + @Autowired + private RedisTemplate redisTemplate; + //鍚屾mongodb涓�鏈轰竴妗e埌鏁版嵁搴� + public void synchronize() { + Query query = new Query(Criteria.where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date()))); + List<OneMachineFileResult> oneMachineFileResults = mongoTemplate.find(query, OneMachineFileResult.class); + List<String> serialNumberInBase = monitorService.selectTMonitorList(null).stream().map(TMonitorVO::getSerialNumber).collect(Collectors.toList()); + //鍑嗗鎻掑叆鏁版嵁搴撶殑鏁版嵁 + List<TMonitor> monitorList = new ArrayList<>(); + //鏂扮殑鏁版嵁锛屽師鏁版嵁搴撲腑涓嶅瓨鍦ㄧ殑鏁版嵁 + Set<TMonitor> newMonitorList = new HashSet<>(); + for (OneMachineFileResult result : oneMachineFileResults) { + TMonitor monitor = setMonitor(result); + monitorList.add(monitor); + //姣斿绛涢�夊嚭鏂扮殑鏁版嵁 + if(!CollectionUtils.isEmpty(serialNumberInBase) && !serialNumberInBase.contains(result.getSBBM())){ + newMonitorList.add(monitor); + } + } + //鏂扮殑鏁版嵁鏀惧叆Redis涓瓑寰呰�冩牳鎸囨爣浠诲姟浣跨敤 + redisTemplate.opsForValue().set(RedisConstant.New_Monitor_Set, JSONArray.toJSONString(newMonitorList)); + //TODO:瑙f瀽鍖哄煙 + + //TODO:瑙f瀽閲嶇偣鐐逛綅 + //閲嶇偣鐐逛綅闆嗗悎瀛楀吀 + SysDictData sysDictData = new SysDictData(); + sysDictData.setDictType("platform_important_site"); + List<SysDictData> DictDataList = dictDataService.selectDictDataList(sysDictData); + List<String> importantSite = DictDataList.stream().map(SysDictData::getDictValue).collect(Collectors.toList()); + + + } + + private TMonitor setMonitor(OneMachineFileResult result) { + TMonitor monitor = new TMonitor(); + monitor.setSerialNumber(result.getSBBM()); + monitor.setName(result.getSBMC()); + monitor.setSiteType(Long.valueOf(result.getJKDWLX())); + monitor.setMacAddr(result.getMACDZ()); + monitor.setIp(result.getIP()); + monitor.setCameraFunType(result.getSXJGNLX()); + monitor.setLongitude(result.getJD() + ""); + monitor.setLatitude(result.getWD() + ""); + monitor.setCameraCaptureArea(result.getSXJCJQY()); + monitor.setOnState(Long.valueOf(result.getSBZT())); + //鍥芥爣鐮佸墠鍏綅涓鸿鏀跨紪鐮� + monitor.setCivilCode(result.getSBBM().substring(0, 8)); + return monitor; + } +} diff --git a/ycl-server/src/main/java/com/ycl/task/UYTask.java b/ycl-server/src/main/java/com/ycl/task/UYTask.java index f529f48..4a359d9 100644 --- a/ycl-server/src/main/java/com/ycl/task/UYTask.java +++ b/ycl-server/src/main/java/com/ycl/task/UYTask.java @@ -9,6 +9,7 @@ import com.ycl.platform.domain.result.UY.OneMachineFileResult; import com.ycl.platform.domain.result.UY.QueryVqdResult; import com.ycl.platform.domain.result.UY.RecordMetaDSumResult; +import com.ycl.platform.service.ITMonitorService; import com.ycl.platform.service.IYwThresholdService; import com.ycl.utils.DateUtils; import constant.ApiConstants; @@ -23,6 +24,7 @@ import java.util.Date; import java.util.List; +import java.util.stream.Collectors; //浼樹簯瀵规帴鏁版嵁浠诲姟 @Slf4j @@ -35,7 +37,8 @@ private UYClient uyClient; @Autowired private IYwThresholdService ywThresholdService; - + @Autowired + private ITMonitorService monitorService; @Value("${youYun.tenantId}") private String tenantId; diff --git a/ycl-server/src/main/resources/mapper/zgyw/CheckScoreMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/CheckScoreMapper.xml index 2bc0f1f..ae68b76 100644 --- a/ycl-server/src/main/resources/mapper/zgyw/CheckScoreMapper.xml +++ b/ycl-server/src/main/resources/mapper/zgyw/CheckScoreMapper.xml @@ -123,21 +123,17 @@ <select id="selectCheckScoreMap" resultType="com.ycl.platform.domain.entity.CheckScore"> SELECT + id, tcs.dept_id, examine_category, - ROUND(AVG(score), 2) AS score, - #{startDate} AS startDate, - #{endDate} AS endDate, - ANY_VALUE(tcs.create_time) AS createTime + ROUND(AVG(score) OVER(PARTITION BY tcs.dept_id, examine_category), 2) AS score, + tcs.create_time AS createTime FROM t_check_score tcs LEFT JOIN sys_dept d ON tcs.dept_id = d.dept_id WHERE examine_tag = #{examineTag} - AND tcs.create_time BETWEEN #{startDate} AND #{endDate} - GROUP BY - tcs.dept_id, - examine_category + AND DATE_FORMAT(tcs.create_time, '%Y-%m') BETWEEN DATE_FORMAT(#{startDate}, '%Y-%m') AND DATE_FORMAT(#{endDate}, '%Y-%m') </select> </mapper> \ No newline at end of file diff --git a/ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml index 460ec85..687d7f7 100644 --- a/ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml +++ b/ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml @@ -37,22 +37,22 @@ <result property="hybm" column="hybm" /> <result property="lxbm" column="lxbm" /> <result property="reason" column="reason" /> - <result property="defaultOrder" column="default_order" /> <result property="recovery" column="recovery" /> <result property="recoveryTime" column="recovery_time" /> <result property="deptId" column="dept_id" /> </resultMap> <sql id="selectTMonitorVo"> - select id, serial_number, name, site_type, mac_addr, ip, camera_fun_type, longitude, latitude, camera_capture_area, on_state, civil_code, integrated_device, camera_brand, address, net_working, public_security, installed_time, management_unit, mu_contact_info, storage_days, monitor_azimuth, scene_photo_addr, model, site_vulgo, camera_type, camera_light_type, encoded_format, camera_dept, hybm, lxbm, reason, default_order,recovery,recovery_time,dept_id from t_monitor + select id, serial_number, name, site_type, mac_addr, ip, camera_fun_type, longitude, latitude, camera_capture_area, on_state, civil_code, integrated_device, camera_brand, address, net_working, public_security, installed_time, management_unit, mu_contact_info, storage_days, monitor_azimuth, scene_photo_addr, model, site_vulgo, camera_type, camera_light_type, encoded_format, camera_dept, hybm, lxbm from t_monitor </sql> <select id="selectTMonitorList" resultType="com.ycl.platform.domain.vo.TMonitorVO"> - select id, serial_number, name, site_type, mac_addr, ip, camera_fun_type, longitude, latitude, camera_capture_area, on_state, civil_code, integrated_device, camera_brand, address, net_working, public_security, installed_time, management_unit, mu_contact_info, storage_days - , monitor_azimuth, scene_photo_addr, model, site_vulgo, camera_type, camera_light_type, encoded_format, camera_dept, hybm, lxbm, reason, default_order,recovery,recovery_time,d.dept_name from t_monitor m - left join sys_dept d on m.dept_id = d.dept_id + select m.id, m.serial_number, name, site_type, mac_addr, ip, camera_fun_type, longitude, latitude, camera_capture_area, on_state, civil_code, integrated_device, camera_brand, address, net_working, public_security, installed_time, management_unit, mu_contact_info, storage_days + , monitor_azimuth, scene_photo_addr, model, site_vulgo, camera_type, camera_light_type, encoded_format, camera_dept, hybm, lxbm, d.dept_name from t_monitor m + left join t_yw_point p on m.serial_number = p.serial_number + left join sys_dept d on p.dept_id = d.dept_id <where> - <if test="serialNumber != null and serialNumber != ''"> and serial_number = #{serialNumber}</if> + <if test="serialNumber != null and serialNumber != ''"> and m.serial_number = #{serialNumber}</if> <if test="name != null and name != ''"> and name like concat('%', #{name}, '%')</if> <if test="siteType != null "> and site_type = #{siteType}</if> <if test="macAddr != null and macAddr != ''"> and mac_addr = #{macAddr}</if> @@ -82,11 +82,7 @@ <if test="cameraDept != null and cameraDept != ''"> and camera_dept = #{cameraDept}</if> <if test="hybm != null and hybm != ''"> and hybm = #{hybm}</if> <if test="lxbm != null "> and lxbm = #{lxbm}</if> - <if test="reason != null and reason != ''"> and reason = #{reason}</if> - <if test="defaultOrder != null "> and default_order = #{defaultOrder}</if> - <if test="recovery != null "> and recovery = #{recovery}</if> - <if test="recoveryTime != null "> and recovery_time = #{recoveryTime}</if> - <if test="deptId != null "> and m.dept_id = #{deptId}</if> + <if test="recovery != null "> and p.recovery = #{recovery}</if> </where> ${params.dataScope} </select> @@ -129,11 +125,6 @@ <if test="cameraDept != null">camera_dept,</if> <if test="hybm != null">hybm,</if> <if test="lxbm != null">lxbm,</if> - <if test="reason != null">reason,</if> - <if test="defaultOrder != null">default_order,</if> - <if test="recovery != null">recovery,</if> - <if test="recoveryTime != null">recovery_time,</if> - <if test="deptId != null">dept_id,</if> </trim> <trim prefix="values (" suffix=")" suffixOverrides=","> <if test="serialNumber != null and serialNumber != ''">#{serialNumber},</if> @@ -166,11 +157,6 @@ <if test="cameraDept != null">#{cameraDept},</if> <if test="hybm != null">#{hybm},</if> <if test="lxbm != null">#{lxbm},</if> - <if test="reason != null">#{reason},</if> - <if test="defaultOrder != null">#{defaultOrder},</if> - <if test="recovery != null">#{recovery},</if> - <if test="recoveryTime != null">#{recoveryTime},</if> - <if test="deptId != null">#{deptId},</if> </trim> </insert> @@ -207,11 +193,6 @@ <if test="cameraDept != null">camera_dept = #{cameraDept},</if> <if test="hybm != null">hybm = #{hybm},</if> <if test="lxbm != null">lxbm = #{lxbm},</if> - <if test="reason != null">reason = #{reason},</if> - <if test="defaultOrder != null">default_order = #{defaultOrder},</if> - <if test="recovery != null">recovery = #{defaultOrder},</if> - <if test="recoveryTime != null">recovery_time = #{recoveryTime},</if> - <if test="deptId != null">dept_id = #{deptId},</if> </trim> where id = #{id} </update> @@ -231,14 +212,10 @@ SELECT count(*) AS totalPosts, IFNULL(SUM(IF(on_state = 1, 1, 0)), 0) AS totalMembers, IFNULL(SUM(IF(on_state = 2, 1, 0)), 0) AS postsPercentage, - IFNULL(SUM(IF(default_order = 1, 1, 0)), 0) AS totalViews, - -1 as noStore, - -1 as partStore, - IFNULL(ROUND(SUM(IF(on_state = 1, 1, 0)) / count(*) * 100, 2), 0) as viewsPercentage, - -1 as totalFace, - -1 as totalCar + IFNULL(ROUND(SUM(IF(on_state = 1, 1, 0)) / count(*) * 100, 2), 0) as viewsPercentage FROM t_monitor m - left join sys_dept d on m.dept_id = d.dept_id + left join t_yw_point p on m.serial_number = p.serial_number + left join sys_dept d on p.dept_id = d.dept_id <where> camera_fun_type like concat('%', #{cameraFunType}, '%') </where> @@ -246,13 +223,24 @@ </select> <select id="recoveryException" resultType="java.util.Map"> + <![CDATA[ SELECT count(*) AS totalPosts, IFNULL(SUM(IF(on_state = 1, 1, 0)), 0) AS totalMembers, IFNULL(SUM(IF(on_state = 2, 1, 0)), 0) AS postsPercentage, - IFNULL(SUM(IF(default_order = 1, 1, 0)), 0) AS totalViews, IFNULL(ROUND(SUM(IF(on_state = 1, 1, 0)) / count(*) * 100, 2), 0) as viewsPercentage - FROM t_monitor - WHERE recovery = 1 + FROM t_monitor t + LEFT JOIN t_yw_point p ON t.serial_number = p.serial_number + WHERE p.recovery = 1 OR TIMESTAMPDIFF(DAY, p.recovery_time, NOW()) <= #{time} + ]]> + </select> + + <select id="selectRecoveryMonitor" resultType="com.ycl.platform.domain.vo.TMonitorVO"> + <![CDATA[ + SELECT t.id, p.serial_number, name, site_type, mac_addr, ip, camera_fun_type, longitude, latitude, camera_capture_area, on_state, civil_code, integrated_device, camera_brand, address, net_working, public_security, installed_time, management_unit, mu_contact_info, storage_days, monitor_azimuth, scene_photo_addr, model, site_vulgo, camera_type, camera_light_type, encoded_format, camera_dept, hybm, lxbm + FROM t_monitor t + LEFT JOIN t_yw_point p ON t.serial_number = p.serial_number + WHERE TIMESTAMPDIFF(DAY, p.recovery_time, NOW()) <= #{time} + ]]> </select> </mapper> -- Gitblit v1.8.0