1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
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<SysHoliday> 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;
    }
}