예제 #1
0
        public async Task FetchAndSavePackageRoutes(ValueRetailVillage village)
        {
            var httpRequest = new ValueRetailCommanRequestModel
            {
                from        = DateTime.UtcNow,
                cultureCode = village.CultureCode,
                villageCode = village.VillageCode
            };

            var responseString = await _valueRetailAPI.GetValueRetailAPIData(httpRequest, "Routes", "ShoppingPackage");

            ShoppingPackageRouteResponse responseData = new ShoppingPackageRouteResponse();

            try
            {
                responseData = Mapper <ShoppingPackageRouteResponse> .MapFromJson(responseString.Result);
            }
            catch (ArgumentNullException ex)
            {
                throw ex;
            }

            foreach (var package in responseData.Packages)
            {
                var currentPackage = _valueRetailPackageRouteRepository.GetOneByPackageId(package.Package.PackageID);
                if (currentPackage == null)
                {
                    foreach (var journey in package.Journeys)
                    {
                        foreach (var route in journey.Routes)
                        {
                            try
                            {
                                currentPackage = _valueRetailPackageRouteRepository.Save(new ValueRetailPackageRoute
                                {
                                    VillageId       = village.Id,
                                    PackageId       = package.Package.PackageID,
                                    JourneyType     = journey.JourneyType,
                                    RouteId         = route.RouteId,
                                    DepartureTime   = route.DepartureTime,
                                    LinkedRouteId   = route.LinkedRouteId,
                                    ReturnTime      = route.ReturnTime,
                                    Name            = route.Name,
                                    LocationId      = route.LocationId,
                                    LocationName    = route.LocationName,
                                    LocationAddress = route.LocationAddress,
                                    StopId          = route.StopId,
                                    StopOrder       = route.StopOrder,
                                    Latitude        = route.Latitude,
                                    Longitude       = route.Longitude,
                                    AdultPrice      = route.Prices.Adult == null ? 0 : Convert.ToDecimal(route.Prices.Adult.Price),
                                    ChildrenPrice   = route.Prices.Children == null ? 0 : Convert.ToDecimal(route.Prices.Children.Price),
                                    FamilyPrice     = route.Prices.Family == null ? 0 : Convert.ToDecimal(route.Prices.Family.Price),
                                    InfantPrice     = route.Prices.Infant == null ? 0 : Convert.ToDecimal(route.Prices.Infant.Price),
                                    CreatedUtc      = DateTime.UtcNow,
                                    CreatedBy       = Guid.NewGuid(),
                                });

                                if (route.ReturnStops != null && route.ReturnStops.Count > 0)
                                {
                                    foreach (var returnStop in route.ReturnStops)
                                    {
                                        var currentReturnStop = _valueRetailPackageReturnRepository.Save(new ValueRetailPackageReturn
                                        {
                                            ValueRetailPackageRouteId = currentPackage.Id,
                                            RouteId         = returnStop.RouteId,
                                            StopId          = returnStop.StopId,
                                            StopOrder       = returnStop.StopOrder,
                                            Name            = returnStop.Name,
                                            LocationId      = returnStop.LocationId,
                                            LocationName    = returnStop.LocationName,
                                            LocationAddress = returnStop.LocationAddress,
                                            ReturnTime      = returnStop.ReturnTime,
                                            Latitude        = returnStop.Latitude,
                                            Longitude       = returnStop.Longitude,
                                            CreatedUtc      = DateTime.UtcNow,
                                            CreatedBy       = Guid.NewGuid(),
                                        });
                                    }
                                }
                            }
                            catch (TaskCanceledException ex)
                            {
                                _logger.Log(LogCategory.Error, ex);
                            }
                            catch (Exception ex)
                            {
                                _logger.Log(LogCategory.Error, new Exception("Failed to save Value Retail Package Routes in Db", ex));
                            }
                        }
                    }
                }
            }
        }