Görevleri tamamlama

Bu dokümanda, görevleri nasıl oluşturacağınızı ve kullanacağınızı bildiğiniz varsayılmaktadır. Gönderim görevlerinin nasıl sonlandırılacağına dair aşağıdaki gibi belirli örnekler sağlar:

  • Görevi kapatma: Gönderi görevini kapattığınızda görevi CLOSED olarak değiştirirsiniz ve görevin artık etkin olmadığını belirtirsiniz.

  • Görev sonucunu ayarlama: Bir görev kapatıldıktan sonra sonucunu SUCCEEDED veya FAILED olarak ayarlayarak görevi tamamlayabilirsiniz. Bu, yayın sonucunu yolculuk paylaşımında göstermek ve Fleet Engine hizmeti için doğru faturalandırmayı sağlamak amacıyla bir görevi tamamlamanın önemli bir parçasıdır.

Görevleri kapatma

Bir görevi aşağıdaki şekillerde kapatabilirsiniz:

  • Aracın durak durumunu güncelleyin. Durağı araçtan kaldırdığınızda durakla ilişkili tüm görevler de kapatılır. Ayrıntılar için güncelleme durdurma durumuna bakın.
  • Görevi araç durakları listesinden kaldırın. Bu işlem, durak için görev listesinin güncellenmesini içerir ancak kapalı görev artık listenin bir parçası değildir. Görevleri güncelleme bölümündeki Görev sırasını güncelleme bölümüne bakın.
  • Görev durumunu CLOSED olarak ayarlayın. Bu işlem yalnızca araçlara atanmamış görevlerde yapılabilir. Bu bölümde bu yaklaşım gösterilmektedir.

Kapattığınız görevleri yeniden açamazsınız.

Görevlerin kapatılması, görevle ilgili başarı veya başarısızlık durumunu göstermez. Bu, görevin artık devam eden bir görev olarak kabul edilmediğini gösterir. Bir görevin gerçek sonucunu belirtmek ve bu sonucu filo takibi ve yolculuk paylaşımı amacıyla göstermek için görevin gerçek sonucunu belirtmeniz gerekir. Aşağıdaki Görev sonucunu ayarlama bölümüne bakın.

Görevleri kapatmak için görev alanları

Bu bölümde, bir görev kapatılırken ayarlanması gereken zorunlu alanlar açıklanmaktadır. Filo motoru, güncelleme için öğedeki diğer tüm alanları yoksayar.

Zorunlu alan Değer
state State.CLOSED

Görevleri doğrudan kapatma

Aşağıdaki örneklerde, atanmamış bir görevin gRPC'de veya UpdateTask

gRPC

 static final String PROJECT_ID = "my-delivery-co-gcp-project";
 static final String TASK_ID = "task-8241890";

 DeliveryServiceBlockingStub deliveryService =
   DeliveryServiceGrpc.newBlockingStub(channel);

 // Task settings
 String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
 Task task = Task.newBuilder()
   .setName(taskName)
   .setState(Task.State.CLOSED) // You can only directly CLOSE a
   .build();                    // task that is NOT assigned to a vehicle.

 // Task request
 UpdateTaskRequest updateTaskRequest =
   UpdateTaskRequest.newBuilder()  // No need for the header
       .setTask(task)
       .setUpdateMask(FieldMask.newBuilder().addPaths("state"))
       .build();

 try {
   Task updatedTask = deliveryService.updateTask(updateTaskRequest);
 } 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>/tasks/<id>?updateMask=state

  • <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 metnine bir Task öğesi eklemeniz gerekir.

Örnek curl komutu:

 # Set JWT, PROJECT_ID, and TASK_ID in the local environment
 curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=state,taskOutcome,taskOutcomeTime" \
   -H "Content-type: application/json" \
   -H "Authorization: Bearer ${JWT}" \
   --data-binary @- << EOM
 {
   "state": "CLOSED",
   "taskOutcome": "SUCCEEDED",
   "taskOutcomeTime": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
 }
 EOM

Görev sonucunu ayarlama

