From 023b2e98dffc0bc45e7bbd9205e5c0a3dc2994a4 Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期五, 17 一月 2025 15:29:10 +0800
Subject: [PATCH] 部级视频考核不做数量限制

---
 ycl-server/src/main/java/com/ycl/task/ContractTask.java |   70 +++++++++++++++++++++++++++++++---
 1 files changed, 63 insertions(+), 7 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 a31b5e5..1d637c2 100644
--- a/ycl-server/src/main/java/com/ycl/task/ContractTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/ContractTask.java
@@ -194,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)) {
@@ -228,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();
@@ -236,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)){
@@ -268,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))) {
@@ -303,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