【hibernate】使用HQL對頁面進行時間校驗操作(預約)
阿新 • • 發佈:2021-11-13
【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; }
阿巴阿巴,以上
您能讀到這兒,我呢是發自真心的感謝您,若要轉載,還望請您帶上鍊接