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

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

  • סגירת משימה: סגירת משימת משלוח משנה את הסטטוס שלה ל-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

פקודת 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

 # 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

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