במסמך הזה נדגיש את ההנחה שיש לכם הבנה לגבי יצירת משימות ושימוש בהן. מפורטות בו דוגמאות ספציפיות להשלמת משימות משלוח באופן הבא:
סגירת משימה: סגירת משימה של משלוח משנה את הסטטוס שלה ל-
CLOSED
ומציינת שהמשימה הזו כבר לא פעילה.מגדירים את תוצאת המשימה: אחרי שסוגרים את המשימה, מסיימים אותה על ידי הגדרת התוצאה
SUCCEEDED
אוFAILED
. זהו שלב חשוב בהשלמת המשימה, כדי להציג את תוצאת המסירה ב'שיתוף התהליך' ולוודא שהחיוב על שירות Fleet Engine תקין.
סגירת משימה
אפשר לסגור משימות בדרכים הבאות:
- עדכון סטטוס העצירה של הרכב. מסירים את התחנה מהרכב, וכתוצאה מכך נסגרות כל המשימות שמשויכות לתחנה. מידע נוסף מופיע במאמר בנושא עדכון סטטוס העצירה.
- מסירים את המשימה מרשימת תחנות הרכב. כדי לעשות זאת, צריך לעדכן את רשימת המשימות של התחנה, אבל המשימה הסגורה לא תהיה יותר חלק מהרשימה. ראו 'עדכון של סדר המשימות' בקטע עדכון משימות.
- מגדירים את מצב המשימה כ-
CLOSED
. אפשר לעשות זאת רק למשימות שלא הוקצו לכלי רכב. בקטע הזה מוצגת הגישה הזו.
אחרי שסוגרים משימה, אי אפשר לפתוח אותה מחדש.
סגירת המשימה לא מציינת אם היא הושלמה בהצלחה או נכשלה. היא מציינת שהמשימה כבר לא מתבצעת. כדי לציין את התוצאה בפועל של המשימה ולהציג אותה למטרות מעקב אחר צי רכב ולצורך שיתוף המסלול, עליכם לציין את התוצאה בפועל של המשימה. הגדרת התוצאה של המשימה בהמשך.
שדות של משימות לסגירת משימות
בקטע הזה מפורטים השדות הנדרשים שצריך להגדיר כשסוגרים משימה. מנוע ה-Fleet מתעלם מכל השדות האחרים בישות לצורך העדכון.
שדה חובה | ערך |
---|---|
state |
State.CLOSED |
סגירת משימה ישירות
הדוגמאות הבאות מראות איך להגדיר משימה שלא הוקצתה למצב סגור, ב-gRPC או באמצעות קריאה של בקשת REST ל-HTTP ל-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> הוא מזהה ייחודי של המשימה.
- כותרת הבקשה חייבת לכלול את השדה 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
.
פרטים על תוצאת המשימה
אפליקציית Tasks מספקת גם פרטים נוספים על תוצאת המשימה. אתם יכולים להגדיר את ההגדרות האלה ישירות, ו-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> הוא מזהה ייחודי של המשימה.
- כותרת הבקשה חייבת לכלול את השדה 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