diff --git a/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/utils/collection/CollectionUtils.java b/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/utils/collection/CollectionUtils.java index fb0b3b20..e8a3c748 100644 --- a/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/utils/collection/CollectionUtils.java +++ b/smart-switch-ruoyi/smart-switch-common/src/main/java/com/ruoyi/common/utils/collection/CollectionUtils.java @@ -1,9 +1,8 @@ package com.ruoyi.common.utils.collection; -import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.DateUtils; import java.math.BigDecimal; -import java.time.LocalDate; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -32,22 +31,72 @@ public class CollectionUtils extends org.springframework.util.CollectionUtils { return !isEmptyElement(list); } - public static boolean isNotEmpty(List list) { - return !isEmpty(list); + /** + * 填充列表中的元素 + * @param oldList 旧列表 + * @param startDate 起始日期 + * @param endDate 结束日期 + * @param clazz 填充元素的类 + */ + public static List fillElement(List oldList, Date startDate, Date endDate,Class clazz ) throws InstantiationException, IllegalAccessException { + List newList = new ArrayList<>(); + while (startDate.compareTo(endDate) <= 0) { + Date finalI = startDate; + FillAble fillable = oldList.stream().filter(item -> DateUtils.getYYYY_MM_DD(item.fillDate()).equals(DateUtils.getYYYY_MM_DD(finalI))).findFirst().orElse(null); + if (fillable == null) { + fillable = clazz.newInstance().fillElement(finalI); + } + newList.add(fillable); + startDate = DateUtils.addDays(startDate,1); + } + return newList; } + + // TODO 未经验证 /** - * 判断分隔字符串中是否存在目标元素 - * @param str 分隔字符串 - * @param split 分隔符 - * @param target 目标元素 - * @param parseMapper 类型转换方法 + * 补全列表中的日期数据,对于缺失的日期使用提供的工厂方法生成对象。 + * + * @param dataList 原始数据列表,元素需有getDateMethod返回Date类型属性的方法 + * @param dateGetter 获取元素日期属性的方法引用 + * @param customFactory 当日期缺失时,用于生成对应元素的对象工厂方法 + * @param 数据列表中元素的类型 + * @return 完整日期序列下的数据列表,缺失的日期已由customFactory填充 */ - public static boolean splitContains(String str, String split, T target, Function parseMapper) { - if (!StringUtils.hasText(str)) { - return false; + public static List completeMissingDates(List dataList, + Function dateGetter, + Function customFactory) { + if (dataList == null || dataList.isEmpty()) { + return Collections.emptyList(); } - return Arrays.stream(str.split(split)).map(parseMapper).collect(Collectors.toList()).contains(target); + + List dates = dataList.stream() + .map(dateGetter) + .sorted() + .collect(Collectors.toList()); + + Date startDate = dates.get(0); + Date endDate = dates.get(dates.size() - 1); + + List fullDates = new ArrayList<>(); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(startDate); + + while (!calendar.getTime().after(endDate)) { + fullDates.add(calendar.getTime()); + calendar.add(Calendar.DATE, 1); + } + + Map dateToObjectMap = dataList.stream() + .collect(Collectors.toMap(dateGetter, Function.identity())); + + return fullDates.stream() + .map(date -> dateToObjectMap.getOrDefault(date, customFactory.apply(date))) + .collect(Collectors.toList()); + } + + public static boolean isNotEmpty(List deviceList) { + return !isEmpty(deviceList); } /** @@ -56,38 +105,4 @@ public class CollectionUtils extends org.springframework.util.CollectionUtils { public static List map(List list, Function keyMapper) { return list.stream().map(keyMapper).filter(Objects::nonNull).distinct().collect(Collectors.toList()); } - - /** - * 累加 BigDecimal - */ - public static BigDecimal sumBigDecimal(List list, Function valueMapper) { - if (CollectionUtils.isEmptyElement(list)) { - return BigDecimal.ZERO; - } - return list.stream().filter(Objects::nonNull) - .map(valueMapper) - .filter(Objects::nonNull) - .reduce(BigDecimal.ZERO, BigDecimal::add); - } - - /** - * 累加 Integer - */ - public static Integer sumInteger(List list, Function valueMapper) { - if (CollectionUtils.isEmptyElement(list)) { - return 0; - } - return list.stream().filter(Objects::nonNull) - .map(valueMapper) - .filter(Objects::nonNull) - .reduce(Integer::sum) - .orElse(0); - } - - public static void addNotNull(List list, T obj) { - if (obj == null) { - return; - } - list.add(obj); - } } diff --git a/smart-switch-service/src/main/java/com/ruoyi/ss/suit/mapper/SuitMapper.xml b/smart-switch-service/src/main/java/com/ruoyi/ss/suit/mapper/SuitMapper.xml index aeb4e1f3..fc7dee66 100644 --- a/smart-switch-service/src/main/java/com/ruoyi/ss/suit/mapper/SuitMapper.xml +++ b/smart-switch-service/src/main/java/com/ruoyi/ss/suit/mapper/SuitMapper.xml @@ -66,7 +66,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - order by ss.create_time desc + order by ss.sort asc, ss.create_time desc