يصف هذا المستند كيفية تحديث رحلة وإدارة حالتها، استخدام قناع ميداني لتعيين الحقول ذات الصلة لرحلة ما. يفترض أنك تعد Fleet Engine كما هو موضح في هذا الموقع وتعمل حاليًا مع المركبة المخصصة لرحلة.
أساسيات تحديث الرحلة
يستخدم نظامك Fleet Engine لتحديث إحدى الرحلات في الحالات التالية:
- عند تخصيص مركبة لرحلة بعد إنشائها
- عند تغيير حالة الرحلة على سبيل المثال، عندما تمر المركبة خلال نقاط الطريق.
- عند تعديل حقول الرحلة، مثل عدد الركاب نقطة الانسحاب.
لتعديل رحلة، أرسِل طلبًا باستخدام gRPC وREST.
استخدم بيانات الاعتماد المناسبة لحساب الخدمة لمشروعك كما هو موضَّح في 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
.
القيم. عند تغيير حالة الرحلة على سبيل المثال من 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: