הגדרת משימות

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

  • הגדרת חלון זמן ליעד של משימת משלוח: מגדירים את חלון הזמן להשלמת המשימה.

  • התאמה אישית של הרשאות הגישה למשימה: התאמה אישית של החשיפה של פעילויות המשימה עבור ללקוחות או למפעילים של כלל המכשירים בארגון.

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

הגדרת חלון זמן ליעד

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

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

בדוגמאות הבאות מוסבר איך להגדיר את חלון הזמן באמצעות Java gRPC Library או איך לשלוח בקשת 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)
    .setTargetTimeWindow(
      TimeWindow.newBuilder()
        .setStartTime(Timestamp.newBuilder().setSeconds(1680123600))
        .setEndTime(Timestamp.newBuilder().setSeconds(1680130800)))
    .build();

  // Task request
  UpdateTaskRequest updateTaskRequest =
    UpdateTaskRequest.newBuilder()  // No need for the header
        .setTask(task)
        .setUpdateMask(FieldMask.newBuilder().addPaths("targetTimeWindow"))
        .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

כדי להגדיר חלון זמן למשימה באמצעות HTTP, קוראים לפונקציה PATCH משתמשים בפונקציה updateMask כדי לעדכן את הפרמטר targetTimeWindow:

PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=targetTimeWindow

כאן &lt;id&gt; הוא מזהה ייחודי של המשימה. כותרת הבקשה חייב להכיל שדה Authorization עם הערך Bearer <token>, שבו ה-&lt;token&gt; מונפק על ידי השרת שלכם בהתאם להנחיות כפי שמתואר בתפקידי חשבון שירות ובאסימוני אינטרנט JSON.

# 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=targetTimeWindow" \
    -H "Content-type: application/json" \
    -H "Authorization: Bearer ${JWT}" \
    --data-binary @- << EOM
  {
    "targetTimeWindow": {
      "startTime": "2023-03-29T21:00:00Z",
      "endTime": "2023-03-29T23:00:00Z"
    }
  }
  EOM

התאמה אישית של הרשאות הגישה למשימה

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

בקטע הזה מתוארים כללי החשיפה של אובייקטים במעקב במפה. הכללים האלו חלים על שתי קטגוריות של אובייקטים:

  • החשיפה של סמן המיקום
  • הרשאות גישה לנתוני המשימות למשימות פעילות ברכב, כמו קווים פוליגוניים וזמן הגעה משוער

כללי החשיפה של סמן המיקום

ב-Fleet Engine מוצגים סמני מיקום של מיקום המשלוח מוצג במפה, בלי קשר למצב המסירה.

כללי הרשאות גישה לנתונים של משימות

בקטע הזה מתוארים כללי ברירת המחדל של הרשאות הגישה שחלים על נתוני המשימות. אפשר להתאים אישית רק משימות של רכבים פעילים. כלומר, רק כשמשתמשים במשימות של איסוף ושליחה, אפשר להחיל כללי חשיפה מותאמים אישית.

יכול להיות שהמשימות הבאות לא יותאמו אישית:

  • תחנות מתוכננות
  • משימות של חוסר זמינות
  • משימות שקשורות לרכבים לא פעילים

כללי הרשאות הגישה למשימות של חוסר זמינות

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

הרשאות גישה למשימות הרכב הפעילות

האובייקט TaskTrackingInfo מספק מספר רכיבי נתונים יכולים להיות גלויים באמצעות הספרייה למעקב אחר משלוחים. כברירת מחדל, השדות האלה מוצגים כשהמשימה מוקצית לרכב וכשהרכב עד 5 עצירות ביניים מהמשימה. החשיפה מסתיימת כשהמשימה מסתיימת או בוטל.

אפשר להתאים אישית את הרשאות הגישה לכל משימה בנפרד באמצעות הגדרה TaskTrackingViewConfig במשימה כשיוצרים או מעדכנים אותה ב-Fleet Engine. פעולה זו יוצרת כללים עבור רכיבי נתונים בודדים זמינים.

בטבלה הבאה מוצגים השדות שאפשר להחיל עליהם כללי חשיפה.

