Cập nhật các chuyến đi và quản lý trạng thái của chuyến đi

Tài liệu này mô tả cách cập nhật một chuyến đi và quản lý trạng thái của chuyến đi, bao gồm việc sử dụng mặt nạ trường để đặt các trường có liên quan cho chuyến đi. Giả định rằng bạn đã thiết lập Fleet Engine như mô tả trên trang web này và đang làm việc với một xe được chỉ định cho một chuyến đi.

Thông tin cơ bản về thông tin cập nhật chuyến đi

Hệ thống của bạn sử dụng Fleet Engine để cập nhật chuyến đi trong các trường hợp sau:

  • Khi chỉ định một chiếc xe cho một chuyến đi sau khi tạo.
  • Khi trạng thái của chuyến đi thay đổi; ví dụ: khi xe đi qua thông qua các điểm tham chiếu.
  • Khi bạn cập nhật các trường về chuyến đi, chẳng hạn như số lượng hành khách và điểm dừng.

Để cập nhật chuyến đi, hãy gửi yêu cầu bằng gRPC và REST.

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

Sử dụng thông tin đăng nhập phù hợp cho tài khoản dịch vụ của dự án của bạn làm như được mô tả trong phần Fleet Engine: Vai trò trong tài khoản dịch vụ.

Cập nhật các trường chuyến đi

Bạn có thể cập nhật bất kỳ trường chuyến đi nào như đã mô tả trong mục Các trường về chuyến đi trong mục Tạo một chuyến đi đến điểm đến duy nhất. Ví dụ: sau khi bạn tạo một chuyến đi, đây là trước tiên hãy thực hành để tìm một chiếc xe, sau đó cập nhật trường chuyến đi vehicle_id thành liên kết thẻ đó với xe sẽ thực hiện chuyến đi.

Sử dụng mặt nạ trường

Mặt nạ trường là cách để phương thức gọi API liệt kê các trường mà yêu cầu hoặc cập nhật. Sử dụng FieldMask tránh các công việc không cần thiết và cải thiện hiệu suất. Fleet Engine sử dụng mặt nạ hiện trường để cập nhật các trường trên tất cả các tài nguyên.

Hãy cập nhật chuyến đi bằng mã xe

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ó. Mã mẫu sau đây minh hoạ cách hãy cập nhật chuyến đi bằng mã xe.

static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_ID = "trip-8241890";

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

TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);

// The trip settings to update.
Trip trip = Trip.newBuilder()
    .setVehicleId("8241890")
    .build();

// The trip update request.
UpdateTripRequest updateTripRequest =
    UpdateTripRequest.newBuilder()      // No need for the header.
        .setName(tripName)
        .setTrip(trip)
        .setUpdateMask(FieldMask.newBuilder().addPaths("vehicle_id"))
        .build();

// Error handling.
// If the Fleet Engine has both a trip and vehicle with IDs, and if the
// credentials validate, 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:                    // Neither the trip nor vehicle exist.
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}

Quản lý trạng thái chuyến đi cho các chuyến đi

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 một chuyến đi thay đổi; ví dụ: từ ENROUTE_TO_PICKUP đến ARRIVED_AT_PICKUP, bạn cập nhật trạng thái chuyến đi trong Fleet Engine. Chuyến đi vòng đời luôn bắt đầu bằng giá trị trạng thái là NEW và kết thúc bằng giá trị COMPLETE hoặc CANCELED.

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

Nội dung sau đây minh hoạ cách cập nhật trạng thái chuyến đi cho thao tác quay lại trong Fleet Engine.

static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_ID = "trip-8241890";

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

TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);

// Trip settings to be updated.
Trip trip = Trip.newBuilder()
    .setTripStatus(TripStatus.ARRIVED_AT_PICKUP)
    .build();

// Trip update request
UpdateTripRequest updateTripRequest = UpdateTripRequest.newBuilder()
    .setName(tripName)
    .setTrip(trip)
    .setUpdateMask(FieldMask.newBuilder().addPaths("trip_status"))
    .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:  // The given trip status is invalid.
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}

Bạn có thể xem các ví dụ khác về cách cập nhật chuyến đi trong phần Các loại chuyến đi khác .

Xử lý lỗi về chuyến đi

Khi cập nhật hoặc tìm chuyến đi hiện có, bạn có thể gặp trường hợp DEADLINE_EXCEEDED, trong trường hợp đó không xác định được trạng thái của Fleet Engine. Để điều tra vấn đề này, trước tiên hãy gọi lại cho CreateTrip bằng mã chuyến đi mà bạn đã đặt đang cố cập nhật hoặc theo dõi. Thao tác này sẽ trả về mã lỗi 201 (CREATED) hoặc 409 (Xung đột). Trong trường hợp sau, yêu cầu trước đó đã thành công trước đó DEADLINE_EXCEEDED.

Xem danh sách lỗi mạng trong SDK người tiêu dùng, dành cho Android hoặc iOS.

Các bước tiếp theo