עדכון הנסיעות וניהול המצב שלהן

במסמך הזה מוסבר איך לעדכן נסיעה ולנהל את המצב שלה, כולל שימוש במסכת שדה כדי להגדיר שדות רלוונטיים לנסיעה. ההנחה היא הגדירו את Fleet Engine כפי שמתואר באתר הזה, והם עובדים עם הרכב שהוקצה לנסיעה.

מידע בסיסי על עדכוני נסיעה

המערכת משתמשת ב-Fleet Engine כדי לעדכן נסיעה במצבים הבאים:

  • כשמקצים רכב לנסיעה אחרי שיוצרים אותו.
  • כשהסטטוס של הנסיעה משתנה; לדוגמה, כשהרכב עובר דרך ציוני דרך.
  • כשמעדכנים שדות נסיעה, כמו מספר הנוסעים נקודת ההורדה.

כדי לעדכן נסיעה, צריך לשלוח בקשה באמצעות gRPC ו-REST.

  • שיטת UpdateTrip(): gRPC או REST
  • הודעה אחת (UpdateTripRequest): ב-gRPC בלבד

השתמשו בפרטי הכניסה המתאימים לחשבון השירות של הפרויקט בתור שמתואר במאמר Fleet Engine: תפקידים של חשבון שירות.

עדכון שדות הנסיעה

אפשר לעדכן את כל אחד משדות הנסיעה שמתוארים בשדות נסיעות בקטע יצירה נסיעה ליעד אחד. לדוגמה, אחרי שיוצרים נסיעה, להתאמן כדי למצוא רכב תחילה ואז לעדכן את שדה הנסיעה vehicle_id ל- לשייך אותו לכלי הרכב שאמור לבצע את הנסיעה.

שימוש במסכות של שדות

מסיכות שדות מאפשרות לקריאות ל-API לרשום את השדות שהבקשה צריכה או לעדכן אותם. שימוש ב-FieldMask חוסך עבודה לא נחוצה ומשפר את הביצועים. ב-Fleet Engine משתמשים במסכות שדה לעדכון השדות בכל המשאבים.

עדכון הנסיעה באמצעות מזהה הרכב

צריך להגדיר נסיעה עם מזהה רכב כדי ש-Fleet Engine יוכל לעקוב אחרי הנסיעה את הרכב לאורך המסלול. דוגמת הקוד הבאה ממחישה איך לעדכן את הנסיעה באמצעות מזהה רכב.

static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_ID = "trip-8241890";

String tripName = "providers/" + PROJECT_ID + "/trips/" + TRIP_ID;

TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);

// The trip settings to update.
Trip trip = Trip.newBuilder()
    .setVehicleId("8241890")
    .build();

// The trip update request.
UpdateTripRequest updateTripRequest =
    UpdateTripRequest.newBuilder()      // No need for the header.
        .setName(tripName)
        .setTrip(trip)
        .setUpdateMask(FieldMask.newBuilder().addPaths("vehicle_id"))
        .build();

// Error handling.
// If the Fleet Engine has both a trip and vehicle with IDs, and if the
// credentials validate, then the service updates the trip.
try {
  Trip updatedTrip = tripService.updateTrip(updateTripRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
    case NOT_FOUND:                    // Neither the trip nor vehicle exist.
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}

ניהול מצב הנסיעה בנסיעות

אתם מציינים את מצב הנסיעה באמצעות אחת מהספירה של TripStatus ערכים. כשמצב הנסיעה משתנה; לדוגמה מ-ENROUTE_TO_PICKUP עד ARRIVED_AT_PICKUP, עדכנת את מצב הנסיעה ב-Fleet Engine. הנסיעה מחזור החיים מתחיל תמיד בערך מצב של NEW ומסתיים בערך של COMPLETE או CANCELED.

עדכון נסיעה לדוגמה

הדוגמה הבאה ממחישה איך לעדכן את מצב הנסיעה לאחור לטיול ב-Fleet Engine.

static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_ID = "trip-8241890";

String tripName = "providers/" + PROJECT_ID + "/trips/" + TRIP_ID;

TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);

// Trip settings to be updated.
Trip trip = Trip.newBuilder()
    .setTripStatus(TripStatus.ARRIVED_AT_PICKUP)
    .build();

// Trip update request
UpdateTripRequest updateTripRequest = UpdateTripRequest.newBuilder()
    .setName(tripName)
    .setTrip(trip)
    .setUpdateMask(FieldMask.newBuilder().addPaths("trip_status"))
    .build();

// Error handling.
try {
  Trip updatedTrip = tripService.updateTrip(updateTripRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
    case NOT_FOUND:            // The trip doesn't exist.
      break;
    case FAILED_PRECONDITION:  // The given trip status is invalid.
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}

בקטע סוגי נסיעות אחרים תוכלו לראות דוגמאות נוספות לעדכון נסיעות. .

טיפול בשגיאות בנסיעה

כשאתם מעדכנים או מחפשים נסיעות קיימות, יכול להיות שתיתקלו בתרחיש שגיאה DEADLINE_EXCEEDED, ובמקרה הזה המצב של Fleet Engine לא ידוע. כדי לבדוק את הבעיה, קודם צריך להתקשר שוב אל CreateTrip עם אותו מזהה נסיעה מנסים לעדכן או לעקוב. הפונקציה צריכה להחזיר את הערך 201 (CREATED) או 409 (CONFLICT). במקרה השני, הבקשה הקודמת הצליחה לפני DEADLINE_EXCEEDED

לעיון ברשימת השגיאות ברשת ב-SDK לצרכנים, ל-Android או iOS.

המאמרים הבאים