Dan*_*ves 13 php time codeigniter scheduling date
我正在为家庭护理公司开发一个PHP应用程序.他们每周安排x个护理人员参加x个服务用户(客户)的住宿.每个服务用户都有一个"访问时间"的集合"时间表",其中包括时段加上访问持续时间(以分钟为单位).
例如,服务用户可以具有以下计划.
AM Lunch Tea Late Night Respite
Mon 30m - 30m 60m - -
Tue 30m - - 60m - -
Wed 20m 25m 30m 60m 120m -
Thu - - 30m - - -
Fri 30m 25m - - - -
Sat - - - - - -
Sun 20m 25m - - - -
Run Code Online (Sandbox Code Playgroud)
这些期间当前以以下格式存储在数据库中:
Table: Service_user_schedules
id service_user_id day period duration
Run Code Online (Sandbox Code Playgroud)
护理人员每周都会填写一份表格,列出他们可以工作的时间.然后将此数据输入系统并以下列格式存储在数据库中:
Table: Carer_available_shifts
id carer_id day period
Run Code Online (Sandbox Code Playgroud)
现在问题是,我需要创建一个控制器来获取这些数据,并根据他们提供的可用性自动将护理者分配给服务用户.这需要是可编辑的,以便在没有人可用于特定护理者的情况下,用户可以选择一个不可用的,并且它们仍将被添加到数据库中.
目前,我有一堆乱七八糟的循环,函数和回声来检查护理人员是否可用于特定服务用户并使其可编辑.
有没有人之前执行过这种任务,如果有的话,你找到了一种简单的方法来完成它.我宁愿让它面向对象,所以我可以重用相同的泛型类,但此刻,我完全失去了!
编辑:我现在已经为这个问题增加了一笔赏金.我目前正在研究遗传算法(我从来没有听说过,更不用说了!)作为基于一些答案的这个问题的解决方案.我想知道你们是否有人使用其他方法来解决这类问题,或者你们是否使用过遗传算法,你能否就如何将它们应用于这一特定问题提供一般性的解释.
我认为这个障碍在许多"人员配备"类型的应用程序中相当普遍,并且对网上任何地方的讨论很少感到惊讶!
UPDATE
对于这个特定的项目,我想我最终可能会使用Tak所描述的数据库方法,但如果我有更多的开发时间,将来可能转换为使用GA.
我现在对于将赏金奖励给谁感到有点失落.duedl0r在他(或她)的回答中付出了很多努力.它让我对遗传算法的世界有了深刻的了解 - 这是一种我以前从未遇到过的问题解决方法.但是,Tak提供的答案提供了我将用于此项目的解决方案.因此,我已将此奖励给了德.
我会这样处理它。首先是一个数据库表,将时间表空档链接到可用的护理人员......
Table schedules_shifts
id service_user_schedules_id carer_available_shifts_id
Run Code Online (Sandbox Code Playgroud)
现在有一个功能,可以将可用的护理人员与所需的时间表时段进行匹配并填充表格......
* Fetch service_user_schedules for the next week
* For each service_user_schedules row
* Fetch carer_available_shifts that match the schedule slot
* For each carer_available_shift row
* If results
* Fetch schedules_shifts rows where carer_available_shifts_id is already used
* If no results
* Insert a row in the schedules_shifts table for each carer
* Otherwise carer is busy, do nothing and continue
* If no results, flag for review or trigger e-mail to manager, or other action
* Trigger e-mail or save log of completion for peace of mind
Run Code Online (Sandbox Code Playgroud)
新表现在具有可能的护理人员与日程安排时段的匹配,并且不会重复分配护理人员的时间。然而,它确实将多个护理人员的轮班与时间表时段相匹配。这可能是一个功能!将它们保留原样并添加一confirmed列,schedules_shifts以便经理可以手动分配工作,或者护理人员可以志愿工作,或者自动将第一个匹配标记为confirmed并保留其他行作为替代,以防第一个护理人员无法完成任务。
这都可以由每周的 cron 触发,或者当最终的职业更新他们的一周的日程安排时触发。可能是第一个,因为用户通常是不可预测的。
现在,自动数据位于表格中,您可以将其打开进行编辑。创建一个普通的管理控制台,根据需要更改行schedules_shifts,或将不同的行标记为“已确认”。
将其转换为通用类应该不会太困难 - 只需使用通用术语即可。已经很晚了,但我想不出任何办法:)
可以在 PHP 数组中进行所有数据筛选,而不是在我上面创建的数据库舞蹈中进行,但我认为 SQL 更适合对数据进行排序并进行修改。
遗传算法听起来很有趣,如果你有时间研究一下^_^
希望有帮助吗?