From f69463ba6fd8b6672fe58aaaa811a5bc7e5ae8c0 Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期二, 19 八月 2025 09:00:29 +0800
Subject: [PATCH] bug修改

---
 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java |   51 ++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 46 insertions(+), 5 deletions(-)

diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java
index d2910da..afcbb0e 100644
--- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java
+++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java
@@ -115,17 +115,58 @@
 
     @Override
     public Boolean isStrategy24Hour(List<TAccountingStrategyDetail> accountingStrategyDetails) {
+//        List<TAccountingStrategyDetail> sortedDetails = accountingStrategyDetails.stream()
+//                .sorted(Comparator.comparing(TAccountingStrategyDetail::getStartTime))
+//                .collect(Collectors.toList());
+//
+//        boolean isFirstElementValid = sortedDetails.isEmpty() || !sortedDetails.get(0).getStartTime().equals(sortedDetails.get(sortedDetails.size() - 1).getEndTime());
+//        if(isFirstElementValid){
+//            return true;
+//        }
+//
+//        boolean eqTime = sortedDetails.stream().allMatch(detail -> detail.getStartTime().equals(detail.getEndTime()));
+//        if(eqTime){
+//            return true;
+//        }
+//
+//        boolean isTimeContinuous = sortedDetails.stream()
+//                .skip(1)
+//                .allMatch(detail -> detail.getStartTime().equals(sortedDetails.get(sortedDetails.indexOf(detail) - 1).getEndTime()));
+//
+//        return !isTimeContinuous;
+
+        // 处理空列表情况
+        if (accountingStrategyDetails == null || accountingStrategyDetails.isEmpty()) {
+            return false;
+        }
+
+        // 按开始时间排序
         List<TAccountingStrategyDetail> sortedDetails = accountingStrategyDetails.stream()
                 .sorted(Comparator.comparing(TAccountingStrategyDetail::getStartTime))
                 .collect(Collectors.toList());
 
-        boolean isFirstElementValid = sortedDetails.isEmpty() || !sortedDetails.get(0).getStartTime().equals(sortedDetails.get(sortedDetails.size() - 1).getEndTime());
+        // 检查是否形成完整的24小时循环
+        // 第一个时间段的开始时间应该等于最后一个时间段的结束时间(形成闭环)
+        TAccountingStrategyDetail firstDetail = sortedDetails.get(0);
+        TAccountingStrategyDetail lastDetail = sortedDetails.get(sortedDetails.size() - 1);
 
-        boolean isTimeContinuous = sortedDetails.stream()
-                .skip(1)
-                .allMatch(detail -> detail.getStartTime().equals(sortedDetails.get(sortedDetails.indexOf(detail) - 1).getEndTime()));
+        // 首尾时间不匹配,不能构成24小时周期
+        if (!firstDetail.getStartTime().equals(lastDetail.getEndTime())) {
+            return false;
+        }
 
-        return isFirstElementValid || !isTimeContinuous;
+        // 检查中间时间段是否连续
+        for (int i = 1; i < sortedDetails.size(); i++) {
+            TAccountingStrategyDetail current = sortedDetails.get(i);
+            TAccountingStrategyDetail previous = sortedDetails.get(i - 1);
+
+            // 当前时间段的开始时间必须等于前一个时间段的结束时间
+            if (!current.getStartTime().equals(previous.getEndTime())) {
+                return false;
+            }
+        }
+
+        return true;
     }
 
     @Override

--
Gitblit v1.7.1