Tạo chuyến đi gộp được chia sẻ

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 Nhóm Công cụ này, bạn đã tạo phương tiện, có một ứng dụng dành cho người lái xe hoạt động và ứng dụng người tiêu dùng (không bắt buộc). Chắc hẳn bạn cũng đã làm quen với nhiều chuyến đi các tình huống 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:

Thông tin 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 ở Fleet Engine. Bạn đưa ra yêu cầu tạo bằng gRPC và REST.

  • Phương thức CreateTrip(): gRPC hoặc REST
  • CreateTripRequest thông báo: chỉ dành cho gRPC

Trường chuyến đi

Sử dụng các trường sau để tạo một chuyến đi trong Fleet Engine. Bạn có thể sử dụng các trường cho các loại chuyến đi khác nhau: một điểm đến hoặc nhiều điểm đến, các chuyến đi gộp hoặc liên kết 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.

Trường chuyến đi
Tên Bắt buộc? Mô tả
cha mẹ Một chuỗi chứa mã dự án. Mã nhận dạng này phải giống với mã đã sử dụng trên toàn bộ quá trình tích hợp Fleet Engine, bằng cùng một tài khoản dịch vụ vai trò.
trip_id 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 Đặt TripType thành các giá trị sau cho loại chuyến đi mà bạn đang tạo:
  • Một đích đến: Đặt thành SHARED hoặc EXCLUSIVE.
  • Nhiều điểm đến: Đặt thành EXCLUSIVE.
  • Quay lại: Đặt thành EXCLUSIVE.
  • Gộp chung: Đặt thành SHARED.
pickup_point Điểm xuất phát của chuyến đi.
Đích đến trung gian

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 dropoff_point, trường này bạn cũng có thể thiết lập sau bằng cách gọi UpdateTrip, nhưng là một trang web có nhiều điểm đến chuyến đi theo định nghĩa chứa các đích đến trung gian.

vehicle_waypoints

Chỉ các chuyến đi chung: Trường này hỗ trợ việc xen kẽ các điểm tham chiếu từ 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ể thiết lập trường này bằng cách gọi CreateTrip hoặc UpdateTrip. Bạn cũng có thể cập nhật điểm tham chiếu của xe qua trường waypoints bằng gọi đến UpdateVehicle. Dịch vụ không trả về thông tin này trong các lệnh gọi GetTrip vì lý do liên quan đến quyền riêng tư.

number_of_passengers Không Số lượng hành khách trong 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ụ trợ sau đây minh hoạ cách tạo một chuyến đi và chỉ định chuyến đi này cho một chiếc xe làm chuyến đ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 Fleet Engine đều phải được chỉ định cho một chiếc xe để Fleet Engine để tính toán thời gian đến dự kiến của chuyến đi và theo dõi chuyến đi đó. Bạn có thể thực hiện việc này trong khi tạo chuyến đi hoặc để sau khi bạn 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 AChuyế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àngBỏ ngangB Giảm.

  • Gọi getVehicle() trả về remainingWaypoints có chứa:
    B Đến lấy hàngBỏ ngangB Giảm giá.
  • getTrip() hoặc Lệnh gọi lại onTripRemainingWaypointsUpdated cho Chuyến đi A trả về remainingWaypoints chứa:
    B Đến lấy hàngBỏ ngang.
  • getTrip() hoặc Lệnh gọi lại onTripRemainingWaypointsUpdated cho Chuyến đi B trả về remainingWaypoints có chứa:
    B Đến lấy hàngBỏ quaTương tác Bỏ ngang.

Ví dụ:

Mẫu tích hợp phụ trợ sau đây minh hoạ cách cập nhật một chuyến đi bằng mã xe và điểm tham chiếu 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;
}

Các bước tiếp theo