查找可用时隙C#

时间:2009-06-27 18:24:12

标签: c# .net

我们正在建立一个老虎机预订系统,但这些老虎机是动态的,可以通过手持设备进行实时更新。我已到达我们有预订屏幕的阶段,我知道我有一个可用的日期和时间段,例如,早上8点和上午10点。当我预订插槽时,我需要在表1中将2条记录用于工作时间,将1条用于旅行时间。

e.g。

上午8点至上午10点

旅行时间= 20分钟(上午8:00结束,早上8:20)

工作时间= 30分钟(上午8:20结束,早上8:50)

然后,这将按照时间表显示甘特视觉,我们将能够将他的旅行时间和工作时间视为2个街区。

因此,如果没有预订其他约会,第一次约会将在早上8点开始,并在上午8:50结束,但我怎么能看到这个插槽中是否有任何预约,如果他们找到了结束时间,所以我没有什么设置下一个工作的开始时间。

第二个问题 - 可能是我预约上午8点 - 上午8:30,另一个上午9:30 - 上午10点(中间的差距是由于客户取消)所以我需要能够说我有一份总计40分钟的工作可以让我适应这个差距,YES得到完成时间(8:30)并插入填补空白的记录。

希望有道理,我想用c#做。任何想法??

3 个答案:

答案 0 :(得分:3)

回答这是一个棘手的问题a)你如何存储数据?您的数据架构也是什么样的?

我会用这样的东西:

TaskId (int)
TaskName (string)
TaskStart (DateTime)
TaskEnd (DateTime)

关于你的第一个问题,你问“如何查看此插槽中是否预约了约会?”,答案是,检查是否有其他约会,然后确定他们的开始时间和持续时间(包括旅行)。然后将旅行的开始时间设置为第一次约会的结束。 (注意:在代码中我使用 NewTaskTravel 作为旅行任务, NewTaskEndTime 用于实际任务的结束时间)

SELECT TaskId, TaskEnd FROM Tasks WHERE @NewTaskTravelStartTime < TaskEnd;

if TaskId is not null then 
    NewTaskTravelStartTime = TaskEnd
    NewTaskTravelEndTime = ...
end if

SELECT TaskId, TaskEnd FROM Tasks WHERE @NewTaskEndTime > TaskStart;

if TaskId is not null then
   a) warn user about conflict or 
   b) automatically re-schedule following task or 
   c) place task in different place
end if

关于你的第二个问题,“如何将记录插入约会1和约会2之间的差距”,答案是你只需创建一个TaskStart时间为8:30的新记录(或者不管时间是什么时候)并确保结束时间不会超过下一个任务开始时间。

答案 1 :(得分:3)

我知道这是一个古老的问题,但我找到了它,我想我会说其他人在寻找。看看这个Time Period library的.Net它有差距计算能力,所以你可以寻找备用插槽。

我用它来查找我的一个项目中的预订差距。我怀疑它可以解决你的问题。

现在可以在Nuget here

上找到它

答案 2 :(得分:0)

您可能需要查看规范设计模式,以及如何将其用作 Builder 的一部分(在这种情况下,查找和填充可用时隙)。阅读优秀Domain-Driven Design一书中的更多内容。