הגדרת משימות

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

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

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

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

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

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

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

בדוגמאות הבאות מוסבר איך להגדיר את חלון הזמן באמצעות ספריית Java 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)
    .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

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

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