중지 상태 업데이트

이 문서에서는 다음 사항에 대해 잘 알고 있다고 가정합니다.

예약된 작업 Fleet Engine Essentials: 작업을 만들고 차량과 연결합니다. 작업의 상태와 작업 사이의 실제 연관성을 모델링하는 방법으로 운전자가 운전을 완료할 수 있도록 차량이 멈출 것으로 예상되는 위치 작업을 수행합니다

거기에서 컨테이너 이미지를 사용하여 라우팅 및 상태를 가장 잘 수행할 수 있도록 Fleet Engine에 업데이트 전송 업데이트 사항을 고려해야 합니다 이를 위한 중요한 방법 중 하나는 차량이 정류장에 접근하여 정류장에 도착하거나 정류장에 도착할 때 정차합니다. 이를 통해 두 팀 모두의 작업 진행 상황을 보고하고 분석할 수 있습니다. Fleet 운영자 및 최종 사용자 이러한 상태 업데이트는 다음과 같습니다.

  • 경로: VehicleStopSTATE enum은 ENROUTE를 사용하여 다음을 수행합니다. 정류장이 차량 여정 목록에서 다음 옆에 있음을 나타냅니다. 작업의 관점에서 보면 이는 정류장과 관련된 모든 작업을 의미합니다. 완료되어야 합니다.
  • 도착: VehicleStopSTATE enum은 ARRIVED를 사용하여 표시합니다. 차량이 정류장에 도착했음을 나타냅니다. 작업의 관점에서는 즉, 중지와 관련된 모든 작업이 적극적으로 작업 중이라는 것을 의미합니다.
  • 완료됨: 경유지 목록에서 제거된 경유지를 삭제하여 완료로 표시합니다. 정류장이 있습니다 이렇게 하면 Fleet Engine에서 자동으로 모든 관련 작업을 CLOSED로 처리합니다. 작업 닫기에 대한 자세한 내용은 다음을 참조하세요. 작업 마무리.

이 문서에서는 서버 측 접근 방식을 사용한 업데이트 중지 상태를 설명합니다. 나 운전자에게 '내 연결'을 요청하는 기능을 제공하면 신뢰할 수 있는 기기로 작업 관리 하나의 방법만 사용하여 경합 방지 단일 정보 소스를 유지할 수 있다는 장점이 있습니다

차량이 정차하는 중입니다

차량이 다음 정류장입니다. 이를 통해 도착예정시간과 경로 계산이 개선됩니다.

정류장 업데이트의 필수 필드

Fleet Engine은 알림 항목의 다른 모든 필드를 무시합니다.

필드
remainingVehicleJourneySegments 상태가 State.NEW로 표시된 나머지 차량 정류장 목록입니다.

중지 경로 예

다음 예는 차량이 차량에 있음을 Fleet Engine에 알리는 방법을 보여줍니다. Java gRPC 라이브러리 또는 HTTP(S)를 사용하여 다음 정거장으로 이동 중 UpdateDeliveryVehicle에 대한 REST 호출.다른 모든 정류장은 신규로 표시됩니다.

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;
 }

REST

PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments`
  • &lt;id&gt;는 작업의 고유 식별자입니다.
  • 요청 헤더에는 값이 있는 Authorization 필드가 포함되어야 합니다. Bearer <token>, 여기서 <token>은 서버에서 발급됨 서비스 계정 역할에 설명된 가이드라인을 준수하고 JSON 웹 토큰.
  • 요청 본문에는 DeliveryVehicle 항목이 포함되어야 합니다.

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

차량이 정류장에 도착함

차량이 정류장에 도착하면 Fleet Engine에 알려야 합니다.

정류장 업데이트의 필수 필드

Fleet Engine은 알림 항목의 다른 모든 필드를 무시합니다.

필드
remainingVehicleJourneySegments 상태가 State.NEW로 표시된 나머지 차량 정류장 목록입니다.

정류장 도착 예

다음 예시는 차량이 도착했음을 Fleet Engine에 알리는 방법을 보여줍니다. Java gRPC 라이브러리를 사용하거나 UpdateDeliveryVehicle입니다. 다른 모든 경유지는 새 정류장으로 표시됩니다.

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;
  }

REST

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments`
  • &lt;id&gt;는 작업의 고유 식별자입니다.
  • 요청 헤더에는 값이 있는 Authorization 필드가 있어야 합니다. Bearer <token> - 서버에서 <token>을 가져옴 서비스 계정 역할JSON 웹 토큰.
  • 요청 본문에는 DeliveryVehicle 항목이 포함되어야 합니다.

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

차량이 멈춤 완료

차량이 정차를 완료하면 Fleet Engine에 알려야 합니다. 이로 인해 중지와 관련된 모든 작업을 CLOSED 상태로 설정합니다.

정류장 업데이트의 필수 필드

Fleet Engine은 알림 항목의 다른 모든 필드를 무시합니다.

필드
remainingVehicleJourneySegments 상태가 State.NEW로 표시된 나머지 차량 정류장 목록입니다. 목록의 첫 번째 정류장은 State.ENROUTE로 표시된 상태가 있어야 합니다.

중지 예시 완료

다음 예시는 차량이 도착했음을 Fleet Engine에 알리는 방법을 보여줍니다. Java gRPC 라이브러리를 사용하거나 UpdateDeliveryVehicle입니다. 다른 모든 경유지는 새 정류장으로 표시됩니다.

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;
  }

REST

PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remaining_vehicle_journey_segments`
  • &lt;id&gt;는 작업의 고유 식별자입니다.
  • 요청 헤더에는 값이 있는 Authorization 필드가 있어야 합니다. Bearer <token> - 서버에서 <token>을 가져옴 서비스 계정 역할JSON 웹 토큰.
  • 요청 본문에는 DeliveryVehicle 항목이 포함되어야 합니다.

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

다음 단계