From f59d7f75a997872935d55288d37cd80b3acb6dff Mon Sep 17 00:00:00 2001 From: fuliqi <fuliqi@qq.com> Date: 星期二, 21 一月 2025 10:33:05 +0800 Subject: [PATCH] 批量审核离线工单修改pingonline --- ycl-server/src/main/java/com/ycl/task/ContractTask.java | 73 ++++++++++++++++++++++++++++++++---- 1 files changed, 64 insertions(+), 9 deletions(-) diff --git a/ycl-server/src/main/java/com/ycl/task/ContractTask.java b/ycl-server/src/main/java/com/ycl/task/ContractTask.java index 7767e99..1d637c2 100644 --- a/ycl-server/src/main/java/com/ycl/task/ContractTask.java +++ b/ycl-server/src/main/java/com/ycl/task/ContractTask.java @@ -120,7 +120,6 @@ //鏈堝簳璁$畻鍦ㄧ嚎鐜囧垎鏁� public void calculateOnlineScore() { - //TODO:妫�鏌ヨ〃 log.info("寮�濮嬭绠楀悎鍚岀偣浣嶅湪绾跨巼鍒嗘暟"); //鏈堝簳闇�瑕佺粺璁″钩鍧囧湪绾跨巼鐒跺悗杩涜绉垎鎵i櫎 String mouthStart = DateUtils.getMouthStart(new Date()); @@ -195,8 +194,32 @@ LocalDateTime endTime = LocalDateTime.now(); // 璁$畻30澶╁墠鐨勬棩鏈� LocalDateTime startTime = endTime.minusDays(30); - //闇�瑕佹煡瀹℃牳閫氳繃閭f潯璁板綍鐨勬椂闂� - List<WorkOrderVO> workOrders = workOrderMapper.selectPassOrder(startTime, endTime, WorkOrderStatusEnum.AUDITING_SUCCESS.getValue(), "瀹℃牳閫氳繃"); + //鑷姩鎵e垎鐨勫伐鍗曟晠闅滅被鍨� + List<String> deductErrorType = new ArrayList<>(); + deductErrorType.add(ErrorType.OSD_ERROR.getValue()); + deductErrorType.add(ErrorType.ABNORMAL_PIC.getValue()); + deductErrorType.add(ErrorType.POINT_INFO_ERROR.getValue()); + deductErrorType.add(ErrorType.CLOCK_SKEW.getValue()); + List<WorkOrderVO> workOrders = workOrderMapper.selectPassOrder(startTime, endTime, WorkOrderStatusEnum.AUDITING_SUCCESS.getValue(),deductErrorType,"瀹℃牳閫氳繃"); + //瀛樺湪鏈変袱绉嶆墸鍒嗙殑鏁呴殰 鍙墸鍑忕涓�涓晠闅� + Map<String, WorkOrderVO> map = workOrders.stream() + .collect(Collectors.toMap( + WorkOrderVO::getWorkOrderNo, + Function.identity(), + (older, newer) -> older.getDistributeTime().compareTo(newer.getDistributeTime()) <= 0 ? older : newer + )); + workOrders = new ArrayList<>(map.values()); + List<String> workOrderNos = workOrders.stream().map(WorkOrderVO::getWorkOrderNo).collect(Collectors.toList()); + List<WorkOrderVO> auditTimeList = workOrderMapper.getAuditTimeList(workOrderNos); + Map<String, List<Date>> auditTimeMap = auditTimeList.stream() + .collect(Collectors.groupingBy( + WorkOrderVO::getWorkOrderNo, // 鍒嗙粍鐨勯敭 + Collectors.mapping(WorkOrderVO::getAuditTime, Collectors.toList()))); + List<WorkOrderVO> handleTimeList = workOrderMapper.getHandleTimeList(workOrderNos); + Map<String, List<Date>> handleTimeMap = handleTimeList.stream() + .collect(Collectors.groupingBy( + WorkOrderVO::getWorkOrderNo, // 鍒嗙粍鐨勯敭 + Collectors.mapping(WorkOrderVO::getHandleTime, Collectors.toList()))); for (WorkOrderVO workOrder : workOrders) { //妫�娴嬫槸鍚︽姤澶囪繃 if (!CollectionUtils.isEmpty(reportNumbers)) { @@ -229,7 +252,7 @@ // } // } //鍓嶇鎰熺煡婧愭不鐞嗗伐浣滐紙鏃堕挓鍚屾瑙勫垯銆丱SD瑙勫垯銆佷竴鏈轰竴妗h鍒欙級 - if (ErrorType.OSD_ERROR.getValue().equals(errorType) || ErrorType.CLOCK_SKEW.getValue().equals(errorType) || ErrorType.CLOCK_RIGHT.getValue().equals(errorType) || ErrorType.POINT_INFO_ERROR.getValue().equals(errorType)) { + if (ErrorType.OSD_ERROR.getValue().equals(errorType) || ErrorType.CLOCK_SKEW.getValue().equals(errorType) || ErrorType.POINT_INFO_ERROR.getValue().equals(errorType)) { if (!CollectionUtils.isEmpty(monitorRuleMap)) { monitorRuleMap.forEach((contractId, rules) -> { Integer unitId = rules.get(0).getUnitId(); @@ -237,8 +260,14 @@ if (workOrder.getUnitId().equals(unitId)) { //宸ュ崟涓嬪彂鏃堕棿 Date createTime = workOrder.getDistributeTime(); - Date auditTime = workOrder.getAuditTime(); - double diffTime = (double) (auditTime.getTime() - createTime.getTime()) / (1000 * 60 * 60); + List<Date> auditTimes = auditTimeMap.get(workOrder.getWorkOrderNo()); + List<Date> handleTimes = handleTimeMap.get(workOrder.getWorkOrderNo()); + //鎷垮埌瀹℃牳鏃堕棿 + long auditDuration = getAuditDuration(auditTimes, handleTimes); + //瀹℃牳閫氳繃鏃堕棿 + Date passTime = Collections.max(auditTimes); + //澶勭悊鑺辫垂鎬绘椂闀� + double diffTime = (double) (passTime.getTime() - createTime.getTime() - auditDuration) / (1000 * 60 * 60); //鎵惧埌瀵瑰簲瑙勫垯銆侀�夋嫨鏃堕棿鑼冨洿鍐呯殑瑙勫垯 for (CalculateRuleVO rule : rules) { if(ErrorType.OSD_ERROR.getValue().equals(errorType)){ @@ -261,7 +290,7 @@ } } //鐐逛綅寮傚父鎯呭喌澶勭悊锛堥暅澶村紓甯搞�佹憚鍍忓ご閬尅绛夛級 - if (ErrorType.SCREEN_OCCLUSION.getValue().equals(errorType) || ErrorType.SIGNAL_LOSS.getValue().equals(errorType) || ErrorType.SCREEN_COLOR_DEVIATION.getValue().equals(errorType) || ErrorType.SNOW_STORM.getValue().equals(errorType) || ErrorType.STRIPE_INTERFERENCE.getValue().equals(errorType) || ErrorType.ABNORMAL_CLARITY.getValue().equals(errorType)) { + if (ErrorType.ABNORMAL_PIC.getValue().equals(errorType)) { if (!CollectionUtils.isEmpty(monitorRuleMap)) { siteRuleMap.forEach((contractId, rules) -> { Integer unitId = rules.get(0).getUnitId(); @@ -269,8 +298,13 @@ if (workOrder.getUnitId().equals(unitId)) { //宸ュ崟涓嬪彂鏃堕棿 Date createTime = workOrder.getDistributeTime(); - Date auditTime = workOrder.getAuditTime(); - double diffTime = (double) (auditTime.getTime() - createTime.getTime()) / (1000 * 60 * 60); + List<Date> auditTimes = auditTimeMap.get(workOrder.getWorkOrderNo()); + List<Date> handleTimes = handleTimeMap.get(workOrder.getWorkOrderNo()); + //鎷垮埌瀹℃牳鏃堕棿 + long auditDuration = getAuditDuration(auditTimes, handleTimes); + //瀹℃牳閫氳繃鏃堕棿 + Date passTime = Collections.max(auditTimes); + double diffTime = (double) (passTime.getTime() - createTime.getTime() -auditDuration) / (1000 * 60 * 60); //閫夋嫨鏃堕棿鑼冨洿鍐呯殑瑙勫垯 for (CalculateRuleVO rule : rules) { if (checkRange(rule.getMin(), rule.getMax(), new BigDecimal(diffTime))) { @@ -304,6 +338,27 @@ log.info("缁撴潫鎵ц宸ュ崟鎵e垎"); } + private long getAuditDuration(List<Date> auditTimes, List<Date> handleTimes) { + //璁$畻鍑哄鏍哥殑鎬绘椂闂�(鐢变簬鏁呴殰绫诲瀷浼氭洿鏂板鑷村彲鑳芥彁浜ょ殑鏃堕棿鐐规暟閲忓拰瀹℃牳鐨勬椂闂寸偣鏁伴噺涓嶄竴鑷�) + long auditDuration = 0; + for (Date auditTime : auditTimes) { + //绂昏繖娆″鏍告渶杩戠殑涓�娆℃彁浜ゅ鐞嗘椂闂寸偣 + Date nearestHandleTime = null; + long minDifference = Long.MAX_VALUE; + for (Date handleTime : handleTimes) { + if(handleTime.before(auditTime)) { + long difference = Math.abs(auditTime.getTime() - handleTime.getTime()); + if (difference < minDifference) { + minDifference = difference; + nearestHandleTime = handleTime; + } + } + } + auditDuration += auditTime.getTime()-nearestHandleTime.getTime(); + } + return auditDuration; + } + /** * 涓嶅畾鏈熸鏌ユ暟鎹� 鎵i櫎绉垎 -- Gitblit v1.8.0