Aufgaben für Lieferfahrzeug aktualisieren

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

In einem realen Lieferszenario weisen Unternehmen Fahrern Aufgaben für die Zustellung von Sendungen zu, die diese dann mit einem Fahrzeug an einem geplanten Ort an den Empfänger liefern, z. B. an eine Privatadresse oder einen Lieferraum in einem Gebäudekomplex. Sie modellieren dies in Fleet Engine, indem Sie eine Aufgabe erstellen und eine Aktualisierungsanfrage für das Lieferfahrzeug senden. Dadurch wird die Fahrzeugentität mit einer Liste der Haltestellen aktualisiert, die angefahren werden müssen. Sie weisen jeder Haltestelle eine Liste von Aufgaben zu, die an der Haltestelle erledigt werden müssen.

Sie können Fahrzeugaufgaben jederzeit aktualisieren. In der Regel geschieht dies aus folgenden Gründen:

  • Aufgaben für ein Fahrzeug planen Sie können dies entweder mit einer Aktualisierungsanfrage tun, mit der dem Fahrzeug eine neue Haltestelle hinzugefügt wird, oder mit einer Aktualisierungsanfrage, mit der einer vorhandenen Haltestelle eine neue Aufgabe hinzugefügt wird.
  • Ordnung der vorhandenen Aufgaben für eine bestimmte Haltestelle aktualisieren
  • Ort des Aufgabenabschlusses ändern Standardmäßig kennzeichnet Fleet Engine den Standort der Aufgabenerledigung als denselben Standort wie den mit der Aufgabe verknüpften Fahrzeugstopp. Sie können auch bestimmte Standorte für einzelne Aufgaben angeben. Angenommen, ein Fahrzeug hält an einem großen Komplex, um eine Reihe von Paketen zuzustellen, die jeweils einem bestimmten Raum für die Zustellung von Post zugewiesen sind.
  • Schließen Sie alle zuvor zugewiesenen Aufgaben, damit sie nicht in die aktualisierte Reihenfolge aufgenommen werden. Weitere Informationen finden Sie unter Aufgaben abschließen.

Zustellaufgaben planen oder ändern

Sie können Aufgaben, die einem Fahrzeug zugewiesen sind, entweder über eine Serverumgebung oder mit dem Driver SDK planen oder ändern, wenn Sie dem Fahrer die Möglichkeit geben, Aufgaben mit einem vertrauenswürdigen Gerät zu verwalten. Verwenden Sie nur eine Methode, um Race Conditions zu vermeiden und eine einzige zentrale Datenquelle zu haben.

Wenn Sie eine Lieferung von einem Fahrzeug auf ein anderes umstellen 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 die Aktualisierung von Aufgaben

In diesem Abschnitt werden die erforderlichen Felder beschrieben, die beim Aktualisieren einer Aufgabe für ein Fahrzeug festgelegt werden müssen. Es sind keine optionalen Felder vorhanden. Alle anderen Felder im Element werden von der Fleet Engine für die Aktualisierung ignoriert.

PflichtfeldWert
remainingVehicleJourneySegments Eine Liste der einzelnen Schritte in der Reihenfolge, in der sie ausgeführt werden sollen. Die erste Aufgabe in der Liste wird zuerst ausgeführt.
remainingVehicleJourneySegments[i].stop Die Haltestelle für Aufgabe i in der Liste.
remainingVehicleJourneySegments[i].stop.plannedLocation Der geplante Standort der Haltestelle.
remainingVehicleJourneySegments[i].stop.tasks Eine Liste der Aufgaben, die an dieser Haltestelle ausgeführt werden müssen.
remainingVehicleJourneySegments[i].stop.state State.NEW

Beispiel für die Zuweisung von Aufgaben

In den folgenden Beispielen wird gezeigt, wie Sie mithilfe der Java gRPC-Bibliothek und einem HTTP-REST-Aufruf an UpdateDeliveryVehicle zwei neue Aufgaben für das Fahrzeug hinzufü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. Dies ist die Kennung, die Sie beim Erstellen des Fahrzeugs angegeben haben.

  • Der Anfrageheader muss das Feld Authorization mit dem Wert Bearer <token> enthalten. Dabei wird <token> von deinem Server gemäß den in den Abschnitten Dienstkontorollen und JSON Web Tokens beschriebenen Richtlinien ausgestellt.

  • Der Anfragetext muss ein DeliveryVehicle-Objekt 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