سفرها را به روز کنید و وضعیت آنها را مدیریت کنید

این سند نحوه به‌روزرسانی یک سفر و مدیریت وضعیت آن را شرح می‌دهد که شامل استفاده از یک ماسک میدانی برای تنظیم فیلدهای مربوطه برای یک سفر است. فرض بر این است که شما Fleet Engine را همانطور که در این سایت توضیح داده شده راه اندازی کرده اید و در حال کار با وسیله نقلیه ای هستید که به یک سفر اختصاص داده شده است.

اصول به روز رسانی سفر

سیستم شما از Fleet Engine برای به‌روزرسانی یک سفر در شرایط زیر استفاده می‌کند:

  • هنگام اختصاص یک وسیله نقلیه به سفر پس از ایجاد.
  • هنگامی که وضعیت سفر تغییر می کند؛ به عنوان مثال، هنگامی که وسیله نقلیه از ایستگاه های بین راهی عبور می کند.
  • وقتی فیلدهای سفر را به‌روزرسانی می‌کنید، مانند تعداد مسافران و نقطه خروج.

برای به‌روزرسانی یک سفر، با استفاده از gRPC و REST درخواست ارسال کنید.

  • روش UpdateTrip() : gRPC یا REST
  • پیام UpdateTripRequest : فقط gRPC

از اعتبارنامه های مناسب برای حساب سرویس پروژه خود همانطور که در Fleet Engine توضیح داده شده است: نقش های حساب سرویس استفاده کنید.

فیلدهای سفر را به روز کنید

می توانید هر یک از فیلدهای سفر را که در فیلدهای سفر در ایجاد یک سفر مقصد واحد توضیح داده شده است، به روز کنید. به عنوان مثال، پس از ایجاد یک سفر، این یک روش معمول است که ابتدا یک وسیله نقلیه را پیدا کنید و سپس فیلد trip vehicle_id به روز کنید تا آن را با وسیله نقلیه ای که سفر را انجام می دهد مرتبط کنید.

از ماسک های میدانی استفاده کنید

فیلد ماسک راهی برای تماس‌گیرندگان API برای فهرست کردن فیلدهایی است که یک درخواست باید یا به‌روزرسانی کند. استفاده از 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 ناشناخته است. برای بررسی این موضوع، ابتدا با استفاده از همان ID سفری که می‌خواهید به‌روزرسانی یا نظارت کنید، دوباره CreateTrip تماس بگیرید. این باید یک 201 (CREATED) یا 409 (CONFLICT) را برگرداند. در مورد دوم، درخواست قبلی قبل از DEADLINE_EXCEEDED با موفقیت انجام شد.

فهرست خطاهای شبکه را در Consumer SDK، چه برای Android یا iOS ببینید.

بعدش چی