שדות של משימות רכב לכללי חשיפה
  • ניתוב קווים פוליגוניים
  • זמן ההגעה המשוער
  • הזמן המשוער להשלמת המשימה
  • מרחק הנסיעה שנותר למשימה
  • מספר העצירות שנותרו
  • מיקום הרכב

טבלה זו מציגה את אפשרויות החשיפה הזמינות עבור השדות המפורטים למעלה.

האפשרויות של הרשאות הגישה
  • מספר העצירות שנותרו
  • משך הזמן עד לשעת ההגעה המשוערת
  • מרחק הנסיעה שנשאר
  • מוצג תמיד
  • לא גלוי אף פעם

קווים פוליגוניים וכללי חשיפת מיקום של רכבים

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

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

קווים פוליגוניים של נתיבים ומיקום רכב מציינים את אותן אפשרויות חשיפה

בתרחיש הזה, הקו הפוליגוני ומיקום הרכב מוגדרים באופן זהה אפשרויות, שכוללות:

  • מספר העצירות שנותרו
  • משך זמן עד זמן הגעה משוער
  • מרחק הנסיעה שנותר

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

```js
"taskTrackingViewConfig": {
  "routePolylinePointsVisibility": {
    "remainingStopCountThreshold": 3
  },
  "vehicleLocationVisibility": {
    "remainingStopCountThreshold": 5
  },
}
```

קווים פוליגוניים של נתיבים ומיקום רכב מציינים את אפשרויות החשיפה השונות

אם לקווים פוליגוניים של מסלולים ולמיקום הרכב יש אפשרויות חשיפה שונות, מיקום הרכב גלוי רק כאשר שתי אפשרויות החשיפה שלו מרוצה. שוב, החשיפה של קו פוליגוני כפופה לכללי החשיפה של הרכב:

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

לדוגמה:

  "taskTrackingViewConfig": {
    "routePolylinePointsVisibility": {
      "remainingStopCountThreshold": 3
    },
    "vehicleLocationVisibility": {
      "remainingDrivingDistanceMetersThreshold": 3000
    },
  }

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

דוגמה להתאמה אישית של הרשאות הגישה למשימה

בדוגמאות הבאות אפשר לראות איך מגדירים משימה באמצעות הפקודה הבאה: כללי חשיפה:

  • הצגת קווים פוליגוניים של המסלול אם הרכב נמצא בטווח של 3 עצירות ביניים.
  • הצגת זמן ההגעה המשוער אם מרחק הנסיעה שנותר קצר מ-5,000 מטרים.
  • אף פעם לא להציג את ספירת העצירות הנותרת.
  • כל אחד מהשדות שומר על ברירת המחדל של חשיפת המודעות כאשר הרכב נמצא ב-5 עצירות ביניים מהמשימה.

אפשר לעיין ב-TaskTrackingViewConfig ל-gRPC או ל-REST.

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)
  .setTaskTrackingViewConfig(
    TaskTrackingViewConfig.newBuilder()
      .setRoutePolylinePointsVisibility(
        VisibilityOption.newBuilder().setRemainingStopCountThreshold(3))
      .setEstimatedArrivalTimeVisibility(
        VisibilityOption.newBuilder().remainingDrivingDistanceMetersThreshold(5000))
      .setRemainingStopCountVisibility(
        VisibilityOption.newBuilder().setNever(true)))
  .build();

// Task request
UpdateTaskRequest updateTaskRequest =
  UpdateTaskRequest.newBuilder()  // No need for the header
      .setTask(task)
      .setUpdateMask(FieldMask.newBuilder().addPaths("taskTrackingViewConfig"))
      .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

כדי להגדיר את חלון ההגדרה של תצוגת המעקב אחר המשימה באמצעות HTTP, קוראים לפונקציה PATCH משתמשים בפונקציה updateMask כדי לעדכן את הפרמטר taskTrackingViewConfig:

PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=taskTrackingViewConfig

לדוגמה:

# 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=taskTrackingViewConfig" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "taskTrackingViewConfig": {
    "routePolylinePointsVisibility": {
      "remainingStopCountThreshold": 3
    },
    "estimatedArrivalTimeVisibility": {
      "remainingDrivingDistanceMetersThreshold": 5000
    },
    "remainingStopCountVisibility": {
      "never": true
    }
  }
}
EOM

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