המסמך הזה מבוסס על ההנחה שאתם מכירים את:
- יצירת משימות משלוח
- מבוא למשימות מתוזמנות, שקשור לנושא בין משימות, עצירות וכלי רכב, בקפידה.
כמו שמצוין בקטע משימות מתוזמנות, Essentialt Engine Essentials, יוצרים משימות ומשייכים אותן לרכב משמשת לבניית מודלים של הקשר בעולם האמיתי בין המשימה המיקום שבו הרכב צפוי לעצור כדי שהנהג יוכל להשלים את התהליך את המשימה.
משם תוכלו לנהל את התקדמות המשימות לאורך מחזור החיים שלהן על ידי שליחת עדכונים ל-Fleet Engine כדי שיוכל לבצע בצורה הטובה ביותר את הניתוב והסטטוס לאורך המסלול. אחת הדרכים העיקריות לעשות זאת היא לעדכן לעצור את הרכב כשהרכב מתקרב לתחנה, מגיע אליה ויוצא ממנה. כך ניתן לדווח ולנתח את התקדמות המשימה בשני החשבונות מפעילי כלל המכשירים ומשתמשי קצה. אלה עדכוני הסטטוס:
- מתן מסלול: ה-enum של
STATE
ל-VehicleStop
משתמש ב-ENROUTE
כדי לציין שהעצירה נמצאת בהמשך ברשימה של מסלול הנסיעה עם הרכב. מבחינת המשימה, זה אומר כל משימה שמשויכת לעצירה. נמצא הבא ברשימה להשלמה. - הגיע: ערך ה-enum של
STATE
ל-VehicleStop
משתמש ב-ARRIVED
כדי לציין שהרכב הגיע לעצירה. מנקודת המבט של המשימה, כלומר, כל משימה שמשויכת להפסקה היא תהליך פעיל. - הושלמה: כדי לסמן עצירה שהושלמה, מסירים אותה מהרשימה של עצירות ביניים ברכב. כשעושים זאת, Fleet Engine מסמן באופן אוטומטי כל המשימות המשויכות כ'סגורות'. אפשר לקרוא פרטים נוספים על סגירת משימות: לסיים משימות.
במסמך הזה מתואר איך סטטוס הפסקת העדכון באמצעות גישות בצד השרת. שלך יוכלו לעשות זאת גם מאפליקציית הנהגים שלך, אם יסופקו לנהג על ידיך את היכולת לנהל את המשימות באמצעות מכשיר מהימן. משתמשים בשיטה אחת בלבד כדי להימנע ממרוץ תהליכים ולשמור על מקור מהימן אחד.
הרכב בדרך לעצירה
המערכת צריכה להודיע ל-Fleet Engine כשהרכב מתחיל לנווט אל התחנה הבאה. כך ניתן לשפר את זמן ההגעה המשוער ואת חישובי המסלולים.
שדות חובה להפסקת העדכונים
Fleet Engine מתעלם מכל השדות האחרים בישות לקבלת ההתראה.
שדה | ערך |
---|---|
remainingVehicleJourneySegments
|
רשימת העצירות הנותרות של הרכבים, ומדינת היעד שלהן מסומנת כ-State.NEW. |
דוגמה לדרך שבה נעצרת
בדוגמאות הבאות מוסבר איך להודיע ל-Fleet Engine שרכב מסוים
בדרך לתחנה הבאה, באמצעות ספריית Java gRPC או ב-HTTP
הפעלת REST ל-UpdateDeliveryVehicle
.כל שאר התחנות מסומנות כחדשות.
gRPC
static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Vehicle settings
DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
// Next stop marked as ENROUTE
.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.ENROUTE)))
// All other stops marked as 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 updateDeliveryVehicleRequest =
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": "ENROUTE",
"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
רכב מגיע בעצירה
יש ליידע את ה-Fleet Engine כשרכב מגיע לעצירה.
שדות חובה להפסקת העדכונים
Fleet Engine מתעלם מכל השדות האחרים בישות לקבלת ההתראה.
שדה | ערך |
---|---|
remainingVehicleJourneySegments
|
רשימת העצירות הנותרות של הרכבים, ומדינת היעד שלהן מסומנת כ-State.NEW. |
דוגמה להגעה לנקודת עצירה
בדוגמאות הבאות מוסבר איך להודיע ל-Fleet Engine שרכב הגיע
בעצירה, באמצעות ספריית Java gRPC או בקריאת HTTP REST כדי
UpdateDeliveryVehicle
. כל שאר התחנות מסומנות כחדשות.
gRPC
static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Vehicle settings
String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
// Marking the arrival at stop.
.addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()
.setStop(VehicleStop.newBuilder()
.setPlannedLocation(LocationInfo.newBuilder()
.setPoint(LatLng.newBuilder()
.setLatitude(37.7749)
.setLongitude(122.4194)))
.addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
.setState(VehicleStop.State.ARRIVED)))
// All other remaining stops marked as 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))) // Remaining stops must be NEW.
.build();
// DeliveryVehicle request
UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
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": "ARRIVED",
"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
הרכב עומד בעצירה
חובה להודיע למנוע בכלל בעת עצירה של כלי רכב. הדבר גורם כל המשימות שמשויכות לעצירה יועברו למצב 'סגור'.
שדות חובה להפסקת העדכונים
Fleet Engine מתעלם מכל השדות האחרים בישות לקבלת ההתראה.
שדה | ערך |
---|---|
remainingVehicleJourneySegments |
רשימת העצירות הנותרות של הרכבים, ומדינת היעד שלהן מסומנת כ-State.NEW. המצב של התחנה הראשונה ברשימה צריך להיות מסומן כ-State.ENROUTE. |
השלמת דוגמה של עצירה
בדוגמאות הבאות מוסבר איך להודיע ל-Fleet Engine שרכב הגיע
בעצירה, באמצעות ספריית Java gRPC או בקריאת HTTP REST כדי
UpdateDeliveryVehicle
. כל שאר התחנות מסומנות כחדשות.
gRPC
static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Vehicle settings
String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
// This stop has been completed and is commented out to indicate it
// should be removed from the list of vehicle journey segments.
// .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()
// .setStop(VehicleStop.newBuilder()
// .setPlannedLocation(LocationInfo.newBuilder()
// .setPoint(LatLng.newBuilder()
// .setLatitude(37.7749)
// .setLongitude(122.4194)))
// .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
// .setState(VehicleStop.State.ARRIVED)))
// All other remaining stops marked as NEW.
// The next stop could be marked as ENROUTE if the vehicle has begun
// its journey to the next stop.
.addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder() // Next 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 updateDeliveryVehicleRequest =
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=remaining_vehicle_journey_segments`
- <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.3382,
"longitude": 121.8863
}
},
"tasks": [
{
"taskId": "${TASK2_ID}"
}
]
}
}
]
}
EOM