इस दस्तावेज़ में, किसी यात्रा को अपडेट करने और उसकी स्थिति मैनेज करने का तरीका बताया गया है. इसके लिए, फ़ील्ड मास्क का इस्तेमाल करके, यात्रा के लिए ज़रूरी फ़ील्ड सेट किए जाते हैं. इसमें यह माना जाता है कि आपने इस साइट पर बताए गए तरीके से, Fleet Engine सेट अप कर लिया है और किसी यात्रा के लिए असाइन किए गए वाहन का इस्तेमाल कर रहे हैं.
यात्रा अपडेट करने की बुनियादी बातें
आपका सिस्टम, इन स्थितियों में यात्रा को अपडेट करने के लिए Fleet Engine का इस्तेमाल करता है:
- यात्रा बनाने के बाद, उसे वाहन असाइन करते समय.
- यात्रा की स्थिति में बदलाव होने पर. उदाहरण के लिए, जब वाहन वेपॉइंट से गुज़रता है.
- यात्रा के फ़ील्ड अपडेट करते समय. जैसे, यात्रियों की संख्या और ड्रॉप-ऑफ़ पॉइंट.
यात्रा को अपडेट करने के लिए, gRPC और REST में से किसी एक का इस्तेमाल करके अनुरोध भेजें.
यात्रा के फ़ील्ड अपडेट करना
एक मंज़िल वाली यात्रा बनाना लेख में, यात्रा के जिन फ़ील्ड के बारे में बताया गया है उन्हें अपडेट किया जा सकता है. उदाहरण के लिए, यात्रा बनाने के बाद, आम तौर पर पहले वाहन ढूंढा जाता है. इसके बाद, यात्रा के 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 से पहले पिछला अनुरोध पूरा हो गया था.