Cập nhật trạng thái dừng

Tài liệu này giả định rằng bạn đã nắm rõ những nội dung sau:

Như đã nêu trong phần Việc cần làm đã lên lịch trong phần Fleet Engine Essentials, bạn tạo nhiệm vụ và liên kết chúng với một chiếc xe như một cách để mô hình hoá mối liên hệ thực tế giữa nhiệm vụ và vị trí nơi xe dự kiến sẽ dừng để người lái xe có thể hoàn tất quy trình việc cần làm.

Từ đó, bạn có thể quản lý tiến trình của các tác vụ trong suốt vòng đời của chúng bằng cách gửi các bản cập nhật đến Fleet Engine để có thể thực hiện việc định tuyến và trạng thái tốt nhất cập nhật trong suốt hành trình tác vụ. Một cách quan trọng để làm việc này là cập nhật xe dừng khi xe đến gần, đến và rời khỏi điểm dừng đó. Điều này cho phép báo cáo và phân tích về tiến độ tác vụ cho cả Người vận hành hệ thống thiết bị và người dùng cuối. Những nội dung cập nhật trạng thái này như sau:

  • En Route (Đường đi): Enum STATE của VehicleStop sử dụng ENROUTE để cho biết điểm dừng tiếp theo trong danh sách hành trình của xe. Từ góc độ của nhiệm vụ, nó có nghĩa là bất kỳ nhiệm vụ nào liên kết với điểm dừng tiếp theo trong danh sách cần hoàn thành.
  • Đã đến: Enum STATE của VehicleStop sử dụng ARRIVED để cho biết rằng xe đã đến điểm dừng. Từ góc độ của nhiệm vụ, điều đó có nghĩa là bất kỳ tác vụ nào liên quan đến điểm ngừng đang được thực hiện.
  • Đã hoàn thành: Bạn đánh dấu một điểm dừng là hoàn thành bằng cách xóa điểm dừng đó khỏi danh sách điểm dừng cho xe. Khi bạn làm như vậy, Fleet Engine sẽ tự động đánh dấu tất cả tác vụ được liên kết là ĐÃ ĐÓNG CỬA. Để biết thêm thông tin chi tiết về cách đóng tác vụ, hãy xem Hoàn tất việc cần làm.

Tài liệu này mô tả cách trạng thái ngừng cập nhật theo phương pháp phía máy chủ. Bạn cũng có thể thực hiện việc này từ ứng dụng trình điều khiển nếu bạn cho phép người lái xe quản lý công việc bằng thiết bị tin cậy. Chỉ dùng một phương thức để tránh chủng tộc và duy trì một nguồn đáng tin cậy duy nhất.

Xe đang trên đường để dừng lại

Hệ thống của bạn phải thông báo cho Fleet Engine khi xe bắt đầu chuyển hướng đến điểm dừng tiếp theo. Việc này giúp cải thiện kết quả tính toán giờ đến dự kiến và tuyến đường.

Các trường bắt buộc để cập nhật điểm dừng

Fleet Engine bỏ qua tất cả các trường khác trong thực thể dành cho thông báo.

TrườngGiá trị
remainingVehicleJourneySegments Danh sách các điểm dừng xe còn lại, trong đó các tiểu bang được đánh dấu là State.NEW.

Ví dụ về đang lên đường để dừng

Các ví dụ sau đây minh hoạ cách thông báo cho Fleet Engine rằng một chiếc xe đang chuyển đến điểm dừng tiếp theo, sử dụng thư viện Java gRPC hoặc HTTP Lệnh gọi REST đến UpdateDeliveryVehicle.Tất cả các điểm dừng khác được đánh dấu là mới.

gRPC

 static final String PROJECT_ID = "my-delivery-co-gcp-project";
 static final String VEHICLE_ID = "vehicle-8241890";

 DeliveryServiceBlockingStub deliveryService =
   DeliveryServiceGrpc.newBlockingStub(channel);

 // Vehicle settings
 DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
     // Next stop marked as ENROUTE
     .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 1st stop
        .setStop(VehicleStop.newBuilder()
            .setPlannedLocation(LocationInfo.newBuilder()
                .setPoint(LatLng.newBuilder()
                    .setLatitude(37.7749)
                    .setLongitude(122.4194)))
            .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
            .setState(VehicleStop.State.ENROUTE)))
     // All other stops marked as NEW
     .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 2nd stop
        .setStop(VehicleStop.newBuilder()
            .setPlannedLocation(LocationInfo.newBuilder()
                .setPoint(LatLng.newBuilder()
                    .setLatitude(37.3382)
                    .setLongitude(121.8863)))
            .addTasks(TaskInfo.newBuilder().setTaskId(TASK2_ID))
            .setState(VehicleStop.State.NEW)))
     .build();

 // DeliveryVehicle request
 UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
   UpdateDeliveryVehicleRequest.newBuilder()  // No need for the header
       .setName(vehicleName)
       .setDeliveryVehicle(deliveryVehicle)
       .setUpdateMask(FieldMask.newBuilder().addPaths("remaining_vehicle_journey_segments"))
       .build();

 try {
   DeliveryVehicle updatedDeliveryVehicle =
       deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
 } catch (StatusRuntimeException e) {
   Status s = e.getStatus();
   switch (s.getCode()) {
      case NOT_FOUND:
        break;
      case PERMISSION_DENIED:
        break;
   }
   return;
 }

