首页 > 解决方案 > 构建包含具有开始和结束时间的时间表的 json,以便将它们分组为由开始/结束时间时间表连续性定义的班次

问题描述

我们有一个警卫调度软件。调度员可以批量安排一些巡逻。巡逻往往是每小时一次。有这样的存储在数据库中:

带有条目的数据库表的图像

然后Guards会登录系统,输入一个数据范围,数据显示为如下表格:

显示条目的 UI 图像

我们希望采用基于轮班的约定,时间表不属于 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 对象执行适当的逻辑?

任何想法表示赞赏。

标签: javascriptc#sqljsondate

解决方案


根据您的表大小和 SQL 专业知识,您可以在 SQL 查询中执行或在查询后处理它,如您提到的那样。我不能特别看到一种方法比另一种更有效。

但是,我个人认为编写代码来处理它比编写稍后必须管理的复杂查询更具可读性。


推荐阅读