Tài liệu này mô tả cách tạo chuyến đi gộp chung, đặt giá trị phù hợp và chỉ định nó cho một chiếc xe để thực hiện. Giả sử bạn đã thiết lập Công cụ của đội xe, đã tạo xe, có ứng dụng trình điều khiển đang hoạt động và có thể có ứng dụng người dùng. Bạn cũng phải nắm rõ các tình huống chuyến đi khác nhau có sẵn cho các chuyến đi theo yêu cầu. Hãy xem các hướng dẫn liên quan sau đây để rằng:
- Thiết lập Fleet Engine
- Tạo xe
- Tình huống chuyến đi trong phần tổng quan về Chuyến đi theo yêu cầu
Kiến thức cơ bản về cách tạo chuyến đi
Phần này mô tả thông tin chi tiết về yêu cầu cần thiết để tạo chuyến đi trong Công cụ quản lý đội xe. Bạn đưa ra yêu cầu tạo bằng gRPC và REST.
Trường chuyến đi
Sử dụng các trường sau để tạo một chuyến đi trong Công cụ quản lý đội xe. Bạn có thể sử dụng các trường khác nhau cho các loại chuyến đi: một hoặc nhiều điểm đến, chuyến đi liên tiếp hoặc chuyến đi chung. Bạn có thể cung cấp các trường tuỳ chọn khi tạo chuyến đi, hoặc bạn có thể đặt các trường đó khi bạn cập nhật chuyến đi.
Tên | Bắt buộc? | Mô tả |
---|---|---|
parent | Có | Một chuỗi chứa mã dự án. Mã này phải giống với mã được sử dụng trong toàn bộ quá trình tích hợp với Công cụ quản lý đội xe, với cùng vai trò tài khoản dịch vụ. |
trip_id | Có | Một chuỗi bạn tạo để nhận dạng duy nhất chuyến đi này. Mã chuyến đi có như được nêu trong tài liệu tham khảo. |
trip_type | Có | Đặt TripType thành các giá trị sau cho loại chuyến đi mà bạn đang tạo:
|
pickup_point | Có | Điểm xuất phát của chuyến đi. |
Đích đến trung gian | Có | Chỉ các chuyến đi nhiều điểm đến: Danh sách các điểm đến trung gian mà tài xế ghé thăm
đến lấy hàng và trả xe. Tương tự như với |
vehicle_waypoints | Có | Chỉ dành cho các chuyến đi chung: Trường này hỗ trợ xen kẽ các điểm trung gian của nhiều chuyến đi.
Địa điểm này cũng chứa tất cả các điểm tham chiếu còn lại của xe được chỉ định,
làm điểm đón và trả khách cho chuyến đi này. Bạn có thể đặt trường này bằng cách gọi |
number_of_passengers | Không | Số lượng hành khách trên chuyến đi. |
dropoff_point | Không | Điểm đến của chuyến đi. |
vehicle_id | Không | Mã của xe được chỉ định cho chuyến đi. |
Ví dụ: tạo một chuyến đi tập hợp chung
Mẫu tích hợp phần phụ trợ sau đây minh hoạ cách tạo một chuyến đi và chỉ định chuyến đi đó cho một xe dưới dạng chuyến đi đi chung.
// 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;
}
Cập nhật các chuyến đi gộp nhóm dùng chung
Mọi chuyến đi được tạo trong Công cụ quản lý đội xe đều phải được chỉ định cho một xe để Công cụ quản lý đội xe có thể tính toán và theo dõi thời gian đến dự kiến của chuyến đi. Bạn có thể thực hiện việc này trong quá trình tạo chuyến đi hoặc sau đó khi cập nhật chuyến đi.
Đối với các chuyến đi gộp nhóm dùng chung, bạn phải chỉ định thứ tự cho các điểm tham chiếu chưa được ghé thăm
trong tập hợp các điểm tham chiếu xe của chuyến đi (Trip.vehicle_waypoints
). Đội phương tiện vận chuyển
Công cụ dùng danh sách này để tự động cập nhật điểm tham chiếu chuyến đi cho tất cả chuyến đi
trong nhóm dùng chung.
Ví dụ: hãy xem xét hai chuyến đi chung, Chuyến đi A và Chuyến đi B:
- Chuyến đi A đang trên đường đến địa điểm trả khách.
- Sau đó, Chuyến đi B sẽ được thêm vào cùng một xe.
Trong một UpdateTripRequest
cho Chuyến đi B,
bạn đặt vehicleId
, đồng thời đặt Trip.vehicle_waypoints
thành giá trị tối ưu
thứ tự điểm tham chiếu: B Đến lấy hàng
→ Bỏ ngang →
B Giảm.
- Việc gọi
getVehicle()
sẽ trả vềremainingWaypoints
chứa:
B Pickup (B Đưa đón) → A Drop-off (A Đưa đón) → B Drop-off (B Đưa đón). getTrip()
hoặc Lệnh gọi lạionTripRemainingWaypointsUpdated
cho Chuyến đi A trả vềremainingWaypoints
chứa:
B Đến lấy hàng → Bỏ ngang.getTrip()
hoặc lệnh gọi lạionTripRemainingWaypointsUpdated
cho Chuyến đi B sẽ trả vềremainingWaypoints
chứa:
B Pickup (B Điểm đón) → A Drop-off (A Điểm trả khách) → B Drop-off (B Điểm trả khách).
Ví dụ:
Mẫu tích hợp phần phụ trợ sau đây minh hoạ cách cập nhật một chuyến đi bằng mã nhận dạng xe và các điểm trung gian cho hai chuyến đi chung.
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;
}