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

时间:2020-01-10 09:18:27

标签: 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"}]

以及火车站清单:

“ A EXPRESS”列车的示例:

[{"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"}}]

注意:这列火车在“ ST1”站(“滑铁卢”)停了两次。

要做

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

-火车叫什么车站?

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

-何时首次导入电话呼叫?

-上一次电话呼叫何时更新?

-随着时间的流逝,车站呼叫如何变化? (到达和离开日期随时间的演变)这种信息对于我们了解火车的延误频率,时间表何时发生更改以及这些更改是否有模式很有用。

工作方式

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

-数据涵盖了从2019年1月1日到2019年5月31日的时间范围。

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

-这24小时周期每天在世界标准时间00:00重新开始

-数据源提供端点以请求火车时刻表

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

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

-火车时刻表由一系列的车站呼叫组成,其中过去的车站呼叫和将来的车站呼叫数量各不相同

-此外部数据源没有为每个站点呼叫提供唯一的标识符

-这意味着合并站呼叫不是简单的。 这是我的问题的症结所在:将外部电台呼叫与数据库中的现有呼叫进行协调。

-分机呼叫的到达和离开日期通常会更改,有时会更改几天。有时他们交换,删除或出现新的

-有时可以删除车站的电话(火车不会在该特定车站停止

-有时可以创建新的车站呼叫(火车将按计划停止)

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

特定要求

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

问题

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

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

我们确实有火车ID和车站ID以及访问日期。

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

谢谢

答案?

我最初的想法是执行以下操作,但是我不确定这是否是最佳解决方案。如果您有更好的解决方案,或者遇到我的问题,请告诉我。

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

每15分钟调用一次外部服务,并将新的最新条目添加到内部数据库中,并反映在UI上。

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

我的想法是,对于特定的火车,只是找到匹配的车站ID。

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

  • 如果存在先前的站点ID,但没有匹配的当前站点ID,则状态为“已取消”。

  • 如果存在一个匹配的站点ID,则将比较时间,并将状态更新为“早期”或“延迟”。

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

我的逻辑正确吗?

0 个答案:

没有答案
相关问题