Durma durumunu güncelle

Bu dokümanda, aşağıdaki konular hakkında bilgi sahibi olduğunuz varsayılır:

  • [Gönderi görevleri oluşturma][1]
  • Görevler, duraklar ve araçlar arasındaki ilişkiyi ayrıntılı olarak ele alan [Planlanmış görevler][3] bölümüne giriş.

Fleet Engine ile İlgili Temel Bilgiler'deki [Planlanmış görevler][3] bölümünde belirtildiği gibi, görevler oluşturur ve bunları bir araç durağıyla ilişkilendirirsiniz. Bu sayede, görev ile aracın durması beklenen konum arasındaki gerçek dünya ilişkisini modelleyerek sürücünün görevi tamamlamasını sağlarsınız.

Buradan, görevlerin ilerleme durumunu yaşam döngüleri boyunca yönetmek için Fleet Engine'e güncellemeler gönderirsiniz. Böylece Fleet Engine, görev yolculuğu boyunca rota ve durum güncellemelerini en iyi şekilde gerçekleştirebilir. Bunu yapmanın önemli bir yolu, araç durağa yaklaştığında, vardığında ve duraktan ayrıldığında araç durağını güncellemektir. Bu sayede hem filo operatörleri hem de son kullanıcılar için görev ilerleme durumuyla ilgili raporlama ve analiz yapılabilir. Bu durum güncellemeleri aşağıdaki gibidir:

  • Yolda: VehicleStop için STATE enum'u, durağın araç rotası listesinde bir sonraki durak olduğunu belirtmek için ENROUTE değerini kullanır. Görev açısından bakıldığında, durakla ilişkili tüm görevlerin listede tamamlanacak bir sonraki görev olduğu anlamına gelir.
  • Arrived: VehicleStop için STATE enum'u, aracın durağa vardığını belirtmek için ARRIVED değerini kullanır. Görev açısından bakıldığında, durakla ilişkili tüm görevlerin aktif olarak üzerinde çalışılmasının durdurulduğu anlamına gelir.
  • Tamamlandı: Bir durağı aracın durak listesinden kaldırarak tamamlandı olarak işaretlersiniz. Bu işlemi yaptığınızda Fleet Engine, ilişkili tüm görevleri otomatik olarak KAPALI olarak işaretler. Görevleri kapatma hakkında daha fazla bilgi için [Görevleri tamamlama][4] başlıklı makaleyi inceleyin.

Bu belgede, sunucu tarafı yaklaşımlar kullanılarak durak durumunun nasıl güncelleneceği açıklanmaktadır. Sürücüye güvenilir bir cihaz kullanarak görevleri yönetme imkanı veriyorsanız bu işlemi sürücü uygulamanızdan da yapabilirsiniz. Yarışma durumlarını önlemek ve tek bir doğruluk kaynağına sahip olmak için yalnızca bir yöntem kullanın.

Araç durağa doğru ilerliyor

Sisteminiz, araç bir sonraki durağa doğru yola çıktığında Fleet Engine'i bilgilendirmelidir. Bu sayede TVS ve rota hesaplamaları daha iyi hale gelir.

Durak güncellemeleri için zorunlu alanlar

Fleet Engine, bildirim için varlıktaki diğer tüm alanları yoksayar.

AlanDeğer
remainingVehicleJourneySegments Durumları State.NEW olarak işaretlenmiş kalan araç duraklarının listesi.

Durağa giderken örneği

