배송 차량 작업 업데이트

이 문서에서는 다음에 익숙하다고 가정합니다.

실제 배송 시나리오에서 비즈니스는 배송 운송 작업을 운전자에게 할당하고 운전자는 차량을 사용하여 계획된 위치(예: 아파트 단지의 아파트 또는 배송실)에서 수령자에게 배송합니다. Fleet Engine에서 작업을 만들고 배송 차량 업데이트 요청을 실행하여 이를 모델링하면 이동할 정류장 목록으로 차량 항목이 업데이트됩니다. 각 정류장에는 정류장에서 완료해야 할 작업 목록을 할당합니다.

차량 작업은 언제든지 업데이트할 수 있지만 일반적으로 다음과 같은 목적으로 업데이트합니다.

  • 차량이 완료할 작업을 예약합니다. 차량에 새 정류장을 추가하는 업데이트 요청을 사용하거나 기존 정류장에 새 작업을 추가하는 업데이트 요청을 통해 이 작업을 실행할 수 있습니다.
  • 지정된 차량 정류장과 연결된 기존 작업의 순서를 업데이트합니다.
  • 작업 완료 위치를 변경합니다. 기본적으로 Fleet Engine은 작업 완료 위치를 작업과 연결된 차량 정류장과 동일한 위치로 표시합니다. 원하는 경우 개별 태스크에 특정 위치를 지정할 수 있습니다. 예를 들어 여러 택배를 전달하기 위해 대형 복합 단지에 차량 정류장을 두고 각각 특정 우편물 전달실을 할당할 수 있습니다.
  • 이전에 할당된 모든 할 일을 종료하여 업데이트된 순서에서 제외합니다. 자세한 내용은 할 일 마무리하기를 참고하세요.

전송 작업 예약 또는 변경

운전자에게 신뢰할 수 있는 기기를 사용하여 작업을 관리할 수 있는 기능을 제공하는 경우, 서버 환경에서 또는 Driver SDK를 사용하여 차량에 할당된 작업을 예약하거나 변경할 수 있습니다. 경합 상태를 방지하고 단일 정보 소스를 유지할 수 있도록 하나의 메서드만 사용하세요.

한 차량에서 다른 차량으로 배송을 변경하려면 원래 작업을 종료하고 이 작업을 다시 만든 후 다른 차량에 할당합니다. 이미 다른 차량에 할당된 작업을 포함하도록 배송 차량을 업데이트하면 오류가 발생합니다.

태스크 업데이트를 위한 필수 필드

이 섹션에서는 차량의 작업을 업데이트할 때 설정해야 하는 필수 필드를 설명합니다. 선택적인 필드가 제공되지 않았습니다. Fleet 엔진은 업데이트를 위해 항목의 다른 모든 필드를 무시합니다.

필수 입력란
remainingVehicleJourneySegments 작업이 실행되어야 하는 순서대로 나열된 작업의 여정 세그먼트 목록입니다. 목록의 첫 번째 작업이 먼저 실행됩니다.
remainingVehicleJourneySegments[i].stop 목록에서 작업 i의 중지
remainingVehicleJourneySegments[i].stop.plannedLocation 정류장에 대해 계획된 위치입니다.
remainingVehicleJourneySegments[i].stop.tasks 이 차량 정류장에서 실행할 작업 목록입니다.
remainingVehicleJourneySegments[i].stop.state State.NEW

할 일 할당 예시

다음 예는 Java gRPC 라이브러리UpdateDeliveryVehicle에 대한 HTTP REST 호출을 사용하여 차량에 새 작업 두 개를 추가하는 방법을 보여줍니다.

gRPC

 static final String PROJECT_ID = "my-delivery-co-gcp-project";
 static final String VEHICLE_ID = "vehicle-8241890";
 static final String TASK1_ID = "task-756390";
 static final String TASK2_ID = "task-849263";

 DeliveryServiceBlockingStub deliveryService =
   DeliveryServiceGrpc.newBlockingStub(channel);

 // Vehicle settings
 String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
 DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
     .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.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 updateDeliveryRequest =
   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;는 작업 순서를 업데이트하려는 Fleet의 배송 차량에 대한 고유 식별자입니다. 이는 차량을 만들 때 지정한 식별자입니다.

  • 요청 헤더에는 값이 Bearer <token>Authorization 필드가 포함되어야 합니다. 여기서 <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.7749,
              "longitude": -122.084061
            }
          },
          "tasks": [
            {
              "taskId": "${TASK1_ID}"
            }
          ]
        }
      },
      {
        "stop": {
          "state": "NEW",
          "plannedLocation": {
            "point": {
              "latitude": 37.3382,
              "longitude": 121.8863
            }
          },
          "tasks": [
            {
              "taskId": "${TASK2_ID}"
            }
          ]
        }
      }
    ]
  }
  EOM

다음 단계