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