Пример #1
0
        public override UpdateTripStatusResponse UpdateTripStatus(UpdateTripStatusRequest r)
        {
            requests++;
            Gateway destPartner = GetDestinationPartner(r.clientID, r.tripID);

            if (destPartner != null)
            {
                Logger.AddTag("Destination partner", destPartner.name);
                string originClientID = r.clientID;
                ChangeClientIDToTripThru(r);
                UpdateTripStatusResponse response = destPartner.UpdateTripStatus(r);
                r.clientID = originClientID;
                if (SuccesAndTripStillActive(r, response))
                {
                    activeTrips[r.tripID].Status = r.status;
                    if (r.status == Status.Complete)
                    {
                        GetTripStatusResponse resp = GetPriceAndDistanceDetailsFromClient(r);
                        DeactivateTripAndUpdateStats(r.tripID, Status.Complete, resp.price, resp.distance);
                    }
                    else if (r.status == Status.Cancelled || r.status == Status.Rejected)
                    {
                        DeactivateTripAndUpdateStats(r.tripID, r.status);
                    }
                }
                else
                {
                    Logger.Log("Request to destination partner failed, Result=" + response.result);
                }
                return(response);
            }
            Logger.Log("Destination partner trip not found");
            Logger.AddTag("ClientId", r.clientID);
            return(new UpdateTripStatusResponse(result: Result.NotFound));
        }
Пример #2
0
        public override Gateway.GetTripStatusResponse GetTripStatus(Gateway.GetTripStatusRequest request)
        {
            Logger.BeginRequest("GetTripStatus received from " + tripthru.name, request, request.tripID);
            Gateway.GetTripStatusResponse response = null;
            if (activeTrips.ContainsKey(request.tripID))
            {
                string bookingPK = activeTrips[request.tripID].pk;

                TDispatchAPI.GetBookingStatusResponse getBookingStatusResponse = api.GetBookingStatus(bookingPK);

                TDispatchAPI.GetBookingResponse getBookingResponse = api.GetBooking(bookingPK);

                TDispatchAPI.Booking booking = getBookingStatusResponse.booking;
                booking.Merge(getBookingResponse.booking);

                TDispatchAPI.GetFareResponse fare = api.GetFare(new TDispatchAPI.GetFareRequest
                {
                    way_points  = booking.way_points,
                    pickup_time =
                        booking.pickup_time != null
                            ? ((DateTime)booking.pickup_time).ToString("yyyy-MM-dd'T'HH:mm:ssK",
                                                                       DateTimeFormatInfo.InvariantInfo)
                            : null,
                    pickup_location  = booking.pickup_Location.location,
                    dropoff_location = booking.dropoff_Location.location,
                    dropoff_time     =
                        booking.dropoff_time != null
                            ? ((DateTime)booking.dropoff_time).ToString("yyyy-MM-dd'T'HH:mm:ssK",
                                                                        DateTimeFormatInfo.InvariantInfo)
                            : null,
                    payment_method = booking.payment_method
                });

                response = new Gateway.GetTripStatusResponse(
                    partnerID: ID, partnerName: name, passengerName: booking.customerName,
                    pickupLocation: new Location((double)booking.pickup_Location.location.lat, (double)booking.pickup_Location.location.lng),
                    dropoffLocation: new Location((double)booking.dropoff_Location.location.lat, (double)booking.dropoff_Location.location.lng),
                    fleetID: booking.office.slug, fleetName: booking.office.name,
                    driverID: booking.driver != null ? booking.driver.pk : null,
                    driverName: booking.driver != null ? booking.driver.name : null,
                    driverLocation: booking.driver != null
                        ? new Location((double)booking.driver.location.lat,
                                       (double)booking.driver.location.lng)
                        : null, price: booking.cost.value, distance: fare.fare.distance.km,
                    result: Result.OK, status: this.ConvertTDispatchStatusToTripThruStatus(booking.status, booking.sub_status)
                    );
                if (booking.pk == null)
                {
                    booking.pk = bookingPK;
                }
                //activeTrips[request.tripID] = booking;
            }
            else
            {
                Logger.Log("Trip " + request.tripID + " not found");
                response = new GetTripStatusResponse(result: Result.NotFound);
            }
            Logger.EndRequest(response);
            return(response);
        }
