package cn.stylefeng.guns.utils;
|
|
import cn.hutool.core.date.DateField;
|
import cn.hutool.core.date.DateTime;
|
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.map.MapUtil;
|
import cn.hutool.core.util.StrUtil;
|
import lombok.experimental.UtilityClass;
|
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
@UtilityClass
|
public class StatDataUtil {
|
|
/**
|
* 获取日期格式化SQL
|
*
|
* @param type
|
* @return
|
*/
|
public String getDateFormatSql(Integer type) {
|
String dateFormatSql = "%Y-%m-%d";
|
if (type != null) {
|
switch (type) {
|
case 2:
|
return "%Y-%u";
|
case 3:
|
return "%Y-%m";
|
case 4:
|
return "%Y";
|
}
|
}
|
return dateFormatSql;
|
}
|
/**
|
* 获取开始时间和结束时间(空使用默认)
|
*
|
* @param type 类型:1日,2周,3月,4年
|
* @param beginTime 开始时间
|
* @param endTime 结束时间
|
* @return
|
*/
|
public List<String> getStartAndEndTime(Integer type, String beginTime, String endTime) {
|
Date nowDate = new Date();
|
if (type == null || type == 1) {
|
if (StrUtil.isEmpty(beginTime)) {
|
beginTime = DateUtil.beginOfDay(DateUtil.offsetDay(nowDate, -30)).toString();
|
}else{
|
beginTime = beginTime + " 00:00:00";
|
}
|
if (StrUtil.isEmpty(endTime)) {
|
endTime = DateUtil.endOfDay(nowDate).toString();
|
}else{
|
endTime = endTime + " 23:59:59";
|
}
|
} else if (type == 2) {
|
if (StrUtil.isEmpty(beginTime)) {
|
DateTime weekDate = DateUtil.offsetWeek(nowDate, -11);
|
// int week = DateUtil.weekOfYear(weekDate);
|
// beginTime = DateUtil.format(weekDate, "yyyy") + "-" + StrUtil.padPre(String.valueOf(week), 2, "0");
|
beginTime = DateUtil.beginOfDay(weekDate).toString();
|
}else{
|
beginTime = beginTime + " 00:00:00";
|
}
|
if (StrUtil.isEmpty(endTime)) {
|
// int week = DateUtil.weekOfYear(nowDate);
|
endTime = DateUtil.endOfDay(nowDate).toString();
|
// endTime = DateUtil.format(nowDate, "yyyy") + "-" + StrUtil.padPre(String.valueOf(week), 2, "0");
|
}else{
|
endTime = endTime + " 23:59:59";
|
}
|
} else if (type == 3) {
|
if (StrUtil.isEmpty(beginTime)) {
|
beginTime = DateUtil.beginOfDay(DateUtil.offsetMonth(nowDate, -5)).toString();
|
|
}else{
|
beginTime = beginTime + " 00:00:00";
|
}
|
if (StrUtil.isEmpty(endTime)) {
|
endTime = DateUtil.endOfDay(nowDate).toString();
|
}else{
|
endTime = endTime + " 23:59:59";
|
}
|
} else if (type == 4) {
|
if (StrUtil.isEmpty(beginTime)) {
|
beginTime = DateUtil.beginOfDay(DateUtil.offset(nowDate, DateField.YEAR, -2)).toString();
|
}else{
|
beginTime = beginTime + " 00:00:00";
|
}
|
if (StrUtil.isEmpty(endTime)) {
|
endTime = DateUtil.endOfDay(nowDate).toString();
|
}else{
|
endTime = endTime + " 23:59:59";
|
}
|
}
|
|
return Arrays.asList(beginTime, endTime);
|
}
|
|
/**
|
* 获取时间范围
|
*
|
* @param type 类型:1日,2周,3月,4年
|
* @param beginTime 开始时间
|
* @param endTime 结束时间
|
* @return
|
*/
|
public List<String> getBeginEndTimeRangeList(Integer type, String beginTime, String endTime) {
|
if (type == null || type == 1) {
|
return DateUtil.rangeToList(DateUtil.parse(beginTime), DateUtil.parse(endTime), DateField.DAY_OF_MONTH)
|
.stream()
|
.map(date -> DateUtil.format(date, "yyyy-MM-dd"))
|
.collect(Collectors.toList());
|
} else if (type == 2) {
|
//return DateUtil.rangeToList(DateUtil.parse(beginTime, "yyyy-ww"), DateUtil.parse(endTime, "yyyy-ww"), DateField.WEEK_OF_YEAR)
|
return DateUtil.rangeToList(DateUtil.parse(beginTime), DateUtil.parse(endTime), DateField.WEEK_OF_YEAR)
|
.stream()
|
.map(date -> DateUtil.format(date, "yyyy-ww"))
|
.collect(Collectors.toList());
|
} else if (type == 3) {
|
return DateUtil.rangeToList(DateUtil.parse(beginTime, "yyyy-MM"), DateUtil.parse(endTime, "yyyy-MM"), DateField.MONTH)
|
.stream()
|
.map(date -> DateUtil.format(date, "yyyy-MM"))
|
.collect(Collectors.toList());
|
} else if (type == 4) {
|
return DateUtil.rangeToList(DateUtil.parse(beginTime, "yyyy"), DateUtil.parse(endTime, "yyyy"), DateField.YEAR)
|
.stream()
|
.map(date -> DateUtil.format(date, "yyyy"))
|
.collect(Collectors.toList());
|
}
|
return null;
|
}
|
|
/**
|
* 封装时间数据
|
*
|
* @param timeList 时间范围
|
* @param dataList 数据列表
|
* @param dataFieldName 数据字段名,默认:data
|
* @return
|
*/
|
public List<Map<String, Object>> wrapperTimeLIst(List<String> timeList, List<Map<String, Object>> dataList, String dataFieldName) {
|
dataFieldName = StrUtil.isNotEmpty(dataFieldName) ? dataFieldName : "data";
|
String finalDataFieldName = dataFieldName;
|
return timeList.stream()
|
.map(time -> {
|
Object data = dataList.stream()
|
.filter(map -> map.get("time").equals(time))
|
.findFirst()
|
.map(map -> map.get(finalDataFieldName))
|
.orElse(0);
|
|
Map<String, Object> hashMap = MapUtil.newHashMap();
|
hashMap.put("time", time);
|
hashMap.put("data", data);
|
return hashMap;
|
})
|
.collect(Collectors.toList());
|
}
|
|
public static void main(String[] args) {
|
List<String> timeList = StatDataUtil.getStartAndEndTime(2, "", "");
|
System.out.println(timeList.get(0));
|
System.out.println(timeList.get(1));
|
System.out.println("-------------------------------------");
|
|
// Integer type = 1;
|
// String beginTime = "2023-01-01", endTime = "2023-02-02";
|
Integer type = 2;
|
String beginTime = "2023-46", endTime = "2024-05";
|
// Integer type = 3;
|
// String beginTime = "2023-01", endTime = "2024-02";
|
// Integer type = 4;
|
// String beginTime = "2020", endTime = "2024";
|
timeList = StatDataUtil.getBeginEndTimeRangeList(type, beginTime, endTime);
|
timeList.forEach(System.out::println);
|
System.out.println("-------------------------------------");
|
|
HashMap m1 = new HashMap();
|
m1.put("time", "2023-48");
|
m1.put("data", "233");
|
|
HashMap m2 = new HashMap();
|
m2.put("time", "2024-02");
|
m2.put("data", "123");
|
|
HashMap m3 = new HashMap();
|
m3.put("time", "2023-50");
|
m3.put("data", "444");
|
|
List<Map<String, Object>> dataList = Arrays.asList(m1, m2, m3);
|
|
List<Map<String, Object>> maps = StatDataUtil.wrapperTimeLIst(timeList, dataList, null);
|
for (Map<String, Object> map : maps) {
|
System.out.println(map.get("time") + "----" + map.get("data"));
|
}
|
}
|
}
|