📄 taskeventmgrimpl.java
字号:
}
Integer freqMonthNumSecInt = null; // 定义每隔几月的数量的Integer类型;
if (freqMonthNumSec != null) {
freqMonthNumSecInt = Integer
.parseInt(freqMonthNumSec); // 把定义的隔月数转化为integer类型;
}
while (tempDate.before(reEnd)) {
int cou = 0;// 相差几天 月第一天或者最后一天周几和选择的周几相差值;
int total = 0;// 总共要推进几天;
Integer firstDayWeekNum = DateTimeTool
.getFirstDateByWeek(cal);// 获取当月的第一天的星期几;
Integer lastDayWeekNum = DateTimeTool
.getLastDateByWeek(cal);// 获取当月的第一天的星期几;
Integer lastDayMonthNum = DateTimeTool
.getLastDate(cal);// 获取月份中最后一天的日期数;
if (executeDayFirInt.equals(0)) {// 如果为日;
if (executeNoFirInt.equals(5)) {// 最后一日;
total = DateTimeTool.getLastDate(cal);
cal.set(Calendar.DATE, 1);
cal.add(Calendar.DATE, total - 1);// 要扣除一天;
} else {
cal.set(Calendar.DATE, executeNoFirInt);
}
} else {// 如果不为日;
if (executeNoFirInt.equals(5)) {// 最后一次,不是日,最后一次周几;
if (lastDayWeekNum == executeDayFirInt) {// 如果最后一天的周数等于选择的周数;
total = DateTimeTool.getLastDate(cal);
} else if (lastDayWeekNum > executeDayFirInt) {// 如果最后一天的周数大于选择的周数;
cou = lastDayWeekNum - executeDayFirInt;
total = lastDayMonthNum - cou;
} else if (lastDayWeekNum < executeDayFirInt) {// 如果最后一天的周数小于选择的周数;
cou = lastDayWeekNum
+ (7 - executeDayFirInt);
total = lastDayMonthNum - cou;
}
cal.set(Calendar.DATE, 1);
cal.add(Calendar.DATE, total - 1);// 要扣除一天;
} else {
if (firstDayWeekNum <= executeDayFirInt) {
cou = executeDayFirInt
- firstDayWeekNum;
} else {
cou = (7 - firstDayWeekNum)
+ executeDayFirInt;
}
total = cou + 7 * (executeNoFirInt - 1);
cal.set(Calendar.DATE, 1);
cal.add(Calendar.DATE, total);
}
}
tempDate = cal.getTime(); // 获取当前日期,赋给临时时间变量-随着循环变量改变;
weekNo = cal.get(Calendar.DAY_OF_WEEK);
dayOfYear = cal.get(Calendar.DAY_OF_YEAR);// 年之日;
weekOfYear = cal.get(Calendar.WEEK_OF_YEAR);// 年之周;
monthOfYear = cal.get(Calendar.MONTH);// 年之月;
dYear = cal.get(Calendar.YEAR);// 年份;
if (tempDate.after(reEnd)) {// 如果日期超过结束日期,跳出循环;
break;
}
tempStrDate = new SimpleDateFormat("yyyy-MM-dd")
.format(tempDate);
/** **周期事件存储类型:从reStartDate到reEndDate每隔几月的第几日事件** */
Event event = fillEvent(request, eventForm,
tempStrDate);
event.setEventSeq(eventSeq);// 设置序列号;
event.setStartDate(tempStrDate);// 设置开始执行日期;
event.setEndDate(tempStrDate);// 设置结束执行日期;
event.setReStartDate(reStartDate);// 周期开始日期;
event.setReEndDate(reEndDate);// 周期结束日期;
event.setFrequencyType(frequencyType);// 每天类型;
event.setFreqStart("2");// 每隔几月的类型 ;
event.setFrequencyMouth(freqMonthNumSecInt);// 每隔数量;
event.setExecuteDay(executeDayFir);// 执行单位;
event.setExecuteDayNo(executeNoFirInt);// 执行第次;
event.setDayOfYear(dayOfYear);// 设置年之日;
event.setWeekOfYear(weekOfYear);// 设置年之周;
event.setMonthOfYear(monthOfYear);// 设置年之月;
event.setCurrentYear(dYear);// 设置年份;
event.setWeekNo(weekNo);// 周之日;
eventDAO.addEvent(event);// 添加事件;
// **************在此判断事件是否超过一百次********************;
count++; // 每次加一次事件的时候,计数器加1;
if (count > 100) {
logger.error("添加事件超过一百次");
try {
throw new TooManyValueException("添加事件超过一百次");
} catch (TooManyValueException e) {
e.printStackTrace();
}// 抛出异常才能回滚;
}
cal.set(Calendar.DATE, 1);
cal.add(Calendar.MONTH, freqMonthNumSecInt);
}
}
}
break;
case 4: {// 每年的类型;
String freqStartYear = request
.getParameter("freqStartYear");
if (freqStartYear.equals("1")) {
String freqMNoFir = request.getParameter("freqMNoFir");// 获取页面上的月数;
Integer freqMNoFirInt = null;
if (freqMNoFir != null) {
freqMNoFirInt = Integer.parseInt(freqMNoFir);// 将月数转为integer类型;
}
String executeDaySec = request
.getParameter("executeDaySec");// 获取页面上的日期数;
Integer executeDaySecInt = null;
if (executeDaySec != null) {
executeDaySecInt = Integer.parseInt(executeDaySec);// 将日期数转为integer类型;
}
// **从开始日期到结束日期的时间循环添加事件;
while (tempDate.before(reEnd)) { // 判断日期格式;
tempDate = cal.getTime(); // 获取当前日期,赋给临时时间变量;
Integer DateNo = cal.get(Calendar.DATE); // 获取当前日期的日期数;
Integer MonthNo = cal.get(Calendar.MONTH);// 获取当前日期的月数;
weekNo = cal.get(Calendar.DAY_OF_WEEK);// 周之日;
dayOfYear = cal.get(Calendar.DAY_OF_YEAR);// 年之日;
weekOfYear = cal.get(Calendar.WEEK_OF_YEAR);// 年之周;
monthOfYear = cal.get(Calendar.MONTH);// 年之月;
dYear = cal.get(Calendar.YEAR);// 年份;
tempStrDate = new SimpleDateFormat("yyyy-MM-dd")
.format(tempDate);
if (MonthNo.equals(freqMNoFirInt)
&& DateNo.equals(executeDaySecInt)) { // 如果选择的月数和日期数一样,那么添加事件;
/** **周期事件存储类型:从reStartDate到reEndDate每隔几月份几号的日期** */
Event event = fillEvent(request, eventForm,
tempStrDate);
event.setEventSeq(eventSeq);// 设置序列号;
event.setStartDate(tempStrDate);// 设置开始执行日期;
event.setEndDate(tempStrDate);// 设置结束执行日期;
event.setReStartDate(reStartDate);// 周期开始日期;
event.setReEndDate(reEndDate);// 周期结束日期;
event.setFrequencyType(frequencyType);// 每天类型;
event.setFreqStart("1");// 每隔几月的类型 ;
event.setFrequencyMouth(null);// 每隔数量;
event.setExecuteDay(executeDaySec);// 执行单位;
event.setExecuteDayNo(freqMNoFirInt);// 执行第次月份;
event.setDayOfYear(dayOfYear);// 设置年之日;
event.setWeekOfYear(weekOfYear);// 设置年之周;
event.setMonthOfYear(monthOfYear);// 设置年之月;
event.setCurrentYear(dYear);// 设置年份;
event.setWeekNo(weekNo);// 周之日;
eventDAO.addEvent(event);// 添加事件;
// **************在此判断事件是否超过一百次********************;
count++; // 每次加一次事件的时候,计数器加1;
if (count > 100) {
logger.error("添加事件超过一百次");
try {
throw new TooManyValueException(
"添加事件超过一百次");
} catch (TooManyValueException e) {
e.printStackTrace();
}// 抛出异常才能回滚;
}
}
cal.add(Calendar.DAY_OF_MONTH, 1); // 把开始日期推进1天;
}
} else if (freqStartYear.equals("2")) {// 选择的是每个某个月第几次的周几;
String freqMNoSec = request.getParameter("freqMNoSec");// 获取页面开始月份
Integer freqMNoSecInt = null;
String executeNoSec = request
.getParameter("executeNoSec");// 从页面上获取第次
Integer executeNoSecInt = null;
String executeDayFirSec = request
.getParameter("executeDayFirSec");// 从页面上获取最小单位;
Integer executeDayFirSecInt = null;
if (freqMNoSec != null) {
freqMNoSecInt = Integer.parseInt(freqMNoSec);
}
if (executeNoSec != null) {
executeNoSecInt = Integer.parseInt(executeNoSec);
}
if (executeDayFirSec != null) {
executeDayFirSecInt = Integer
.parseInt(executeDayFirSec);
}
// **从开始日期到结束日期的时间循环添加事件;
while (tempDate.before(reEnd)) {
Integer currentMonth = cal.get(Calendar.MONTH);// 获取当前的月份;
if (currentMonth <= freqMNoSecInt) {// 如果当前的月份小于选择的月份;
cal.set(Calendar.MONTH, freqMNoSecInt);// 设置时间为页面的选择月份;
int cou = 0;// 相差几天 月第一天或者最后一天周几和选择的周几相差值;
int total = 0;// 总共要推进几天;
Integer firstDayWeekNum = DateTimeTool
.getFirstDateByWeek(cal);// 获取当月的第一天的星期几;
Integer lastDayWeekNum = DateTimeTool
.getLastDateByWeek(cal);// 获取当月的第一天的星期几;
Integer lastDayMonthNum = DateTimeTool
.getLastDate(cal);// 获取月份中最后一天的日期数;
if (executeDayFirSec.equals(0)) {// 如果选择的单位为日;
if (executeNoSecInt.equals(5)) {// 最后一次;
cal.set(Calendar.DATE, 1);
cal.add(Calendar.DATE,
lastDayMonthNum - 1);
} else {// 如果不是最后一天;
cal.set(Calendar.DATE, executeNoSecInt);
}
} else {
if (executeNoSecInt.equals(5)) {// 最后一次;
if (lastDayWeekNum == executeDayFirSecInt) {// 如果最后一天的周数等于选择的周数;
total = DateTimeTool
.getLastDate(cal);
} else if (lastDayWeekNum > executeDayFirSecInt) {// 如果最后一天的周数大于选择的周数;
cou = lastDayWeekNum
- executeDayFirSecInt;
total = lastDayMonthNum - cou;
} else if (lastDayWeekNum < executeDayFirSecInt) {// 如果最后一天的周数小于选择的周数;
cou = lastDayWeekNum
+ (7 - executeDayFirSecInt);
total = lastDayMonthNum - cou;
}
cal.set(Calendar.DATE, 1);
cal.add(Calendar.DATE, total - 1);// 要扣除一天;
} else {
if (firstDayWeekNum <= executeDayFirSecInt) {
cou = executeDayFirSecInt
- firstDayWeekNum;
} else {
cou = (7 - firstDayWeekNum)
+ executeDayFirSecInt;
}
total = cou + 7 * (executeNoSecInt - 1);
cal.set(Calendar.DATE, 1);
cal.add(Calendar.DATE, total);
}
}
tempDate = cal.getTime(); // 获取当前日期,赋给临时时间变量;
weekNo = cal.get(Calendar.DAY_OF_WEEK);// 周之日;
dayOfYear = cal.get(Calendar.DAY_OF_YEAR);// 年之日;
weekOfYear = cal.get(Calendar.WEEK_OF_YEAR);// 年之周;
monthOfYear = cal.get(Calendar.MONTH);// 年之月;
dYear = cal.get(Calendar.YEAR);// 年份;
tempStrDate = new SimpleDateFormat("yyyy-MM-dd")
.format(tempDate);
if (tempDate.after(reEnd)) {// 当前时间已经在结束后面,跳出循环;
break;
}
/** **周期事件存储类型:从reStartDate到reEndDate于几月份第几次的周几** */
Event event = fillEvent(request, eventForm,
tempStrDate);
event.setEventSeq(eventSeq);// 设置序列号;
event.setStartDate(tempStrDate);// 设置开始执行日期;
event.setEndDate(tempStrDate);// 设置结束执行日期;
event.setReStartDate(reStartDate);// 周期开始日期;
event.setReEndDate(reEndDate);// 周期结束日期;
event.setFrequencyType(frequencyType);// 每天类型;
event.setFreqStart("2");// 每隔几月的类型 ;
event.setFrequencyMouth(freqMNoSecInt);// 每隔数量;选择月份
event.setExecuteDay(executeDayFirSec);// 执行单位;
event.setExecuteDayNo(executeNoSecInt);// 执行第次;
event.setDayOfYear(dayOfYear);// 设置年之日;
event.setWeekOfYear(weekOfYear);// 设置年之周;
event.setMonthOfYear(monthOfYear);// 设置年之月;
event.setCurrentYear(dYear);// 设置年份;
event.setWeekNo(weekNo);// 周之日;
eventDAO.addEvent(event);// 添加事件;
// **************在此判断事件是否超过一百次********************;
count++; // 每次加一次事件的时候,计数器加1;
if (count > 100) {
logger.error("添加事件超过一百次");
try {
throw new TooManyValueException(
"添加事件超过一百次");
} catch (TooManyValueException e) {
e.printStackTrace();
}// 抛出异常才能回滚;
}
}
cal.add(Calendar.YEAR, 1);// 推进一年;
}
}
}
break;
}
}
} else {// 没有重复性事件的情况;不用存储序列号;
String startDate = request.getParameter("startDate");
String endDate = request.getParameter("endDate");
if (StringTool.isNotBlank(startDate)) { // 开始日期不为空;
reStart = DateTimeTool.buildDate(startDate); // 把开始日期的字符串转化为日期格式;
}
if (StringTool.isNotBlank(endDate)) { // 结束日期不为空;
reEnd = DateTimeTool.buildDate(endDate); // 把开始日期的字符串转化为日期格式;
}
Date tempDate = reStart; // 临时日期变量,赋值为开始日期;
cal.setTime(reStart); // 把开始日期设置到当前的日历;
while (tempDate.before(reEnd) || tempDate.equals(reEnd)) { // 判断日期格式;
tempDate = cal.getTime(); // 获取当前日期,赋给临时时间变量;
weekNo = cal.get(Calendar.DAY_OF_WEEK); // 获取当前日期的周数;
dayOfYear = cal.get(Calendar.DAY_OF_YEAR);// 年之日;
weekOfYear = cal.get(Calendar.WEEK_OF_YEAR);// 年之周;
monthOfYear = cal.get(Calendar.MONTH);// 年之月;
dYear = cal.get(Calendar.YEAR);// 年份;
tempStrDate = new SimpleDateFormat("yyyy-MM-dd")
.format(tempDate);
/** **事件存储类型:从startDate到endDate每天** */
Event event = fillEvent(request, eventForm, tempStrDate);
String allDay = request.getParameter("allDay");
if (allDay == null
&& !(reStart.equals(tempDate) || reEnd.equals(tempDate))) {// 等于为全天事件,并且
if (tempDate.equals(reEnd)) {
event.setStartTime("上午12:00");
event.setStartTimePoint(1);
} else if (tempDate.equals(reStart)) {
event.setEndTime("上午12:00");
event.setEndTimePoint(1);
} else {
event.setStartTime("上午12:00");
event.setEndTime("上午12:00");
event.setStartTimePoint(1);
event.setEndTimePoint(1);
}
}
event.setEventSeq(null);// 没有序列,设置序列号为空;
event.setStartDate(tempStrDate);// 设置开始执行日期;
event.setEndDate(tempStrDate);// 设置结束执行日期;
event.setReStartDate(startDate);// 当没有循环的时候,设置开始时间;
event.setReEndDate(endDate);// 当没有循环的时候,设置结束时间;
event.setReCopy(null);// 是否周期;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -