यात्राओं की जानकारी अपडेट करें और उनके राज्य मैनेज करें

इस दस्तावेज़ में, किसी यात्रा को अपडेट करने और उसकी स्थिति मैनेज करने का तरीका बताया गया है. इसके लिए, यात्रा के लिए ज़रूरी फ़ील्ड सेट करने के लिए, फ़ील्ड मास्क का इस्तेमाल करना ज़रूरी है. इसमें यह माना जाता है कि आपने इस साइट पर बताए गए तरीके से Fleet Engine सेट अप कर लिया है और किसी यात्रा के लिए असाइन किए गए वाहन का इस्तेमाल कर रहे हैं.

यात्रा अपडेट करने की बुनियादी बातें

आपका सिस्टम, इन स्थितियों में यात्रा को अपडेट करने के लिए, Fleet Engine का इस्तेमाल करता है:

  • यात्रा बनाने के बाद, उसे कोई वाहन असाइन करने पर.
  • यात्रा की स्थिति बदलने पर. उदाहरण के लिए, जब वाहन वेपॉइंट से गुज़रता है.
  • यात्रा के फ़ील्ड अपडेट करने पर. जैसे, यात्रियों की संख्या और ड्रॉप-ऑफ़ पॉइंट.

यात्रा को अपडेट करने के लिए, gRPC और REST में से किसी एक का इस्तेमाल करके अनुरोध भेजें.

  • UpdateTrip() तरीका: gRPC या REST
  • UpdateTripRequest मैसेज: gRPC सिर्फ़

अपने प्रोजेक्ट के सेवा खाते के लिए, सही क्रेडेंशियल का इस्तेमाल करें. इसके लिए, Fleet Engine: सेवा खाते की भूमिकाएं लेख पढ़ें.

यात्रा के फ़ील्ड अपडेट करना

एक जगह की यात्रा बनाएं में, यात्रा के फ़ील्ड में बताए गए किसी भी फ़ील्ड को अपडेट किया जा सकता है. उदाहरण के लिए, यात्रा बनाने के बाद, सबसे पहले वाहन ढूंढना और फिर यात्रा के vehicle_id फ़ील्ड को अपडेट करना आम बात है. ऐसा इसलिए किया जाता है, ताकि उसे उस वाहन से जोड़ा जा सके जो यात्रा पूरी करेगा.

फ़ील्ड मास्क का इस्तेमाल करना

फ़ील्ड मास्क, एपीआई कॉल करने वालों के लिए, उन फ़ील्ड की सूची बनाने का एक तरीका है जिन्हें किसी अनुरोध को अपडेट करना चाहिए. 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 एनमरेशन की किसी एक वैल्यू का इस्तेमाल करें. जब किसी यात्रा की स्थिति बदलती है, तो Fleet Engine में यात्रा की स्थिति अपडेट करें. उदाहरण के लिए, ENROUTE_TO_PICKUP से ARRIVED_AT_PICKUP में बदलने पर. यात्रा का लाइफ़साइकल हमेशा 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 से पहले पिछला अनुरोध पूरा हो गया था.

iOS

आगे क्या करना है