سفرهای ادغام مشترک ایجاد کنید

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

اصول ایجاد سفر

این بخش جزئیات درخواست لازم برای ایجاد یک سفر در Fleet Engine را شرح می دهد. شما یک درخواست ایجاد را با استفاده از gRPC و REST صادر می کنید.

  • متد CreateTrip() : gRPC یا REST
  • پیام CreateTripRequest : فقط gRPC

فیلدهای سفر

برای ایجاد سفر در Fleet Engine از فیلدهای زیر استفاده کنید. می‌توانید از زمینه‌های مختلف برای انواع مختلف سفر استفاده کنید: سفرهای تک یا چند مقصد، پشت سر هم یا سفرهای مشترک. می‌توانید فیلدهای اختیاری را هنگام ایجاد سفر تهیه کنید، یا می‌توانید بعداً هنگام به‌روزرسانی سفر، آنها را تنظیم کنید.

زمینه های سفر
نام مورد نیاز؟ توضیحات
پدر و مادر بله رشته ای که شامل شناسه پروژه است. این شناسه باید همان شناسه ای باشد که در کل ادغام Fleet Engine شما استفاده می شود، با نقش های حساب سرویس یکسان.
trip_id بله رشته ای که ایجاد می کنید و به طور منحصر به فردی این سفر را مشخص می کند. شناسه های سفر دارای محدودیت های خاصی هستند، همانطور که در مرجع ذکر شده است.
trip_type بله برای نوع سفری که ایجاد می کنید، TripType را روی مقادیر زیر تنظیم کنید:
  • مقصد واحد : روی SHARED یا EXCLUSIVE تنظیم کنید.
  • چند مقصد : روی EXCLUSIVE تنظیم کنید.
  • پشت به پشت : روی EXCLUSIVE تنظیم کنید.
  • ادغام مشترک : روی SHARED تنظیم کنید.
pickup_point بله نقطه مبدا سفر
مقاصد میانی بله

فقط سفرهای چند مقصدی : فهرستی از مقاصد میانی که راننده در فاصله بین تحویل و تحویل از آنها بازدید می کند. مانند dropoff_point ، این فیلد را نیز می‌توان بعداً با تماس با UpdateTrip تنظیم کرد، اما یک سفر چند مقصد بنا به تعریف شامل مقصدهای میانی است.

وسایل نقلیه_ایستگاه های راه بله

فقط سفرهای ادغام مشترک : این فیلد از در هم نشینی نقاط بین سفرهای متعدد پشتیبانی می کند. این شامل تمام ایستگاه های بین راهی برای وسیله نقلیه تعیین شده، و همچنین ایستگاه های حمل و نقل و تحویل برای این سفر است. می توانید این فیلد را با فراخوانی CreateTrip یا UpdateTrip تنظیم کنید. همچنین می‌توانید با تماس با UpdateVehicle نقاط بین راه خودرو را از طریق فیلد waypoints به‌روزرسانی کنید. این سرویس به دلایل حفظ حریم خصوصی، این اطلاعات را در تماس های GetTrip بر نمی گرداند.

تعداد_مسافران خیر تعداد مسافران در سفر.
dropoff_point خیر مقصد سفر
شناسه_خودرو خیر شناسه وسیله نقلیه اختصاص داده شده به سفر.

مثال: ایجاد یک سفر استخری مشترک

نمونه ادغام باطن زیر نحوه ایجاد یک سفر و اختصاص آن به وسیله نقلیه را به عنوان یک سفر ادغام مشترک نشان می دهد.

// Vehicle with VEHICLE_ID ID is already created and it is assigned Trip A.

static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_ID = "shared-trip-A";
static final String VEHICLE_ID = "your-vehicle-id";
static final String TRIP_A_ID = "trip-a-id";
static final String TRIP_B_ID = "trip-b-id";

TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);

String parent = "providers/" + PROJECT_ID;

LatLng tripBPickup =
    LatLng.newBuilder().setLatitude(-12.12314).setLongitude(88.142123).build();
LatLng tripBDropoff =
    LatLng.newBuilder().setLatitude(-14.12314).setLongitude(90.142123).build();

TerminalLocation tripBPickupTerminalLocation =
    TerminalLocation.newBuilder().setPoint(tripBPickup).build();
TerminalLocation tripBDropoffTerminalLocation =
    TerminalLocation.newBuilder().setPoint(tripBDropoff).build();

// TripA already exists and it's assigned to a vehicle with VEHICLE_ID ID.
Trip tripB = Trip.newBuilder()
    .setTripType(TripType.SHARED)
    .setVehicleId(VEHICLE_ID)
    .setPickupPoint(tripBPickupTerminalLocation)
    .setDropoffPoint(tripBDropoffTerminalLocation)
    .addAllVehicleWaypoints(
        // This is where you define the arrival order for unvisited waypoints.
        // If you don't specify an order, then the Fleet Engine adds Trip B's
        // waypoints to the end of Trip A's.
        ImmutableList.of(
            // Trip B's pickup point.
            TripWaypoint.newBuilder()
                .setLocation(tripBPickupTerminalLocation)
                .setTripId(TRIP_B_ID)
                .setWaypointType(WaypointType.PICKUP_WAYPOINT_TYPE)
                .build(),
            // Trip A's drop-off point.
            TripWaypoint.newBuilder()
                .setLocation(tripA.getDropoffPoint())
                .setTripId(TRIP_A_ID)
                .setWaypointType(WaypointType.DROP_OFF_WAYPOINT_TYPE)
                .build(),
            // Trip B's drop-off point.
            TripWaypoint.newBuilder()
                .setLocation(tripBDropoffTerminalLocation)
                .setTripId(TRIP_B_ID)
                .setWaypointType(WaypointType.DROP_OFF_WAYPOINT_TYPE)
                .build()))
    .build();

