Aufgaben für Lieferfahrzeug aktualisieren

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

In einem realen Lieferszenario weisen Unternehmen Lieferaufgaben den Fahrern zu, die diese dann mit einem Fahrzeug an einem geplanten Ort wie einem Wohnhaus oder einem Lieferraum in einem Gebäudekomplex an den Empfänger liefern. 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 dieser Haltestelle erledigt werden müssen.

Sie können Fahrzeugaufgaben jederzeit aktualisieren. In der Regel geschieht dies jedoch für folgende Zwecke:

  • Aufgaben für ein Fahrzeug planen Dazu können Sie entweder eine Aktualisierungsanfrage verwenden, mit der dem Fahrzeug eine neue Haltestelle hinzugefügt wird, oder eine Aktualisierungsanfrage, mit der einer vorhandenen Haltestelle eine neue Aufgabe hinzugefügt wird.
  • Ordnung der vorhandenen Aufgaben für eine bestimmte Haltestelle aktualisieren
  • Ändern Sie den Ort, an dem die Aufgabe abgeschlossen wird. Standardmäßig markiert Fleet Engine den Ort für den Aufgabenabschluss als denselben Ort wie die Fahrzeughaltestelle, die der Aufgabe zugeordnet ist. Wenn Sie möchten, können Sie für einzelne Aufgaben bestimmte Standorte angeben. Beispiel: Sie haben eine große Fahrzeughaltestelle, die eine Reihe von Paketen zustellen soll, die jeweils einem bestimmten Postzustellungsraum 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.

Übermittlungsaufgaben 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 Sendung 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 so aktualisieren, dass es eine Aufgabe enthält, 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. Die Fleet Engine ignoriert für die Aktualisierung alle anderen Felder in der Entität.

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 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 auszuführen sind.
remainingVehicleJourneySegments[i].stop.state State.NEW

Beispiel für das Zuweisen von Aufgaben

Die folgenden Beispiele zeigen, wie Sie mit 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