⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 taskeventmgrimpl.java

📁 基于Sturts+Spring+Hibernate的一个高级销售管理系统。内容丰富
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
			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 + -