From ac4d1a5962441156ff22a0c87f4eacc083daa9a6 Mon Sep 17 00:00:00 2001
From: cuilei <ray_tsu1@163.com>
Date: 星期五, 20 六月 2025 11:32:43 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentFaultInfoServiceImpl.java |  174 +++++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 112 insertions(+), 62 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..83fa48f 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
@@ -48,12 +48,31 @@
     @Override
     @Transactional(rollbackFor = {Exception.class})
     public void runningAllEquFaultStatistical(String dateTime) {
-        String validDate = LocalDate.now().minusDays(1).toString().replaceAll("-", "");
+        Date initDate = null;
+
         if (StringUtils.isNotBlank(dateTime)) {
-            validDate = DateUtils.format(DateUtils.toDate(dateTime, DateUtils.STRDATE), DateUtils.STRDATE);
+            initDate = DateUtils.toDate(dateTime, DateUtils.STRDATE);
+        } else {
+            // 鍙栨渶鍚庣殑缁熻鏃堕棿
+            String date = this.baseMapper.getMaxStaticsData();
+            if (date != null) {
+                initDate = DateUtils.toDate(date, DateUtils.STRDATE);
+            } else {
+                // 鍒濇鍙栧�� 鍙栨渶鏃╂椂闂磋褰�
+                MdcEquipmentRunningSection equipmentRunningSection = mdcEquipmentRunningSectionService.getFirstRecord();
+                if (equipmentRunningSection != null) {
+                    initDate = equipmentRunningSection.getStartTime();
+                }
+            }
+        }
+        Date endDate = DateUtils.addDays(DateUtils.getNow(), -1);
+        List<String> dateList = DateUtils.getDatesStringList2(initDate, endDate);
+
+        if (dateList.isEmpty()) {
+            return;
         }
         try {
-            this.remove(new LambdaQueryWrapper<MdcEquipmentFaultInfo>().eq(MdcEquipmentFaultInfo::getTheDate, validDate));
+            this.remove(new LambdaQueryWrapper<MdcEquipmentFaultInfo>().in(MdcEquipmentFaultInfo::getTheDate, dateList));
         } catch (Exception e) {
             log.error("鍙傛暟鏍煎紡涓嶅", e);
         }
@@ -63,13 +82,6 @@
             return;
         }
 
-        Map<String, MdcEquipmentFaultInfo> map = new HashMap<>();
-        String finalValidDate = validDate;
-        equipmentList.forEach(equipment -> {
-            MdcEquipmentFaultInfo mdcEquipmentFaultInfo = new MdcEquipmentFaultInfo(equipment.getEquipmentid(), finalValidDate);
-            map.put(equipment.getEquipmentid(), mdcEquipmentFaultInfo);
-        });
-
         String planTime = "00:00:00";
         MdcSystemParameters mdcSystemParameters = mdcSystemParametersService.getOne(new LambdaQueryWrapper<MdcSystemParameters>().eq(MdcSystemParameters::getCode, "equip_log_statis_time"));
         if (mdcSystemParameters != null) {
@@ -77,56 +89,98 @@
         }
 
         List<String> equipmentIdList = equipmentList.stream().map(Equipment::getEquipmentid).collect(Collectors.toList());
-        String startTime = DateUtils.format(DateUtils.setTimeForDay(DateUtils.toDate(validDate, DateUtils.STRDATE), planTime), DateUtils.STR_DATE_TIME_SMALL);
-        Date start = DateUtils.toDate(startTime, DateUtils.STR_DATE_TIME_SMALL);
-        String endTime = DateUtils.format(DateUtils.addDays(DateUtils.toDate(startTime, DateUtils.STR_DATE_TIME_SMALL), 1), DateUtils.STR_DATE_TIME_SMALL);
-        Date end = DateUtils.toDate(endTime, DateUtils.STR_DATE_TIME_SMALL);
-        //鏌ヨ鏁呴殰璁板綍
-        List<EquFaultRecord> equFaultRecordList = this.baseMapper.findFaultRecord(equipmentIdList, startTime, endTime);
-        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);
-                    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));
-                    }
 
