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