Bir görevin gerçek sonucunu belirtmek için kapalı görevlerin sonucunu SUCCEEDED veya FAILED olarak ayarlarsınız. Görevin sonucunu belirlemeden önce görev kapatılmalıdır. Fleet Engine yalnızca durumu SUCCEEDED olan teslimat görevleri için ücret alır.

Görev sonucu ayrıntıları

Görevler, görev sonucuyla ilgili ek ayrıntılar da sağlar. Aşağıdaki ayarları doğrudan ayarlayabilirsiniz ve Fleet Engine ayarlarınıza uyar:

  • Görev sonucu konumu: Fleet Engine, görev sonucu konumunu bilinen son araç konumuyla otomatik olarak doldurur. Dilerseniz bunun yerine bu bilgileri de sağlayabilirsiniz.
  • Görev sonucu zamanı: Fleet Engine bu alanı doldurmaz ancak siz ayarlayabilirsiniz.

task_outcome_location ve task_outcome_time ayarlamak için aşağıdaki yaklaşımlardan herhangi birini kullanabilirsiniz:

  • Görev sonucunu ayarlayan aynı istekte güncelleyin.
  • Görev sonucunu ayarladıktan sonra daha sonra güncelleyebilirsiniz.
  • Ayarlandıktan sonra yeniden değiştirebilirsiniz.

Fleet Engine, görev sonuçlarıyla ilgili aşağıdaki güncellemeleri engeller:

  • SUCCEEDED veya FAILED olarak ayarlanan görev sonuçlarını değiştiremezsiniz.
  • Sonuçları belirlenmemiş görevler için görev sonucu konumu veya sonuç zamanı ayarlayamazsınız.

Sonuç ayarlamak için görev alanları

Bu bölümde, görev sonucu ayarlanırken ayarlanması gereken zorunlu ve isteğe bağlı alanlar açıklanmaktadır. Fleet Engine, güncelleme için öğedeki diğer alanları yoksayar.

Zorunlu alan Değer
taskOutcome Outcome.SUCCEEDED veya Outcome.FAILED

İsteğe bağlı alanDeğer
taskOutcomeLocation Görevin tamamlandığı konum. Ayarlanmazsa Fleet Engine bunu varsayılan olarak son araç konumuna ayarlar.
taskOutcomeTime Görevin tamamlandığı zaman damgası.

Görev sonucu örnekleri

Aşağıdaki örnekte, bir görev sonucunu SUCCEEDED olarak ayarlamak ve görevin tamamlandığı konumu ayarlamak için Java gRPC kitaplığının ve UpdateTask 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 TASK_ID = "task-8241890";

 DeliveryServiceBlockingStub deliveryService =
   DeliveryServiceGrpc.newBlockingStub(channel);

 // Task settings
 String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
 Task task = Task.newBuilder()
   .setName(taskName)
   .setTaskOutcome(TaskOutcome.SUCCEEDED)
   .setTaskOutcomeTime(now())
   .setTaskOutcomeLocation(               // Grand Indonesia East Mall
     LocationInfo.newBuilder().setPoint(
       LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
   .build();

 // Task request
 UpdateTaskRequest updateTaskRequest =
   UpdateTaskRequest.newBuilder()  // No need for the header
       .setTask(task)
       .setUpdateMask(FieldMask.newBuilder().addPaths("task_outcome", "task_outcome_time", "task_outcome_location"))
       .build();

 try {
   Task updatedTask = deliveryService.updateTask(updateTaskRequest);
 } 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>/tasks/<id>?updateMask=taskOutcome,taskOutcomeTime,taskOutcomeLocation

  • <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 Task öğesi içermelidir.
 # Set JWT, PROJECT_ID, and TASK_ID in the local environment
 curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=taskOutcome,taskOutcomeTime,taskOutcomeLocation" \
   -H "Content-type: application/json" \
   -H "Authorization: Bearer ${JWT}" \
   --data-binary @- << EOM
 {
   "taskOutcome": "SUCCEEDED",
   "taskOutcomeTime": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")",
   "taskOutcomeLocation": {
     "point": {
       "latitude": -6.195139,
       "longitude": 106.820826
     }
   }
 }
 EOM

Sırada ne var?