From b7dd69a4f6c63e25d7d9ff567992c9095b48919c Mon Sep 17 00:00:00 2001
From: Lius <Lius2225@163.com>
Date: 星期二, 17 六月 2025 17:56:53 +0800
Subject: [PATCH] 算法调整

---
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentFaultInfoServiceImpl.java |   66 +++++++++++++++++++++++---------
 1 files changed, 47 insertions(+), 19 deletions(-)

diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentFaultInfoServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentFaultInfoServiceImpl.java
index df0f7c6..3a35ec8 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentFaultInfoServiceImpl.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentFaultInfoServiceImpl.java
@@ -86,18 +86,18 @@
         if (equFaultRecordList != null && !equFaultRecordList.isEmpty()) {
             // 淇暣鏃堕棿
             Map<String, List<EquFaultRecord>> equFaultRecordMap = equFaultRecordList.stream().collect(Collectors.groupingBy(EquFaultRecord::getEquipmentId));
-            equFaultRecordMap.forEach((key, value) -> {
-                if (map.containsKey(key)) {
-                    MdcEquipmentFaultInfo equFaultRecords = map.get(key);
+            map.forEach((key, value1) -> {
+                MdcEquipmentFaultInfo equFaultRecords = value1;
+                if (equFaultRecordMap.containsKey(key)) {
+                    List<EquFaultRecord> value = equFaultRecordMap.get(key);
                     long faultLong = calculateTotalFaultDuration(value, start, end);
                     equFaultRecords.setFaultLong((int) faultLong);
                     if (faultLong != 0) {
-                        equFaultRecords.setFaultRate(new BigDecimal(faultLong).divide(new BigDecimal("86400"), 2, RoundingMode.HALF_UP));
+                        equFaultRecords.setFaultRate(new BigDecimal(faultLong).divide(new BigDecimal("864"), 2, RoundingMode.HALF_UP));
                     }
-
                     // 璁$畻鍘婚櫎鏁呴殰鏃堕暱鐨勫姞宸ユ椂闂�
                     // step.1 鏌ヨ鍔犲伐鏃堕棿
-                    List<MdcEquipmentRunningSection> mdcEquipmentRunningSections = mdcEquipmentRunningSectionService.selectRunningData(key, start, end);
+                    List<MdcEquipmentRunningSection> mdcEquipmentRunningSections = mdcEquipmentRunningSectionService.listEquipmentRunningSectionRun(key, start.getTime(), end.getTime());
                     if (mdcEquipmentRunningSections != null && !mdcEquipmentRunningSections.isEmpty()) {
                         // 鏃堕棿淇
                         if (mdcEquipmentRunningSections.get(0).getStartTime().before(start)) {
@@ -112,17 +112,49 @@
                                 mdcEquipmentRunningSections.get(0).setEndTime(end);
                             }
                         }
-                        // step.2 璁$畻鍘婚櫎鏁呴殰鏃堕暱鐨勫姞宸ユ椂闂�
-                        long processingTime = calculateProcessingTimeWithoutFaults(mdcEquipmentRunningSections, value, start, end);
-                        equFaultRecords.setRemoveFaultRunLong((int) processingTime);
-                        if (faultLong != 0) {
+                        List<MdcEquipmentRunningSection> collect = mdcEquipmentRunningSections.stream().filter(mdcEquipmentRunningSection -> mdcEquipmentRunningSection.getStatus() == 3).collect(Collectors.toList());
+                        if (!collect.isEmpty()) {
+                            // step.2 璁$畻鍘婚櫎鏁呴殰鏃堕暱鐨勫姞宸ユ椂闂�
+                            long processingTime = calculateProcessingTimeWithoutFaults(collect, value, start, end);
+                            equFaultRecords.setRemoveFaultRunLong((int) processingTime);
+                            if (faultLong != 0 && faultLong != 86400) {
+                                // 璁$畻鍘婚櫎鏁呴殰鏃堕暱鐨勫埄鐢ㄧ巼
+                                BigDecimal removeFaultRate = new BigDecimal(processingTime).divide(new BigDecimal("864").subtract(new BigDecimal(faultLong)), 2, RoundingMode.HALF_UP);
+                                equFaultRecords.setRemoveFaultRate(removeFaultRate);
+                            }
+                        }
+                    }
+                } else {
+                    List<MdcEquipmentRunningSection> mdcEquipmentRunningSections = mdcEquipmentRunningSectionService.listEquipmentRunningSectionRun(key, start.getTime(), end.getTime());
+                    if (mdcEquipmentRunningSections != null && !mdcEquipmentRunningSections.isEmpty()) {
+                        // 鏃堕棿淇
+                        if (mdcEquipmentRunningSections.get(0).getStartTime().before(start)) {
+                            mdcEquipmentRunningSections.get(0).setStartTime(start);
+                        }
+                        if (mdcEquipmentRunningSections.size() > 1) {
+                            if (mdcEquipmentRunningSections.get(mdcEquipmentRunningSections.size() - 1).getEndTime().after(end)) {
+                                mdcEquipmentRunningSections.get(mdcEquipmentRunningSections.size() - 1).setEndTime(end);
+                            }
+                        } else {
+                            if (mdcEquipmentRunningSections.get(0).getEndTime().after(end)) {
+                                mdcEquipmentRunningSections.get(0).setEndTime(end);
+                            }
+                        }
+                        List<MdcEquipmentRunningSection> collect = mdcEquipmentRunningSections.stream().filter(mdcEquipmentRunningSection -> mdcEquipmentRunningSection.getStatus() == 3).collect(Collectors.toList());
+
+                        if (!collect.isEmpty()) {
+                            long totalProcessingTime = 0;
+                            for (MdcEquipmentRunningSection mdcEquipmentRunningSection : collect) {
+                                totalProcessingTime += ChronoUnit.SECONDS.between(DateUtils.convertToLocalDateTime(mdcEquipmentRunningSection.getStartTime()), DateUtils.convertToLocalDateTime(mdcEquipmentRunningSection.getEndTime()));
+                            }
+                            equFaultRecords.setRemoveFaultRunLong((int) totalProcessingTime);
                             // 璁$畻鍘婚櫎鏁呴殰鏃堕暱鐨勫埄鐢ㄧ巼
-                            BigDecimal removeFaultRate = new BigDecimal(processingTime).divide(new BigDecimal("86400").subtract(new BigDecimal(faultLong)), 2, RoundingMode.HALF_UP);
+                            BigDecimal removeFaultRate = new BigDecimal(totalProcessingTime).divide(new BigDecimal("864"), 2, RoundingMode.HALF_UP);
                             equFaultRecords.setRemoveFaultRate(removeFaultRate);
                         }
                     }
-                    map.put(key, equFaultRecords);
                 }
+                map.put(key, equFaultRecords);
             });
         }
         if (!map.isEmpty()) {
@@ -215,13 +247,9 @@
         LocalDateTime start = DateUtils.convertToLocalDateTime(startTime);
         LocalDateTime end = DateUtils.convertToLocalDateTime(endTime);
 
-        // 灏嗘晠闅滆褰曡浆鎹负鏃堕棿鍖洪棿骞跺悎骞堕噸鍙犻儴鍒�
-//        List<TimeInterval> faultIntervals = faultRecords.stream()
-//                .map(record -> new TimeInterval(
-//                        convertToLocalDateTime(record.getStartTime()),
-//                        convertToLocalDateTime(record.getEndTime())))
-//                .collect(Collectors.toList());
-        List<TimeInterval> mergedFaultIntervals = mergeIntervals(faultRecords);
+        // 淇璁板綍鏃堕棿
+        List<EquFaultRecord> correctedRecords = correctRecordTimes(faultRecords, start, end);
+        List<TimeInterval> mergedFaultIntervals = mergeIntervals(correctedRecords);
 
         long totalProcessingTime = 0;
 

--
Gitblit v1.9.3