Aufgaben für Lieferfahrzeug aktualisieren

In diesem Dokument wird davon ausgegangen, dass Sie mit Folgendem vertraut sind:

In einem realen Lieferszenario weisen Unternehmen Fahrern Lieferaufgaben zu. Diese nutzen dann ein Fahrzeug, um die Lieferungen an den Empfänger an einem geplanten Ort zuzustellen, z. B. an einer Wohnadresse oder in einem Lieferraum in einem Gebäudekomplex. In Fleet Engine erstellen Sie dazu eine Aufgabe und senden eine Anfrage zur Aktualisierung des Lieferfahrzeugs. Dadurch wird die Fahrzeugentität mit einer Liste der anzufahrenden Haltestellen aktualisiert. Sie weisen jedem Halt eine Liste von Aufgaben zu, die dort erledigt werden müssen.

Sie können Fahrzeugaufgaben jederzeit aktualisieren. In der Regel tun Sie dies jedoch für die folgenden Zwecke:

  • Aufgaben für ein Fahrzeug planen Dazu können Sie entweder eine Aktualisierungsanfrage senden, mit der dem Fahrzeug ein neuer Stopp hinzugefügt wird, oder eine Aktualisierungsanfrage, mit der einem vorhandenen Stopp eine neue Aufgabe hinzugefügt wird.
  • Aktualisieren Sie die Reihenfolge vorhandener Aufgaben, die einem bestimmten Fahrzeughalt zugeordnet sind.
  • Ändern Sie den Ort, an dem die Aufgabe erledigt werden soll. Standardmäßig legt die Fleet Engine den Ort, an dem die Aufgabe abgeschlossen wurde, auf denselben Ort fest, an dem das Fahrzeug für die Aufgabe angehalten hat. Sie können auch bestimmte Speicherorte für einzelne Aufgaben angeben. Beispielsweise könnte ein Fahrzeug an einem großen Gebäudekomplex halten, um mehrere Pakete zuzustellen, die jeweils einem bestimmten Postraum zugewiesen sind.
  • Schließen Sie alle zuvor zugewiesenen Aufgaben, damit sie nicht in der aktualisierten Reihenfolge enthalten sind. Weitere Informationen finden Sie unter Aufgaben abschließen.

Lieferaufgaben planen oder ändern

Sie können Aufgaben, die einem Fahrzeug zugewiesen sind, entweder über eine Serverumgebung planen oder ändern oder das Driver SDK verwenden, wenn Sie dem Fahrer die Möglichkeit geben, Aufgaben über ein vertrauenswürdiges Gerät zu verwalten. Verwenden Sie nur eine Methode, um Race-Bedingungen zu vermeiden und eine zentrale Informationsquelle zu erhalten.

Wenn Sie eine Sendung von einem Fahrzeug auf ein anderes übertragen möchten, schließen Sie die ursprüngliche Aufgabe und erstellen Sie sie neu, bevor Sie sie einem anderen Fahrzeug zuweisen. Wenn Sie ein Lieferfahrzeug aktualisieren, um eine Aufgabe hinzuzufügen, die bereits einem anderen Fahrzeug zugewiesen ist, erhalten Sie eine Fehlermeldung.

Pflichtfelder für das Aktualisieren von Aufgaben

In diesem Abschnitt werden die Pflichtfelder beschrieben, die beim Aktualisieren einer Aufgabe für ein Fahrzeug festgelegt werden müssen. Es sind keine optionalen Felder vorhanden. Die Fleet Engine ignoriert alle anderen Felder in der Entität für das Update.

PflichtfeldWert
remainingVehicleJourneySegments Eine Liste der Fahrtsegmente für Aufgaben in der Reihenfolge, in der sie ausgeführt werden sollen. Die erste Aufgabe in der Liste wird zuerst ausgeführt.
remainingVehicleJourneySegments[i].stop Der Stopp für die Aufgabe i in der Liste.
remainingVehicleJourneySegments[i].stop.plannedLocation Der geplante Ort für den Halt.
remainingVehicleJourneySegments[i].stop.tasks Eine Liste der Aufgaben, die an diesem Fahrzeughalt ausgeführt werden sollen.
remainingVehicleJourneySegments[i].stop.state State.NEW

Beispiel für das Zuweisen von Aufgaben

In den folgenden Beispielen wird gezeigt, wie Sie die Java-gRPC-Bibliothek und einen HTTP-REST-Aufruf an UpdateDeliveryVehicle verwenden, um dem Fahrzeug zwei neue Aufgaben hinzuzufügen.

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`
  • <id> ist eine eindeutige Kennung für ein Lieferfahrzeug in Ihrer Flotte, für das Sie die Aufgabenreihenfolge aktualisieren möchten. Das ist die Kennung, die Sie beim Erstellen des Fahrzeugs angegeben haben.

  • Der Anfrageheader muss ein Feld Authorization mit dem Wert Bearer <token> enthalten, wobei <token> von Ihrem Server gemäß den Richtlinien in Dienstkontorollen und JSON Web Tokens ausgestellt wird.

  • Der Anfragetext muss eine DeliveryVehicle-Entität enthalten.

Beispiel eines curl-Befehls:

  # 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

Nächste Schritte