我很难识别我系统中的预订冲突。我开发了一个与我们的核心系统集成的预订系统。存储在我的预订系统中的列数据是:
ResourceID, StartDate, EndDate, StartTime, EndTime
我需要确保当其他用户尝试预订资源时,资源可用。这个问题已被许多人提出,但通常会有一个日期,开始和结束时间,或者在开始日期和结束日期之间相交。
如果我只想检查交叉日期或时间,则使用的公式为
a=existing_booking
b=new_booking
overlap = a.start < b.end && b.start < a.end;
然后,我发现了一篇关于重叠资源的非常好且有趣的帖子,其中包含开始时间和结束时间Code Logic to prevent clash between two reservations,但它们处理多天重复发生的事件。
我需要确保资源是在2016年7月23日至2016年2月7日8:50至22:00之间预订的;有人试图在2016年7月25日至2016年7月25日08:00至08:30预订,因此无法预订。经过无数次搜索,我无法找到相应的公式,任何人都可以帮助发布算法或向我发送现有答案的链接,因为它让我疯狂。
答案 0 :(得分:0)
01 if (new.StartDate > existing.EndDate OR new.EndDate < existing.StartDate) {
02 resource is available for booking
03 } else if (new.EndDate = existing.StartDate AND new.StartDate <= existing.StartDate) {
04 if (new.EndTime =< existing.StartTime OR new.StartTime >= existing.EndTime) {
05 resource is available for booking
06 } else {
07 resource is NOT available for booking
08 }
09 } else if (new.StartDate = existing.EndDate) {
10 if (new.StartTime >= existing.EndTime) {
11 resource is available for booking
12 } else {
13 resource is NOT available for booking
14 }
15 } else {
16 resource is NOT available for booking
17 }
让我们根据具体情况进行检查;
通过 - 资源可用
失败 - 资源不可用
现有预订已到位
ResourceID | StartDate | EndDate | StartTime | EndTime
ID1234 | 07-23-2016 | 07-29-2016 | 08:50 | 22:00
案例1
ResourceID | StartDate | EndDate | StartTime | EndTime
ID1234 | 07-25-2016 | 07-25-2016 | 08:00 | 08:30
结果 - 这种情况会失败;上面代码中的@line 16
案例2
ResourceID | StartDate | EndDate | StartTime | EndTime
ID1234 | 07-23-2016 | 07-23-2016 | 08:00 | 08:30
结果 - 这个案子会通过;上面代码中的@line 05
案例3
ResourceID | StartDate | EndDate | StartTime | EndTime
ID1234 | 07-29-2016 | 07-29-2016 | 22:01 | 22:30
结果 - 这个案子会通过;上面代码中的@line 11
案例4
ResourceID | StartDate | EndDate | StartTime | EndTime
ID1234 | 07-23-2016 | 07-23-2016 | 09:00 | 11:30
结果 - 这种情况会失败;上面代码中的@line 07
请检查并告知我,无论如何,上述逻辑都会给出正确答案。