Görevleri tamamlama

Bu belgede, görev oluşturma ve kullanma hakkında bilgi sahibi olduğunuz varsayılmaktadır. Gönderim görevlerinin nasıl tamamlanacağına dair aşağıdaki gibi spesifik örnekler sunar:

  • Görevi kapatma: Bir gönderi görevinin kapatılması, durumunu CLOSED olarak değiştirir ve bu görevin artık etkin olmadığını gösterir.

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

Görevi kapatma

Bir görevi aşağıdaki yöntemlerle kapatabilirsiniz:

  • Aracın durak durumunu güncelleyin. Durağı araçtan kaldırdığınızda durakla ilişkili tüm görevler kapatılır. Ayrıntılar için Güncelleme durdurma durumu başlıklı makaleyi inceleyin.
  • 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 konusuna 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.

Bir görevin kapatılması, görevin başarılı veya başarısız olduğunu göstermez. Bu, görevin artık devam ediyor olarak kabul edilmediğini gösterir. Bir görevin gerçek sonucunu belirtmek ve bu sonucun Filo Takibi ve yolculuk paylaşımı amacıyla gösterilmesini sağlamak 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. Fleet Engine, güncelleme için varlıktaki diğer tüm alanları yoksayar.

Zorunlu alan Değer
state State.CLOSED

Görevi doğrudan kapatma

Aşağıdaki örneklerde, atanmamış bir görevin gRPC'de veya UpdateTask adresine HTTP REST istek çağrısı kullanılarak nasıl kapalı duruma ayarlanacağı 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)
   .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 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övdesine bir Task varlığı 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. Sonucunu ayarlamadan önce görevi kapatmanız gerekir. Fleet Engine, yalnızca SUCCEEDED durumundaki teslimat görevleri için ücret alır.

Görev sonucu ayrıntıları

Görevler, görev sonucu hakkında ek ayrıntılar da sağlar. Bunları doğrudan ayarlayabilirsiniz. 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 bilgiyi de sağlayabilirsiniz.
  • Görev sonucu zamanı: Fleet Engine bu alanı doldurmaz ancak sizin ayarlamanız için kullanılabilir.

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

  • Görev sonucunu ayarlayan aynı istekte bunları güncelleyin.
  • Görev sonucunu belirledikten sonra güncelleyebilirsiniz.
  • Ayarladıktan sonra tekrar değiştirebilirsiniz.

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

  • Görev sonucu SUCCEEDED veya FAILED olarak ayarlandıktan sonra değiştirilemez.
  • Sonucu ayarlanmamış görevler için görev sonucu konumu veya sonuç zamanı ayarlayamazsınız.

Sonucu ayarlamak için görev alanları

Bu bölümde, görev sonucu ayarlanırken doldurulması gereken zorunlu ve isteğe bağlı alanlar açıklanmaktadır. Fleet Engine, güncelleme için varlıktaki 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, varsayılan olarak son araç konumunu kullanır.
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 belirlemek için Java gRPC kitaplığı 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 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 Task varlığı 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?