این سند نحوه ایجاد یک سفر ادغام مشترک، تنظیم فیلدهای صحیح و اختصاص آن به وسیله نقلیه برای انجام را شرح می دهد. فرض میکند که Fleet Engine را راهاندازی کردهاید، وسایل نقلیه ایجاد کردهاید، یک برنامه راننده فعال و در صورت تمایل، یک برنامه مصرفکننده دارید. همچنین باید با سناریوهای مختلف سفر در دسترس برای سفرهای درخواستی آشنا باشید. برای آن به راهنمای مرتبط زیر مراجعه کنید:
- Fleet Engine را راه اندازی کنید
- وسیله نقلیه ایجاد کنید
- سناریوهای سفر در نمای کلی سفرهای درخواستی
اصول ایجاد سفر
این بخش جزئیات درخواست لازم برای ایجاد یک سفر در Fleet Engine را شرح می دهد. شما یک درخواست ایجاد را با استفاده از gRPC و REST صادر می کنید.
فیلدهای سفر
برای ایجاد سفر در Fleet Engine از فیلدهای زیر استفاده کنید. میتوانید از زمینههای مختلف برای انواع مختلف سفر استفاده کنید: سفرهای تک یا چند مقصد، پشت سر هم یا سفرهای مشترک. میتوانید فیلدهای اختیاری را هنگام ایجاد سفر تهیه کنید، یا میتوانید بعداً هنگام بهروزرسانی سفر، آنها را تنظیم کنید.
نام | مورد نیاز؟ | توضیحات |
---|---|---|
پدر و مادر | بله | رشته ای که شامل شناسه پروژه است. این شناسه باید همان شناسه ای باشد که در کل ادغام Fleet Engine شما استفاده می شود، با همان نقش های حساب سرویس. |
trip_id | بله | رشته ای که ایجاد می کنید و به طور منحصر به فردی این سفر را مشخص می کند. شناسه های سفر دارای محدودیت های خاصی هستند، همانطور که در مرجع ذکر شده است. |
trip_type | بله | برای نوع سفری که ایجاد می کنید، TripType را روی مقادیر زیر تنظیم کنید:
|
نقطه_انتقال | بله | نقطه مبدا سفر |
مقاصد میانی | بله | فقط سفرهای چند مقصدی : لیستی از مقاصد میانی که راننده در فاصله بین تحویل و تحویل از آنها بازدید می کند. مانند |
وسایل نقلیه_ایستگاه های راه | بله | فقط سفرهای ادغام مشترک : این فیلد از در هم نشینی نقاط بین سفرهای متعدد پشتیبانی می کند. این شامل تمام ایستگاه های بین راهی برای وسیله نقلیه تعیین شده، و همچنین ایستگاه های حمل و نقل و تحویل برای این سفر است. می توانید این فیلد را با فراخوانی |
تعداد_مسافران | خیر | تعداد مسافران در سفر. |
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 Pickup → A Drop-off → B Drop-off .
- فراخوانی
getVehicle()
remainingWaypoints
برمی گرداند که حاوی:
B تحویل → A Drop-off → B Drop-off . - یا
getTrip()
یاonTripRemainingWaypointsUpdated
برای Trip AremainingWaypoints
برمی گرداند که حاوی:
B وانت → A Drop-off . - یا
getTrip()
یاonTripRemainingWaypointsUpdated
برای Trip BremainingWaypoints
برمی گرداند که حاوی:
B تحویل → A Drop-off → B 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;
}