ההנחה במסמך הזה היא שאתם יודעים איך ליצור משימות ולהשתמש בהן. הוא כולל דוגמאות ספציפיות להשלמת משימות משלוח:
סגירת משימה: סגירת משימת משלוח משנה את הסטטוס שלה ל-
CLOSEDומציינת שהמשימה כבר לא פעילה.הגדרת תוצאת המשימה: אחרי שסוגרים משימה, מסיימים אותה על ידי הגדרת התוצאה שלה ל-
SUCCEEDEDאו ל-FAILED. זהו חלק חשוב בהשלמת משימה, כדי להציג את תוצאת המסירה בשיתוף הנסיעה ולוודא שהחיוב על שירות Fleet Engine נכון.
איך סוגרים משימה
אתם יכולים לסגור משימה בדרכים הבאות:
- עדכון סטטוס העצירה של הרכב. אתם מסירים את העצירה מהרכב, וכתוצאה מכך כל המשימות שמשויכות לעצירה נסגרות. לפרטים נוספים
- להסיר את המשימה מרשימת הרכבים העומדים. כדי לעשות את זה, צריך לעדכן את רשימת המשימות של התחנה, אבל בלי המשימה שנסגרה. בקטע עדכון משימות מוסבר איך משנים את סדר המשימות.
- מגדירים את מצב המשימה לערך
CLOSED. אפשר לעשות את זה רק במשימות שלא הוקצו לכלי רכב. בקטע הזה מוצגת הגישה הזו.
אחרי שסוגרים משימה, אי אפשר לפתוח אותה מחדש.
סגירת משימה לא מעידה על הצלחה או כישלון. זה אומר שהמשימה כבר לא נחשבת בתהליך. כדי לציין את התוצאה בפועל של משימה ולהציג אותה למטרות מעקב אחר צי הרכב ושיתוף הנסיעה, צריך לציין את התוצאה בפועל של המשימה. הגדרת תוצאת המשימה
שדות של משימות לסגירת משימות
בקטע הזה מפורטים שדות החובה שצריך להגדיר כשסוגרים משימה. מנוע Fleet Engine מתעלם מכל שאר השדות בישות לצורך העדכון.
| שדה חובה | ערך |
|---|---|
state |
State.CLOSED |
איך סוגרים משימה ישירות
בדוגמאות הבאות מוסבר איך להגדיר משימה שלא הוקצתה למצב סגור, ב-gRPC או באמצעות קריאה לבקשת HTTP REST אל 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> הוא מזהה ייחודי של המשימה.
- ה-request header חייב להכיל את השדה Authorization עם הערך Bearer <token>, כאשר <token> מונפק על ידי השרת שלכם בהתאם להנחיות שמתוארות בקטעים תפקידים של חשבונות שירות ואסימוני אינטרנט מסוג JSON.
- צריך לכלול ישות
Taskבגוף הבקשה
פקודת curl לדוגמה:
# 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הגדרת תוצאת המשימה
כדי לציין את התוצאה בפועל של משימה, מגדירים את התוצאה של משימות סגורות ל-SUCCEEDED או ל-FAILED. כדי להגדיר את התוצאה של משימה, צריך קודם לסגור אותה. מערכת Fleet Engine מחייבת רק על משימות מסירה בסטטוס SUCCEEDED.
פרטי תוצאות המשימה
במשימות יש גם פרטים נוספים על תוצאת המשימה. אתם יכולים להגדיר אותם ישירות, ו-Fleet Engine יפעל בהתאם להגדרות שלכם:
- מיקום תוצאת המשימה: Fleet Engine ממלא באופן אוטומטי את מיקום תוצאת המשימה במיקום הידוע האחרון של הרכב. אם אתם מעדיפים, אתם יכולים לספק את הפרטים האלה במקום.
- Task outcome time: השדה הזה לא מתמלא על ידי Fleet Engine, אבל אתם יכולים להגדיר אותו.
אפשר להשתמש בכל אחת מהשיטות הבאות כדי להגדיר את task_outcome_location ואת task_outcome_time:
- מעדכנים אותם באותה בקשה שבה מגדירים את תוצאת המשימה.
- לעדכן אותם מאוחר יותר, אחרי שתגדירו את תוצאת המשימה.
- לשנות אותם שוב אחרי שהם הוגדרו.
Fleet Engine מונע את העדכונים הבאים שקשורים לתוצאות של משימות:
- אי אפשר לשנות את תוצאת המשימה אחרי שהיא מוגדרת לערך
SUCCEEDEDאוFAILED. - אי אפשר להגדיר מיקום או זמן לתוצאה של משימה אם לא הוגדרה תוצאה.
שדות המשימה להגדרת התוצאה
בקטע הזה מפורטים שדות החובה והשדות האופציונליים שצריך להגדיר כשמגדירים תוצאה של משימה. מערכת Fleet Engine מתעלמת משדות אחרים בישות לצורך העדכון.
| שדה חובה | ערך |
|---|---|
taskOutcome |
Outcome.SUCCEEDED או Outcome.FAILED |
| שדה אופציונלי | ערך |
|---|---|
taskOutcomeLocation |
המיקום שבו המשימה הושלמה. אם לא מגדירים את המיקום, Fleet Engine משתמש במיקום האחרון של הרכב כברירת מחדל. |
taskOutcomeTime |
חותמת הזמן של מועד השלמת המשימה. |
דוגמאות לתוצאות של משימות
בדוגמה הבאה מוסבר איך משתמשים בספריית Java gRPC ובקריאת HTTP REST ל-UpdateTask כדי להגדיר את תוצאת המשימה ל-SUCCEEDED ואת המיקום שבו המשימה הושלמה.
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> הוא מזהה ייחודי של המשימה.
- ה-request header חייב להכיל את השדה Authorization עם הערך Bearer <token>, כאשר <token> מונפק על ידי השרת שלכם בהתאם להנחיות שמתוארות בקטעים תפקידים של חשבונות שירות ואסימוני אינטרנט מסוג JSON.
- גוף הבקשה חייב להכיל ישות
Task.
# 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