// Create Trip request
CreateTripRequest createTripRequest = CreateTripRequest.newBuilder()
    .setParent(parent)
    .setTripId(TRIP_B_ID)
    .setTrip(tripB)
    .build();

try {
  // createdTrip.remainingWaypoints will contain shared-pool waypoints.
  // [tripB.pickup, tripA.dropoff, tripB.dropoff]
  Trip createdTrip = tripService.createTrip(createTripRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
    case ALREADY_EXISTS:
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}

به روز رسانی سفرهای ادغام مشترک

هر سفر ایجاد شده در Fleet Engine باید به وسیله نقلیه اختصاص داده شود تا Fleet Engine ETAهای سفر را محاسبه کند و آن را ردیابی کند. می‌توانید این کار را در حین ایجاد سفر یا بعداً هنگام به‌روزرسانی سفر انجام دهید.

برای سفرهای ادغام مشترک، باید ترتیبی برای ایستگاه‌های بین بازدید نشده در مجموعه ایستگاه‌های بین وسایل نقلیه سفر ( Trip.vehicle_waypoints ) مشخص کنید. Fleet Engine از این لیست برای به‌روزرسانی خودکار نقاط بین سفر برای همه سفرها در استخر مشترک استفاده می‌کند.

به عنوان مثال، دو سفر با استخر مشترک، سفر A و سفر B را در نظر بگیرید:

  • سفر A در مسیر به سمت محل تخلیه خود است.
  • سپس سفر B به همان وسیله نقلیه اضافه می شود.

در یک UpdateTripRequest برای سفر B ، vehicleId تنظیم می‌کنید، و همچنین Trip.vehicle_waypoints روی ترتیب بهینه نقطه راه تنظیم می‌کنید: B PickupA Drop-offB Drop-off .

  • فراخوانی getVehicle() remainingWaypoints برمی گرداند که حاوی:
    B تحویلA Drop-offB Drop-off .
  • یا getTrip() یا onTripRemainingWaypointsUpdated برای سفر A remainingWaypoints برمی گرداند که حاوی:
    B وانتA Drop-off .
  • یا getTrip() یا onTripRemainingWaypointsUpdated برای Trip B remainingWaypoints برمی گرداند که حاوی:
    B تحویلA Drop-offB Drop-off .

مثال

نمونه ادغام باطن زیر نحوه به‌روزرسانی یک سفر با شناسه وسیله نقلیه و ایستگاه‌های بین دو سفر با استخر مشترک را نشان می‌دهد.

static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_A_ID = "share-trip-A";
static final String TRIP_B_ID = "share-trip-B";
static final String VEHICLE_ID = "Vehicle";

String tripName = "providers/" + PROJECT_ID + "/trips/" + TRIP_B_ID;

// Get Trip A and Trip B objects from either the Fleet Engine or storage.
Trip tripA = ;
Trip tripB = ;

TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);

// The trip settings to update.
Trip trip = Trip.newBuilder()
    .setVehicleId(VEHICLE_ID)
    .addAllVehicleWaypoints(
        // This is where you define the arrival order for unvisited waypoints.
        // If you don't specify an order, then the Fleet Engine adds Trip B's
        // waypoints to the end of Trip A's.
        ImmutableList.of(
            // Trip B's pickup point.
            TripWaypoint.newBuilder()
                .setLocation(tripB.getPickupPoint())
                .setTripId(TRIP_B_ID)
                .setWaypointType(WaypointType.PICKUP_WAYPOINT_TYPE)
                .build(),
            // Trip A's drop-off point.
            TripWaypoint.newBuilder()
                .setLocation(tripA.getDropoffPoint())
                .setTripId(TRIP_A_ID)
                .setWaypointType(WaypointType.DROP_OFF_WAYPOINT_TYPE)
                .build(),
            // Trip B's drop-off point.
            TripWaypoint.newBuilder()
                .setLocation(tripB.getDropoffPoint())
                .setTripId(TRIP_B_ID)
                .setWaypointType(WaypointType.DROP_OFF_WAYPOINT_TYPE)
                .build()))
    .build();

// The trip update request.
UpdateTripRequest updateTripRequest = UpdateTripRequest.newBuilder()
    .setName(tripName)
    .setTrip(trip)
    .setUpdateMask(FieldMask.newBuilder()
        .addPaths("vehicle_id")
        .addPaths("vehicle_waypoints"))
    .build();

// Error handling. If Fleet Engine has both a trip and vehicle with the IDs,
// and if the credentials validate, and if the given vehicle_waypoints list
// is valid, 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:          // Either the trip or vehicle does not exist.
      break;
    case PERMISSION_DENIED:
      break;
    case INVALID_REQUEST:    // vehicle_waypoints is invalid.
      break;
  }
  return;
}

بعدش چی