Exemplo n.º 1
0
 public IEnumerable <Conductor> ObtenerConductoresCercanos(long empresaId, double latitud, double longitud)
 {
     return(_conductoresClient.ObtenerListaConductoresCercanos(new ObtenerListaConductoresCercanosRequest
     {
         Distancia = 5,
         EmpresaId = empresaId,
         Latitud = latitud,
         Longitud = longitud
     })
            .Conductores
            .OrderBy(c => CoordenadasHelper.Distancia(c.Latitud, c.Longitud, latitud, longitud))
            .Where(c => c.Disponible)
            .Take(3)
            .Select(c => c.ObtenerEntidad()));
 }
Exemplo n.º 2
0
        public ActionResult <Viaje> SolicitarViaje([FromBody] SolicitarViajeRequest request)
        {
            if (request == null)
            {
                return(BadRequest());
            }
            var conductorCercano = _conductoresClient.ObtenerListaConductoresCercanos(new ObtenerListaConductoresCercanosRequest
            {
                Distancia = 5,
                EmpresaId = request.EmpresaId,
                Latitud   = request.LatitudInicial,
                Longitud  = request.LongitudInicial
            })
                                   .Conductores
                                   .Where(c => c.Disponible)
                                   .OrderBy(c => CoordenadasHelper.Distancia(c.Latitud, c.Longitud, request.LatitudInicial, request.LongitudInicial))
                                   .Select(c => c.ObtenerEntidad())
                                   .FirstOrDefault();

            if (conductorCercano == null)
            {
                return(NotFound("No se ha podido encontrar un conductor cercano."));
            }

            var solicitudDeViaje = _viajesClient.Crear(new Servicios.Interno.CrearViajeRequest
            {
                Viaje = new Servicios.Interno.ViajeDTO
                {
                    EmpresaID  = request.EmpresaId,
                    Inicio     = Timestamp.FromDateTime(DateTime.UtcNow),
                    PasajeroID = request.PasajeroId,
                    PilotoID   = conductorCercano.ID
                }
            });

            conductorCercano.Disponible = false;

            _conductoresClient.ActualizarConductor(new ActualizarConductorRequest {
                ID = conductorCercano.ID, Conductor = conductorCercano.ObtenerDto()
            });

            return(solicitudDeViaje.ObtenerEntidad());
        }