Bu dokümanda, görevleri nasıl oluşturacağınızı ve kullanacağınızı bildiğiniz varsayılmaktadır. Aşağıda, gönderim görevlerinin nasıl sonlandırılacağına dair belirli örnekler verilmiştir:
Görevi kapatma: Bir kargo görevi kapatıldığında, durumu
CLOSED
olarak değişir ve görevin artık etkin olmadığı belirtilir.Görev sonucunu ayarlama: Bir görev kapatıldıktan sonra sonucunu
SUCCEEDED
veyaFAILED
olarak ayarlayarak görevi tamamlayabilirsiniz. Bu, yolculuk paylaşımında teslimat sonucunu göstermek ve Fleet Engine hizmeti için doğru faturalandırma sağlamak amacıyla bir görevi tamamlamanın önemli bir parçasıdır.
Görevi kapatma
Bir görevi aşağıdaki şekillerde kapatabilirsiniz:
- Aracın durak durumunu güncelleyin. Durağı araçtan kaldırmanız, böylece durakla ilişkili tüm görevlerin kapatılmasına neden olur. 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 başlıklı makalenin Görev sırasını güncelleme bölümüne bakın.
- Görev durumunu
CLOSED
olarak ayarlayın. Bu 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ı, onun başarılı veya başarısız olduğu anlamına gelmez. Görevin artık devam etmekte olmadığını gösterir. Bir görevin gerçek sonucunu belirtmek ve bunu 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örev için benzersiz bir tanımlayıcıdır.
- İstek başlığında, Bearer <token> değerine sahip bir Yetkilendirme alanı bulunmalıdır. Burada <token>, sunucunuz tarafından Hizmet hesabı rolleri ve JSON Web jetonları bölümlerinde açıklanan yönergelere göre 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 belirleyin
Bir görevin asıl sonucunu belirtmek için kapalı görevlerin sonucunu SUCCEEDED
veya FAILED
olarak ayarlarsınız. Bir görevin sonucunu belirlemeden önce
kapatılması gerekir. 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. İsterseniz bunun yerine bu belgeyi de gönderebilirsiniz.
- 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örevin sonucunu belirleyen aynı istekte güncelleme yapın.
- Bunları daha sonra, görev sonucunu belirledikten sonra güncelleyin.
- Ayarlandıktan sonra tekrar değiştirin.
Fleet Engine, görev sonuçlarıyla ilgili aşağıdaki güncellemeleri engeller:
SUCCEEDED
veyaFAILED
olarak ayarlanan bir görev sonucunu 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 varlıktaki diğer alanları yoksayar.
Zorunlu alan | Değer |
---|---|
taskOutcome |
Outcome.SUCCEEDED veya Outcome.FAILED |
İsteğe bağlı alan | Değer |
---|---|
taskOutcomeLocation |
Görevin tamamlandığı konum. Ayarlanmazsa Fleet Engine bu değeri 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 yapılan 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örev için benzersiz bir 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
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