Tạo các chuyến đi nhiều điểm đến

Tài liệu này mô tả cách tạo một chuyến đi nhiều điểm đến, đặt đúng 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 chuyến đi nhiều điểm đến

Phần sau đây minh hoạ cách tạo một chuyến đi nhiều điểm đến độc quyền có một điểm nhận hàng, một điểm trả khách và một điểm đến trung gian.

static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_ID = "multi-destination-trip-A";

TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);

// Trip initial settings.
String parent = "providers/" + PROJECT_ID;

Trip trip = Trip.newBuilder()
    .setTripType(TripType.EXCLUSIVE)
    .setPickupPoint(
        TerminalLocation.newBuilder().setPoint(
            LatLng.newBuilder()
                .setLatitude(-6.195139).setLongitude(106.820826)))
    .setNumberOfPassengers(1)
    .setDropoffPoint(
        TerminalLocation.newBuilder().setPoint(
            LatLng.newBuilder()
                .setLatitude(-6.1275).setLongitude(106.6537)))
    // Add the list of intermediate destinations.
    .addAllIntermediateDestinations(
        ImmutableList.of(
            TerminalLocation.newBuilder().setPoint(
                LatLng.newBuilder()
                    .setLatitude(-6.195139).setLongitude(106.820826)).build()))
    .build();

// Create the Trip request.
CreateTripRequest createTripRequest = CreateTripRequest.newBuilder()
    .setParent(parent)
    .setTripId(TRIP_ID)  // Trip ID assigned by the Provider server.
    .setTrip(trip)       // Initial state is NEW.
    .build();

// Error handling.
try {
  Trip createdTrip =
      tripService.createTrip(createTripRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
    case ALREADY_EXISTS:  // Trip already exists.
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}

Cập nhật chuyến đi nhiều điểm đến

Bạn phải thiết lập chuyến đi bằng mã xe để Fleet Engine có thể theo dõi chiếc xe dọc theo tuyến đường của nó. Để biết chi tiết về cách cập nhật chuyến đi, hãy xem Cập nhật chuyến đi và quản lý trạng thái chuyến đi.

Nếu bạn không chỉ định điểm đến trả khách hoặc đích trung gian khi bạn tạo chuyến đi, bạn luôn có thể làm việc đó vào thời điểm này.

Ví dụ về thông tin cập nhật chuyến đi

Sau đây là ví dụ minh hoạ cách cập nhật một chuyến đi để thêm danh sách các giá trị trung gian điểm đến và đặt mã xe.

static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_ID = "multi-destination-trip-A";

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

TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);

// The trip settings to be updated.
Trip trip = Trip.newBuilder()
    // Add the list of intermediate destinations.
    .addAllIntermediateDestinations(
        ImmutableList.of(
            TerminalLocation.newBuilder().setPoint(
                LatLng.newBuilder()
                    .setLatitude(-6.195139).setLongitude(106.820826)).build()))
    .setVehicleId("8241890")
    .build();

// The trip update request.
UpdateTripRequest updateTripRequest = UpdateTripRequest.newBuilder()
    .setName(tripName)
    .setTrip(trip)
    .setUpdateMask(
        FieldMask.newBuilder()
            .addPaths("intermediate_destinations")
            .addPaths("vehicle_id")
            .build())
    .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 PERMISSION_DENIED:
      break;
  }
  return;
}

Quản lý trạng thái chuyến đi cho các chuyến đi nhiều điểm đến

Bạn chỉ định trạng thái của một chuyến đi bằng một trong các giá trị liệt kê TripStatus giá trị. Khi trạng thái của chuyến đi thay đổi, ví dụ như từ ENROUTE_TO_PICKUP thành ARRIVED_AT_PICKUP thân mến, bạn phải cập nhật trạng thái chuyến đi trong Fleet Engine. Chuyến đi trạng thái luôn bắt đầu bằng giá trị NEW và kết thúc bằng giá trị COMPLETE hoặc CANCELED.

Đối với chuyến đi nhiều điểm đến, ngoài việc cập nhật trạng thái chuyến đi khi bạn đối với một chuyến đi đến một điểm đến, bạn cũng phải cập nhật các thông tin sau: mỗi khi xe của bạn đến một điểm đến trung gian:

  • intermediateDestinationIndex
  • intermediateDestinationsVersion

Để thực hiện việc này, hãy sử dụng các giá trị sau đây trong bản liệt kê TripStatus.

  • ENROUTE_TO_PICKUP
  • ARRIVED_AT_PICKUP
  • ENROUTE_TO_INTERMEDIATE_DESTINATION
  • ARRIVED_AT_INTERMEDIATE_DESTINATION
  • ENROUTE_TO_DROPOFF
  • COMPLETE

Chuyến đi mẫu có điểm đến trung gian

Sau đây là cách tạo một chuyến đi nhiều điểm đến đã vượt qua điểm đón và hiện đang trên đường đến điểm đến trung gian đầu tiên.

static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_ID = "multi-destination-trip-A";

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

// Get the trip object from either the Fleet Engine or storage.
Trip trip = …;

TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);

// The trip settings to be updated.
Trip trip = Trip.newBuilder()
    // Trip status cannot return to a previous state once it has passed.
    .setTripStatus(TripStatus.ENROUTE_TO_INTERMEDIATE_DESTINATION)

    // Enroute to the first intermediate destination.
    .setIntermediateDestinationIndex(0)

    // You must provide an intermediate_destinations_version to ensure that you
    // have the same intermediate destinations list as the Fleet Engine.
    .setIntermediateDestinationsVersion(
         trip.getIntermediateDestinationsVersion())
    .build();

// The trip update request.
UpdateTripRequest updateTripRequest = UpdateTripRequest.newBuilder()
    .setName(tripName)
    .setTrip(trip)
    .setUpdateMask(
        FieldMask.newBuilder()
            .addPaths("trip_status")
            .addPaths("intermediate_destination_index")
            // intermediate_destinations_version must not be in the update mask.
            .build())
    .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:  // Either the trip status is invalid, or the
                               // intermediate_destinations_version doesn't
                               // match Fleet Engine's.
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}

Các bước tiếp theo