2016-07-23 92 views
0

我很難識別系統中的預訂衝突。我開發了一個與我們的核心繫統集成的預訂系統。存儲在我的預約系統中的列數據是:查找日期和時間衝突

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年7月29日的8:50至22:00之間預訂;有人試圖預訂07-25-2016至07-25-2016在08:00至08:30不能預訂,因爲它被預訂了。經過無數次搜索後,我似乎無法找到這個公式,任何人都可以幫助張貼算法或給我一個鏈接到現有的答案,因爲它驅使我瘋了。

+0

爲什麼從8:00到8:30的預訂與8:50到22:00的預訂有衝突? –

+0

如果有人在07-23-2016 8:50預訂了小型巴士旅行並於07-29-2016 22:00將其返回,那麼如果有人試圖在07-25-2016在8:00至8:30小巴不可用。 – JK36

+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在上面的代碼

請檢查並讓我知道,如果在任何情況下上述邏輯會給出一個正確的答案。

+0

謝謝,我認爲這個邏輯在我完成的基本測試中工作正常。我會在早上做更多的測試,並標記爲正確的答案。 – JK36

+0

當然。不過你也可以考慮@IanMercer給出的建議。除非你的底層設計本身具有不同的領域的日期和時間。 –