private async Task <IEnumerable <TrainRun> > QueryTrainRunsDispoAsync(int trainId, bool preferPrognosis, CancellationToken queryCancellationToken) { var result = Enumerable.Empty <TrainRun>(); if (!queryCancellationToken.IsCancellationRequested) { logger.LogDebug( "Suche nach Zug-ID {trainId}.", trainId); using var context = new HaltDispoContext(connectionString); var halte = await context.Halte .Include(h => h.Zug).ThenInclude(z => z.Zuggattung) .Where(h => h.ZugID == trainId) .ToArrayAsync(queryCancellationToken); result = GetTrainRuns( halte: halte, preferPrognosis: preferPrognosis).ToArray(); } return(result); }
private async Task <IEnumerable <TrainRun> > QueryTrainRunsDispoAsync(TimeSpan minTime, TimeSpan maxTime, CancellationToken queryCancellationToken) { var result = Enumerable.Empty <TrainRun>(); if (!queryCancellationToken.IsCancellationRequested) { logger.LogDebug( "Suche nach aktuellen Fahrplaneinträgen."); using var context = new HaltDispoContext(connectionString); var halte = await context.Halte .Include(h => h.Zug).ThenInclude(z => z.Zuggattung) .Where(h => h.AbfahrtIst.HasValue || h.AbfahrtSoll.HasValue || h.AbfahrtPlan.HasValue) .Where(h => (h.AbfahrtIst ?? h.AbfahrtSoll ?? h.AbfahrtPlan) >= minTime) .Where(h => (h.AbfahrtIst ?? h.AbfahrtSoll ?? h.AbfahrtPlan) <= maxTime) .ToArrayAsync(queryCancellationToken); result = GetTrainRuns( halte: halte, preferPrognosis: false).ToArray(); } return(result); }
private async Task SaveTrainPositionAsync(TrainLeg leg, bool istVon, CancellationToken queryCancellationToken) { var betriebsstelle = istVon ? leg.EBuEfBetriebsstelleVon : leg.EBuEfBetriebsstelleNach; if (!string.IsNullOrWhiteSpace(betriebsstelle)) { logger.LogDebug( "Suche in der EBuEf-DB nach dem letzten Halt von Zug {train} in {location}.", leg.Zugnummer, betriebsstelle); using var context = new HaltDispoContext(connectionString); var halt = context.Halte .Where(h => h.Betriebsstelle == betriebsstelle) .Include(h => h.Zug) .FirstOrDefault(h => h.Zug.Zugnummer.ToString() == leg.Zugnummer); if (halt != null) { logger.LogDebug( "Schreibe {positionType}-Position in Session-Fahrplan.", istVon.GetName()); halt.GleisIst = leg.GetEBuEfGleis(istVon); if (istVon) { halt.AbfahrtIst = leg.EBuEfZeitpunktVon; } else { halt.AnkunftIst = leg.EBuEfZeitpunktNach; } await context.SaveChangesAsync(queryCancellationToken); logger.LogDebug( "Das Update des Halts wurde gespeichert."); } else { logger.LogDebug( "In Session-Fahrplan wurde {positionType}-Position nicht gefunden.", istVon.GetName()); } } }