这是一个独特的问题,但我想我会看看是否有人能从经验中了解到一些情况。
需要在web应用程序中存储呼叫中心员工的每周日程安排。web应用程序有三个实体:
雇员-属于团体
员工组-包含员工,有一个应用于添加到组中的新员工的基本计划。
管理员-负责维护员工组。为了示例起见,管理员也可以是员工。
需求
- 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需求将原始计划轻松转换为新计划的情况下,只消掉计划条目。最好的例子是类型3 ->类型2。
然而,昨天又出现了一个额外的需求(截止日期前的3个工作日),对于第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]当通过Type3UI进行更改时,还需要在合并时自动检测计划重叠和邻接。
示例模式,它应该有助于快速查找给定的时间、一周中的日期和一个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)但是,UI --至少对于类型3--使添加/编辑/更新练习变得单调乏味,因为您不能信任用户输入。
有没有人遇到过类似的问题?我试图找出是否应该做一些前端验证来检测重叠/邻接,并在将它们发送到服务器之前将它们合并,或者PHP是否更适合。或者如果有人对整件事有确凿的论据,哈。任何洞察力都将不胜感激。
发布于 2013-07-18 17:26:21
我的系统包括两张表:
任命是根据服务提供者或服务机构作出的。因此,数据库的shedule表有一个系统,用于对不同类型的事件进行分类,无论它涉及特定的提供者还是特定的服务。如果适用的话,它还包含每个事件的客户机id。
我还为每个供应商提供了表,以及他可以提供哪些服务。如果一个提供者可用了一个小时,那么服务的可用性是根据他的可用性以及其他提供者的可用性来计算的。这也取决于服务的类型。
管理员可以编辑服务的特性:
该系统以平均工作量为基础。如果服务的特征重载了提供程序,管理员可以简单地调整数据库中的服务特性,以限制预定的约会次数。
我所做的另一件事是将时间单位分解为15分钟的块(这实际上是一个配置设置,如果需要的话可以更改)。因此,所有调度和规则都是以块开始和结束的。我的类中有一组转换函数,例如,在时间戳和块单元之间进行转换,舍入到最近的块。
把这一切整合在一起是一项相当艰巨的任务。基于所有的shedules、规则、服务类型等数据,我必须想出一个特定时间段的数组来显示提供者和服务的可用性。例如,对于给定的一周和给定的服务,我的类必须生成一个数组来显示可以安排在任何时间块上的约会次数。为了做到这一点,我想,在“透明”方面,可以覆盖。如果一个给定的服务有3个提供者,那么我必须将他们的日程安排重叠,就好像他们是透明的。如果给定的时间块有所有三个提供程序可用,那么对于调度3 * Serviceload来说,透明度可以被认为是明确的。然而,由于供应商的不可用性,透明度将越来越大。如果这三种情况都不可用,该块将被“关闭”,这样就无法安排预约。
在获得了调度数组中的所有数据之后,我将其与用于拖放调度的jQuery FullCalendar类合并。
https://stackoverflow.com/questions/17729267
复制相似问题