Пример #3
0
        public override GetTripStatusResponse GetTripStatus(GetTripStatusRequest r)
        {
            requests++;
            Gateway partner = GetDestinationPartner(r.clientID, r.tripID);

            if (partner != null)
            {
                Logger.AddTag("Destination_partner", partner.name);
                r.clientID = ID;
                GetTripStatusResponse response = partner.GetTripStatus(r);
                if (response.result == Result.OK)
                {
                    if (TripHasNonActiveStatus(response))
                    {
                        DeactivateTripAndUpdateStats(r.tripID, (Status)response.status, response.price, response.distance);
                    }
                    else
                    {
                        UpdateActiveTripWithNewTripStatus(r, response);
                    }
                    MakeGetTripStatusResponse(r, partner, response);
                }
                else
                {
                    Logger.Log("Request to destination partner failed, Result=" + response.result);
                }
                return(response);
            }
            Logger.Log("Destination partner trip not found");
            Logger.AddTag("ClientId", r.clientID);
            return(new GetTripStatusResponse(result: Result.NotFound));
        }
Пример #4
0
 private void UpdateActiveTripWithNewTripStatus(GetTripStatusRequest r, GetTripStatusResponse response)
 {
     UpdateActiveTrip(new Trip
     {
         Id                  = r.tripID,
         FleetId             = response.fleetID,
         FleetName           = response.fleetName,
         DriverId            = response.driverID,
         DriverName          = response.driverName,
         Status              = response.status,
         ETA                 = response.ETA,
         Price               = response.price,
         Distance            = response.distance,
         DriverRouteDuration = response.driverRouteDuration
     });
 }
Пример #5
0
        private void UpdateActiveTripWithNewTripStatus(GetTripStatusRequest r, GetTripStatusResponse response)
        {
            Trip trip = new Trip
            {
                Id         = r.tripID,
                FleetId    = response.fleetID,
                FleetName  = response.fleetName,
                DriverId   = response.driverID,
                DriverName = response.driverName,
                Status     = response.status,
                ETA        = response.ETA,
                Price      = response.price,

                DriverRouteDuration = response.driverRouteDuration,
                SamplingPercentage  = 1
            };

            if (response.status == Status.PickedUp)
            {
                trip.EnrouteDistance = response.distance;
            }
            activeTrips.UpdateTrip(trip);
        }
 private static bool TripHasNonActiveStatus(GetTripStatusResponse response)
 {
     return response.status == Status.Complete || response.status == Status.Cancelled || response.status == Status.Rejected;
 }
 private void UpdateActiveTripWithNewTripStatus(GetTripStatusRequest r, GetTripStatusResponse response)
 {
     UpdateActiveTrip(new Trip
     {
         Id = r.tripID,
         FleetId = response.fleetID,
         FleetName = response.fleetName,
         DriverId = response.driverID,
         DriverName = response.driverName,
         Status = response.status,
         ETA = response.ETA,
         Price = response.price,
         Distance = response.distance,
         DriverRouteDuration = response.driverRouteDuration
     });
 }
Пример #8
0
        private GetTripStatusResponse GetPriceAndDistanceDetailsFromClient(UpdateTripStatusRequest r)
        {
            GetTripStatusResponse resp = partners[r.clientID].GetTripStatus(new GetTripStatusRequest(r.clientID, r.tripID));

            return(resp);
        }
Пример #9
0
        public override UpdateTripStatusResponse UpdateTripStatus(UpdateTripStatusRequest r)
        {
            requests++;
            Gateway destPartner = GetDestinationPartner(r.clientID, r.tripID);

            if (destPartner != null)
            {
                UpdateTripStatusResponse response = null;
                Logger.AddTag("Destination partner", destPartner.name);
                Logger.SetServicingId(destPartner.ID);
                if (ShouldForwardTripUpdate(r, destPartner))
                {
                    string originClientID = r.clientID;
                    ChangeClientIDToTripThru(r);
                    response   = destPartner.UpdateTripStatus(r);
                    r.clientID = originClientID;
                }
                else
                {
                    response = new UpdateTripStatusResponse(result: Result.OK);
                }

                if (activeTrips.ContainsKey(r.tripID) && r.driverLocation != null)
                {
                    if (activeTrips[r.tripID].DriverInitiaLocation == null)
                    {
                        activeTrips[r.tripID].DriverInitiaLocation = r.driverLocation;
                    }
                    switch (r.status)
                    {
                    case Status.Enroute:
                        activeTrips[r.tripID].AddEnrouteLocationList(r.driverLocation);
                        break;

                    case Status.PickedUp:
                        activeTrips[r.tripID].AddPickUpLocationList(r.driverLocation);
                        break;
                    }
                }
                if (SuccesAndTripStillActive(r, response))
                {
                    activeTrips[r.tripID].Status = r.status;
                    switch (r.status)
                    {
                    case Status.PickedUp:
                    {
                        DateTime pickupTime = DateTime.UtcNow;
                        TimeSpan lateness   = pickupTime - (DateTime)activeTrips[r.tripID].Creation;
                        activeTrips[r.tripID].PickupTime           = pickupTime;
                        activeTrips[r.tripID].Lateness             = lateness;
                        activeTrips[r.tripID].LatenessMilliseconds = lateness.TotalMilliseconds;
                        break;
                    }

                    case Status.Complete:
                    {
                        GetTripStatusResponse resp = GetPriceAndDistanceDetailsFromClient(r);
                        DeactivateTripAndUpdateStats(r.tripID, Status.Complete, resp.price, resp.distance);
                    }
                    break;

                    case Status.Rejected:
                    case Status.Cancelled:
                        DeactivateTripAndUpdateStats(r.tripID, r.status);
                        break;
                    }
                }
                else
                {
                    Logger.Log("Request to destination partner failed, Result=" + response.result);
                }
                return(response);
            }
            Logger.Log("Destination partner trip not found");
            Logger.AddTag("ClientId", r.clientID);
            return(new UpdateTripStatusResponse(result: Result.NotFound));
        }
