边儿上的小人您要嫌碍事儿,可将鼠标放在上头,边上底下有个叉,点一下就收起来了

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

阿巴阿巴,以上

posted @   DbWong_0918  阅读(232)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示