1.任务安排
这周的任务安排是完成教学活动管理中的创建教学活动功能,首先要完成的房间冲突检测功能。
2.任务分析
在创建教学活动时,需要选择教学活动所使用的教室。在选择教室时要考虑活动时间内该教室是否有其他教学活动正在举行。当前端传递给后端活动开始时间和活动结束时间,后端需要返回给前端在该时间范围内所有可以用的教室并以数组形式返回给前端。
例如当我们预计活动的时间是7月1日14:00到7月1日17:00
如果有活动在7月1日13:00到7月1日15:00,那么该活动所占用的教室不能被使用
如果有活动在7月1日15:00到7月1日16:00,那么该活动所占用的教室不能被使用
如果有活动在7月1日16:00到7月1日18:00,那么该活动所占用的教室不能被使用
我们只需要找出该给定时间范围的不可使用教室,记为集合A,把所有的教室记作全集U。那么我们所需要的结果就是A的补集。
通过观察可以发现,如果某个活动的开始时间在我们需要查询的时间范围内,或者某个活动的结束时间在我们需要查询的时间范围内,都说明查询的时间范围内该活动所占用的教室不能被使用。
2.1临界值问题
如果有活动在7月1日13:00到7月1日14:00,且在其他时间么该活动所占用的教室没有活动,那么该活动所占用的教室可能可以被使用。
如果有活动在7月1日17:00到7月1日18:00,且在其他时间么该活动所占用的教室没有活动,那么该活动所占用的教室可能可以被使用。
即7月1日13:00到7月1日14:00和7月1日17:00到7月1日18:00这两种情况是不能说明该活动所占用的教室不能被使用。
3.具体代码
3.1ActivityMapper
@Select(" select room_name from room where room_name not in (select room_name from activity where (#{act_start_time}>=act_start_time and #{act_start_time}<act_end_time) or (#{act_end_time}>act_start_time and #{act_end_time}<=act_end_time))")
public String[] find_avaiable_room(@Param("act_start_time") Date act_start_time,@Param("act_end_time") Date act_end_time);
3.2ActivityService
public String[] find_avaiable_room(String act_start_time,String act_end_time) throws ParseException {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date act_start_datetime=df.parse(act_start_time);
Date act_end_datetime=df.parse(act_end_time);
return activityMapper.find_avaiable_room(act_start_datetime,act_end_datetime);
}
3.3ActivityController
@GetMapping("/find_avaiable_room")
@ApiOperation(value="查询可用的教室")
String[] find_avaiable_room(@Param("act_start_time") String act_start_time,
@Param("act_end_time") String act_end_time) throws ParseException {
return activityService.find_avaiable_room(act_start_time,act_end_time);
}