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

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

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

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

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

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

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

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

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

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

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

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

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

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