Teslimat aracı görevlerini güncelle

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

Gerçek hayattaki bir teslimat senaryosunda işletmeler, teslimat gönderisi görevlerini sürücülere atar. Sürücüler de bir araç kullanarak bu gönderileri planlanan bir konumda (ör. konut veya bina kompleksindeki teslimat odası) alıcıya teslim eder. Fleet Engine'de bunu bir görev oluşturup teslimat aracı güncelleme isteği göndererek modellendirirsiniz. Bu istek, araç öğesini gidilecek durakların listesiyle günceller. Her durakta tamamlanması gereken görevlerin listesini her durağa atarsınız.

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

  • Bir aracın tamamlaması için görevler planlayın. 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 tamamlanma konumunu değiştirme Fleet Engine, varsayılan olarak görev tamamlama konumunu, görevle ilişkili araç durağıyla aynı konum olarak işaretler. İsterseniz her bir görev için belirli konumlar belirtebilirsiniz. Örneğin, bir aracın büyük bir komplekste durup her biri belirli bir posta teslimat odasına atanmış birkaç paket teslim etmesi gerekebilir.
  • Daha önce atanmış görevleri kapatarak güncellenen sıralamanın dışında bırakın. Ayrıntılar için Görevleri tamamlama başlıklı makaleyi inceleyin.

Teslimat 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ğı sunuyorsanız Sürücü SDK'sını kullanarak planlayabilir ya da değiştirebilirsiniz. Yarışma durumlarını önlemek ve tek bir doğruluk kaynağına sahip olmak için yalnızca bir yöntem kullanın.

Bir gönderiyi bir araçtan diğerine taşımak için orijinal görevi kapatın ve farklı bir araca atamadan önce görevi 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 zorunlu alanlar

Bu bölümde, bir araç için görev güncellenirken ayarlanması gereken zorunlu alanlar açıklanmaktadır. İsteğe bağlı alanlar sağlanmaz. Fleet Engine, güncelleme için varlıktaki diğer tüm alanları yoksayar.

Zorunlu alanDeğer
remainingVehicleJourneySegments Görevlerin yürütülmesi gereken sırayla yolculuk segmentlerinin listesi. Listedeki ilk görev önce yürütülür.
remainingVehicleJourneySegments[i].stop Listedeki i görevinin durdurulması.
remainingVehicleJourneySegments[i].stop.plannedLocation Durağın planlanan konumu.
remainingVehicleJourneySegments[i].stop.tasks Bu araç durağında gerçekleştirilecek görevlerin listesi.
remainingVehicleJourneySegments[i].stop.state State.NEW

Görev atama örneği

Aşağıdaki örneklerde, araca iki yeni görev eklemek için 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>, filonuzda görev sıralamasını güncellemek istediğiniz bir teslimat aracının benzersiz tanımlayıcısıdır. Aracı oluştururken belirttiğiniz tanımlayıcıdır.

  • İstek başlığında, Bearer <token> değerine sahip bir Authorization alanı bulunmalıdır. Burada <token>, Hizmet hesabı rolleri ve JSON Web jetonları bölümlerinde 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.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?