예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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());
                }
            }
        }