Durma durumunu güncelle

Bu dokümanda aşağıdaki konularda bilgi sahibi olduğunuz varsayılmaktadır:

Fleet Engine'in Temel Özellikleri bölümündeki Planlanmış görevler bölümünde belirtildiği gibi, sürücünün görevi tamamlayabilmesi için görev ile aracın durması beklenen konum arasındaki gerçek ilişkiyi modellemek amacıyla görevler oluşturup bunları bir araç durağıyla ilişkilendirirsiniz.

Buradan, Fleet Engine'a güncelleme göndererek görevlerin yaşam döngüsü boyunca ilerleme durumunu yönetebilirsiniz. Böylece Fleet Engine, görev yolculuğu boyunca en iyi şekilde rota ve durum güncellemeleri yapabilir. Bunu yapmanın önemli yollarından biri, araç yaklaştığında, durağa 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, durak için araç seyahat planı listesinde bir sonraki durak olduğunu belirtmek üzere ENROUTE değerini kullanır. Görev açısından bu, durakla ilgili tüm görevlerin tamamlanması gereken bir sonraki görev olduğu anlamına gelir.
  • Vardı: VehicleStop için STATE enum, aracın durağa ulaştığını belirtmek üzere ARRIVED değerini kullanır. Görev açısından bu, duraklatma ile ilişkili tüm görevlerin üzerinde aktif olarak çalışmanın durdurulduğu anlamına gelir.
  • Tamamlandı: Bir durağı, aracın durak listesinden kaldırarak tamamlandı olarak işaretleyebilirsiniz. Bunu 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 başlıklı makaleyi inceleyin.

Bu belgede, sunucu tarafı yaklaşımları kullanarak güncelleme durdurma durumunun nasıl ayarlanacağı açıklanmaktadır. Sürücünün güvenilir bir cihaz kullanarak görevleri yönetmesine izin verirseniz bunu sürücü uygulamanızdan da yapabilirsiniz. Yarış koşullarından kaçınmak ve tek bir doğru kaynaktan yararlanmak için yalnızca bir yöntem kullanın.

Araç duraktaki konuma doğru gidiyor

Sisteminiz, araç bir sonraki durağa gitmek için navigasyona başladığında Fleet Engine'ı bilgilendirmelidir. Bu sayede, tahmini varış zamanı ve rota hesaplamaları iyileşir.

Güncellemeleri durdurmak için zorunlu alanlar

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

AlanDeğer
remainingVehicleJourneySegments Kalan araç duraklarının, durumları State.NEW olarak işaretlenmiş listesi.

Durağa giden yol örneği

Aşağıdaki örneklerde, Java gRPC kitaplığı veya UpdateDeliveryVehicle için bir HTTP REST çağrısı kullanılarak bir aracın bir sonraki durağına doğru yola çıktığının Fleet Engine'a 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örevin benzersiz tanımlayıcısıdır.
  • İstek üstbilgisinde, Authorization (Yetkilendirme) alanı olmalıdır. Bu alanın değeri Bearer <token> (Taşıyıcı <token>) şeklindedir. <token>, Hizmet hesabı rolleri ve JSON web jetonları bölümünde açıklanan yönergelere göre sunucunuz tarafından verilir.
  • İstek metni bir DeliveryVehicle öğesi 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

Araç durağa vardığında

Bir araç durağa ulaştığında Fleet Engine'a bilgi verilmelidir.

Güncellemeleri durdurmak için zorunlu alanlar

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

AlanDeğer
remainingVehicleJourneySegments Kalan araç duraklarının, durumları State.NEW olarak işaretlenmiş listesi.

Durağa varma örneği

Aşağıdaki örneklerde, Java gRPC kitaplığı veya UpdateDeliveryVehicle için bir HTTP REST çağrısı kullanılarak bir aracın durağa ulaştığı Fleet Engine'a 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örevin benzersiz tanımlayıcısıdır.
  • İstek üstbilgisinde, Authorization (Yetkilendirme) alanı olmalıdır. Bu alanın değeri Bearer <token> (Taşıyıcı <token>) şeklindedir. <token>, Hizmet hesabı rolleri ve JSON web jetonları bölümünde açıklanan yönergelere göre sunucunuz tarafından verilir.
  • İstek metni bir DeliveryVehicle öğesi 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ç durakta durunca Fleet Engine bilgilendirilmelidir. Bu işlem, durakla ilişkili tüm görevlerin KAPALI durumuna ayarlanmasına neden olur.

Güncellemeleri durdurmak için zorunlu alanlar

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

AlanDeğer
remainingVehicleJourneySegments Kalan araç duraklarının, durumları State.NEW olarak işaretlenmiş listesi. Listedeki ilk durak, State.ENROUTE olarak işaretlenmelidir.

Bir durak örneğini tamamlar

Aşağıdaki örneklerde, Java gRPC kitaplığı veya UpdateDeliveryVehicle için bir HTTP REST çağrısı kullanılarak bir aracın durağa ulaştığı Fleet Engine'a 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örevin benzersiz tanımlayıcısıdır.
  • İstek üstbilgisinde, Authorization (Yetkilendirme) alanı olmalıdır. Bu alanın değeri Bearer <token> (Taşıyıcı <token>) şeklindedir. <token>, Hizmet hesabı rolleri ve JSON web jetonları bölümünde açıklanan yönergelere göre sunucunuz tarafından verilir.
  • İstek metni bir DeliveryVehicle öğesi 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

Sırada ne var?