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

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

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

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

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

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

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

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

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

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

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

फ़ील्ड मास्क एक ऐसा तरीका है जिसकी मदद से एपीआई कॉलर उन फ़ील्ड की सूची बना सकते हैं जिन्हें अपडेट करने का अनुरोध करना है या अपडेट करना है. FieldMask का इस्तेमाल करने से गैर-ज़रूरी काम नहीं होते हैं और परफ़ॉर्मेंस बेहतर होती है. फ़्लीट इंजन सभी संसाधनों में फ़ील्ड अपडेट करने के लिए, फ़ील्ड मास्क का इस्तेमाल करता है.

वाहन के आईडी की मदद से यात्रा की जानकारी अपडेट करना

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

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 गड़बड़ी मिल सकती है. इस स्थिति में, फ़्लीट इंजन की स्थिति के बारे में जानकारी नहीं होती है. इसकी जांच करने के लिए, सबसे पहले CreateTrip पर फिर से कॉल करें. ऐसा करने के लिए, आपको उसी यात्रा आईडी को अपडेट करना होगा या उसे मॉनिटर करना है. इससे या तो 201 (CREATED) या 409 (झूला) दिखना चाहिए. दूसरे मामले में, DEADLINE_EXCEEDED से पहले ही पिछले अनुरोध को स्वीकार कर लिया गया था.

Android या iOS के लिए, Consumer SDK टूल में नेटवर्क से जुड़ी गड़बड़ियों की सूची देखें.

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