2013-07-18 14 views
0

這裏有一種獨特的問題,但我認爲如果有人從經驗中獲得一些洞見,我會看到這種問題。根據每週時間表確定可用性

需要在Web應用程序中存儲呼叫中心員工的每週時間表。 Web應用程序有三個實體:

員工 - 屬於組
員工羣體 - 包含員工,有補充,應用到新員工的基礎時間表組
管理員 - 負責維護的員工羣體。爲了舉例,管理員也可以是員工。

要求

  • 管理員可以改變基時間表的員工組

  • 管理員可以選擇允許員工從 時間表偏離,由管理員控制

  • 管理員可以進一步選擇允許員工偏離計劃 自己

  • 管理員使用UI小部件來確定員工組的計劃。附表進來三種,由一般h​​orribleness ASC

    • 1型分類 - 24/7可用性(表示此爲上議事日程的簡單標誌標線VS全星期一至日可用性)
    • 2型 - 設定的開始/結束時間或所選日期的開始/結束時間組。 (實例9a-11a,1p-4p,週一至週五)
    • 類型3-開始/結束時間的可變組,按天變化(實例9a-12p,Mon,1p-4p,5p-9p,星期二,等等)
  • 管理員通過UI隨時可以變更計劃類型

  • 員工被允許偏離隨時通過用戶界面也可以更改計劃類型

  • 查找必須要快,因爲我們必須進入單獨的數據庫以獲取更多有關可用員工的信息

  • 爲了更好的衡量,可用性需要根據呼叫者時區進行計算。所以有機會的話,在EST一組2型計劃實際上可能沒有用,具體情況取決於呼叫者進行

我沒有談下來,發出呼叫到讓我們剛剛吹滅根據用戶界面要求,原始時間表無法輕鬆轉換爲新時間表的情況下的時間表條目。最好的例子是Type 3 - > Type 2.

但是,昨天(截止日期截止前3個工作日)還有一項額外要求,對於Type 3,用戶必須能夠指定跨越午夜的時間範圍。例如:

Start [Monday] at [9:00pm] until [Tuesday] at [3:00am] [Add new time block] 
Start [Tuesday] at [8:00am] until [Tuesday] at [5:00pm] [Add new time block] 

還需要在通過Type 3 UI進行更改時自動合併它們時檢測日程重疊和鄰接關係。

示例模式應有助於給出一個時間快速查找,星期幾,和GROUP_ID

employee_schedule 
_________________ 
id (int) auto-inc // PK 
employee_id (int) // FK 
employee_group_id (int) // FK 
start_day (int) // 0-6 
start_time (time) 
end_day (int) // 0-6 
end_time (time) 

但是用戶界面 - 第3類至少 - 使得添加/編輯/於單調乏味更新的鍛鍊,因爲你不能相信用戶輸入。

有沒有人遇到過類似的問題?我試圖弄清楚是否應該執行一系列前端驗證來檢測重疊/鄰接關係,並在將它們發送到服務器之前合併它們,或者如果PHP更適合。或者如果對整個事情有一個堅定的論點,哈哈。任何洞察力將不勝感激。

回答

0

我的系統,涉及到兩個表:

  • Sheduled活動,如定期約會以及任何其他義務。
  • 基於規則的循環事件,可以是每日,每週等。這包括假期和午休時間發生的規則。

約會根據提供者或服務進行。因此,數據庫的shedule表具有用於對不同類型的事件進行分類的系統,無論它涉及特定的提供者還是特定的服務。如果適用,它還包含每個事件的客戶端ID。

我也爲每個供應商提供了表格,他還可以提供哪些服務。如果供應商在給定的小時內可用,則基於他的可用性以及其他供應商的可用性來計算服務的可用性。它也取決於服務的類型。

管理員可以編輯服務的特點:

  • 服務的持續時間。
  • 每個提供者每單位持續時間的客戶端數量。有些服務只是一對一服務,但其他服務可能會持續一個小時,而在那個小時內,一個提供商可能能夠服務於多個客戶。

該系統基於平均工作負載。如果某項服務的特性使服務提供商負擔過重,管理員可以簡單地調整數據庫中的服務特徵以限制預定的預約數量。

我做的另一件事是把時間單位分成15分鐘的塊(這實際上是一個配置設置,如果需要可以更改)。因此所有的調度和規則都以塊開始和結束。我在我的類中有一組轉換函數,例如在時間戳和塊單位之間進行轉換,四捨五入到最近的塊。

把它放在一起是相當的任務。基於shedules,規則,服務類型等的所有數據,我必須在給定的持續時間內提供數組來顯示提供者和服務的可用性。例如,對於給定的星期和給定的服務,我的類必須生成一個數組來顯示可以安排在任何時間段的數量約會。爲此,我認爲可以覆蓋「透明膠片」。如果某個服務有3個提供者,那麼我必須將他們的日程表像透明膠片一樣覆蓋。如果給定的時間塊有全部三個提供者可用,則對於調度3 * Serviceload,透明度可以被認爲是清楚的。但是,根據提供商的不可用性,透明膠片會越來越灰暗。如果所有三個都不可用,那麼這個區塊將被「遮光」,以便不能安排預約。

當我在調度數組中使用所有數據後,我將它與jQuery FullCalendar類一起用於拖放調度。