被公司安排设计开发一个会议室预定系统,主要是时间预定管理这方面,目前想到的感觉太笨了,想请教有没有更好点的设计和实现
会议室预定系统的问题
日期: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 和智能控制。
|