localDateTimes = new ArrayList<>();
LocalDate currentDate = start.toLocalDate();
LocalDateTime currentLocalDateTime = start;
while (!currentDate.isAfter(end.toLocalDate())) {
localDateTimes.add(currentLocalDateTime);
currentLocalDateTime = currentLocalDateTime.plusDays(1);
currentDate = currentDate.plusDays(1);
}
return localDateTimes;
}
public static String getWeek(String dayStr) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date date = sdf.parse(dayStr);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
int day = calendar.get(Calendar.DAY_OF_MONTH);
return day + " " + getWeekDay(dayOfWeek);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static String getWeekDay(int dayOfWeek) {
switch (dayOfWeek) {
case Calendar.MONDAY:
return "周一";
case Calendar.TUESDAY:
return "周二";
case Calendar.WEDNESDAY:
return "周三";
case Calendar.THURSDAY:
return "周四";
case Calendar.FRIDAY:
return "周五";
case Calendar.SATURDAY:
return "周六";
case Calendar.SUNDAY:
return "周日";
default:
return "未知";
}
}
/**
* 返回表头
*
* 外层List代表行内层 List代表列 相同的列数据会被主动合并
* 构造双列表头
*
* @return List>
*/
private static List> getYearHeader(String year, List enums) {
List> line = new ArrayList<>();
line.add(Arrays.asList("考勤汇总", "序号", "序号"));
line.add(Arrays.asList("考勤汇总", "工号", "工号"));
line.add(Arrays.asList("考勤汇总", "姓名", "姓名"));
line.add(Arrays.asList("出勤详情", year, "出勤"));
// 年 header
for (SysDictData anEnum : enums) {
if (!anEnum.getDictValue().equals("5")) {
line.add(Arrays.asList("考勤汇总", year, anEnum.getDictLabel()));
}
}
// 月header
for (int i = 1; i < 13; i++) {
line.add(Arrays.asList("出勤详情", i + " 月", "出勤"));
for (SysDictData anEnum : enums) {
if (!anEnum.getDictValue().equals("5")) {
line.add(Arrays.asList("出勤详情", i + " 月", anEnum.getDictLabel()));
}
}
}
return line;
}
private static List> getMonthHeader(LocalDateTime localDateTimeYear, List enums) {
String year = localDateTimeYear.getYear() + " 年人员班次";
List> line = new ArrayList<>();
line.add(Arrays.asList(year, "序号", "序号", "序号"));
line.add(Arrays.asList(year, "姓名", "姓名", "姓名"));
line.add(Arrays.asList(year, "实验室", "实验室", "实验室"));
line.add(Arrays.asList(year, localDateTimeYear.getYear() + "", localDateTimeYear.getYear() + "", "出勤"));
line.add(Arrays.asList(year, localDateTimeYear.getYear() + "", localDateTimeYear.getYear() + "", enums.get(3).getDictLabel()));
line.add(Arrays.asList(year, "年", "年", enums.get(4).getDictLabel()));
line.add(Arrays.asList(year, localDateTimeYear.getMonthValue() + "", localDateTimeYear.getMonthValue() + "", enums.get(0).getDictLabel()));
line.add(Arrays.asList(year, "月", "月", enums.get(1).getDictLabel()));
line.add(Arrays.asList(year, "", "", enums.get(2).getDictLabel()));
line.add(Arrays.asList(year, "周次", "星期", "出差"));
LocalDate firstDayOfMonth = localDateTimeYear.toLocalDate().withDayOfMonth(1);
LocalDate lastDayOfMonth = localDateTimeYear.toLocalDate().with(TemporalAdjusters.lastDayOfMonth());
List timeList = getLocalDateTimesBetween(firstDayOfMonth.atStartOfDay(), lastDayOfMonth.atStartOfDay());
timeList.forEach(i -> {
int dayOfYear = i.getDayOfMonth();
Date from = Date.from(i.atZone(ZoneId.systemDefault()).toInstant());
String weekDay = getWeekDay(i.getDayOfWeek().getValue());
line.add(Arrays.asList(year, DateUtil.weekOfYear(DateUtil.offsetDay(from, 1)) + "", weekDay, dayOfYear + ""));
});
return line;
}
public List> dataRequiredForProcessingIntoExcelMonth(List list, List enums) {
List> data = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
List