Aufgaben für Lieferfahrzeug aktualisieren

In diesem Dokument wird davon ausgegangen, dass Sie mit den folgenden Themen vertraut sind:

In einem realen Lieferszenario weisen Unternehmen Fahrern Versandaufgaben 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. In Fleet Engine wird dies modelliert, indem eine Aufgabe erstellt und eine Anfrage zur Aktualisierung des Lieferfahrzeugs gesendet wird. Dadurch wird die Fahrzeugentität mit einer Liste der anzufahrenden Haltestellen aktualisiert. Jeder Haltestelle wird eine Liste von Aufgaben zugewiesen, die an der Haltestelle erledigt werden müssen.

Sie können Fahrzeugaufgaben jederzeit aktualisieren. In der Regel tun Sie dies jedoch 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.
  • Reihenfolge vorhandener Aufgaben aktualisieren , die mit einer bestimmten Haltestelle verknüpft sind.
  • Ort der Aufgabenerledigung ändern. Standardmäßig legt Fleet Engine den Ort der Aufgabenerledigung als denselben Ort wie die Haltestelle fest, die mit der Aufgabe verknüpft ist. Sie können jedoch auch bestimmte Orte für einzelne Aufgaben angeben. Beispielsweise kann ein Fahrzeug an einem großen Komplex halten, um mehrere Pakete zu liefern, denen jeweils ein bestimmter Lieferraum zugewiesen ist.
  • Alle zuvor zugewiesenen Aufgaben schließen , 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. Alternativ können Sie 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 Single Source of Truth beizubehalten.

Wenn Sie eine Lieferung von einem Fahrzeug zu einem anderen ändern 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, wird eine Fehlermeldung angezeigt.

Pflichtfelder für die Aktualisierung von Aufgaben

In diesem Abschnitt werden die Pflichtfelder beschrieben, die beim Aktualisieren einer Aufgabe für ein Fahrzeug festgelegt werden müssen. Optionale Felder sind nicht verfügbar. Fleet Engine ignoriert alle anderen Felder in der Entität für die Aktualisierung.

PflichtfeldWert
remainingVehicleJourneySegments Eine Liste von Routensegmenten 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 Die Haltestelle für Aufgabe i in der Liste.
remainingVehicleJourneySegments[i].stop.plannedLocation Der geplante Ort für die 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 das Zuweisen von Aufgaben

In den folgenden Beispielen wird gezeigt, 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. Es 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 ausgegeben wird, die unter Dienstkontorollen und JSON-Web-Tokens beschrieben sind.

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

Beispiel für einen curl-Befehl:

  # 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