【hibernate】使用HQL对页面进行时间校验操作(预约)

【hibernate】使用HQL对页面进行时间校验操作(预约)

预约系统中的时间校验

正好接了一个预约的需求,还需要用java 7和hibernate

1.时间冲突,时间段不能重复,在保存前对数据库进行
2.时间重复,同时录入多个,在保存前对页面进行
3.开始时间与结束时间正常顺序,在保存前对页面进行

应该还有一个对页面中的时间段重复进行提醒,但是太烦了,后面挑完电脑配置再写,到时候再说

4.时间段重复进行校验,在保存前对页面进行

没啥解释的,前端就是ajax接收,然后根据传回来的字符数值进行判断,主要操作放在了后端,代码多少带点儿烂,想哪儿写哪儿

public ActionForward 时间校验 (ActionMapping mapping, ActionForm form, HttpServletRequest request,
	HttpServletResponse response) throws Exception {
A a = (A) form;
List<B> list-b = a.getlist-form();
JSONArray jsonArray = new JSONArray();
HashSet<B> set = new HashSet<>(list-b);
int sameInside = 0;
int sameError = 0;
for (int i = 0; i < list-b.size(); i++) {
	HQLInfo info = new HQLInfo();
	info.setWhereBlock("test. Id = :testId " + "and NOT(EndTime <= :StartTime "
			+ "or StartTime >= :EndTime)");
	String   testString = list-b.get(i).gettestId().toString();
	info.setParameter("testId",   testString);
	String   StartTimeString = list-b.get(i).get  StartTime().toString();
	Date   StartTimeDate = new SimpleDateFormat("yyyy-MM-dd HH:mm").parse(  StartTimeString.toString());
	info.setParameter("  StartTime",   StartTimeDate);
	String   EndTimeString = list-b.get(i).get  EndTime().toString();
	Date   EndTimeDate = new SimpleDateFormat("yyyy-MM-dd HH:mm").parse(  EndTimeString.toString());
	info.setParameter("  EndTime",   EndTimeDate);
	// date1小于date2返回-1,date1大于date2返回1,相等返回0
	int compareTo =   StartTimeDate.compareTo(  EndTimeDate);
	if (i >= 1) {
		for (int j = 0; j < i; j++) {
			String   StartTimeStringInside = list-b.get(j).get  StartTime().toString();
			Date   StartTimeDateInside = new SimpleDateFormat("yyyy-MM-dd HH:mm")
					.parse(  StartTimeStringInside.toString());
			String   EndTimeStringInside = list-b.get(j).get  EndTime().toString();
			Date   EndTimeDateInside = new SimpleDateFormat("yyyy-MM-dd HH:mm").parse(  EndTimeStringInside
					.toString());
			// Date1.after(Date2),当Date1大于Date2时,返回TRUE,当小于等于时,返回false;
			// 即Date2比Date1小的true/false,当Date2日期比Date1小的时候为true,否则为false
			// Date1.before(Date2),当Date1小于Date2时,返回TRUE,当大于等于时,返回false;
			// a为比较的基底时间,b为其余比较时间,a结束>b开始 或者 a开始<b结束的结果取反就是有冲突的部分
			boolean beforeTime =   EndTimeDateInside.before(  StartTimeDate);
			boolean afterTime =   StartTimeDateInside.after(  EndTimeDate);
			String  InsideString = list-b.get(j).gettestId().toString();
			if (  testString.equals( InsideString)) {
				if (!(afterTime || beforeTime)) {
					sameInside = 1;
				} else {
					sameInside = 0;
				}
			} else {
				sameInside = 0;
			}
			sameError = sameInside + sameError;
		}
	}
	List< Bb> bb =  BbService.findList(info);
	JSONObject object = new JSONObject();
	/*检查数据库与数据中的时间段冲突*/
	if (list-b == null || applications.size() == 0) {
		object.put("col", i + 1);
		object.put("ok", 0);
	} else {
		object.put("col", i + 1);
		object.put("ok", 1);
	}
	/*检查页面中数据中的时间是否重复*/
	if (list-b.size() == set.size()) {
		object.put("repeat", 0);
	} else {
		object.put("repeat", 1);
	}
	/*检查页面中的开始时间是否在结束时间之前*/
	if (compareTo == 1) {
		object.put("timesOrder", 1);
	} else {
		object.put("timesOrder", 0);
	}
	/*检查页面中数据是否重复*/
	if (sameError == 0) {
		object.put("sameInside", 1);
	} else {
		object.put("sameInside", 0);
	}
	jsonArray.add(object);
}
response.setCharacterEncoding("UTF-8");
response.getWriter().write(jsonArray.toString());
response.getWriter().flush();
response.getWriter().close();
return null;
}

阿巴阿巴,以上

您能读到这儿,我呢是发自真心的感谢您,若要转载,还望请您带上链接
原文地址:https://www.cnblogs.com/jokingremarks/p/15544369.html