无关风月
2025-09-01 324ed9fac852bc4117ee0da65a586adef258bd52
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 true;
        }
        // 按开始时间排序
        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 true;
        }
        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 true;
            }
        }
        return false;
    }
    @Override