package com.zhitan.system.service.impl; import java.util.Calendar; import java.util.Date; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.zhitan.common.utils.DateUtils; import com.zhitan.common.utils.SecurityUtils; import com.zhitan.system.mapper.SysHolidayMapper; import com.zhitan.system.domain.SysHoliday; import com.zhitan.system.service.ISysHolidayService; /** * 节假日信息Service业务层处理 * * @author zhitan */ @Service public class SysHolidayServiceImpl implements ISysHolidayService { @Autowired private SysHolidayMapper sysHolidayMapper; /** * 查询节假日信息 * * @param holidayId 节假日信息ID * @return 节假日信息 */ @Override public SysHoliday selectSysHolidayById(Long holidayId) { return sysHolidayMapper.selectSysHolidayById(holidayId); } /** * 查询节假日信息列表 * * @param sysHoliday 节假日信息 * @return 节假日信息集合 */ @Override public List selectSysHolidayList(SysHoliday sysHoliday) { return sysHolidayMapper.selectSysHolidayList(sysHoliday); } /** * 新增节假日信息 * * @param sysHoliday 节假日信息 * @return 结果 */ @Override public int insertSysHoliday(SysHoliday sysHoliday) { sysHoliday.setCreateTime(DateUtils.getNowDate()); sysHoliday.setCreateBy(SecurityUtils.getUsername()); return sysHolidayMapper.insertSysHoliday(sysHoliday); } /** * 修改节假日信息 * * @param sysHoliday 节假日信息 * @return 结果 */ @Override public int updateSysHoliday(SysHoliday sysHoliday) { sysHoliday.setUpdateTime(DateUtils.getNowDate()); sysHoliday.setUpdateBy(SecurityUtils.getUsername()); return sysHolidayMapper.updateSysHoliday(sysHoliday); } /** * 批量删除节假日信息 * * @param holidayIds 需要删除的节假日信息ID * @return 结果 */ @Override public int deleteSysHolidayByIds(Long[] holidayIds) { return sysHolidayMapper.deleteSysHolidayByIds(holidayIds); } /** * 删除节假日信息信息 * * @param holidayId 节假日信息ID * @return 结果 */ @Override public int deleteSysHolidayById(Long holidayId) { return sysHolidayMapper.deleteSysHolidayById(holidayId); } /** * 判断日期是否为工作日 * 工作日判断逻辑: * 1. 如果是周一至周五,且不是法定节假日,则为工作日 * 2. 如果是周六日,但是为调休工作日,则为工作日 * * @param date 需要判断的日期 * @return 如果是工作日返回true,否则返回false */ @Override public boolean isWorkDay(Date date) { if (date == null) { return false; } // 查询该日期是否在节假日表中 SysHoliday holiday = sysHolidayMapper.selectSysHolidayByDate(date); // 如果在节假日表中找到记录 if (holiday != null) { // 如果是调休工作日(类型为1),则为工作日 if ("1".equals(holiday.getHolidayType())) { return true; } // 如果是法定节假日(类型为0),则不是工作日 else if ("0".equals(holiday.getHolidayType())) { return false; } } // 如果不在节假日表中,则判断是否为周一至周五 Calendar cal = Calendar.getInstance(); cal.setTime(date); int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); // Calendar.DAY_OF_WEEK 中,1代表周日,2代表周一,3代表周二,4代表周三,5代表周四,6代表周五,7代表周六 // 所以工作日对应的值是2,3,4,5,6(周一至周五) return dayOfWeek >= Calendar.MONDAY && dayOfWeek <= Calendar.FRIDAY; } }