【前言】
基础系统是云平台中十分重要的一个子系统,它为其他系统提供了基础数据的支撑;基础系统中有一个重要的功能就是轮次管理;轮次是配置课程管理的一个基础数据,不同学年不同学院的不同课程轮次都可能不同;今天为大家介绍一下关于轮次设置的相关功能及实现。
【轮次设置】
一、在编辑轮次时比较重要的几个逻辑校验:
1、编辑轮次为最小轮次:最晚退选时间不能早于上一轮次开始选课时间;
2、编辑轮次为当中轮次:编辑本轮次的开始选课时间不能早于上一轮次的最晚退选时间;最晚退选时间不能早于上一轮
次开始选课时间;
3、编辑轮次为最大轮次:编辑本轮次的开始选课时间不能早于上一轮次的最晚退选时间;
二、重要的代码实现:
1、页面的JS代码
function saveAdd() {
roundName = document.getElementById('roundName').value;
startTime = $("#startTime").datetimebox('getValue');
endTime = $("#endTime").datetimebox('getValue');
lastestQuitTime = $("#lastestQuitTime").datetimebox('getValue');
startTime1 = startTime.substring(0, 16);
endTime1 = endTime.substring(0, 16);
lastestQuitTime1 = lastestQuitTime.substring(0, 16);
// 判断开始时间和结束时间的先后符合要求---start
if (endTime < startTime) {
$.messager.alert("提示", "开始时间不得大于结束时间", "info")
return;
}
if (endTime > lastestQuitTime) {
$.messager.alert("提示", "结束时间不得大于最晚退选时间", "info")
return;
}
if (startTime > lastestQuitTime) {
$.messager.alert("提示", "开始时间不得大于最晚退选时间", "info")
return;
}
var result;
var roundNo;
roundNo = GetNum(roundName);
// 如果editId是空,执行添加操作------start
if (editId == "" || editId == null) {
// 如果不是第一轮-------------------按次序判断-----start
if (roundNo != 1) {
$.ajax({
async : false,
type : "POST",
url : "queryByRoundNO",
data : {
"roundno" : roundNo
},
success : function(time) {
result = time;
}
});
// 判断返回结果------start
if (result == "error") {
$.messager.alert("提示", "请先配置上一轮!", "info");
return;
} else {
if (startTime < result) {
$.messager.alert("提示", "开始时间必须大于上一轮的结束时间;上一轮结束时间为" + result
+ "", "info");
return;
}
}
// 判断返回结果----end
}
// 如果不是第一轮-------------------按次序判断-----end
$('#frmAddRound').form(
'submit',
{
url : 'SaveRound?roundno=' + roundName + "&beginTime="
+ startTime1 + "&endTime=" + endTime1
+ "&lastestQuitTime=" + lastestQuitTime1,
success : function(result) {
var result = eval('(' + result + ')');
if (result == "success") {
$('#ff').form('clear');
$('#addRound').dialog('close');
$('#dg').datagrid("reload");
$.messager.alert("提示", "恭喜您,操作成功!", "info");
} else {
$.messager.alert("警告", "您的操作失败!", "error");
return;
}
}
})
}
// 如果editId是空,执行添加操作------end
// 如果editId不为空,执行编辑操作------start
else {
// 在编辑轮次时做相应的校验---张晗---2017年2月17日21:22:14---------start
// 校验逻辑:
// 1.编辑轮次为最小轮次:最晚退选时间不能早于上一轮次开始选课时间;
// 2.编辑轮次为当中轮次:编辑本轮次的开始选课时间不能早于上一轮次的最晚退选时间;最晚退选时间不能早于上一轮次开始选课时间;
// 3.编辑轮次为最大轮次:编辑本轮次的开始选课时间不能早于上一轮次的最晚退选时间;
if (roundName == null || roundName == undefined || roundName == '') {
$.messager.alert("警告", "需要修改的轮次有问题请重新编辑", "error");
return;
}
var isEffective = true;// 标识修改的开始选课时间和最晚退课时间是否为有效的
// 根据编辑的轮次查询相邻轮次的相关信息做相应的检验
$.ajax({
async : false,
type : "POST",
url : "queryUpAndDownRoundInfo",
data : {
"roundName" : roundName,
},
success : function(result) {
if (result.length > 1) { // 该轮次有上下轮次
if (startTime1 < result[0].lastestQuitTime) {// 本轮此的开始选课时间不能早于上一轮次的最晚退选时间
$.messager.alert("提示", "由于本轮次的开始时间[" + startTime1
+ "]早于" + result[0].roundNo + "最晚退选时间["
+ result[0].lastestQuitTime + "];请重新设置开课时间",
"info");
isEffective = false;
return;
}
if (lastestQuitTime1 > result[1].beginTime) {// 本轮次的最晚选课时间不得晚于下一轮次最早选课时间
$.messager.alert("提示", "由于本轮次的最晚选课时间["
+ lastestQuitTime1 + "]晚于" + result[1].roundNo
+ "最早选课时间[" + result[1].beginTime
+ "];请重新设置最晚选课时间", "info");
isEffective = false;
return;
}
}
// 本轮此的开始选课时间不能早于上一轮次的最晚退选时间
if (result.length == 1) {// 编辑轮次为最大轮次或最小轮次
if(roundName=='第1轮'){//第1轮的情况(规则-本轮次的最晚选课时间不得晚于上一轮次的最早选课时间)
if (lastestQuitTime1 > result[0].beginTime) {
$.messager.alert("提示", "由于本轮次的最晚选课时间["
+ lastestQuitTime1 + "]晚于" + result[0].roundNo
+ "最早选课时间[" + result[0].beginTime
+ "];请重新设置最晚选课时间", "info");
isEffective = false;
return;
}
}else{//最大轮情况(规则-本轮此的开始选课时间不能早于上一轮次的最晚退选时间)
if(startTime1 < result[0].lastestQuitTime){
$.messager
.alert("提示",
"由于本轮次的开始时间[" + startTime1 + "]早于"
+ result[0].roundNo + "最晚退选时间["
+ result[0].lastestQuitTime
+ "];请重新设置开课时间", "info");
isEffective = false;
return;
}
}
}
},
error : function() {
$.messager.alert("提示", "此次编辑出现问题,请重新编辑", "info");
isEffective = false;
return;
}
});
// 在编辑轮次时做相应的校验---张晗---2017年2月17日21:22:14---------end
// 编辑时做判断,判断该轮次
if (isEffective) {
$.ajax({
async : false,
type : "POST",
url : "updateRound",
data : {
"roundId" : editId,
"roundno" : roundName,
"beginTime" : startTime1,
"endTime" : endTime1,
"lastestQuitTime" : lastestQuitTime1,
},
success : function(result) {
if (result == "error") {
$.messager.alert("提示", "修改失败,请重试!", "info");
$('#dg').datagrid("reload");
return;
} else {
$.messager.alert("提示", "恭喜您,修改成功!", "info");
$('#addRound').dialog('close');
$('#dg').datagrid("reload");
}
}
});
}
}
}
2、后端代码
(1)查询相邻轮次信息
/*
* 查询相邻轮次信息-维护人员:张晗--2017年2月18日10:17:01
*
* @param request
*
* @param response
*/
@RequestMapping("/queryUpAndDownRoundInfo")
public void queryUpAndDownRoundInfo(HttpServletRequest request,
HttpServletResponse response) {
try {
// 获取数据库名
String dataBaseName = (String) request.getSession().getAttribute(
CloudContext.DatabaseName)
+ "_basic";
String roundName = request.getParameter("roundName");
List<ChooseCourseRound> chooseCourseRoundList = chooseCourseRoundBean
.queryUpAndDownRoundInfo(roundName, dataBaseName);
jacksonJsonUntil.beanToJson(response, chooseCourseRoundList);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
}
(2)查询最大轮次信息
/*
* 查询最大轮次信息-维护人员:张晗--2017年2月18日10:17:01
*
* @param request
*
* @param response
*/
@RequestMapping(value = "/queryMaxRoundInfo", method = RequestMethod.POST)
public void queryMaxRoundInfo(HttpServletRequest request,
HttpServletResponse response) {
try {
// 获取数据库名
String dataBaseName = (String) request.getSession().getAttribute(
CloudContext.DatabaseName)
+ "_basic";
ChooseCourseRound chooseCourseRoundEntity = chooseCourseRoundBean
.queryMaxRoundInfo(dataBaseName);
jacksonJsonUntil.beanToJson(response, chooseCourseRoundEntity);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
}
【总结】
1、业务校验十分重要,做好相关的校验可以使得系统更加的健壮;
2、认真对待每个系统的每行代码。
6年Java互联网研发经验,坐标北京;擅长微服务和中间件。