From 2b6aad0dabc78496e8eb7d49f7fb63d93cccb816 Mon Sep 17 00:00:00 2001
From: Lius <Lius2225@163.com>
Date: 星期二, 17 六月 2025 11:24:46 +0800
Subject: [PATCH] 设备日志页面添加设备故障时间段显示

---
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentFaultInfoServiceImpl.java |   70 +++++++++++------------------------
 1 files changed, 22 insertions(+), 48 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 189a144..df0f7c6 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
@@ -10,6 +10,7 @@
 import org.jeecg.modules.mdc.service.IMdcSystemParametersService;
 import org.jeecg.modules.mdc.util.DateUtils;
 import org.jeecg.modules.mdc.vo.EquFaultRecord;
+import org.jeecg.modules.mdc.vo.TimeInterval;
 import org.springframework.stereotype.Service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -130,8 +131,8 @@
     }
 
     public static long calculateTotalFaultDuration(List<EquFaultRecord> records, Date startTime, Date endTime) {
-        LocalDateTime start = convertToLocalDateTime(startTime);
-        LocalDateTime end = convertToLocalDateTime(endTime);
+        LocalDateTime start = DateUtils.convertToLocalDateTime(startTime);
+        LocalDateTime end = DateUtils.convertToLocalDateTime(endTime);
 
         // 淇璁板綍鏃堕棿
         List<EquFaultRecord> correctedRecords = correctRecordTimes(records, start, end);
@@ -144,16 +145,16 @@
 
         // 璁$畻鎬绘椂闀匡紙绉掞級
         return mergedIntervals.stream()
-                .mapToLong(interval -> ChronoUnit.SECONDS.between(interval.start, interval.end))
+                .mapToLong(interval -> ChronoUnit.SECONDS.between(interval.getStart(), interval.getEnd()))
                 .sum();
     }
 
     private static List<EquFaultRecord> correctRecordTimes(List<EquFaultRecord> records, LocalDateTime startTime, LocalDateTime endTime) {
         return records.stream()
                 .map(record -> {
-                    LocalDateTime recordStart = convertToLocalDateTime(record.getStartTime());
+                    LocalDateTime recordStart = DateUtils.convertToLocalDateTime(record.getStartTime());
                     LocalDateTime recordEnd = record.getEndTime() != null ?
-                            convertToLocalDateTime(record.getEndTime()) : null;
+                            DateUtils.convertToLocalDateTime(record.getEndTime()) : null;
 
                     // 淇寮�濮嬫椂闂�
                     LocalDateTime correctedStart = recordStart.isBefore(startTime) ?
@@ -166,8 +167,8 @@
                     // 鍒涘缓淇鍚庣殑璁板綍
                     return new EquFaultRecord(
                             record.getEquipmentId(),
-                            convertToDate(correctedStart),
-                            convertToDate(correctedEnd)
+                            DateUtils.convertToDate(correctedStart),
+                            DateUtils.convertToDate(correctedEnd)
                     );
                 })
                 .collect(Collectors.toList());
@@ -176,8 +177,8 @@
     private static List<TimeInterval> mergeIntervals(List<EquFaultRecord> records) {
         List<TimeInterval> intervals = records.stream()
                 .map(record -> new TimeInterval(
-                        convertToLocalDateTime(record.getStartTime()),
-                        convertToLocalDateTime(record.getEndTime())))
+                        DateUtils.convertToLocalDateTime(record.getStartTime()),
+                        DateUtils.convertToLocalDateTime(record.getEndTime())))
                 .collect(Collectors.toList());
 
         if (intervals.isEmpty()) {
@@ -189,9 +190,9 @@
 
         for (int i = 1; i < intervals.size(); i++) {
             TimeInterval next = intervals.get(i);
-            if (next.start.isBefore(current.end) || next.start.equals(current.end)) {
+            if (next.getStart().isBefore(current.getEnd()) || next.getStart().equals(current.getEnd())) {
                 // 鏈夐噸鍙狅紝鍚堝苟鍖洪棿
-                current.end = current.end.isAfter(next.end) ? current.end : next.end;
+                current.setEnd(current.getEnd().isAfter(next.getEnd()) ? current.getEnd() : next.getEnd());
             } else {
                 // 鏃犻噸鍙狅紝娣诲姞褰撳墠鍖洪棿骞舵洿鏂板綋鍓嶅尯闂�
                 merged.add(current);
@@ -203,33 +204,6 @@
         return merged;
     }
 
-    // Date涓嶭ocalDateTime浜掔浉杞崲鐨勫伐鍏锋柟娉�
-    private static LocalDateTime convertToLocalDateTime(Date date) {
-        if (date == null) {
-            return null;
-        }
-        return Instant.ofEpochMilli(date.getTime())
-                .atZone(ZoneId.systemDefault())
-                .toLocalDateTime();
-    }
-
-    private static Date convertToDate(LocalDateTime localDateTime) {
-        if (localDateTime == null) {
-            return null;
-        }
-        return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
-    }
-
-    static class TimeInterval {
-        LocalDateTime start;
-        LocalDateTime end;
-
-        public TimeInterval(LocalDateTime start, LocalDateTime end) {
-            this.start = start;
-            this.end = end;
-        }
-    }
-
     // 璁$畻鍘婚櫎鏁呴殰鏃堕暱鍚庣殑鍔犲伐鏃堕棿
     private long calculateProcessingTimeWithoutFaults(
             List<MdcEquipmentRunningSection> runningSections,
@@ -238,8 +212,8 @@
             Date endTime) {
 
         // 杞崲涓篖ocalDateTime杩涜澶勭悊
-        LocalDateTime start = convertToLocalDateTime(startTime);
-        LocalDateTime end = convertToLocalDateTime(endTime);
+        LocalDateTime start = DateUtils.convertToLocalDateTime(startTime);
+        LocalDateTime end = DateUtils.convertToLocalDateTime(endTime);
 
         // 灏嗘晠闅滆褰曡浆鎹负鏃堕棿鍖洪棿骞跺悎骞堕噸鍙犻儴鍒�
 //        List<TimeInterval> faultIntervals = faultRecords.stream()
@@ -253,8 +227,8 @@
 
         // 閬嶅巻姣忎釜鍔犲伐鍖洪棿锛屾帓闄ゆ晠闅滄椂闂�
         for (MdcEquipmentRunningSection section : runningSections) {
-            LocalDateTime sectionStart = convertToLocalDateTime(section.getStartTime());
-            LocalDateTime sectionEnd = convertToLocalDateTime(section.getEndTime());
+            LocalDateTime sectionStart = DateUtils.convertToLocalDateTime(section.getStartTime());
+            LocalDateTime sectionEnd = DateUtils.convertToLocalDateTime(section.getEndTime());
 
             // 鎺掗櫎鏁呴殰鏃堕棿鍚庣殑鏈夋晥鍔犲伐鏃堕棿
             List<TimeInterval> validIntervals = excludeFaultsFromSection(
@@ -263,7 +237,7 @@
 
             // 绱姞鏈夋晥鍔犲伐鏃堕棿锛堢锛�
             for (TimeInterval interval : validIntervals) {
-                totalProcessingTime += ChronoUnit.SECONDS.between(interval.start, interval.end);
+                totalProcessingTime += ChronoUnit.SECONDS.between(interval.getStart(), interval.getEnd());
             }
         }
 
@@ -301,7 +275,7 @@
 
     // 鍒ゆ柇涓や釜鏃堕棿鍖洪棿鏄惁閲嶅彔
     private boolean isOverlapping(TimeInterval a, TimeInterval b) {
-        return a.start.isBefore(b.end) && b.start.isBefore(a.end);
+        return a.getStart().isBefore(b.getEnd()) && b.getStart().isBefore(a.getEnd());
     }
 
     // 鍒嗗壊鍖洪棿锛堟墸闄ら噸鍙犻儴鍒嗭級
@@ -311,13 +285,13 @@
             List<TimeInterval> result) {
 
         // 閲嶅彔鍓嶇殑閮ㄥ垎
-        if (valid.start.isBefore(fault.start)) {
-            result.add(new TimeInterval(valid.start, fault.start));
+        if (valid.getStart().isBefore(fault.getStart())) {
+            result.add(new TimeInterval(valid.getStart(), fault.getStart()));
         }
 
         // 閲嶅彔鍚庣殑閮ㄥ垎
-        if (valid.end.isAfter(fault.end)) {
-            result.add(new TimeInterval(fault.end, valid.end));
+        if (valid.getEnd().isAfter(fault.getEnd())) {
+            result.add(new TimeInterval(fault.getEnd(), valid.getEnd()));
         }
     }
 

--
Gitblit v1.9.3