package com.qianwen.smartman.modules.report.utils;
|
|
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.util.StrUtil;
|
import java.text.SimpleDateFormat;
|
import java.time.LocalDate;
|
import java.time.ZoneId;
|
import java.time.format.DateTimeFormatter;
|
import java.time.temporal.ChronoUnit;
|
import java.util.ArrayList;
|
import java.util.Calendar;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.stream.Stream;
|
import com.qianwen.smartman.common.constant.DateConstant;
|
import com.qianwen.smartman.common.utils.LocalDateTimeUtils;
|
import com.qianwen.core.tool.utils.StringUtil;
|
import com.qianwen.smartman.modules.mdc.dto.IntervalDateDto;
|
import com.qianwen.smartman.modules.mdc.enums.StatisticalMethodEnum;
|
|
/* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/modules/report/utils/DateCycleUtil.class */
|
public class DateCycleUtil {
|
private static final SimpleDateFormat sdf = new SimpleDateFormat(DateConstant.PATTERN_DATE);
|
private static final String BEGIN = "begin";
|
private static final String END = "end";
|
|
public static String getDateByDateCycle(String dateTime, StatisticalMethodEnum methodEnum, Boolean isBegin) {
|
Date date = Date.from(LocalDate.parse(dateTime).atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
|
switch (methodEnum) {
|
case DAY:
|
break;
|
case WEEK:
|
int week = DateUtil.dayOfWeek(date);
|
if (isBegin.booleanValue()) {
|
if (week == 1) {
|
date = DateUtil.offsetDay(date, -6);
|
}
|
if (week >= 2) {
|
date = DateUtil.offsetDay(date, (-week) + 2);
|
break;
|
}
|
} else if (week > 1) {
|
date = DateUtil.offsetDay(date, 8 - week);
|
break;
|
}
|
break;
|
case MONTH:
|
int day = DateUtil.dayOfMonth(date);
|
int monthLastDay = DateUtil.endOfMonth(date).dayOfMonth();
|
int monthBeginDay = DateUtil.beginOfMonth(date).dayOfMonth();
|
if (isBegin.booleanValue()) {
|
if (day != monthBeginDay) {
|
date = DateUtil.offsetDay(date, (-day) + 1);
|
break;
|
}
|
} else if (day != monthLastDay) {
|
date = DateUtil.offsetDay(date, monthLastDay - day);
|
break;
|
}
|
break;
|
default:
|
return LocalDate.now().toString();
|
}
|
return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
|
}
|
|
public static List<String> fillDateCol(String startTime, String endTime, StatisticalMethodEnum methodEnum) {
|
List<String> list = new ArrayList<>();
|
switch (methodEnum) {
|
case DAY:
|
LocalDate startDate = LocalDate.parse(startTime);
|
LocalDate endDate = LocalDate.parse(endTime);
|
long distance = ChronoUnit.DAYS.between(startDate, endDate);
|
Stream.iterate(startDate, d -> {
|
return d.plusDays(1L);
|
}).limit(distance + 1).forEach(f -> {
|
list.add(f.toString());
|
});
|
return list;
|
case WEEK:
|
List<IntervalDateDto> intervalDateDtoList = LocalDateTimeUtils.getIntervalDate(LocalDateTimeUtils.dateToLocalDate(com.qianwen.core.tool.utils.DateUtil.parse(startTime, DateConstant.PATTERN_DATE)), LocalDateTimeUtils.dateToLocalDate(com.qianwen.core.tool.utils.DateUtil.parse(endTime, DateConstant.PATTERN_DATE)));
|
List<String> result = new ArrayList<>();
|
intervalDateDtoList.forEach(o -> {
|
o.getWeekList().forEach(week -> {
|
Object[] objArr = new Object[2];
|
objArr[0] = o.getYear();
|
objArr[1] = String.valueOf(week).length() == 1 ? "0" + week : week;
|
result.add(StringUtil.format("{}-第{}周", objArr));
|
});
|
});
|
return result;
|
case MONTH:
|
List<IntervalDateDto> intervalDateDtoListM = LocalDateTimeUtils.getIntervalDate(LocalDateTimeUtils.dateToLocalDate(com.qianwen.core.tool.utils.DateUtil.parse(startTime, DateConstant.PATTERN_DATE)), LocalDateTimeUtils.dateToLocalDate(com.qianwen.core.tool.utils.DateUtil.parse(endTime, DateConstant.PATTERN_DATE)));
|
List<String> resultM = new ArrayList<>();
|
intervalDateDtoListM.forEach(o2 -> {
|
o2.getMonthList().forEach(month -> {
|
Object[] objArr = new Object[2];
|
objArr[0] = o2.getYear();
|
objArr[1] = String.valueOf(month).length() == 1 ? "0" + month : month;
|
resultM.add(StringUtil.format("{}-{}", objArr));
|
});
|
});
|
return resultM;
|
default:
|
return list;
|
}
|
}
|
|
public static void main(String[] args) {
|
List<String> result = fillDateCol("2022-12-24", "2023-02-01", StatisticalMethodEnum.MONTH);
|
System.out.println(result);
|
}
|
|
public static String getDateCycle(StatisticalMethodEnum statisticalMethodEnum, String dateCycle) {
|
switch (statisticalMethodEnum) {
|
case DAY:
|
return LocalDate.parse(dateCycle, DateTimeFormatter.ofPattern("yyyyMMdd")).toString();
|
case WEEK:
|
return DateUtil.thisYear() + "-第" + (dateCycle.length() == 1 ? "0" + dateCycle : dateCycle) + "周";
|
case MONTH:
|
return DateUtil.thisYear() + "-" + (dateCycle.length() == 1 ? "0" + dateCycle : dateCycle);
|
default:
|
return LocalDate.now().toString();
|
}
|
}
|
|
public static Calendar getCalendarFormYear(int year) {
|
Calendar cal = Calendar.getInstance();
|
cal.set(7, 2);
|
cal.set(1, year);
|
return cal;
|
}
|
|
public static String getStartDayOfWeekNo(int year, int weekNo) {
|
String format;
|
synchronized (sdf) {
|
Calendar cal = getCalendarFormYear(year);
|
cal.set(3, weekNo);
|
format = sdf.format(cal.getTime());
|
}
|
return format;
|
}
|
|
public static String getEndDayOfWeekNo(int year, int weekNo) {
|
String format;
|
synchronized (sdf) {
|
Calendar cal = getCalendarFormYear(year);
|
cal.set(3, weekNo);
|
cal.add(7, 6);
|
format = sdf.format(cal.getTime());
|
}
|
return format;
|
}
|
|
public static String getFirstDayOfMonth(int year, int month) {
|
String format;
|
synchronized (sdf) {
|
Calendar cal = Calendar.getInstance();
|
cal.set(1, year);
|
cal.set(2, month - 1);
|
int firstDay = cal.getMinimum(5);
|
cal.set(5, firstDay);
|
format = sdf.format(cal.getTime());
|
}
|
return format;
|
}
|
|
public static String getEndDayOfMonth(int year, int month) {
|
String format;
|
synchronized (sdf) {
|
Calendar cal = Calendar.getInstance();
|
cal.set(1, year);
|
cal.set(2, month - 1);
|
int lastDay = cal.getActualMaximum(5);
|
cal.set(5, lastDay);
|
format = sdf.format(cal.getTime());
|
}
|
return format;
|
}
|
|
public static String setTimeCondition(String conditionTime, Boolean isBegin) {
|
Object[] objArr = new Object[2];
|
objArr[0] = conditionTime;
|
objArr[1] = isBegin.booleanValue() ? BEGIN : END;
|
return (String) CommonUtil.getRequestParameter(StrUtil.format("{}_{}", objArr), String.class);
|
}
|
}
|