השלמה של משימות

ההנחה במאמר הזה היא שאתם יודעים איך ליצור משימות ואיך להשתמש בהן. במאמר הזה מפורטות דוגמאות ספציפיות לאופן השלמת משימות משלוח, כמו:

  • סגירת משימה: סגירת משימת משלוח משנה את המצב שלה ל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> הוא מזהה ייחודי של המשימה.
  • כותרת הבקשה צריכה להכיל את השדה 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 ממלא אוטומטית את המיקום של תוצאת המשימה במיקום הידוע האחרון של הרכב. אם רוצים, אפשר לספק את זה במקום.
  • הזמן שבו המשימה הושלמה: המערכת של 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

המאמרים הבאים