Exemplo n.º 1
0
        /// <summary>
        /// Imports flight records.
        /// </summary>
        /// <param name="source"></param>
        /// <param name="dest"></param>
        private void ProcessFlights(IBaseStationDatabaseSQLite source, IBaseStationDatabase dest)
        {
            if (!ImportFlights)
            {
                WriteLog("Flight import skipped");
            }
            else if (!ImportSessions || !ImportLocations)
            {
                WriteLog("Flight import skipped because session import was skipped");
            }
            else if (!ImportAircraft)
            {
                WriteLog("Flight import skipped because aircraft import was skipped");
            }
            else
            {
                WriteLog("Importing flight records");

                var criteria     = new SearchBaseStationCriteria();
                var countFlights = source.GetCountOfFlights(new SearchBaseStationCriteria());
                var countSource  = 0;
                var countDest    = 0;
                var startRow     = 0;
                var pageSize     = 30000;

                while (startRow < countFlights)
                {
                    var allSource = source.GetFlights(criteria, startRow, startRow + (pageSize - 1), "DATE", true, null, false);
                    countSource += allSource.Count;

                    var upsertCandidates = new List <BaseStationFlightUpsert>();
                    var upsertKeys       = new HashSet <string>();
                    foreach (var candidate in allSource)
                    {
                        var key = $"{candidate.AircraftID}-{candidate.StartTime}";
                        if (!upsertKeys.Contains(key) && _AircraftMap.TryGetValue(candidate.AircraftID, out var aircraftID) && _SessionMap.TryGetValue(candidate.SessionID, out var sessionID))
                        {
                            upsertCandidates.Add(new BaseStationFlightUpsert(candidate)
                            {
                                AircraftID = aircraftID,
                                SessionID  = sessionID,
                            });
                            upsertKeys.Add(key);
                        }
                    }

                    var upserted = dest.UpsertManyFlights(upsertCandidates);
                    countDest += upserted.Length;
                    startRow  += pageSize;
                }

                WriteLog($"    Imported {countDest:N0} / {countSource:N0} flights");
            }
        }