【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;
}
阿巴阿巴,以上
您能读到这儿,我呢是发自真心的感谢您,若要转载,还望请您带上链接
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现