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

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

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

  • &lt;id&gt; הוא מזהה ייחודי של המשימה.
  • כותרת הבקשה חייבת להכיל שדה 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

  • &lt;id&gt; הוא מזהה ייחודי של המשימה.
  • כותרת הבקשה חייבת להכיל שדה 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

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