MariaDB中的约会调度系统

问题描述

我要完成的事情

我正在使用MariaDB和NodeJS创建约会计划系统,医生可以插入其时间可用性,而用户患者可以根据这些可用性和已经安排好的约会请求约会。

规格

最短的时间单位是半小时,约会的时间是一小时。

因此,在示例中:在14:00和16:00之间可以有3种可能的约会组合(14:00-15:00; 14:30-15:30; 15:00-16:00)。

可用性表

+----+---------------------+---------------------+-------------+---------------+----------+
| id | start               | end                 | repeate     | endRepetition | doctorId |
+----+---------------------+---------------------+-------------+---------------+----------+
| 1  | 2020-08-18 14:00:00 | 2020-08-18 15:00:00 | 604.800.000 | 2021-08-18    | 1        |
+----+---------------------+---------------------+-------------+---------------+----------+
| 2  | 2020-08-25 15:00:00 | 2020-08-25 16:00:00 | 0           | null          | 1        |
+----+---------------------+---------------------+-------------+---------------+----------+
| 3  | 2020-08-19 12:00:00 | 2020-08-19 14:00:00 | 0           | null          | 2        |
+----+---------------------+---------------------+-------------+---------------+----------+

重复存储在ms中

约会表

+----+---------------------+---------------------+-------------+----------+-----------+
| id | start               | end                 | description | doctorId | patientId |
+----+---------------------+---------------------+-------------+----------+-----------+
| 1  | 2020-08-18 14:00:00 | 2020-08-18 15:00:00 | checkup     | 1        | 1         |
+----+---------------------+---------------------+-------------+----------+-----------+
| 2  | 2020-08-19 12:00:00 | 2020-08-19 13:00:00 | stuff       | 2        | 2         |
+----+---------------------+---------------------+-------------+----------+-----------+

我期望得到的结果

+---------------------+---------------------+----------+
| start               | end                 | doctorId |
+---------------------+---------------------+----------+
| 2020-08-19 13:00:00 | 2020-08-19 14:00:00 | 2        |
+---------------------+---------------------+----------+
| 2020-08-25 14:00:00 | 2020-08-25 15:00:00 | 1        |
+---------------------+---------------------+----------+
| 2020-08-25 14:30:00 | 2020-08-25 15:30:00 | 1        |
+---------------------+---------------------+----------+
| 2020-08-25 15:00:00 | 2020-08-25 16:00:00 | 1        |
+---------------------+---------------------+----------+

这是在2020-08-18和2020-08-25之间

我想做什么

我主要关心的是安排从某个时间段开始到另一个时间段结束的约会。
例如,如果医生在每个星期二14:00-15:00插入一个经常性可用性,但是对于2020-08-25星期二,用户也在15:00-16:00插入一个可用性。 在这种情况下,根据具体情况,可能会有一个事件从14:30开始到15:30结束,其中14:00-15:00和15:00-16:00是可用性表中的两个不同行。 / p>

实际上,到目前为止,我唯一的想法是在最短的时间段(1/2小时)内划分所有可用性,检查这些可用性是否在约会开始日期和结束日期之间,在这种情况下,将它们排除在外。
然后将结果以所有可能的一小时时段组合在一起。

我尝试的另一件事是使用一些空缺和离岛方法,首先我在特定的时间内(假设是1天)实现所有可用性,然后我加入了所有连续的(即同一天14: 00-15:00和15:00-16:00),最后我检查了是否有空白空间的可用性:

IF (((availability.start - appointment.start) <= 3600 && (availability.start - appointment.start) > 0) || ((availability.end - appointment.end) >= 3600 && availability.end - appointment.end) > 0))

但是使用这种类型的控件,我只能检查可用性的开头或结尾是否有空间,而不是介于两者之间,尤其是在该可用性中是否有多个约会时。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)