Пример #10
0
 private static bool TripHasNonActiveStatus(GetTripStatusResponse response)
 {
     return(response.status == Status.Complete || response.status == Status.Cancelled || response.status == Status.Rejected);
 }
Пример #11
0
        private void UpdateActiveTripWithNewTripStatus(GetTripStatusRequest r, GetTripStatusResponse response)
        {
            Trip trip = new Trip
            {
                Id = r.tripID,
                FleetId = response.fleetID,
                FleetName = response.fleetName,
                DriverId = response.driverID,
                DriverName = response.driverName,
                Status = response.status,
                ETA = response.ETA,
                Price = response.price,

                DriverRouteDuration = response.driverRouteDuration,
                SamplingPercentage = 1

            };
            if (response.status == Status.PickedUp)
                trip.EnrouteDistance = response.distance;
            activeTrips.UpdateTrip(trip);
        }
Пример #12
0
 private void AddDriverInitialLocation(GetTripStatusResponse response, string tripId)
 {
     response.driverInitialLocation = activeTrips[tripId].DriverInitiaLocation;
 }
Пример #13
0
 private void AddDriverInitialLocation(GetTripStatusResponse response, string tripId)
 {
     response.driverInitialLocation = activeTrips[tripId].DriverInitiaLocation;
 }
Пример #14
0
        private void MakeGetTripStatusResponse(GetTripStatusRequest r, Gateway partner, GetTripStatusResponse response)
        {
            Logger.AddTag("Passenger", response.passengerName);
            Logger.AddTag("Pickup time", response.pickupTime.ToString());
            Logger.AddTag("Pickup location", response.pickupLocation.ToString());
            Logger.AddTag("Dropoff location", response.dropoffLocation.ToString());
            Logger.AddTag("Status", response.status.ToString());
            Logger.AddTag("ETA", response.ETA.ToString());

            response.partnerID = partner.ID;
            response.partnerName = partner.name;
            response.originatingPartnerName = partners[originatingPartnerByTrip[r.tripID]].name;
            response.servicingPartnerName = partners[servicingPartnerByTrip[r.tripID]].name;
            Logger.AddTag("Originating partner", response.originatingPartnerName);
            Logger.AddTag("Servicing partner", response.servicingPartnerName);
        }
Пример #15
0
        private void MakeGetTripStatusResponse(GetTripStatusRequest r, Gateway partner, GetTripStatusResponse response)
        {
            Logger.AddTag("Passenger", response.passengerName);
            Logger.AddTag("Pickup time", response.pickupTime.ToString());
            Logger.AddTag("Pickup location", response.pickupLocation.ToString());
            Logger.AddTag("Dropoff location", response.dropoffLocation.ToString());
            Logger.AddTag("Status", response.status.ToString());
            Logger.AddTag("ETA", response.ETA.ToString());

            response.partnerID              = partner.ID;
            response.partnerName            = partner.name;
            response.originatingPartnerName = partners[originatingPartnerByTrip[r.tripID]].name;
            response.servicingPartnerName   = partners[servicingPartnerByTrip[r.tripID]].name;
            Logger.AddTag("Originating partner", response.originatingPartnerName);
            Logger.AddTag("Servicing partner", response.servicingPartnerName);
        }
