📄 taskeventmgrimpl.java
字号:
e.printStackTrace();
logger.error(Constants.MODIFYTASK_EXCEPTION);
throw new ApplicationException(Constants.MODIFYTASK_EXCEPTION);
}
}
/**
* @author 陆文邦;
* @date 2008-11-20;
* @function 添加事件;
* @param form
* action中的form;
* @param request
* action中的request;
* @return boolean;是否添加成功;
*/
public boolean addEvent(ActionForm form, HttpServletRequest request)
throws ApplicationException {
EventForm eventForm = (EventForm) form;
Integer reCopy = eventForm.getReCopy(); // 获取是否重复性事件;
Integer frequencyType = Integer.parseInt(request
.getParameter("frequencyType")); // 获取重复事件类型;
String reStartDate = request.getParameter("reStartDate"); // 获取重复性事件开始日期;
String reEndDate = request.getParameter("reEndDate"); // 获取重复性事件结束日期;
int count = 0; // 计算周期性事件不能超过一百次;
Calendar cal = Calendar.getInstance(); // 获取当前时间;
Date reStart = null; // 定义开始日期;
Date reEnd = null; // 定义结束日期;
Integer frequencyMouth = null;
Integer freqStartWeek = null;
String tempStrDate = null; // 定义当前日期-字符串格式;
String[] executeWeekDay = null; // 选择的周几数;--对映每周类型的周天;
Integer dayOfYear = null;// 年之日;
Integer weekOfYear = null;// 年之周;
Integer monthOfYear = null;// 年之月;
Integer dYear = null;// 年份;
Integer weekNo = null;// 每周的周几;
// **************判断是否使用周期性事件***************;
if (reCopy != null) { // 周期性事件开关都不能为空;
if (StringTool.isNotBlank(reStartDate)) { // 开始日期不为空;
reStart = DateTimeTool.buildDate(reStartDate); // 把开始日期的字符串转化为日期格式;
}
if (StringTool.isNotBlank(reEndDate)) { // 结束日期不为空;
reEnd = DateTimeTool.buildDate(reEndDate); // 把开始日期的字符串转化为日期格式;
}
Date tempDate = reStart; // 临时日期变量,赋值为开始日期;
cal.setTime(reStart); // 把开始日期设置到当前的日历;
String eventSeq = Long.valueOf(System.currentTimeMillis())
.toString();// 生成周期性事件序列号;
if (reCopy.equals(1) && reEnd != null && reStart != null) { // 如果为1则使用重复性事件,开始日期,结束日期不能为空;
switch (frequencyType) {
case 1: { // 每天的类型;
String freqStartDay = request.getParameter("freqStartDay");// 获取执行每天的类型
if (freqStartDay.equals("1")) { // 每隔工作日;剔除周六和周日;
// **从开始日期到结束日期的时间循环添加事件;
while (tempDate.before(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);
if (weekNo.equals(1) || weekNo.equals(7)) { // 如果为周六和周日则跳出本条循环,进入下条循环;
cal.add(Calendar.DAY_OF_MONTH, 1); // 虽然没有添加,但是时间不停留,继续把开始日期推进1天;
continue;
}
/** **周期事件存储类型:从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(null);// 执行单位;
event.setExecuteDayNo(null);// 执行第次;
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天;
}
return true;// 添加成功,返回成功代码;
} else if (freqStartDay.equals("2")) { // 每隔几天,不考虑周六和周日;
// **从开始日期到结束日期的时间循环添加事件;
while (tempDate.before(reEnd)) { // 判断日期格式;
frequencyMouth = Integer.parseInt(request
.getParameter("frequencyMouth")); // 当重复性时间为每天的类型,frequencyMouth是每隔几天;
tempDate = cal.getTime(); // 获取当前日期,赋给临时时间变量;
tempStrDate = new SimpleDateFormat("yyyy-MM-dd")
.format(tempDate); // 格式化当地时间;
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;// 超过时间跳出循环;
}
/** **周期事件存储类型:从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(frequencyMouth);// 每隔数量;
event.setExecuteDay(null);// 执行单位;
event.setExecuteDayNo(null);// 执行第次;
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, frequencyMouth); // 把开始日期推进frequencyMouth参数天数;
}
}
}
break;
case 2: { // 每周的类型;
freqStartWeek = Integer.parseInt(request
.getParameter("freqStartWeek"));// 每隔几周;
executeWeekDay = request
.getParameterValues("executeWeekDay"); // 执行的周几;
StringBuffer sbWeek = new StringBuffer();// 加载几个周几;
int exeDayLong = 0;
if (executeWeekDay != null) {
exeDayLong = executeWeekDay.length; // 所选择的周几数量;
}
/** *组装每周的星期几** */
for (int i = 0; i < exeDayLong; i++) {
String weekNum = executeWeekDay[i];
if (i != exeDayLong - 1) {
sbWeek = sbWeek.append(weekNum).append(",");
} else {
sbWeek = sbWeek.append(weekNum);
}
}
// **从开始日期到结束日期的时间循环添加事件;
while (tempDate.before(reEnd)) { // 判断日期格式;
for (int i = 0; i < 7; i++) { // 一周七天;判断这周内是否有选择要添加的事件
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); // 格式化当前的日期为字符串;
for (int j = 0; j < exeDayLong; j++) { // 去循环选择的周几数量;
if (weekNo.equals(Integer
.parseInt(executeWeekDay[j]))) { // 如果选择的周几等于循环的周几,就添加事件;
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("1");// 每隔几周的类型 ;
event.setFrequencyMouth(freqStartWeek);// 每隔数量;
event.setExecuteDay(sbWeek.toString());// 执行单位;
event.setExecuteDayNo(null);// 执行第次;
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); // 判断完一天走完继续推进一天;
}
cal.add(Calendar.WEEK_OF_MONTH, freqStartWeek); // 把开始日期推进freqStartWeek周;
}
}
break;
case 3: {// 每月的类型;
String freqStartMonth = request
.getParameter("freqStartMonth"); // 获取执行每周的类型;
if (freqStartMonth.equals("1")) {
String freqDayNumFir = request
.getParameter("freqDayNumFir"); // 获取页面选择的日期号;
Integer freqDayNumFirInt = null; // 每隔几月的日期Integer类型;
if (freqDayNumFir != null) {
freqDayNumFirInt = Integer.parseInt(freqDayNumFir); // 把日期转化为Integer类型;
}
String freqMonthNumFir = request
.getParameter("freqMonthNumFir"); // 获取每隔几月的数量;
Integer freqMonthNumFirInt = null; // 每隔几月的数量Integer类型;
if (freqMonthNumFir != null) {
freqMonthNumFirInt = Integer
.parseInt(freqMonthNumFir); // 把数量转化为Integer类型;
}
int couGe = 0;// 每隔几个月;
// **从开始日期到结束日期的时间循环添加事件;
while (tempDate.before(reEnd)) { // 判断日期格式;
tempDate = cal.getTime(); // 获取当前日期,赋给临时时间变量-随着循环变量改变;
tempStrDate = new SimpleDateFormat("yyyy-MM-dd")
.format(tempDate);
Integer monthNo = cal.get(Calendar.DAY_OF_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);// 年份;
if (freqDayNumFirInt.equals(monthNo)) {
couGe++;
if (freqMonthNumFirInt.equals(couGe)) {
if (tempDate.after(reEnd)) {
break;// 超出时间,跳出循环;
}
couGe = 0;// 打印完之后,把计数器清空;
/** **周期事件存储类型:从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(freqMonthNumFirInt);// 每隔数量;
event.setExecuteDay(null);// 执行单位;
event.setExecuteDayNo(freqDayNumFirInt);// 执行第次;
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);
}
} else if (freqStartMonth.equals("2")) {
String freqMonthNumSec = request
.getParameter("freqMonthNumSec"); // 获取每隔几月的数量;
String executeNoFir = request
.getParameter("executeNoFir"); // 获取执行排行的名次;第几次的周数;
Integer executeNoFirInt = null;
if (executeNoFir != null) {
executeNoFirInt = Integer.parseInt(executeNoFir);// 把第次转化为integer类型;
}
String executeDayFir = request
.getParameter("executeDayFir"); // 获取周几或者日s的单位;
Integer executeDayFirInt = null;
if (executeDayFir != null) {
executeDayFirInt = Integer.parseInt(executeDayFir);// 把单位转化为integer类型;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -