อัปเดตสถานะจุดแวะ

เอกสารนี้ถือว่าคุณคุ้นเคยกับสิ่งต่อไปนี้

ตามที่ระบุไว้ในงานที่กำหนดเวลาไว้ในส่วน Fleet Engine Essentials ให้คุณสร้างงานและเชื่อมโยงงานเหล่านั้นกับยานพาหนะ เป็นโมเดลการเชื่อมโยงในโลกแห่งความเป็นจริงระหว่างงานกับ ตำแหน่งที่คาดว่ารถจะจอดเพื่อให้คนขับดำเนินการได้ งานนั้น

จากนั้นคุณจะจัดการความคืบหน้าของงานตลอดวงจรได้โดย ส่งการอัปเดตไปยัง Fleet Engine เพื่อให้กำหนดเส้นทางและสถานะได้ดีที่สุด อัปเดตตลอดเส้นทางของงาน วิธีหนึ่งที่ทำได้คือการอัปเดต ป้ายจอดรถเมื่อรถเข้าใกล้ มาถึง และออกจากป้ายจอดรถ ซึ่งจะช่วยให้สามารถรายงานและวิเคราะห์เกี่ยวกับความคืบหน้าของงานได้สำหรับทั้งผู้ให้บริการขนส่งและผู้ใช้ การอัปเดตสถานะเหล่านี้มีดังนี้

  • อยู่ระหว่างทาง: รายการ STATE สำหรับ VehicleStop ใช้ ENROUTE เพื่อบ่งบอกว่าป้ายจอดรถถัดไปในรายการสำหรับแผนการเดินทางของยานพาหนะ จากมุมมองของงาน หมายความว่างานใดก็ตามที่เชื่อมโยงกับจุดสิ้นสุดจะอยู่ในรายการถัดไปที่ต้องทำ
  • มาถึงแล้ว: รายการ STATE สำหรับ VehicleStop ใช้ ARRIVED เพื่อระบุว่ายานพาหนะมาถึงป้ายจอดแล้ว จากมุมมองของงาน หมายความว่างานใดก็ตามที่เชื่อมโยงกับการหยุดทำงานนั้นกำลังทำงานอยู่
  • เสร็จแล้ว: คุณทำเครื่องหมายจุดแวะที่เสร็จสมบูรณ์โดยนำออกจากรายการ สำหรับยานพาหนะ เมื่อทำเช่นนี้ Fleet Engine จะทำเครื่องหมายโดยอัตโนมัติ งานที่เกี่ยวข้องทั้งหมดเป็นปิดแล้ว ดูรายละเอียดเพิ่มเติมเกี่ยวกับการปิดงานได้ที่ สรุปงาน

เอกสารนี้อธิบายวิธีหยุดสถานะการอัปเดตโดยใช้แนวทางฝั่งเซิร์ฟเวอร์ คุณ ก็ทำเช่นนี้ได้จากแอปไดรเวอร์หากคนขับสามารถ จัดการงานต่างๆ โดยใช้อุปกรณ์ที่เชื่อถือได้ ใช้เพียงวิธีเดียวเพื่อหลีกเลี่ยงการแข่งขัน เงื่อนไข และดูแลรักษาแหล่งข้อมูลที่ถูกต้องแห่งเดียว

รถกำลังอยู่ระหว่างแวะพัก

ระบบควรแจ้งให้ Fleet Engine ทราบเมื่อยานพาหนะเริ่มนำทางไปยังจุดหมายถัดไป การดำเนินการนี้จะช่วยปรับปรุงการคำนวณเวลาถึงโดยประมาณและเส้นทาง

ช่องที่ต้องกรอกสำหรับการหยุดอัปเดต

Fleet Engine จะไม่สนใจช่องอื่นๆ ทั้งหมดในเอนทิตีสำหรับการแจ้งเตือน

ช่องค่า
remainingVehicleJourneySegments รายการป้ายจอดรถที่เหลืออยู่ซึ่งมีรัฐมีสถานะเป็น "รัฐ" ใหม่

ตัวอย่างระหว่างกำหนดเส้นทางเพื่อหยุด

ตัวอย่างต่อไปนี้แสดงวิธีแจ้งให้ 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> คือตัวระบุที่ไม่ซ้ำกันสำหรับงาน
  • ส่วนหัวคำขอต้องมีช่องการให้สิทธิ์ซึ่งมีค่าเป็น Bearer <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 จะไม่สนใจช่องอื่นๆ ทั้งหมดในเอนทิตีสำหรับการแจ้งเตือน

ช่องค่า
remainingVehicleJourneySegments รายการจุดจอดรถที่เหลือซึ่งมีสถานะระบุว่า State.NEW

ตัวอย่างการมาถึงป้ายจอด

ตัวอย่างต่อไปนี้แสดงวิธีแจ้งให้ Fleet Engine ทราบว่ายานพาหนะมาถึงป้ายจอดแล้ว โดยใช้ไลบรารี gRPC ของ Java หรือการเรียก 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> คือตัวระบุที่ไม่ซ้ำกันสำหรับงาน
  • ส่วนหัวคำขอต้องมีช่องการให้สิทธิ์ซึ่งมีค่าเป็น Bearer <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 เมื่อยานพาหนะจอดเสร็จแล้ว ซึ่งทำให้ งานทั้งหมดที่เชื่อมโยงกับจุดแวะเพื่อตั้งค่าเป็นสถานะ "ปิด"

ฟิลด์ที่จำเป็นสำหรับการหยุดอัปเดต

Fleet Engine จะไม่สนใจช่องอื่นๆ ทั้งหมดในเอนทิตีสำหรับการแจ้งเตือน

ช่องค่า
remainingVehicleJourneySegments รายการป้ายจอดรถที่เหลืออยู่ซึ่งมีรัฐมีสถานะเป็น "รัฐ" ใหม่ จุดจอดแรกในรายการต้องมีการทำเครื่องหมายสถานะเป็น State.ENROUTE

แสดงตัวอย่างการหยุด

ตัวอย่างต่อไปนี้แสดงวิธีแจ้งให้ Fleet Engine ทราบว่ายานพาหนะมาถึงป้ายจอดแล้ว โดยใช้ไลบรารี gRPC ของ Java หรือการเรียก 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> คือตัวระบุที่ไม่ซ้ำกันสำหรับงาน
  • ส่วนหัวคำขอต้องมีช่องการให้สิทธิ์ซึ่งมีค่าเป็น Bearer <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

ขั้นตอนถัดไป