Kiến trúc chuyển trạng thái đại diện (REST)

PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments`
  • &lt;id&gt; là giá trị nhận dạng duy nhất của tác vụ.
  • Tiêu đề yêu cầu phải chứa một trường Uỷ quyền có giá trị Mã <token>, trong đó <token> do máy chủ của bạn cấp theo nguyên tắc nêu trong phần Vai trò trong tài khoản dịch vụMã thông báo web JSON.
  • Phần nội dung yêu cầu phải chứa thực thể DeliveryVehicle:

Ví dụ về lệnh curl:

 # Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
 # environment
 curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
   -H "Content-type: application/json" \
   -H "Authorization: Bearer ${JWT}" \
   --data-binary @- << EOM
 {
   "remainingVehicleJourneySegments": [
     {
       "stop": {
         "state": "ENROUTE",
         "plannedLocation": {
           "point": {
             "latitude": 37.7749,
             "longitude": -122.084061
           }
         },
         "tasks": [
           {
             "taskId": "${TASK1_ID}"
           }
         ]
       }
     },
     {
       "stop": {
         "state": "NEW",
         "plannedLocation": {
           "point": {
             "latitude": 37.3382,
             "longitude": 121.8863
           }
         },
         "tasks": [
           {
             "taskId": "${TASK2_ID}"
           }
         ]
       }
     }
   ]
 }
 EOM

Xe đã dừng tại điểm dừng

Fleet Engine phải được thông báo khi xe đến điểm dừng.

Các trường bắt buộc để cập nhật điểm dừng

Fleet Engine bỏ qua tất cả các trường khác trong thực thể dành cho thông báo.

TrườngGiá trị
remainingVehicleJourneySegments Danh sách các điểm dừng xe còn lại, trong đó các tiểu bang được đánh dấu là State.NEW.

Ví dụ về điểm dừng

Các ví dụ sau đây minh hoạ cách thông báo cho Fleet Engine rằng có xe đã đến ở điểm dừng, sử dụng thư viện Java gRPC hoặc lệnh gọi HTTP REST để UpdateDeliveryVehicle. Tất cả các trạm dừng khác đều được đánh dấu là mới.

gRPC

  static final String PROJECT_ID = "my-delivery-co-gcp-project";
  static final String VEHICLE_ID = "vehicle-8241890";

  DeliveryServiceBlockingStub deliveryService =
    DeliveryServiceGrpc.newBlockingStub(channel);

  // Vehicle settings
  String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
  DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
      // Marking the arrival at stop.
      .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()
         .setStop(VehicleStop.newBuilder()
             .setPlannedLocation(LocationInfo.newBuilder()
                 .setPoint(LatLng.newBuilder()
                     .setLatitude(37.7749)
                     .setLongitude(122.4194)))
             .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
             .setState(VehicleStop.State.ARRIVED)))
      // All other remaining stops marked as NEW.
      .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 2nd stop
         .setStop(VehicleStop.newBuilder()
             .setPlannedLocation(LocationInfo.newBuilder()
                 .setPoint(LatLng.newBuilder()
                     .setLatitude(37.3382)
                     .setLongitude(121.8863)))
             .addTasks(TaskInfo.newBuilder().setTaskId(TASK2_ID))
             .setState(VehicleStop.State.NEW))) // Remaining stops must be NEW.
      .build();

  // DeliveryVehicle request
  UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
    UpdateDeliveryVehicleRequest.newBuilder()  // No need for the header
        .setName(vehicleName)
        .setDeliveryVehicle(deliveryVehicle)
        .setUpdateMask(FieldMask.newBuilder()
            .addPaths("remaining_vehicle_journey_segments"))
        .build();

  try {
    DeliveryVehicle updatedDeliveryVehicle =
        deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
  } catch (StatusRuntimeException e) {
    Status s = e.getStatus();
    switch (s.getCode()) {
       case NOT_FOUND:
         break;
       case PERMISSION_DENIED:
         break;
    }
    return;
  }

Kiến trúc chuyển trạng thái đại diện (REST)

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments`
  • &lt;id&gt; là giá trị nhận dạng duy nhất của tác vụ.
  • Tiêu đề yêu cầu phải chứa một trường Uỷ quyền có giá trị Mã <token>, trong đó <token> do máy chủ của bạn cấp theo nguyên tắc nêu trong phần Vai trò trong tài khoản dịch vụMã thông báo web JSON.
  • Phần nội dung yêu cầu phải chứa thực thể DeliveryVehicle:

