如何更好的设计会议室预定系统
会议室预定系统的问题
初步想到的做法是
存储记录1
日期:2023-03-26
时段开始:14:30
时段结束:15:30
存储记录2
日期:2023-03-26
时段开始:16:20
时段结束:17:00
然后查找匹配
会议室编号 = 会议室编号
and
预定日期 = 已存储的预约日期
and
用预定开始时间去查找匹配已存储的预定时段结束时间(当前预订开始时间 > 已存储预约的结束时间)
and
同时再用预定的结束时间去对比已存储的时段开始时间(当前预订结束时间 < 已存储预约的开始时间)
意识到上面有 BUG#
解决办法,存储时多增加开始和结束小时的字段,如下
存储记录1
日期:2023-03-26
时段开始:14:30
时段开始小时:14
时段结束:15:30
时段结束小时:15
存储记录2
日期:2023-03-26
时段开始:16:20
时段开始小时:16
时段结束:17:00
时段结束小时:17
然后搜索逻辑
会议室编号 = 会议室编号
and
预定日期 = 已存储的预约日期
and
当前预约开始小时 = 已存储预约结束小时 and 用预定开始时间去查找匹配已存储的预定时段结束时间(当前预订开始时间 > 已存储预约的结束时间)
and
当前预约结束小时 = 已存储预约开始小时 and 同时再用预定的结束时间去对比已存储的时段开始时间(当前预订结束时间 < 已存储预约的开始时间)
第三次修改,考虑到跨天的问题#
如遇特殊情况,例如双 11 那晚,预约会存在跨天的可能,上面的搜索逻辑进行调整
会议室编号 = 会议室编号
and
(
预定开始日期 = 已存储的预约开始日期
and
当前预约开始小时 = 已存储预约结束小时 and 用预定开始时间去查找匹配已存储的预定时段结束时间(当前预订开始时间 > 已存储预约的结束时间)
)
and
(
预定结束日期 = 已存储的预约结束日期
and
当前预约结束小时 = 已存储预约开始小时 and 同时再用预定的结束时间去对比已存储的时段开始时间(当前预订结束时间 < 已存储预约的开始时间)
)
感觉上面设计有点繁琐,不知道有没有更简便更优雅的设计
推荐文章: