1. 程式人生 > 其它 >【hibernate】使用HQL對頁面進行時間校驗操作(預約)

【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;
}

阿巴阿巴,以上

您能讀到這兒,我呢是發自真心的感謝您,若要轉載,還望請您帶上鍊接