public async Task <BookingRouteAM> CalculateBookingRoute(RouteAM route, CargoAM cargo, BasketAM requestBasket) { var rootAddress = RouteService.GetRootAddress(route); var feedDistance = RouteService.GetFeedDistance(route); var feedDuration = RouteService.GetFeedDuration(route); var totalDistance = RouteService.GetTotalDistance(route); var billInfo = await BillService.GetBillInfo(rootAddress.ToCoordinate(), cargo.WeightCatalogItemId); // клонируем т.к. количество километров для каждого маршрута - индивидуально, а параметром передается общий объект var basket = requestBasket.Clone() as BasketAM; basket.KmValue = totalDistance; var bill = await BillService.CalculateBill(billInfo, basket); var title = $"{rootAddress.Locality} - {bill.TotalCost}₽"; return(new BookingRouteAM { RootAddress = rootAddress, FeedDistance = feedDistance, FeedDuration = feedDuration, TotalDistance = totalDistance, Bill = bill, Title = title }); }
public Task <Cargo> CreateDomainCargo(CargoAM cargo) { return(DomainCargoService.Create( cargo.WeightCatalogItemId, cargo.KindCatalogItemId, cargo.BrandCatalogItemId, cargo.RegistrationNumber, cargo.Comment)); }
public async Task CreateDomainCargo() { var commonId = 1; var cargo = new CargoAM { WeightCatalogItemId = commonId++, KindCatalogItemId = commonId++, BrandCatalogItemId = commonId++, RegistrationNumber = "к232уу777", Comment = "Не работате пневма" }; await Suite.CargoService.CreateDomainCargo(cargo); Suite.DomainCargoServiceMock .Verify(m => m.Create( cargo.WeightCatalogItemId, cargo.KindCatalogItemId, cargo.BrandCatalogItemId, cargo.RegistrationNumber, cargo.Comment)); }
public async Task CalculateBookingRoute() { var commonId = 1; var rootAddress = new AddressAM { Locality = "Ярославль", Latitude = 11.1111, Longitude = 22.2222 }; var billInfo = new BillInfoAM { PriceId = commonId++, CommissionPercentage = 10, DegreeOfDifficulty = 1 }; var basket = new BasketAM { KmValue = 0, LoadingValue = 1, LockedSteeringValue = 0, LockedWheelsValue = 3, OverturnedValue = 0, DitchValue = 1 }; var cargo = new CargoAM { BrandCatalogItemId = commonId++, KindCatalogItemId = commonId++, RegistrationNumber = "e111ey777", WeightCatalogItemId = commonId++ }; var route = new RouteAM { Legs = { new RouteLegAM { Kind = RouteLegKind.Feed, Distance = 3000, Duration = 1200 }, new RouteLegAM { Kind = RouteLegKind.Transportation, Distance = 100000, Duration = 7200 }, new RouteLegAM { Kind = RouteLegKind.WayBack, Distance = 103000, Duration = 8400 } } }; var feedDistance = route.Legs[0].Distance; var feedDuration = route.Legs[0].Duration; var totalDistance = route.Legs.Select(l => l.Distance).Sum(); var bill = new BillAM { TotalCost = 100 }; var title = $"{rootAddress.Locality} - {bill.TotalCost}₽"; Suite.RouteServiceMock .Setup(m => m.GetRootAddress(route)) .Returns(rootAddress); Suite.RouteServiceMock .Setup(m => m.GetFeedDistance(route)) .Returns(feedDistance); Suite.RouteServiceMock .Setup(m => m.GetFeedDuration(route)) .Returns(feedDuration); Suite.RouteServiceMock .Setup(m => m.GetTotalDistance(route)) .Returns(totalDistance); Suite.BillServiceMock .Setup(m => m.GetBillInfo( It.Is <Coordinate>(c => c.Latitude.Equals(rootAddress.Latitude) && c.Longitude.Equals(rootAddress.Longitude)), cargo.WeightCatalogItemId)) .ReturnsAsync(billInfo); Suite.BillServiceMock .Setup(m => m.CalculateBill( billInfo, It.Is <BasketAM>(b => (b != basket) && b.KmValue.Equals(totalDistance)))) .ReturnsAsync(bill); var result = await Suite.BookingService.CalculateBookingRoute(route, cargo, basket); Assert.Equal(rootAddress, result.RootAddress); Assert.Equal(feedDistance, result.FeedDistance); Assert.Equal(feedDuration, result.FeedDuration); Assert.Equal(totalDistance, result.TotalDistance); Assert.Equal(bill, result.Bill); Assert.Equal(title, result.Title); }
private async Task <ICollection <BookingRouteAM> > GetBookingRoutes(ICollection <RouteAM> possibleRoutes, CargoAM cargo, BasketAM basket) { var result = new List <BookingRouteAM>(); var exceptions = new ConcurrentQueue <Exception>(); await possibleRoutes.ParallelForEachAsync( async route => { try { var bookingRoute = await CalculateBookingRoute(route, cargo, basket); result.Add(bookingRoute); } catch (Exception e) { exceptions.Enqueue(e); } } ); if (exceptions.Any()) { throw new AggregateException(exceptions); } return(result); }