2009-06-27 12 views
2

Wir bauen ein Slot-Buchungssystem, aber die Slots sind dynamisch, die live von den Handhelds aktualisiert werden. Ich habe zu dem Stadium, wo wir den Buchungsbildschirm haben, ich weiß, dass ich einen verfügbaren Tag und einen Zeitschlitz zwischen z. 8 Uhr und 10 Uhr. Wenn ich den Slot buche, muss ich 2 Datensätze in eine Tabelle 1 für die Jobzeit und 1 für die Reisezeit eingeben.Suche nach verfügbaren Zeitfenstern C#

z.B.

Slot von 08.00 bis 10.00

Reisezeit = 20 Minuten (Start 08.00 Uhr Fertig 08.20)

Job Time = 30 Minuten (Start 08.20 Fertig 08.50)

Dies würde dann auf einer Zeitplan-Gantt-Ansicht visuell zeigen, dass wir seine Reisezeit und seine Arbeitszeit als 2 Blöcke sehen können.

Also wenn dort keine anderen Termine gebucht werden, würde der erste Termin um 8 Uhr beginnen und um 8:50 Uhr enden, aber wie kann ich sehen, ob es irgendwelche Termine in diesem Slot gibt und ob sie die Zielzeit finden Was ist die Startzeit für den nächsten Job?

zweites Problem - es kann der Fall sein, wo ich einen Termin für 8 Uhr morgens - 8:30 Uhr und einen anderen für 9:30 Uhr - 10 Uhr (die Lücke in der Mitte ist aufgrund eines Kunden stornieren) muss ich so in der Lage sein Um zu sagen, dass ich einen Job habe, der 40 Minuten summiert, kann ich ihn in die Lücke passen, JA, um die Zielzeit zu erreichen (8:30) und die Datensätze einfügen, die die Lücke füllen.

Hoffe, dass das Sinn macht, würde ich gerne mit C# machen. Irgendwelche Ideen??

Antwort

3

Dies ist eine knifflige Frage zu beantworten a) Wie speichern Sie Ihre Daten? Wie sieht Ihr Datenschema aus?

ich so etwas wie diese verwenden würde:

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

In Bezug auf Ihre erste Frage, fragen Sie: „Wie kann ich sehen, ob es irgendwelche Termine in diesem Slot gebucht sind?“, Lautet die Antwort, überprüfen sehen Sie, ob es noch andere Termine gibt und bestimmen Sie dann deren Startzeit und die Dauer (inklusive Reise). Stellen Sie dann die Startzeit für die Reise bis zum Ende des ersten Termins ein. (Anmerkung: in Code verwende ich NewTaskTravel für die Reise Aufgabe und NewTaskEndTime für die Endzeit der eigentlichen Aufgabe)

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 

In Bezug auf Ihre zweite Frage, „wie ich Aufzeichnungen in den Spalt zwischen Termine einfügen kann 1 und Termin 2 ", die Antwort ist, dass Sie einfach einen neuen Datensatz mit einer TaskStart-Zeit von 8:30 (oder zu welcher Zeit auch immer) erstellen und sicherstellen, dass die Endzeit nicht über die nächste Taskstartzeit hinausgeht.

0

Sie können einen Blick auf den Spezifikation Entwurfsmuster nehmen wollen, und wie es als Teil eines Builder verwendet werden kann (in diesem Fall zu finden und verfügbare Slots zu füllen). Lesen Sie mehr im ausgezeichneten Domain-Driven Design Buch.

3

Ich weiß, dass dies eine alte Frage ist, aber ich fand sie und ich dachte, ich würde sagen, wenn jemand anders hinschaut. Werfen Sie einen Blick auf diese Time Period library für .Net es hat Lücken Berechnung Fähigkeit, so dass Sie nach Ersatz-Slots suchen können.

Ich verwende es, um Lücken für Buchungen in einem meiner Projekte zu finden. Ich vermute, dass es Ihre Probleme lösen kann.

Es kann nun gefunden werden, auf Nuget here

+1

Zeitraum Bibliothek eine große Bibliothek und der Artikel, den Sie verknüpfen die Bibliothek zu beschreiben, ist sehr hilfreich für ein Verständnis für verschiedene Zeitberechnung Scherzfragen bekommen. – Ted

Verwandte Themen