CalendarSettingEvent.java
5.18 KB
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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
package com.hotent.Calendar.model;
import java.util.ArrayList;
import java.util.List;
import com.hotent.Calendar.util.CalendarUtil;
/**
* 日历设置事件
* <pre>
* 日历设置事件是可以跨多个自然天的对象
* </pre>
* @author heyifan
*/
public class CalendarSettingEvent {
private Integer startYear; /*开始的年份*/
private Integer endYear; /*结束的年份*/
private Integer startMonth; /*开始的月份*/
private Integer endMonth; /*结束的月份*/
private Integer startDay; /*开始的那天*/
private Integer endDay; /*结束的那天*/
private String shiftId; /*对应的班次ID*/
public CalendarSettingEvent(){
}
public CalendarSettingEvent(Integer startYear, Integer endYear, Integer startMonth, Integer endMonth,
Integer startDay, Integer endDay, String shiftId){
this.startYear = startYear;
this.endYear = endYear;
this.startMonth = startMonth;
this.endMonth = endMonth;
this.startDay = startDay;
this.endDay = endDay;
this.shiftId = shiftId;
}
public CalendarSettingEvent(Long startYear, Long endYear, Long startMonth, Long endMonth,
Long startDay, Long endDay, String shiftId){
this.startYear = startYear.intValue();
this.endYear = endYear.intValue();
this.startMonth = startMonth.intValue();
this.endMonth = endMonth.intValue();
this.startDay = startDay.intValue();
this.endDay = endDay.intValue();
this.shiftId = shiftId;
}
public Integer getStartYear() {
return startYear;
}
public void setStartYear(Integer startYear) {
this.startYear = startYear;
}
public Integer getEndYear() {
return endYear;
}
public void setEndYear(Integer endYear) {
this.endYear = endYear;
}
public Integer getStartMonth() {
return startMonth;
}
public void setStartMonth(Integer startMonth) {
this.startMonth = startMonth;
}
public Integer getEndMonth() {
return endMonth;
}
public void setEndMonth(Integer endMonth) {
this.endMonth = endMonth;
}
public Integer getStartDay() {
return startDay;
}
public void setStartDay(Integer startDay) {
this.startDay = startDay;
}
public Integer getEndDay() {
return endDay;
}
public void setEndDay(Integer endDay) {
this.endDay = endDay;
}
public String getShiftId() {
return shiftId;
}
public void setShiftId(String shiftId) {
this.shiftId = shiftId;
}
/**
* 将事件分拆为以月为单位
* @return
* @throws Exception
*/
public List<CalendarSettingEvent> partition() throws Exception{
List<CalendarSettingEvent> list = new ArrayList<CalendarSettingEvent>();
//跨年的事件,将其按年分拆
if(yearsMinus() > 0){
Integer daysOfMonth = CalendarUtil.getDaysOfMonth(this.startYear, 12);
CalendarSettingEvent startEvent = new CalendarSettingEvent(this.startYear, this.startYear,this.startMonth,
12 ,this.startDay, daysOfMonth ,this.shiftId);
CalendarSettingEvent endEvent = new CalendarSettingEvent(this.endYear,this.endYear, 1 ,this.endMonth,
1, this.endDay,this.shiftId);
list.add(startEvent);
list.add(endEvent);
}
//跨两个月的,按月分拆为两个
else if(monthMinus() == 1){
Integer daysOfMonth = CalendarUtil.getDaysOfMonth(this.startYear, this.startMonth);
CalendarSettingEvent startEvent = new CalendarSettingEvent(this.startYear, this.startYear,this.startMonth,
this.startMonth ,this.startDay, daysOfMonth ,this.shiftId);
CalendarSettingEvent endEvent = new CalendarSettingEvent(this.startYear, this.startYear,this.endMonth,
this.endMonth , 1 ,this.endDay ,this.shiftId);
list.add(startEvent);
list.add(endEvent);
}
//跨三个月的,按月分拆为三个
else if(monthMinus() == 2){
Integer daysOfMonth = CalendarUtil.getDaysOfMonth(this.startYear, this.startMonth);
CalendarSettingEvent startEvent = new CalendarSettingEvent(this.startYear, this.startYear,this.startMonth,
this.startMonth ,this.startDay, daysOfMonth ,this.shiftId);
Integer daysOfMonth2 = CalendarUtil.getDaysOfMonth(this.startYear, this.startMonth + 1);
CalendarSettingEvent midEvent = new CalendarSettingEvent(this.startYear, this.startYear,this.startMonth + 1,
this.startMonth + 1 ,1 , daysOfMonth2 ,this.shiftId);
CalendarSettingEvent endEvent = new CalendarSettingEvent(this.startYear, this.startYear,this.endMonth,
this.endMonth , 1 ,this.endDay ,this.shiftId);
list.add(startEvent);
list.add(midEvent);
list.add(endEvent);
}
return list;
}
/**
* 是否需要分拆
* @return
* @throws Exception
*/
public Boolean shouldPartition() throws Exception{
if(yearsMinus() > 0) return true;
else if(monthMinus() > 0) return true;
else return false;
}
/**
* 获取年差
* @return
*/
private Integer yearsMinus() throws Exception{
Integer minus = this.endYear-this.startYear;
if(minus < 0 || minus > 1){
throw new RuntimeException("工作日历的设置有误");
}
return minus;
}
/**
* 获取月差
* @return
*/
private Integer monthMinus() throws Exception{
Integer minus = this.endMonth - this.startMonth;
if(minus < 0 || minus > 1){
throw new RuntimeException("工作日历的设置有误");
}
return minus;
}
}