请教会议室预定系统的设计 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
keroppi
V2EX    问与答

请教会议室预定系统的设计

  •  1
     
  •   keroppi 2023-03-26 16:02:57 +08:00 1960 次点击
    这是一个创建于 932 天前的主题,其中的信息可能已经有所发展或是发生改变。

    被公司安排设计开发一个会议室预定系统,主要是时间预定管理这方面,目前想到的感觉太笨了,想请教有没有更好点的设计和实现

    会议室预定系统的问题

    初步想到的做法是

    日期:2023-03-26

    时段开始:14:30

    时段结束:15:30


    日期:2023-03-26

    时段开始:16:20

    时段结束:17:00

    然后查找匹配

    会议编号 = 会议室编号 and 预定日期 = 已存储的预约日期 and 用预定开始时间去查找匹配已存储的预定时段结束时间(当前预订开始时间 > 已存储预约的结束时间) and 同时再用预定的结束时间去对比已存储的时段开始时间(当前预订结束时间 < 已存储预约的开始时间) 

    意识到上面可能有 BUG

    解决办法,存储时多增加开始和结束小时的字段,如下

    日期:2023-03-26

    时段开始:14:30

    时段开始小时:14

    时段结束:15:30

    时段结束小时:15

    日期:2023-03-26

    时段开始:16:20

    时段开始小时:16

    时段结束:17:00

    时段结束小时:17

    然后搜索逻辑

    会议编号 = 会议室编号 and 预定日期 = 已存储的预约日期 and 当前预约开始小时 = 已存储预约结束小时 and 用预定开始时间去查找匹配已存储的预定时段结束时间(当前预订开始时间 > 已存储预约的结束时间) and 当前预约结束小时 = 已存储预约开始小时 and 同时再用预定的结束时间去对比已存储的时段开始时间(当前预订结束时间 < 已存储预约的开始时间) 

    感觉这种实现太笨了,请教更好的设计。

    10 条回复    2023-03-26 21:09:00 +08:00
    illuz
        1
    illuz  
       2023-03-26 16:37:06 +08:00 via Android
    把当天的预约情况查出来,代码比较有没有冲突。如果预约跨天了就查两天。
    keroppi
        2
    keroppi  
    OP
       2023-03-26 16:44:39 +08:00
    @illuz 感谢,倒是提醒我了,还有跨天的可能(双 11 那晚)
    illuz
        3
    illuz  
       2023-03-26 16:47:43 +08:00 via Android
    我的思路就是代码处理,担心并发问题就上分布式锁,处理前后对会议室包上锁就行。
    ilylx2008
        4
    ilylx2008  
       2023-03-26 16:52:16 +08:00
    时段半个小时一个,别整 10 分钟一个。
    我刚写了一套。不过,建议还是直接用钉钉的吧
    keroppi
        5
    keroppi  
    OP
       2023-03-26 17:00:53 +08:00
    @ilylx2008 额,用的是内部 OA 、IM 系统,因为还要控制门锁(扫码控制硬件开锁)就没去了解市面上,有点闭门造车了
    keroppi
        6
    keroppi  
    OP
       2023-03-26 17:01:55 +08:00
    @illuz 没啥并发问题,就十几个会议室(普通人人都可以预定的)
    yangzhezjgs
        7
    yangzhezjgs  
       2023-03-26 17:13:40 +08:00
    本质上是个资源管理问题,可以参考文件系统里管理空闲空间的一些思路。
    首先,假设工作时间是早上八点到晚上八点,可以半小时为一个分配单位划分资源,用一个 24 位的 bitmap 来表示会议室的资源,初始化为全 0,已经分配的就置 1 。然后,写一个分配函数,逻辑就是先检查对应的位是否被置 1 (可以用异或),如果置 1 ,就提示错误,没有就把 0 变成 1 ,预定记录存入数据库。
    metalvest
        8
    metalvest  
       2023-03-26 17:31:45 +08:00 via Android
    用时间戳保存
    YonyBlackie
        9
    YonyBlackie  
       2023-03-26 20:48:34 +08:00
    @keroppi 其实市面上有很多成熟的会议预定系统了,对接 OA 和智能控制的功能都很成熟。你查一查 evoko 这个品牌,可以调用 API 对接 OA 和智能控制。
    lldld
        10
    lldld  
       2023-03-26 21:09:00 +08:00
    @keroppi 我猜 3 楼 @illuz 的意思是不必局限于用 sql 去解决问题. 也就 10 几个会议室, 直接把预定信息读出来, 代码判断新的预定是否能满足就好了.
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3166 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 12:14 PVG 20:14 LAX 05:14 JFK 08:14
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86