我正在开发一个应用程序,我需要按轮换时间表自动为成员安排工作。我不太擅长解释规则,所以这里有一些数据可以帮助你:
职位:职位名称,具有每周周一和周三等规则。
类别:一组职位
组:另一组职位。同一组中的职位不能在同一天
分配成员:在给定日期分配到职位的用户。
对于该月中的每个日期,成员都被分配到职位(均按升序排列)。如果一个成员被分配到一个类别中的位置,下次出现同一类别中的位置时,下一个成员按字母顺序(或列表的开头)被分配,例如。
成员:M1、M2、M3、M4
类别 C1 职位:P1、P2、P3
职位 P1 成员:M1、M2、M3、M4
职位 P2 成员:M1、M2、M3
职位 P2 成员:M1、M3、 M4
如果将 M1 分配给 P1,如果 P2 紧随其后,则将分配 M2。引入了额外的复杂层,如果 P3 是下一个,则分配 M3。系统必须跟踪 M2 被“跳过”的事实,并在可用时分配下一个 M2,然后分配下一个 M4,或者等到它到达 M2 可用的位置(当有很多“跳过”时,这变得更加复杂' 成员)。
如果某个成员表明他在该日期不可用,则该成员也将被跳过。系统需要优先考虑跳过的成员,当他们出现时以某种方式识别他们,然后跳转到列表中的下一个逻辑人。由于日期冲突,跳过也适用于组。
我已经有了一个临时的 [和混乱的] 解决方案,尽管我在其中解释了每个步骤,但我不再理解它。它的弱点在于处理被跳过的成员。
如果你要编写这个代码,你会怎么做?我在 PHP 中实现了这一点,但伪代码也可以。