被公司安排设计开发一个会议室预定系统,主要是时间预定管理这方面,目前想到的感觉太笨了,想请教有没有更好点的设计和实现
会议室预定系统的问题
日期:2023-03-26
时段开始:14:30
时段结束:15:30
日期:2023-03-26
时段开始:16:20
时段结束:17:00
然后查找匹配
会议编号 = 会议室编号 and 预定日期 = 已存储的预约日期 and 用预定开始时间去查找匹配已存储的预定时段结束时间(当前预订开始时间 > 已存储预约的结束时间) and 同时再用预定的结束时间去对比已存储的时段开始时间(当前预订结束时间 < 已存储预约的开始时间)
解决办法,存储时多增加开始和结束小时的字段,如下
日期:2023-03-26
时段开始:14:30
时段开始小时:14
时段结束:15:30
日期:2023-03-26
时段开始:16:20
时段开始小时:16
时段结束:17:00
时段结束小时:17
然后搜索逻辑
会议编号 = 会议室编号 and 预定日期 = 已存储的预约日期 and 当前预约开始小时 = 已存储预约结束小时 and 用预定开始时间去查找匹配已存储的预定时段结束时间(当前预订开始时间 > 已存储预约的结束时间) and 当前预约结束小时 = 已存储预约开始小时 and 同时再用预定的结束时间去对比已存储的时段开始时间(当前预订结束时间 < 已存储预约的开始时间)
感觉这种实现太笨了,请教更好的设计。
![]() | 1 illuz 2023-03-26 16:37:06 +08:00 via Android 把当天的预约情况查出来,代码比较有没有冲突。如果预约跨天了就查两天。 |
![]() | 3 illuz 2023-03-26 16:47:43 +08:00 via Android 我的思路就是代码处理,担心并发问题就上分布式锁,处理前后对会议室包上锁就行。 |
4 ilylx2008 2023-03-26 16:52:16 +08:00 时段半个小时一个,别整 10 分钟一个。 我刚写了一套。不过,建议还是直接用钉钉的吧 |
5 keroppi OP @ilylx2008 额,用的是内部 OA 、IM 系统,因为还要控制门锁(扫码控制硬件开锁)就没去了解市面上,有点闭门造车了 |
7 yangzhezjgs 2023-03-26 17:13:40 +08:00 本质上是个资源管理问题,可以参考文件系统里管理空闲空间的一些思路。 首先,假设工作时间是早上八点到晚上八点,可以半小时为一个分配单位划分资源,用一个 24 位的 bitmap 来表示会议室的资源,初始化为全 0,已经分配的就置 1 。然后,写一个分配函数,逻辑就是先检查对应的位是否被置 1 (可以用异或),如果置 1 ,就提示错误,没有就把 0 变成 1 ,预定记录存入数据库。 |
8 metalvest 2023-03-26 17:31:45 +08:00 via Android 用时间戳保存 |
![]() | 9 YonyBlackie 2023-03-26 20:48:34 +08:00 @keroppi 其实市面上有很多成熟的会议预定系统了,对接 OA 和智能控制的功能都很成熟。你查一查 evoko 这个品牌,可以调用 API 对接 OA 和智能控制。 |