package com.moral.api.utils;
|
|
import org.apache.commons.collections4.CollectionUtils;
|
import java.time.LocalDate;
|
import java.time.temporal.ChronoUnit;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
|
import com.moral.api.vo.HeatMapVo;
|
import com.moral.api.vo.TimeHourVo;
|
import com.moral.util.DateUtils;
|
|
/**
|
* Description //todo
|
*
|
* @author swb
|
* @ClassName HeatMapTimeUtils
|
* @date 2023.12.18 13:42
|
*/
|
|
|
public class HeatMapTimeUtils {
|
|
/**
|
*获取某段时间的每天天数,和小时数
|
*/
|
public static List<HeatMapVo> getTime(String startTime, String endTime, String type){
|
ArrayList<HeatMapVo> heatMapVos = new ArrayList<>();
|
if (type.equals("day")){
|
ArrayList<TimeHourVo> timeHourVos = new ArrayList<>();
|
String[] splitStart = startTime.split("-");
|
String[] splitEnd = endTime.split("-");
|
LocalDate startDate = LocalDate.of(Integer.parseInt(splitStart[0]), Integer.parseInt(splitStart[1]), Integer.parseInt(splitStart[2]));
|
LocalDate endDate = LocalDate.of(Integer.parseInt(splitEnd[0]), Integer.parseInt(splitEnd[1]), Integer.parseInt(splitEnd[2]));
|
long daysBetween = ChronoUnit.DAYS.between(startDate, endDate);
|
for (int i = 0; i <= daysBetween; i++) {
|
HeatMapVo heatMapVo = new HeatMapVo();
|
LocalDate date = startDate.plusDays(i);
|
heatMapVo.setId(i);
|
heatMapVo.setName(date.toString());
|
heatMapVo.setHourListTime(timeHourVos);
|
heatMapVos.add(heatMapVo);
|
}
|
}else if (type.equals("month")){
|
ArrayList<TimeHourVo> timeHourVos = new ArrayList<>();
|
String[] splitStart = startTime.split("-");
|
String[] splitEnd = endTime.split("-");
|
//结束时间月份的天数
|
|
int monthDay = DateUtils.getMonthDay(DateUtils.getDate(endTime,DateUtils.yyyy_MM_EN));
|
LocalDate startDate = LocalDate.of(Integer.parseInt(splitStart[0]), Integer.parseInt(splitStart[1]),1);
|
LocalDate endDate = LocalDate.of(Integer.parseInt(splitEnd[0]), Integer.parseInt(splitEnd[1]),monthDay);
|
long daysBetween = ChronoUnit.DAYS.between(startDate, endDate);
|
for (int i = 0; i <= daysBetween; i++) {
|
HeatMapVo heatMapVo = new HeatMapVo();
|
LocalDate date = startDate.plusDays(i);
|
heatMapVo.setId(i);
|
heatMapVo.setName(date.toString());
|
heatMapVo.setHourListTime(timeHourVos);
|
heatMapVos.add(heatMapVo);
|
}
|
}else {
|
int id = 0;
|
int idHour = -1;
|
Date ks = DateUtils.getDate(startTime,"yyyy-MM-dd HH");
|
Date js = DateUtils.getDateAddHour(DateUtils.getDate(endTime,"yyyy-MM-dd HH"),1);
|
String name = DateUtils.dateToDateString(ks,DateUtils.yyyy_MM_dd_EN);
|
List<TimeHourVo> hourListTime = new ArrayList<>();
|
while (DateUtils.isTimeBefor(js,ks)){
|
idHour++;
|
HeatMapVo heatMapVo = new HeatMapVo();
|
String nameEndTime = DateUtils.dateToDateString(ks,DateUtils.yyyy_MM_dd_EN);
|
String time = DateUtils.dateToDateString(ks,"HH");
|
String ksTime = DateUtils.dateToDateString(ks,"yyyy-MM-dd HH");
|
TimeHourVo hourVo = new TimeHourVo();
|
heatMapVo.setName(name);
|
heatMapVo.setId(id);
|
if(name.equals(nameEndTime)){
|
heatMapVo.setId(id);
|
heatMapVo.setName(name);
|
hourVo.setName(time);
|
hourVo.setId(idHour);
|
hourListTime.add(hourVo);
|
if(ksTime.equals(endTime)){
|
heatMapVo.setHourListTime(hourListTime);
|
heatMapVos.add(heatMapVo);
|
idHour++;
|
break;
|
}
|
}else {
|
id++;
|
if(ksTime.equals(endTime)){
|
heatMapVo.setHourListTime(hourListTime);
|
heatMapVos.add(heatMapVo);
|
hourListTime = new ArrayList<>();
|
hourVo = new TimeHourVo();
|
heatMapVo = new HeatMapVo();
|
hourVo.setName("00");
|
hourVo.setId(idHour++);
|
hourListTime.add(hourVo);
|
heatMapVo.setId(id);
|
heatMapVo.setName(nameEndTime);
|
heatMapVo.setHourListTime(hourListTime);
|
heatMapVos.add(heatMapVo);
|
break;
|
}else {
|
name = nameEndTime;
|
heatMapVo.setHourListTime(hourListTime);
|
heatMapVos.add(heatMapVo);
|
hourListTime = new ArrayList<>();
|
hourVo.setName(time);
|
hourVo.setId(idHour);
|
hourListTime.add(hourVo);
|
}
|
}
|
ks = DateUtils.getDateAddHour(ks,1);
|
}
|
if(CollectionUtils.isNotEmpty(heatMapVos)){
|
heatMapVos.get(0).setIdLength(idHour);
|
}
|
|
/* String[] splitStart = startTime.split("-");
|
String[] s1 = splitStart[2].split(" ");
|
String[] splitEnd = endTime.split("-");
|
String[] s2 = splitEnd[2].split(" ");
|
//获取天时间
|
LocalDate startDate = LocalDate.of(Integer.parseInt(splitStart[0]), Integer.parseInt(splitStart[1]),Integer.parseInt(s1[0]));
|
LocalDate endDate = LocalDate.of(Integer.parseInt(splitEnd[0]), Integer.parseInt(splitEnd[1]),Integer.parseInt(s2[0]));
|
long daysBetween = ChronoUnit.DAYS.between(startDate, endDate);
|
//获取小时
|
LocalDateTime startDateTime = LocalDateTime.of(Integer.parseInt(splitStart[0]), Integer.parseInt(splitStart[1]), Integer.parseInt(s1[0]), Integer.parseInt(s1[1]), 0);
|
LocalDateTime endDateTime = LocalDateTime.of(Integer.parseInt(splitEnd[0]), Integer.parseInt(splitEnd[1]), Integer.parseInt(s2[0]), Integer.parseInt(s2[1]), 0);
|
List<String> hourList = new ArrayList<>();
|
LocalDateTime currentDateTime = startDateTime;
|
while (currentDateTime.isBefore(endDateTime) || currentDateTime.equals(endDateTime)) {
|
hourList.add(currentDateTime.toString());
|
currentDateTime = currentDateTime.plusHours(1);
|
}
|
int length=0;
|
for (int i = 0; i <= daysBetween; i++) {
|
ArrayList<TimeHourVo> timeHourVos = new ArrayList<>();
|
HeatMapVo heatMapVo = new HeatMapVo();
|
LocalDate date = startDate.plusDays(i);
|
heatMapVo.setId(i);
|
heatMapVo.setName(date.toString());
|
for (int i1 = 0; i1 < hourList.size(); i1++) {
|
if (hourList.get(i1).contains(date.toString())){
|
TimeHourVo hourVo = new TimeHourVo();
|
hourVo.setName(hourList.get(i1).substring(11,13));
|
hourVo.setId(length);
|
timeHourVos.add(hourVo);
|
hourList.remove(i1);
|
i1--;
|
length++;
|
}
|
}
|
heatMapVo.setHourListTime(timeHourVos);
|
heatMapVos.add(heatMapVo);
|
}
|
heatMapVos.get(0).setIdLength(length);*/
|
}
|
|
return heatMapVos;
|
}
|
|
}
|