Пример #16
0
        public override GetTripStatusResponse GetTripStatus(GetTripStatusRequest r)
        {
            requests++;
            if (!tripsByID.ContainsKey(r.tripID))
            {
                Logger.Log("Trip " + r.tripID + " not found");
                return new GetTripStatusResponse(result: Result.NotFound);
            }

            PartnerTrip t = tripsByID[r.tripID];
            DateTime? pickupTime = null;
            if (t.status == Status.PickedUp || t.status == Status.DroppedOff || t.status == Status.Complete)
                pickupTime = t.pickupTime; // Only if trip has been pickedup.

            GetTripStatusResponse response;
            if (t.price == null && t.PartnerFleet != null)
                t.price = t.PartnerFleet.GetPrice(t);

            double? distance = null;
            if (t.PartnerFleet != null)
                distance = t.PartnerFleet.GetDistance(t);

            double? driverRouteDuration = null;
            if (t.driver != null && t.driver.route != null)
                driverRouteDuration = t.driver.route.duration.TotalSeconds;

            t.lastStatusNotifiedToPartner = t.status;

            response = new GetTripStatusResponse(
                partnerID: ID,
                partnerName: name,
                fleetID: t.PartnerFleet != null ? t.PartnerFleet.ID : null,
                fleetName: t.PartnerFleet != null ? t.PartnerFleet.name : null,
                pickupTime: pickupTime,
                pickupLocation: t.pickupLocation,
                driverID: t.driver != null ? t.driver.ID : null,
                driverName: t.driver != null ? t.driver.name : null,
                driverLocation: t.driver != null ? t.driver.location : null,
                dropoffTime: t.dropoffTime,
                dropoffLocation: t.dropoffLocation,
                vehicleType: t.vehicleType,
                ETA: t.ETA,
                distance: distance,
                driverRouteDuration: driverRouteDuration,
                price: t.price,
                status: t.status,
                passengerName: t.passengerName
            );
            return response;
        }
Пример #17
0
        public override Gateway.GetTripStatusResponse GetTripStatus(Gateway.GetTripStatusRequest request)
        {
            Logger.BeginRequest("GetTripStatus received from " + tripthru.name, request, request.tripID);
            Gateway.GetTripStatusResponse response = null;
            if (activeTrips.ContainsKey(request.tripID))
            {
                string bookingPK = activeTrips[request.tripID].pk;

                TDispatchAPI.GetBookingStatusResponse getBookingStatusResponse = api.GetBookingStatus(bookingPK);

                TDispatchAPI.GetBookingResponse getBookingResponse = api.GetBooking(bookingPK);

                TDispatchAPI.Booking booking = getBookingStatusResponse.booking;
                booking.Merge(getBookingResponse.booking);

                TDispatchAPI.GetFareResponse fare = api.GetFare(new TDispatchAPI.GetFareRequest
                {
                    way_points = booking.way_points,
                    pickup_time =
                        booking.pickup_time != null
                            ? ((DateTime)booking.pickup_time).ToString("yyyy-MM-dd'T'HH:mm:ssK",
                                DateTimeFormatInfo.InvariantInfo)
                            : null,
                    pickup_location = booking.pickup_Location.location,
                    dropoff_location = booking.dropoff_Location.location,
                    dropoff_time =
                        booking.dropoff_time != null
                            ? ((DateTime)booking.dropoff_time).ToString("yyyy-MM-dd'T'HH:mm:ssK",
                                DateTimeFormatInfo.InvariantInfo)
                            : null,
                    payment_method = booking.payment_method
                });

                response = new Gateway.GetTripStatusResponse(
                    partnerID: ID, partnerName: name, passengerName: booking.customerName,
                    pickupLocation: new Location((double)booking.pickup_Location.location.lat, (double)booking.pickup_Location.location.lng),
                    dropoffLocation: new Location((double)booking.dropoff_Location.location.lat, (double)booking.dropoff_Location.location.lng),
                    fleetID: booking.office.slug, fleetName: booking.office.name,
                    driverID: booking.driver != null ? booking.driver.pk : null,
                    driverName: booking.driver != null ? booking.driver.name : null,
                    driverLocation: booking.driver != null
                        ? new Location((double)booking.driver.location.lat,
                            (double)booking.driver.location.lng)
                        : null, price: booking.cost.value, distance: fare.fare.distance.km,
                    result: Result.OK, status: this.ConvertTDispatchStatusToTripThruStatus(booking.status, booking.sub_status)
                    );
                if (booking.pk == null)
                    booking.pk = bookingPK;
                //activeTrips[request.tripID] = booking;
            }
            else
            {
                Logger.Log("Trip " + request.tripID + " not found");
                response = new GetTripStatusResponse(result: Result.NotFound);
            }
            Logger.EndRequest(response);
            return response;
        }