Haltestellenstatus aktualisieren

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

Gemäß den Informationen unter Geplante Aufgaben in der Fleet Engine Essentials können Sie Aufgaben erstellen und mit einem Fahrzeug verknüpfen. um die reale Verbindung zwischen der Aufgabe und dem Standort, an dem das Fahrzeug voraussichtlich halten wird, damit der Fahrer die Aufgabe zu erledigen.

Von dort aus verwalten Sie den Fortschritt der Aufgaben während ihres gesamten Lebenszyklus, Senden von Aktualisierungen an Fleet Engine, damit sie das Routing und den Status optimal ausführen kann auf dem Weg zur Aufgabe. Eine Möglichkeit, dies zu tun, besteht darin, wenn sich das Fahrzeug nähert, erreicht oder verlässt. Dies ermöglicht Berichte und Analysen über den Aufgabenfortschritt sowohl für Flottenbetreiber und Endnutzer. Es gibt folgende Statusaktualisierungen:

  • Route unterwegs: Die STATE-Enum für VehicleStop verwendet ENROUTE, um angeben, dass die Haltestelle als nächstes in der Liste für den Fahrzeugreiseplan steht. Aus Sicht der Aufgabe sind alle Aufgaben gemeint, die mit der Haltestelle verknüpft sind. steht als Nächstes auf der Liste.
  • Angekommen: Die Aufzählung STATE für VehicleStop verwendet ARRIVED, um anzugeben, ob das Fahrzeug an der Haltestelle angekommen ist. Aus Sicht der Aufgabe bedeutet das, dass jede Aufgabe, die mit der Haltestelle verknüpft ist, aktiv bearbeitet wird.
  • Abgeschlossen: Sie markieren einen Zwischenstopp als abgeschlossen, indem Sie ihn aus der Liste der Haltestellen für das Fahrzeug. In diesem Fall markiert Fleet Engine automatisch alle zugehörigen Aufgaben als GESCHLOSSEN. Weitere Informationen zum Schließen von Aufgaben finden Sie unter Aufgaben abschließen

In diesem Dokument wird beschrieben, wie Sie den Haltestellenstatus mithilfe serverseitiger Methoden aktualisieren. Ich Das ist auch über die Fahrer-App möglich. Aufgaben über ein vertrauenswürdiges Gerät verwalten. Nur eine Methode verwenden, um ethnische Herkunft zu vermeiden und eine Single Source of Truth aufrechtzuerhalten.

Fahrzeug ist auf dem Weg zur Haltestelle

Ihr System sollte Fleet Engine benachrichtigen, wenn das Fahrzeug mit der Navigation zur nächsten Halt. Dies verbessert die voraussichtliche Ankunftszeit und die Routenberechnung.

Pflichtfelder für das Beenden von Updates

Fleet Engine ignoriert alle anderen Felder in der Entität für die Benachrichtigung.

FeldWert
remainingVehicleJourneySegments Liste der verbleibenden Haltestellen mit Status als State.NEW.

Beispiel für eine Route zu einer Haltestelle

Die folgenden Beispiele zeigen, wie Fleet Engine benachrichtigt wird, dass ein Fahrzeug auf dem Weg zur nächsten Haltestelle sein, entweder mithilfe der Java gRPC-Bibliothek oder einer HTTP- REST-Aufruf an UpdateDeliveryVehicle.Alle anderen Haltestellen sind als neu markiert.

gRPC

 static final String PROJECT_ID = "my-delivery-co-gcp-project";
 static final String VEHICLE_ID = "vehicle-8241890";

 DeliveryServiceBlockingStub deliveryService =
   DeliveryServiceGrpc.newBlockingStub(channel);

 // Vehicle settings
 DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
     // Next stop marked as ENROUTE
     .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.ENROUTE)))
     // All other stops marked as 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 updateDeliveryVehicleRequest =
   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; ist eine eindeutige Kennung für die Aufgabe.
  • Der Anfrageheader muss das Feld Authorization mit dem Wert Inhaber <token>, wobei <token> von Ihrem Server ausgegeben wird gemäß den Richtlinien unter Dienstkontorollen und JSON-Webtokens
  • 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": "ENROUTE",
         "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

Fahrzeug landet an der Haltestelle

Fleet Engine muss benachrichtigt werden, wenn ein Fahrzeug an einer Haltestelle ankommt.

Pflichtfelder für das Stoppen von Updates

