javascript - 构建包含具有开始和结束时间的时间表的 json,以便将它们分组为由开始/结束时间时间表连续性定义的班次
问题描述
我们有一个警卫调度软件。调度员可以批量安排一些巡逻。巡逻往往是每小时一次。有这样的存储在数据库中:
然后Guards会登录系统,输入一个数据范围,数据显示为如下表格:
我们希望采用基于轮班的约定,时间表不属于 24 小时周期,而是根据开始/结束时间的连续性流入第二天。我们正在尝试做的是将这些转变分组:
这样 UI 将改为显示 6 月 4 日键的 4 个条目。现在我可以从执行的 sql 中捕获 json 对象,就像省略了一些字段:
[
{
"ScheduleAssignmentId": "213018",
"WorkDate": "2021-06-04 12:00:00 AM",
"StartTime": "2021-06-04 10:00:00 PM",
"EndTime": "2021-06-04 11:00:00 PM",
},
{
"ScheduleAssignmentId": "213019",
"WorkDate": "2021-06-04 12:00:00 AM",
"StartTime": "2021-06-04 11:00:00 PM",
"EndTime": "2021-06-05 12:00:00 AM",
},
{
"WorkDate": "2021-06-05 12:00:00 AM",
"StartTime": "2021-06-05 12:00:00 AM",
"EndTime": "2021-06-05 1:00:00 AM",
},
{
"ScheduleAssignmentId": "213021",
"WorkDate": "2021-06-05 12:00:00 AM",
"StartTime": "2021-06-05 1:00:00 AM",
"EndTime": "2021-06-05 2:00:00 AM",
},
{
"ScheduleAssignmentId": "213022",
"WorkDate": "2021-06-05 12:00:00 AM",
"StartTime": "2021-06-05 11:00:00 AM",
"EndTime": "2021-06-05 12:00:00 PM",
},
]
并在将其发送到前端之前对其进行处理。通过这个过程,我的想法是检查每个计划项目的 EndTime 字段是否与下一个计划项目的 StartTime 字段匹配,如果是,则将它们推入包含时间表的新更高班次对象中。我想前端也必须进行一些修改。
这是正确的方法吗?关于处理逻辑的任何其他想法?我是否应该以某种方式修改 sql 查询本身并使用从 getgo 正确传递的 json 对象执行适当的逻辑?
任何想法表示赞赏。
解决方案
根据您的表大小和 SQL 专业知识,您可以在 SQL 查询中执行或在查询后处理它,如您提到的那样。我不能特别看到一种方法比另一种更有效。
但是,我个人认为编写代码来处理它比编写稍后必须管理的复杂查询更具可读性。
推荐阅读
- load-balancing - GRPC Java 负载平衡 - 未从 NameResolver 调用启动方法
- javascript - 使用 child_process.spawn() 在原始模式下打开 VIM 会导致它冻结
- python - Python 在日志记录中向基于 structlog 的格式化程序添加额外字段
- elasticsearch - elasticsearch中如何正确翻转索引
- python - jupyter lab 上未显示的绘图和小部件
- powershell - 要求用户填充字段(Powershell)
- layout - qiskit 的转译器中的 DenseLayout 是如何工作的?
- android - 我无法解决此错误 [android]
- laravel - Laravel vue:我无法获取与模型之间的关系相关的对象
- amazon-web-services - 如果我在 AWS 组织中创建 AWS 账户,我可以从拥有该组织的根账户中删除它吗?