示例#1
0
        public async Task <JObject> GetDataAsJObjectAsync(string url, JsonType type)
        {
            var json = await _publicTransportRepository.DownloadData(url);

            try
            {
                if (!string.IsNullOrEmpty(json))
                {
                    var oldJson = _documentStoreRepository.GetDbJson(type);

                    if (oldJson != null && !string.IsNullOrEmpty(oldJson.Id))
                    {
                        _documentStoreRepository.Delete(oldJson.Id);
                    }

                    _documentStoreRepository.Save(new DbJson {
                        Json = json, Type = type
                    });
                }
                else
                {
                    json = _documentStoreRepository.GetDbJson(type).Json;
                }
            }
            catch (OutOfMemoryException e)
            {
                json = _documentStoreRepository.GetDbJson(type).Json;
            }

            return(JsonConvert.DeserializeObject <JObject>(json));
        }
        public void ChangeTimeTableJsonsToObjectsAndSaveToDb(List <StopTimeUrl> convertedStopTimes, List <TimeTableDateTime> entitiesThatWerentDownloaded)
        {
            foreach (var stopTime in convertedStopTimes)
            {
                try
                {
                    var notDownloadedEntitiesByRouteId =
                        entitiesThatWerentDownloaded.Where(x => x.RouteId == stopTime.RouteId).ToList();
                    var entitiesToDelete = _documentStoreRepository.GetTimeTableDataByRouteId(stopTime.RouteId);

                    if (notDownloadedEntitiesByRouteId.Count > 0)
                    {
                        entitiesToDelete = _filterHelper.Filter(entitiesToDelete, notDownloadedEntitiesByRouteId);
                    }

                    var jsonsToConvert    = _documentStoreRepository.GetJsonsByRouteId(stopTime.RouteId);
                    var timeTableDataList = new List <TimeTableData>();

                    if (jsonsToConvert.Count <= 0)
                    {
                        continue;
                    }

                    foreach (var item in jsonsToConvert)
                    {
                        var jsonAsJObject = JsonConvert.DeserializeObject <JObject>(item.Json);
                        timeTableDataList.Add(_converter.Deserialize(jsonAsJObject));
                    }

                    timeTableDataList = timeTableDataList.Where(x => x.StopTimes.Count > 0).ToList();

                    _documentStoreRepository.Save(timeTableDataList);
                    _documentStoreRepository.Delete(jsonsToConvert.Select(x => x.Id).ToList());
                    _documentStoreRepository.Delete(entitiesToDelete.Select(x => x.Id).ToList());
                }
                catch (Exception e)
                {
                    var mes = e.Message;
                }
            }
        }
        public void SetMinuteTimeTables()
        {
            var groupedJoinedTrips = _documentStoreRepository.GetGroupedJoinedModels();

            foreach (var group in groupedJoinedTrips)
            {
                foreach (var joinedTripModel in group.JoinedTripModels)
                {
                    var routeIds                    = joinedTripModel.JoinedTrips.SelectMany(x => x.Stops.Select(y => y.RouteId)).Distinct().ToList();
                    var minuteTimeTableList         = _documentStoreRepository.GetMinuteTimeTableListByBusLineName(joinedTripModel.BusLineName);
                    var existingStopIds             = joinedTripModel.JoinedTrips.SelectMany(x => x.Stops.Select(y => y.StopId).ToList()).Distinct().OrderBy(x => x).ToList();
                    var minuteTimeTableToDeleteList = minuteTimeTableList.Where(x => existingStopIds.All(y => y != x.StopId)).Select(x => x.Id).ToList();
                    minuteTimeTableList = minuteTimeTableList.Where(x => minuteTimeTableToDeleteList.All(y => !y.Equals(x.Id))).ToList();

                    _documentStoreRepository.Delete(minuteTimeTableToDeleteList);

                    minuteTimeTableList = _minuteTimeTableBuilder.BuildList(minuteTimeTableList, routeIds, joinedTripModel.JoinedTrips);

                    _documentStoreRepository.Delete(minuteTimeTableList.Select(x => x.Id).ToList());
                    _documentStoreRepository.Save(minuteTimeTableList);
                }
            }
        }