package org.yeshi.utils.statistic; import org.yeshi.utils.TimeUtil; import java.math.BigDecimal; import java.util.*; /** * @author hxh * @title: StatisticResulterFilterUtil * @description: 统计结果过滤 * @date 2021/11/18 19:11 */ public class StatisticResulterFilterUtil { public static List filterNumberResult(List list, BaseStatisticTimeQuery timeQuery) { List resultList = new ArrayList<>(); createEmptyList(timeQuery, new IAddEmptyData() { @Override public void onData(String time) { StatisticNumberResult result = new StatisticNumberResult(); result.setNumber(0L); result.setTime(time); resultList.add(result); } }); Map map = new HashMap<>(); for (StatisticNumberResult result : list) { map.put(result.getTime(), result); } for (StatisticNumberResult result : resultList) { if (map.get(result.getTime()) != null) { result.setNumber(map.get(result.getTime()).getNumber()); } } return resultList; } public static List filterValueResult(List list, BaseStatisticTimeQuery timeQuery) { List resultList = new ArrayList<>(); createEmptyList(timeQuery, new IAddEmptyData() { @Override public void onData(String time) { StatisticValueResult result = new StatisticValueResult(); result.setValue(new BigDecimal(0)); result.setTime(time); resultList.add(result); } }); Map map = new HashMap<>(); for (StatisticValueResult result : list) { map.put(result.getTime(), result); } for (StatisticValueResult result : resultList) { if (map.get(result.getTime()) != null) { result.setValue(map.get(result.getTime()).getValue()); } } return resultList; } private static void createEmptyList(BaseStatisticTimeQuery timeQuery, IAddEmptyData addEmptyData) { //开始时间与结束时间整形 Date startTime = new Date(timeQuery.getStartTime().getTime()); Date endTime = new Date(timeQuery.getEndTime().getTime()); startTime = new Date(TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(startTime.getTime(), timeQuery.getTimeSpan().getLocalTimeFormat()), timeQuery.getTimeSpan().getLocalTimeFormat())); endTime = new Date(TimeUtil.convertToTimeTemp(TimeUtil.getGernalTime(endTime.getTime(), timeQuery.getTimeSpan().getLocalTimeFormat()), timeQuery.getTimeSpan().getLocalTimeFormat())); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(startTime.getTime()); while (calendar.getTimeInMillis() <= endTime.getTime()) { addEmptyData.onData(TimeUtil.getGernalTime(calendar.getTimeInMillis(), timeQuery.getTimeSpan().getLocalTimeFormat())); //增加时间 if (timeQuery.getTimeSpan() == StatisticTimeSpan.minute) { calendar.add(Calendar.SECOND, 60); } else if (timeQuery.getTimeSpan() == StatisticTimeSpan.hour) { calendar.add(Calendar.HOUR, 1); } else if (timeQuery.getTimeSpan() == StatisticTimeSpan.day) { calendar.add(Calendar.HOUR, 24); } else if (timeQuery.getTimeSpan() == StatisticTimeSpan.month) { calendar.add(Calendar.MONTH, 1); } else if (timeQuery.getTimeSpan() == StatisticTimeSpan.year) { calendar.add(Calendar.YEAR, 1); } //判断是否存在 } } interface IAddEmptyData { public void onData(String time); } }