private void UpdateResult(GetRouteByPointOriginAndDestinationQueryResponse result, BestRouteOptimoRequest model) { if (model is null) { return; } if (result.MinCost > model.TotalCost) { result.MinCost = model.TotalCost; result.BestCost = model.Routes; } if (result.MinTime > model.TotalTime) { result.MinTime = model.TotalTime; result.BestTime = model.Routes; } }
private GetRouteByPointOriginAndDestinationQueryResponse GetResponse() { GetRouteByPointOriginAndDestinationQueryResponse result = new GetRouteByPointOriginAndDestinationQueryResponse(); result.MinCost = double.MaxValue; result.MinTime = double.MaxValue; foreach (var modelStatic in _cacheBestRouteOptimoModelStatic) { foreach (var model in _cacheBestRouteOptimoModelAll) { BestRouteOptimoRequest candidate = GetCandidate(modelStatic, model); UpdateResult(result, candidate); } } _cacheBestRouteOptimoModelStatic.Clear(); _cacheBestRouteOptimoModelAll.Clear(); return(result); }
public IEnumerable <Route> Execute(GetBestTimeByPointOriginAndDestinationQueryRequest request) { request.PointDestinationCode = request.PointDestinationCode.ToLower(); request.PointOriginCode = request.PointOriginCode.ToLower(); if (request.PointOriginCode.Equals(request.PointDestinationCode)) { throw new ResponseException(System.Net.HttpStatusCode.BadRequest, "Origin and Destination have the same code"); } BestRouteRefinedAbstraction bestRoute = new BestRouteRefinedAbstraction(); List <Route> grafo = new List <Route>(); IEnumerable <Route> routes = _routeData.GetAllRoutes(); grafo.AddRange(routes); foreach (var item in routes) { grafo.Add(new Route { Cost = item.Cost, Time = item.Time, PointFromCode = item.PointToCode, PointToCode = item.PointFromCode }); } GetRouteByPointOriginAndDestinationQueryResponse result = bestRoute.Get(grafo, request.PointOriginCode, request.PointDestinationCode); if (result?.BestTime is null) { throw new ResponseException(System.Net.HttpStatusCode.BadRequest, "There is no route for this points"); } return(result.BestTime); }