Aşağıdaki örneklerde, [Java gRPC kitaplığı][5] veya UpdateDeliveryVehicle adresine yapılan bir HTTP REST çağrısı kullanılarak bir aracın bir sonraki durağına doğru yola çıktığı Fleet Engine'e nasıl bildirileceği gösterilmektedir.Diğer tüm duraklar yeni olarak işaretlenir.

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`
  • <id>, görev için benzersiz bir tanımlayıcıdır.
  • İstek başlığı, Bearer <token> değerine sahip bir Authorization alanı içermelidir. Burada <token>, [Hizmet hesabı rolleri][6] ve [JSON Web jetonları][6] bölümünde açıklanan yönergelere göre sunucunuz tarafından verilir.
  • İstek gövdesi bir DeliveryVehicle varlığı içermelidir:

Örnek curl komutu:

 # 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

placeidtrips1: /maps/documentation/mobility/fleet-engine/reference/tasks/rpc/maps.fleetengine.delivery.v1.html#locationinfo placeidtrips2: /maps/documentation/mobility/fleet-engine/reference/tasks/rest/v1/LocationInfo.html placeidtrips3: /maps/documentation/mobility/fleet-engine/reference/tasks/rpc/maps.fleetengine.delivery.v1.html#maps.fleetengine.delivery.v1.LocationInfo.FIELDS.string.maps.fleetengine.delivery.v1.LocationInfo.place placeidtrips4: /maps/documentation/mobility/fleet-engine/reference/tasks/rest/v1/LocationInfo.html#FIELDS.place

Araç durağa varır

Bir araç durağa vardığında Fleet Engine'a bildirim gönderilmelidir.

Durak güncellemeleri için zorunlu alanlar

Fleet Engine, bildirim için varlıktaki diğer tüm alanları yoksayar.

AlanDeğer
remainingVehicleJourneySegments Durumları State.NEW olarak işaretlenmiş kalan araç duraklarının listesi.

Durağa varış örneği

Aşağıdaki örneklerde, [Java gRPC kitaplığı][5] veya UpdateDeliveryVehicle adresine yapılan bir HTTP REST çağrısı kullanılarak Fleet Engine'a bir aracın durağa vardığının nasıl bildirileceği gösterilmektedir. Diğer tüm duraklar yeni olarak işaretlenir.

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`
  • <id>, görev için benzersiz bir tanımlayıcıdır.
  • İstek başlığı, Bearer <token> değerine sahip bir Authorization alanı içermelidir. Burada <token>, [Hizmet hesabı rolleri][6] ve [JSON Web jetonları][6] bölümünde açıklanan yönergelere göre sunucunuz tarafından verilir.
  • İstek gövdesi bir DeliveryVehicle varlığı içermelidir:

Örnek curl komutu:

  # 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

Araç bir durakta durduğunda

Bir araç bir durağı tamamladığında Fleet Engine'a bildirim gönderilmelidir. Bu işlem, durakla ilişkili tüm görevlerin KAPALI durumuna ayarlanmasına neden olur.

Durak güncellemeleri için zorunlu alanlar

Fleet Engine, bildirim için varlıktaki diğer tüm alanları yoksayar.

AlanDeğer
remainingVehicleJourneySegments Durumları State.NEW olarak işaretlenmiş kalan araç duraklarının listesi. Listedeki ilk durağın durumu State.ENROUTE olarak işaretlenmelidir.

Ara noktada durma örneği

Aşağıdaki örneklerde, [Java gRPC kitaplığı][5] veya UpdateDeliveryVehicle adresine yapılan bir HTTP REST çağrısı kullanılarak Fleet Engine'a bir aracın durağa vardığının nasıl bildirileceği gösterilmektedir. Diğer tüm duraklar yeni olarak işaretlenir.

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`
  • <id>, görev için benzersiz bir tanımlayıcıdır.
  • İstek başlığı, Bearer <token> değerine sahip bir Authorization alanı içermelidir. Burada <token>, [Hizmet hesabı rolleri][6] ve [JSON Web jetonları][6] bölümünde açıklanan yönergelere göre sunucunuz tarafından verilir.
  • İstek gövdesi bir DeliveryVehicle varlığı içermelidir:

Örnek curl komutu:

 # 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

placeidtrips1: /maps/documentation/mobility/fleet-engine/reference/tasks/rpc/maps.fleetengine.delivery.v1.html#locationinfo placeidtrips2: /maps/documentation/mobility/fleet-engine/reference/tasks/rest/v1/LocationInfo.html placeidtrips3: /maps/documentation/mobility/fleet-engine/reference/tasks/rpc/maps.fleetengine.delivery.v1.html#maps.fleetengine.delivery.v1.LocationInfo.FIELDS.string.maps.fleetengine.delivery.v1.LocationInfo.place placeidtrips4: /maps/documentation/mobility/fleet-engine/reference/tasks/rest/v1/LocationInfo.html#FIELDS.place

Sırada ne var?

  • [Görevleri tamamlama][4]

[1]: /maps/documentation/mobility/fleet-engine/journeys/tasks/create-shipment-tasks [3]: /maps/documentation/mobility/fleet-engine/essentials/tasks-intro [4]: /maps/documentation/mobility/fleet-engine/journeys/tasks/finalize-tasks [5]: /maps/documentation/mobility/fleet-engine/essentials/client-libraries-tasks [6]: /maps/documentation/mobility/fleet-engine/essentials/set-up-fleet/service-accounts