Teslimat aracı görevlerini güncelle

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

Gerçek dünyadaki bir teslimat senaryosuna göre işletmeler, teslimat kargo görevlerini sürücülere atar. Sürücüler de bir araç kullanarak kargoları planlanmış bir konumda (ör. bir konut veya bir bina kompleksindeki teslimat odası) alıcıya teslim eder. Bunu Fleet Engine'da modellemek için bir görev oluşturup teslimat aracı güncelleme isteği gönderirsiniz. Bu istek, araç öğesini gidilecek durakların listesiyle günceller. Her durakta tamamlanacak görevlerin listesini atarsınız.

Araç görevlerini istediğiniz zaman güncelleyebilirsiniz. Ancak bunu genellikle aşağıdaki amaçlarla yaparsınız:

  • Bir aracın tamamlaması için görev planlama. Bunu, araca yeni bir durak ekleyen bir güncelleme isteğiyle veya mevcut bir durağa yeni bir görev ekleyen bir güncelleme isteğiyle yapabilirsiniz.
  • Belirli bir araç durağıyla ilişkili mevcut görevlerin sırasını güncelleyin.
  • Görevin tamamlandığı konumu değiştirin. Fleet Engine, varsayılan olarak görev tamamlama konumunu, görevle ilişkili araç durağıyla aynı konum olarak işaretler. Dilerseniz görevler için belirli konumlar da belirtebilirsiniz. Örneğin, bir aracın büyük bir komplekste durduğunu ve her biri belirli bir posta teslimat odasına atanan bir dizi paketi teslim ettiğini varsayalım.
  • Güncellenen sıralamaya dahil edilmemeleri için önceden atanmış görevleri kapatın. Ayrıntılar için Görevleri tamamlama bölümüne bakın.

Yayınlama görevlerini planlama veya değiştirme

Bir araca atanan görevleri, sunucu ortamından veya sürücüye güvenilir bir cihaz kullanarak görevleri yönetme olanağı tanıyorsanız Sürücü SDK'sını kullanarak planlayabilir ya da değiştirebilirsiniz. Yarış koşullarından kaçınmak ve tek bir doğru kaynaktan yararlanmak için yalnızca bir yöntem kullanın.

Bir gönderimi bir araçtan diğerine taşımak için orijinal görevi kapatın ve farklı bir araca atamadan önce yeniden oluşturun. Bir teslimat aracını, farklı bir araca atanmış bir görevi içerecek şekilde güncellerseniz hata alırsınız.

Görevleri güncellemek için gerekli alanlar

Bu bölümde, bir araçla ilgili görev güncellenirken ayarlanması gereken zorunlu alanlar açıklanmaktadır. İsteğe bağlı alan sağlanmadı. Filo motoru, güncelleme için öğedeki diğer tüm alanları yoksayar.

Zorunlu alanDeğer
remainingVehicleJourneySegments Görevler için uygulanmaları gereken sırayla yolculuk segmentlerinin listesi. Listedeki ilk görev önce yürütülür.
remainingVehicleJourneySegments[i].stop Listede i numaralı görevin durağı.
remainingVehicleJourneySegments[i].stop.plannedLocation Durağın planlanan konumu.
remainingVehicleJourneySegments[i].stop.tasks Bu araç durağında yapılacak görevlerin listesi.
remainingVehicleJourneySegments[i].stop.state State.NEW

Görev atama örneği

Aşağıdaki örneklerde, araç için iki yeni görev eklemek üzere Java gRPC kitaplığının ve UpdateDeliveryVehicle için bir HTTP REST çağrısının nasıl kullanılacağı gösterilmektedir.

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>, filonuzdaki ve görev sıralamasını güncellemek istediğiniz bir teslimat aracının benzersiz tanımlayıcısıdır. Araç oluştururken belirttiğiniz tanımlayıcı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.7749,
              "longitude": -122.084061
            }
          },
          "tasks": [
            {
              "taskId": "${TASK1_ID}"
            }
          ]
        }
      },
      {
        "stop": {
          "state": "NEW",
          "plannedLocation": {
            "point": {
              "latitude": 37.3382,
              "longitude": 121.8863
            }
          },
          "tasks": [
            {
              "taskId": "${TASK2_ID}"
            }
          ]
        }
      }
    ]
  }
  EOM

Sırada ne var?