Service 协调计划数据(解决逻辑问题)

Service 协调计划数据(解决逻辑问题),service,logic,Service,Logic,我有一个问题需要使用Node解决。我的问题是围绕着解决这个问题的最佳逻辑方法。任何建议都将不胜感激 摘要 您将构建一个从外部数据源导入列车时刻表并存储在内部数据库中的工具 永久数据源 有一项服务提供列车列表: [{"id":1,"name":"A EXPRESS"},{"id":2,"name":"B EXPRESS"},{"id":3,"name":"C EXPRESS"},{"id":4,"name":"D EXPRESS"},{"id":5,"name":"E EXPRESS"}] 以及

我有一个问题需要使用Node解决。我的问题是围绕着解决这个问题的最佳逻辑方法。任何建议都将不胜感激

摘要

您将构建一个从外部数据源导入列车时刻表并存储在内部数据库中的工具

永久数据源

有一项服务提供列车列表:

[{"id":1,"name":"A EXPRESS"},{"id":2,"name":"B EXPRESS"},{"id":3,"name":"C EXPRESS"},{"id":4,"name":"D EXPRESS"},{"id":5,"name":"E EXPRESS"}]
以及火车站列表:

“A快车”列车示例:

注:本次列车在“ST1”(“滑铁卢”)站停靠两次

要做的事

对于每个导入的叫号,我们希望维护最新信息以及叫号历史记录:

-火车在哪站

-最近的到达和离开日期是什么

-第一次引入叫号是什么时候

-上次更新的叫号是什么时候

-随着时间的推移,叫号是如何变化的?(到达和出发日期随时间的演变)此类信息有助于我们了解列车晚点的频率、时间表何时发生变化以及这些变化是否有规律

它的工作原理

-外部数据源是列车时刻表预测的模拟

-数据涵盖的时间范围为2019年1月1日至2019年5月31日

-这5个月的时间窗口在24小时周期内被压缩和模拟

-此24小时循环每天在UTC 00:00重新开始

-数据源提供请求列车时刻表的端点

-列车列表端点提供可以导入的列车动态列表(请参见上面的数据)

-列车时刻表端点提供特定列车的车站呼叫动态列表(请参见上面的数据)

-列车时刻表由一系列叫号组成,过去叫号和未来叫号数量各不相同

-此外部数据源不为每个电台呼叫提供唯一标识符

-这意味着合并电台呼叫并不简单这是我问题的关键:协调外部电台呼叫与数据库中现有的电台呼叫

-电台电话的到达和离开日期通常会改变,有时会改变好几天。有时它们交换、删除或出现新的

-有时可以删除车站呼叫(列车不会在该特定车站停车

-有时可以创建新的车站呼叫(列车将进行计划外停车)

-列车时刻表端点每15分钟更改一次返回的数据

具体要求

您需要捕获所有列车时刻表的24小时,从一天的00:00:00 UTC开始,到同一天的23:59:59 UTC结束

问题

从上面的任务中可以看到,随着新数据的更改,需要将新导入的数据与现有数据进行协调

没有可用于匹配站点访问的ID,但这些访问需要在外部数据更改时更新

我们有火车号和车站号以及参观日期

我可以应用什么逻辑来保持数据库数据的准确性和最新性

多谢各位

回答?

我最初的想法是做以下事情,但是我不确定这是否是最好的解决方案。如果你有更好的解决方案,或者看到我的问题,请让我知道

从外部服务检索到的电台呼叫列表将始终保存在其检索时间戳下的内部数据库中。这将始终显示为UI中的当前信息(最新数据库条目)

每15分钟,就会对外部服务进行一次调用,并向内部数据库添加一个新的最新条目,并反映在UI上

最新条目的状态需要反映最新条目和上一条条目之间的差异。例如,延迟X分钟、取消等。这是一个棘手的部分,因为当前站点访问需要与上一次站点访问匹配

我的想法是,对于一列特定的列车,只需找到匹配的车站ID即可

  • 如果之前没有匹配的站点ID,则状态为“新建”

  • 如果有以前的站点ID,但没有匹配的当前站点ID,则状态为“取消”

  • 如果有一个匹配的站点ID,则比较时间,并将状态更新为“早”或“晚”

  • 如果有多个匹配的站点ID,则具有最近时间戳的站点先前和当前站点ID将匹配,并且它们的状态将相应地更新为“早期”或“延迟”

我的逻辑正确吗

[{"arrival":"2019-04-30T11:48:00.000Z","departure":"2019-05-01T05:42:00.000Z","service":"Loop 5","station":{"id":"ST1","name":"Waterloo"}},{"arrival":"2019-05-13T18:00:00.000Z","departure":"2019-05-14T05:00:00.000Z","service":"Loop 5","station":{"id":"ST2","name":"Paddington"}},{"arrival":"2019-05-15T04:00:00.000Z","departure":"2019-05-15T11:00:00.000Z","service":"Loop 5","station":{"id":"ST3","name":"Heathrow"}},{"arrival":"2019-05-16T20:00:00.000Z","departure":"2019-05-17T10:00:00.000Z","service":"Loop 5","station":{"id":"ST4","name":"Wimbledon"}},{"arrival":"2019-05-18T15:00:00.000Z","departure":"2019-05-19T21:00:00.000Z","service":"Loop 5","station":{"id":"ST5","name":"Reading"}},{"arrival":"2019-05-21T04:00:00.000Z","departure":"2019-05-21T21:00:00.000Z","service":"Loop 5","station":{"id":"ST6","name":"Algate"}},{"arrival":"2019-05-31T03:00:00.000Z","departure":"2019-05-31T15:00:00.000Z","service":"Loop 5","station":{"id":"ST1","name":"Waterloo"}}]