Fleet Engine ignoriert alle anderen Felder in der Entität für die Benachrichtigung.

FeldWert
remainingVehicleJourneySegments Liste der verbleibenden Fahrzeughalte, wobei deren Status als State.NEW gekennzeichnet ist.

Beispiel für Ankunft an Haltestelle

Die folgenden Beispiele zeigen, wie Fleet Engine benachrichtigt wird, wenn ein Fahrzeug angekommen ist an der Haltestelle an und verwenden Sie entweder die Java gRPC-Bibliothek oder einen HTTP REST-Aufruf für UpdateDeliveryVehicle Alle anderen Haltestellen sind als neu gekennzeichnet.

gRPC

  static final String PROJECT_ID = "my-delivery-co-gcp-project";
  static final String VEHICLE_ID = "vehicle-8241890";

  DeliveryServiceBlockingStub deliveryService =
    DeliveryServiceGrpc.newBlockingStub(channel);

  // Vehicle settings
  String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
  DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
      // Marking the arrival at stop.
      .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()
         .setStop(VehicleStop.newBuilder()
             .setPlannedLocation(LocationInfo.newBuilder()
                 .setPoint(LatLng.newBuilder()
                     .setLatitude(37.7749)
                     .setLongitude(122.4194)))
             .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
             .setState(VehicleStop.State.ARRIVED)))
      // All other remaining stops marked as 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))) // Remaining stops must be NEW.
      .build();

  // DeliveryVehicle request
  UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
    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; ist eine eindeutige Kennung für die Aufgabe.
  • Der Anfrageheader muss das Feld Authorization mit dem Wert Inhaber <token>, wobei <token> von Ihrem Server ausgegeben wird gemäß den Richtlinien unter Dienstkontorollen und JSON-Webtokens
  • 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": "ARRIVED",
          "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

Fahrzeug hält an

Fleet Engine muss benachrichtigt werden, wenn ein Fahrzeug einen Stopp erreicht. Das führt dazu, dass werden alle mit der Haltestelle verknüpften Aufgaben in den Status CLOSED gesetzt.

Pflichtfelder für das Beenden von Updates

Fleet Engine ignoriert alle anderen Felder in der Entität für die Benachrichtigung.

FeldWert
remainingVehicleJourneySegments Liste der verbleibenden Fahrzeughalte, wobei deren Status als State.NEW gekennzeichnet ist. Für die erste Haltestelle auf der Liste muss der Status State.ENROUTE angegeben sein.

Vervollständigt ein Stoppbeispiel

Die folgenden Beispiele zeigen, wie Fleet Engine benachrichtigt wird, wenn ein Fahrzeug angekommen ist an der Haltestelle an und verwenden Sie entweder die Java gRPC-Bibliothek oder einen HTTP REST-Aufruf für UpdateDeliveryVehicle Alle anderen Haltestellen sind als neu markiert.

gRPC

  static final String PROJECT_ID = "my-delivery-co-gcp-project";
  static final String VEHICLE_ID = "vehicle-8241890";

  DeliveryServiceBlockingStub deliveryService =
    DeliveryServiceGrpc.newBlockingStub(channel);

  // Vehicle settings
  String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
  DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
      // This stop has been completed and is commented out to indicate it
      // should be removed from the list of vehicle journey segments.
      // .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()
      //    .setStop(VehicleStop.newBuilder()
      //        .setPlannedLocation(LocationInfo.newBuilder()
      //            .setPoint(LatLng.newBuilder()
      //                .setLatitude(37.7749)
      //                .setLongitude(122.4194)))
      //        .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
      //        .setState(VehicleStop.State.ARRIVED)))
      // All other remaining stops marked as NEW.
      // The next stop could be marked as ENROUTE if the vehicle has begun
      // its journey to the next stop.
      .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // Next 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 updateDeliveryVehicleRequest =
    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=remaining_vehicle_journey_segments`
  • &lt;id&gt; ist eine eindeutige Kennung für die Aufgabe.
  • Der Anfrageheader muss das Feld Authorization mit dem Wert Inhaber <token>, wobei <token> von Ihrem Server ausgegeben wird gemäß den Richtlinien unter Dienstkontorollen und JSON-Webtokens
  • 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.3382,
             "longitude": 121.8863
           }
         },
         "tasks": [
           {
             "taskId": "${TASK2_ID}"
           }
         ]
       }
     }
   ]
 }
 EOM

Nächste Schritte