-                    // 璁$畻鍘婚櫎鏁呴殰鏃堕暱鐨勫姞宸ユ椂闂�
-                    // step.1 鏌ヨ鍔犲伐鏃堕棿
-                    List<MdcEquipmentRunningSection> mdcEquipmentRunningSections = mdcEquipmentRunningSectionService.selectRunningData(key, start, end);
-                    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);
-                            }
-                        }
-                        // step.2 璁$畻鍘婚櫎鏁呴殰鏃堕暱鐨勫姞宸ユ椂闂�
-                        long processingTime = calculateProcessingTimeWithoutFaults(mdcEquipmentRunningSections, value, start, end);
-                        equFaultRecords.setRemoveFaultRunLong((int) processingTime);
+        for (String validDate : dateList) {
+            Map<String, MdcEquipmentFaultInfo> map = new HashMap<>();
+            String finalValidDate = validDate;
+            equipmentList.forEach(equipment -> {
+                MdcEquipmentFaultInfo mdcEquipmentFaultInfo = new MdcEquipmentFaultInfo(equipment.getEquipmentid(), finalValidDate);
+                map.put(equipment.getEquipmentid(), mdcEquipmentFaultInfo);
+            });
+
+            String startTime = DateUtils.format(DateUtils.setTimeForDay(DateUtils.toDate(validDate, DateUtils.STRDATE), planTime), DateUtils.STR_DATE_TIME_SMALL);
+            Date start = DateUtils.toDate(startTime, DateUtils.STR_DATE_TIME_SMALL);
+            String endTime = DateUtils.format(DateUtils.addDays(DateUtils.toDate(startTime, DateUtils.STR_DATE_TIME_SMALL), 1), DateUtils.STR_DATE_TIME_SMALL);
+            Date end = DateUtils.toDate(endTime, DateUtils.STR_DATE_TIME_SMALL);
+            //鏌ヨ鏁呴殰璁板綍
+            List<EquFaultRecord> equFaultRecordList = this.baseMapper.findFaultRecord(equipmentIdList, startTime, endTime);
+            if (equFaultRecordList != null && !equFaultRecordList.isEmpty()) {
+                // 淇暣鏃堕棿
+                Map<String, List<EquFaultRecord>> equFaultRecordMap = equFaultRecordList.stream().collect(Collectors.groupingBy(EquFaultRecord::getEquipmentId));
+                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) {
-                            // 璁$畻鍘婚櫎鏁呴殰鏃堕暱鐨勫埄鐢ㄧ巼
-                            BigDecimal removeFaultRate = new BigDecimal(processingTime).divide(new BigDecimal("86400").subtract(new BigDecimal(faultLong)), 2, RoundingMode.HALF_UP);
-                            equFaultRecords.setRemoveFaultRate(removeFaultRate);
+                            equFaultRecords.setFaultRate(new BigDecimal(faultLong).divide(new BigDecimal("864"), 2, RoundingMode.HALF_UP));
+                        }
+                        // 璁$畻鍘婚櫎鏁呴殰鏃堕暱鐨勫姞宸ユ椂闂�
+                        // step.1 鏌ヨ鍔犲伐鏃堕棿
+                        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()) {
+                                // 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(totalProcessingTime).divide(new BigDecimal("864"), 2, RoundingMode.HALF_UP);
+                                equFaultRecords.setRemoveFaultRate(removeFaultRate);
+                            }
                         }
                     }
                     map.put(key, equFaultRecords);
-                }
-            });
-        }
-        if (!map.isEmpty()) {
-            this.saveBatch(new ArrayList<>(map.values()));
+                });
+            }
+            if (!map.isEmpty()) {
+                this.saveBatch(new ArrayList<>(map.values()));
+            }
         }
     }
 
@@ -215,13 +269,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