首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据每周时间表确定可用性

根据每周时间表确定可用性
EN

Stack Overflow用户
提问于 2013-07-18 16:37:48
回答 1查看 400关注 0票数 0

这是一个独特的问题,但我想我会看看是否有人能从经验中了解到一些情况。

需要在web应用程序中存储呼叫中心员工的每周日程安排。web应用程序有三个实体:

雇员-属于团体

员工组-包含员工,有一个应用于添加到组中的新员工的基本计划。

管理员-负责维护员工组。为了示例起见,管理员也可以是员工。

需求

  • 管理员可以更改员工组的基本计划
  • 管理员可以选择允许员工偏离由管理员控制的计划
  • 管理员还可以选择允许员工自己偏离计划。
  • 管理员使用UI小部件来确定员工组的日程安排。时间表分为三种类型,按一般恐怖程度分类

代码语言:javascript
复制
- Type 1 - 24/7 availability (representing this as a simple flag on the schedule vs marking full Mon-Sun availability)  
- Type 2 - A set start/end time, or group of start/end times for the selected days. (Ex. 9a-11a, 1p-4p, Mon-Fri)  
- Type 3 - A variable group of start/end times, varying by day (Ex. 9a-12p, Mon, 1p-4p, 5p-9p, Tue, etc)  

  • 管理员可以通过UI随时更改计划类型。
  • 允许偏差的员工也可以通过UI随时更改计划类型。
  • 查找必须是快速的,因为我们必须进入一个单独的数据库,以获得更多关于可用员工的信息。
  • 为了更好地衡量,需要相对于调用方时区计算可用性。因此,有一种可能性是,EST中具有类型2计划的组可能实际不可用,这取决于调用方从何处发出呼叫。

我确实说服了他们,允许我们在无法根据UI需求将原始计划轻松转换为新计划的情况下,只消掉计划条目。最好的例子是类型3 ->类型2。

然而,昨天又出现了一个额外的需求(截止日期前的3个工作日),对于第3类,用户必须能够指定跨越午夜的时间范围。例如:

代码语言:javascript
复制
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]

当通过Type3UI进行更改时,还需要在合并时自动检测计划重叠和邻接。

示例模式,它应该有助于快速查找给定的时间、一周中的日期和一个group_id

代码语言:javascript
复制
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)

但是,UI --至少对于类型3--使添加/编辑/更新练习变得单调乏味,因为您不能信任用户输入。

有没有人遇到过类似的问题?我试图找出是否应该做一些前端验证来检测重叠/邻接,并在将它们发送到服务器之前将它们合并,或者PHP是否更适合。或者如果有人对整件事有确凿的论据,哈。任何洞察力都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2013-07-18 17:26:21

我的系统包括两张表:

  • 免除诸如定期任命等事件以及任何其他义务。
  • 基于规则的经常性事件,可以是每日、每周等,包括假日和午餐休息时间的规则。

任命是根据服务提供者或服务机构作出的。因此,数据库的shedule表有一个系统,用于对不同类型的事件进行分类,无论它涉及特定的提供者还是特定的服务。如果适用的话,它还包含每个事件的客户机id。

我还为每个供应商提供了表,以及他可以提供哪些服务。如果一个提供者可用了一个小时,那么服务的可用性是根据他的可用性以及其他提供者的可用性来计算的。这也取决于服务的类型。

管理员可以编辑服务的特性:

  • 服务期限。
  • 单位持续时间内每个提供商的客户数量。对于某些服务,它只是一对一的,但其他服务可能持续一个小时,在此期间,一个提供者可能能够照顾多个客户。

该系统以平均工作量为基础。如果服务的特征重载了提供程序,管理员可以简单地调整数据库中的服务特性,以限制预定的约会次数。

我所做的另一件事是将时间单位分解为15分钟的块(这实际上是一个配置设置,如果需要的话可以更改)。因此,所有调度和规则都是以块开始和结束的。我的类中有一组转换函数,例如,在时间戳和块单元之间进行转换,舍入到最近的块。

把这一切整合在一起是一项相当艰巨的任务。基于所有的shedules、规则、服务类型等数据,我必须想出一个特定时间段的数组来显示提供者和服务的可用性。例如,对于给定的一周和给定的服务,我的类必须生成一个数组来显示可以安排在任何时间块上的约会次数。为了做到这一点,我想,在“透明”方面,可以覆盖。如果一个给定的服务有3个提供者,那么我必须将他们的日程安排重叠,就好像他们是透明的。如果给定的时间块有所有三个提供程序可用,那么对于调度3 * Serviceload来说,透明度可以被认为是明确的。然而,由于供应商的不可用性,透明度将越来越大。如果这三种情况都不可用,该块将被“关闭”,这样就无法安排预约。

在获得了调度数组中的所有数据之后,我将其与用于拖放调度的jQuery FullCalendar类合并。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17729267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档