Tạo các chuyến đi liên tiếp

Tài liệu này mô tả cách tạo chuyến đi liên tiếp, đặt các trường chính xác và chỉ định chuyến đi đó cho một xe để thực hiện. Tài liệu này giả định rằng bạn đã thiết lập Công cụ quản lý hành trình và tuyến đường, đã tạo xe, có một ứng dụng hoạt động cho tài xế và có thể có một ứng dụng cho người tiêu dùng. Bạn cũng nên làm quen với nhiều tình huống chuyến đi 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 để biết thông tin về vấn đề đó:

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 trong 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
  • Thông báo CreateTripRequest: Chỉ 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 khác nhau cho các loại chuyến đi: một hoặc nhiều điểm đến, 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 có thể đặt các trường đó sau khi cập nhật chuyến đi.

Trường chuyến đi
Tên Bắt buộc? Mô tả
parent Có Một chuỗi chứa mã dự án. Mã nhận dạng này phải giống với mã nhận dạng được dùng trong toàn bộ quá trình tích hợp Fleet Engine, có cùng vai trò tài khoản dịch vụ.
trip_id Có Một chuỗi do bạn tạo để xác định riêng chuyến đi này. Mã chuyến đi có một số hạn chế nhất định, 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:
  • Một đích đến: Đặt thành SHARED hoặc EXCLUSIVE.
  • Nhiều đích đến: Đặt thành EXCLUSIVE.
  • Back-to-back (Liên tiếp): Đặt thành EXCLUSIVE.
  • Gộp chung bộ nhớ dùng chung: Đặt thành SHARED.
pickup_point Có Điểm xuất phát của chuyến đi.
Điểm dừng chân Có

Chỉ dành cho chuyến đi có nhiều điểm đến: Danh sách các điểm đến trung gian mà người lái xe ghé thăm giữa điểm đón và điểm trả khách. Tương tự như dropoff_point, bạn cũng có thể đặt trường này sau bằng cách gọi UpdateTrip, nhưng theo định nghĩa, chuyến đi có nhiều điểm đến sẽ có các điểm đến trung gian.

vehicle_waypoints Có

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

Phần sau đây minh hoạ cách tạo một chuyến đi liên tiếp và chỉ định chuyến đi đó cho một xe. Trong trường hợp này, quy trình tạo chuyến đi cũng giống như quy trình tạo chuyến đi có một điểm đến. Chỉ sau đó, bạn mới tạo một chuyến đi khác và chỉ định chuyến đi đó cho một xe đang có chuyến đi đang hoạt động.

// A vehicle with ID 'my-vehicle' is already created and it is assigned to a trip with ID 'current-trip'.

static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String VEHICLE_ID =" my-vehicle";
static final String TRIP_ID = "back-to-back-trip");

TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);

String parent = "providers/" + PROJECT_ID;

Trip trip = Trip.newBuilder()
    .setTripType(TripType.EXCLUSIVE)
    .setPickupPoint(
        TerminalLocation.newBuilder().setPoint(
            LatLng.newBuilder()
                .setLatitude(-6.195139).setLongitude(106.820826)))
    .setDropoffPoint(
        TerminalLocation.newBuilder().setPoint(
            LatLng.newBuilder()
                .setLatitude(-6.1275).setLongitude(106.6537)))
    .setVehicleId(VEHICLE_ID)
    .build();

// Create trip request
CreateTripRequest createTripRequest = CreateTripRequest.newBuilder()
    .setParent(parent)
    .setTripId(TRIP_ID)
    .setTrip(trip)
    .build();

// Error handling.
try {
  // Fleet Engine automatically assigns a 'waypoints' list to the trip containing
  // the vehicle's current trip waypoints.
  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 liên tiếp

Khi chỉ định một chiếc xe cho chuyến đi liên tiếp, bạn sẽ chỉ định một chuyến đi cho một chiếc xe ngay cả khi chiếc xe đó đã được chỉ định một chuyến đi.

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 có thể tính toán thời gian dự kiến đến (ETA) 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 quá trình tạo chuyến đi hoặc sau đó khi cập nhật chuyến đi.

Sau khi bạn chỉ định chuyến đi cho một xe, Fleet Engine sẽ tự động thêm các điểm tham chiếu liên kết với các chuyến đi liên tiếp vào trường điểm tham chiếu của xe. Trường remainingWaypoints của một chuyến đi chứa danh sách tất cả các điểm tham quan, bao gồm cả những điểm tham quan của các chuyến đi khác sẽ được ghé thăm trước khi chuyến đi này kết thúc.

Ví dụ: hãy xem xét 2 chuyến đi liên tiếp: Chuyến đi A và Chuyến đi B. Xe đã đón người tiêu dùng cho Chuyến đi A và trong khi đang trên đường đến vị trí trả khách, người lái xe nhận được yêu cầu đón một người tiêu dùng khác cho chuyến đi tiếp theo, Chuyến đi B.

  • Khi gọi getVehicle(), bạn sẽ nhận được remainingWaypoints chứa:
    A Drop-off → B Pickup → B Drop-off.
  • getTrip() hoặc lệnh gọi lại onTripRemainingWaypointsUpdated cho Chuyến đi A trả về remainingWaypoints chứa:
    Điểm trả khách.
  • getTrip() hoặc lệnh gọi lại onTripRemainingWaypointsUpdated cho Chuyến đi B trả về remainingWaypoints chứa:
    A Điểm trả khách → B Điểm đón khách → và B Điểm trả khách.

Bước tiếp theo