package com.mossle.workcal.support; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class WorkDay { private static Logger logger = LoggerFactory.getLogger(WorkDay.class); private Date date; private List<DayPart> dayParts = new ArrayList<DayPart>(); private WorkCalendar workCalendar; public WorkDay(WorkCalendar workCalendar) { this.workCalendar = workCalendar; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } public List<DayPart> getDayParts() { return dayParts; } public void setDayParts(List<DayPart> dayParts) { this.dayParts = dayParts; } public boolean isSameDay(Date workDate) { Calendar workCalendar = Calendar.getInstance(); workCalendar.setTime(date); Calendar targetCalendar = Calendar.getInstance(); targetCalendar.setTime(workDate); return (workCalendar.get(Calendar.YEAR) == targetCalendar .get(Calendar.YEAR)) && (workCalendar.get(Calendar.MONTH) == targetCalendar .get(Calendar.MONTH)) && (workCalendar.get(Calendar.DATE) == targetCalendar .get(Calendar.DATE)); } public DayPartResult findNextDayPartStart(int dayPartIndex, Date date) { logger.info("date : {}, dayPartIndex : {}", date, dayPartIndex); logger.info("isHoliday : {}", this.isHoliday()); logger.info("dayPartIndex >= dayParts.size() : {}", dayPartIndex >= dayParts.size()); if (this.isHoliday() || (dayPartIndex >= dayParts.size())) { logger.info("workCalendar : {}", workCalendar); // 如果这一天没有工作时间段,找下一个工作日 date = workCalendar.findStartOfNextDay(date); logger.info("findStartOfNextDay : {}", date); WorkDay nextDay = workCalendar.findTargetWorkDay(date); return nextDay.findNextDayPartStart(0, date); } // 检查是否在当前的工作时间段里 if (dayParts.get(dayPartIndex).isStartAfter(date)) { // 如果在,就返回 date = dayParts.get(dayPartIndex).getStartTime(date); DayPartResult dayPartResult = new DayPartResult(); dayPartResult.setDate(date); dayPartResult.setDayPart(dayParts.get(dayPartIndex)); return dayPartResult; } else { // 如果不在,查询下一个时间段 return findNextDayPartStart(dayPartIndex + 1, date); } } public boolean isHoliday() { return (dayParts == null) || dayParts.isEmpty(); } }