Ví dụ về lệnh curl:

  # Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
  # environment
  curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
    -H "Content-type: application/json" \
    -H "Authorization: Bearer ${JWT}" \
    --data-binary @- << EOM
  {
    "remainingVehicleJourneySegments": [
      {
        "stop": {
          "state": "ARRIVED",
          "plannedLocation": {
            "point": {
              "latitude": 37.7749,
              "longitude": -122.084061
            }
          },
          "tasks": [
            {
              "taskId": "${TASK1_ID}"
            }
          ]
        }
      },
      {
        "stop": {
          "state": "NEW",
          "plannedLocation": {
            "point": {
              "latitude": 37.3382,
              "longitude": 121.8863
            }
          },
          "tasks": [
            {
              "taskId": "${TASK2_ID}"
            }
          ]
        }
      }
    ]
  }
  EOM

Xe hoàn tất một điểm dừng

Fleet Engine phải được thông báo khi xe dừng lại xong. Điều này khiến tất cả công việc liên kết với điểm dừng sẽ được đặt thành trạng thái ĐÃ ĐÓNG CỬA.

Các trường bắt buộc để cập nhật điểm dừng

Fleet Engine bỏ qua tất cả các trường khác trong thực thể dành cho thông báo.

TrườngGiá trị
remainingVehicleJourneySegments Danh sách các trạm dừng xe còn lại, trong đó các tiểu bang được đánh dấu là State.NEW. Điểm dừng đầu tiên trong danh sách phải có trạng thái được đánh dấu là State.ENROUTE.

Hoàn thành một ví dụ về điểm dừng

Các ví dụ sau đây minh hoạ cách thông báo cho Fleet Engine rằng có xe đã đến ở điểm dừng, sử dụng thư viện Java gRPC hoặc lệnh gọi HTTP REST để UpdateDeliveryVehicle. Tất cả các trạm dừng khác đều được đánh dấu là mới.

gRPC

  static final String PROJECT_ID = "my-delivery-co-gcp-project";
  static final String VEHICLE_ID = "vehicle-8241890";

  DeliveryServiceBlockingStub deliveryService =
    DeliveryServiceGrpc.newBlockingStub(channel);

  // Vehicle settings
  String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
  DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
      // This stop has been completed and is commented out to indicate it
      // should be removed from the list of vehicle journey segments.
      // .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()
      //    .setStop(VehicleStop.newBuilder()
      //        .setPlannedLocation(LocationInfo.newBuilder()
      //            .setPoint(LatLng.newBuilder()
      //                .setLatitude(37.7749)
      //                .setLongitude(122.4194)))
      //        .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
      //        .setState(VehicleStop.State.ARRIVED)))
      // All other remaining stops marked as NEW.
      // The next stop could be marked as ENROUTE if the vehicle has begun
      // its journey to the next stop.
      .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // Next stop
         .setStop(VehicleStop.newBuilder()
             .setPlannedLocation(LocationInfo.newBuilder()
                 .setPoint(LatLng.newBuilder()
                     .setLatitude(37.3382)
                     .setLongitude(121.8863)))
             .addTasks(TaskInfo.newBuilder().setTaskId(TASK2_ID))
             .setState(VehicleStop.State.NEW)))
      .build();

  // DeliveryVehicle request
  UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
    UpdateDeliveryVehicleRequest.newBuilder()  // no need for the header
        .setName(vehicleName)
        .setDeliveryVehicle(deliveryVehicle)
        .setUpdateMask(FieldMask.newBuilder()
            .addPaths("remaining_vehicle_journey_segments"))
        .build();

  try {
    DeliveryVehicle updatedDeliveryVehicle =
        deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
  } catch (StatusRuntimeException e) {
    Status s = e.getStatus();
    switch (s.getCode()) {
       case NOT_FOUND:
         break;
       case PERMISSION_DENIED:
         break;
    }
    return;
  }

Kiến trúc chuyển trạng thái đại diện (REST)

PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remaining_vehicle_journey_segments`
  • &lt;id&gt; là giá trị nhận dạng duy nhất của tác vụ.
  • Tiêu đề yêu cầu phải chứa một trường Uỷ quyền có giá trị Mã <token>, trong đó <token> do máy chủ của bạn cấp theo nguyên tắc nêu trong phần Vai trò trong tài khoản dịch vụMã thông báo web JSON.
  • Phần nội dung yêu cầu phải chứa thực thể DeliveryVehicle:

Ví dụ về lệnh curl:

 # Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
 # environment
 curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
   -H "Content-type: application/json" \
   -H "Authorization: Bearer ${JWT}" \
   --data-binary @- << EOM
 {
   "remainingVehicleJourneySegments": [
     {
       "stop": {
         "state": "NEW",
         "plannedLocation": {
           "point": {
             "latitude": 37.3382,
             "longitude": 121.8863
           }
         },
         "tasks": [
           {
             "taskId": "${TASK2_ID}"
           }
         ]
       }
     }
   ]
 }
 EOM

Các bước tiếp theo