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 fillDateCol(String startTime, String endTime, StatisticalMethodEnum methodEnum) { List 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 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 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 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 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 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); } }