המסמך הזה מבוסס על ההנחה שאתם מכירים את:
- יצירת משימות משלוח
- מבוא למשימות מתוזמנות, שקשור לנושא בין משימות, עצירות וכלי רכב, בקפידה.
בתרחיש משלוחים בעולם האמיתי, עסקים מקצים משימות של משלוחים נהגים, שלאחר מכן משתמשים ברכב כדי למסור אותם למקבל התשלום במועד מתוכנן למשל בית או חדר משלוחים במתחם בניינים. שלך לבנות מודל כזה ב-Fleet Engine באמצעות יצירת משימה והנפקה של רכב מסירה בקשה לעדכון, ואז עדכון בישות הרכב ברשימה של עצירות ביניים. טיולים. אתם מקצים לכל עצירה רשימת משימות שצריך להשלים בכל עצירה.
אפשר לעדכן את משימות הרכב בכל שלב, אבל בדרך כלל עושים זאת עבור למטרות הבאות:
- לתזמן משימות לביצוע ברכב. אפשר לבצע את הפעולות האלה באמצעות בקשת עדכון שמוסיפה עצירה חדשה לרכב, או באמצעות עדכון שמוסיפה משימה חדשה לעצירה קיימת.
- לעדכן את הסדר של המשימות הקיימות שמשויכות לעצירה נתונה של רכב.
- משנים את המיקום שבו בוצעה המשימה. כברירת מחדל, Fleet Engine מסמן את מיקום השלמת המשימה כמו מיקום העצירה של הרכב שמשויכים למשימה הזו. אפשר לציין מיקומים ספציפיים אם רוצים למשימות בודדות. לדוגמה, ייתכן שיש תחנת רכב גדולה מספר חבילות, ולכל אחת מהן מוקצית חדר למשלוח דואר ספציפי.
- סגירה של משימות שהוקצו בעבר כדי לא לעדכן אותן לביצוע הזמנה. למידע נוסף, ראו השלמת משימות.
תזמון או שינוי של משימות מסירה
אפשר לתזמן או לשנות משימות שהוקצו לרכב דרך כל שרת או להשתמש ב-Driver SDK, אם אתם מספקים לנהג את היכולת לנהל את המשימות באמצעות מכשיר מהימן. משתמשים בשיטה אחת בלבד כדי להימנע ממרוץ תהליכים ולשמור על מקור מהימן אחד.
כדי לשנות משלוח מרכב אחד לרכב אחר, צריך לסגור את המשימה המקורית וליצור אותו מחדש לפני שמקצים אותו לרכב אחר. אם אתה מעדכן רכב להעברה כך שיכלול משימה שכבר הוקצתה מקבלים הודעת שגיאה.
שדות חובה לעדכון משימות
בקטע הזה מפורטים השדות הנדרשים שצריך להגדיר כשמעדכנים משימה לרכב. לא יסופקו שדות אופציונליים. מנוע כלל המכשירים בארגון מתעלם מכל השדות האחרים בישות עבור העדכון.
שדה חובה | ערך |
---|---|
remainingVehicleJourneySegments |
רשימה של מקטעי המסלול למשימות לפי הסדר שבו צריך לבצע אותן. המשימה הראשונה ברשימה מבוצעת ראשונה. |
remainingVehicleJourneySegments[i].stop |
העצירה של משימה i ברשימה. |
remainingVehicleJourneySegments[i].stop.plannedLocation |
המיקום המתוכנן של העצירה. |
remainingVehicleJourneySegments[i].stop.tasks |
רשימת משימות שצריך לבצע בתחנה הזו של הרכב. |
remainingVehicleJourneySegments[i].stop.state |
State.NEW |
דוגמה להקצאת משימות
הדוגמאות הבאות מראות איך להשתמש בספריית Java gRPC וב-HTTP
הפעלת REST ל-UpdateDeliveryVehicle
כדי להוסיף שתי משימות חדשות לרכב.
gRPC
static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";
static final String TASK1_ID = "task-756390";
static final String TASK2_ID = "task-849263";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Vehicle settings
String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
.addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder() // 1st stop
.setStop(VehicleStop.newBuilder()
.setPlannedLocation(LocationInfo.newBuilder()
.setPoint(LatLng.newBuilder()
.setLatitude(37.7749)
.setLongitude(122.4194)))
.addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
.setState(VehicleStop.State.NEW)))
.addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder() // 2nd stop
.setStop(VehicleStop.newBuilder()
.setPlannedLocation(LocationInfo.newBuilder()
.setPoint(LatLng.newBuilder()
.setLatitude(37.3382)
.setLongitude(121.8863)))
.addTasks(TaskInfo.newBuilder().setTaskId(TASK2_ID))
.setState(VehicleStop.State.NEW)))
.build();
// DeliveryVehicle request
UpdateDeliveryVehicleRequest updateDeliveryRequest =
UpdateDeliveryVehicleRequest.newBuilder() // No need for the header
.setName(vehicleName)
.setDeliveryVehicle(deliveryVehicle)
.setUpdateMask(FieldMask.newBuilder().addPaths("remaining_vehicle_journey_segments"))
.build();
try {
DeliveryVehicle updatedDeliveryVehicle =
deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
} 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>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments`
<id> הוא מזהה ייחודי של רכב משלוח בארגון שלך שעבורו אתם מתכוונים לעדכן את סדר המשימות. זה המזהה שציינת כשיצרת את הרכב.
כותרת הבקשה חייבת להכיל שדה Authorization עם הערך הערוץ <token>, שבו ה-<token> מונפק על ידי השרת בהתאם להנחיות שמפורטות בתפקידים של חשבון שירות אסימוני אינטרנט JSON.
גוף הבקשה חייב להכיל ישות
DeliveryVehicle
פקודת curl
לדוגמה:
# Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
# environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
"remainingVehicleJourneySegments": [
{
"stop": {
"state": "NEW",
"plannedLocation": {
"point": {
"latitude": 37.7749,
"longitude": -122.084061
}
},
"tasks": [
{
"taskId": "${TASK1_ID}"
}
]
}
},
{
"stop": {
"state": "NEW",
"plannedLocation": {
"point": {
"latitude": 37.3382,
"longitude": 121.8863
}
},
"tasks": [
{
"taskId": "${TASK2_ID}"
}
]
}
}
]
}
EOM