สรุปงาน

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

  • ปิดงาน: การปิดงานการจัดส่งจะเปลี่ยนสถานะเป็น CLOSED และระบุว่างานนั้นไม่ได้ใช้งานแล้ว

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

ปิดงาน

คุณปิดงานได้ด้วยวิธีต่อไปนี้

  • อัปเดตสถานะการหยุดของยานพาหนะ คุณนำจุดแวะออกจากยานพาหนะ ซึ่งจะเป็นการปิดงานทั้งหมดที่เกี่ยวข้องกับป้ายจอดรถ ดูรายละเอียดได้ที่สถานะการหยุดอัปเดต
  • นำงานออกจากรายการจุดแวะพักของยานพาหนะ การดำเนินการนี้จะต้องมีการอัปเดตรายการงานสำหรับการหยุด แต่งานที่ปิดไปแล้วจะไม่ได้เป็นส่วนหนึ่งของรายการอีกต่อไป ดูอัปเดตลําดับงานในอัปเดตงาน
  • ตั้งค่าสถานะงานเป็น CLOSED ซึ่งทำได้เฉพาะกับงานที่ไม่ได้กำหนดให้กับยานพาหนะเท่านั้น ส่วนนี้จะแสดงวิธีการนี้

เมื่อปิดงานแล้ว คุณจะเปิดงานนั้นอีกครั้งไม่ได้

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

ช่องงานสำหรับปิดงาน

ส่วนนี้จะแสดงช่องที่ต้องกรอกเมื่อปิดงาน เครื่องมือจัดการกลุ่มจะละเว้นช่องอื่นๆ ทั้งหมดในเอนทิตีสำหรับการอัปเดต

ช่องที่ต้องกรอก ค่า
state State.CLOSED

ปิดงานโดยตรง

ตัวอย่างต่อไปนี้แสดงวิธีตั้งค่างานที่ยังไม่ได้มอบหมายเป็นสถานะ "ปิด" ไม่ว่าจะใน 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)
   .setState(Task.State.CLOSED) // You can only directly CLOSE a
   .build();                    // task that is NOT assigned to a vehicle.

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

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

  • &lt;id&gt; เป็นตัวระบุที่ไม่ซ้ำสำหรับงาน
  • ส่วนหัวคำขอต้องมีช่องการให้สิทธิ์ซึ่งมีค่าเป็น Bearer <token> โดยที่ <token> มาจากเซิร์ฟเวอร์ของคุณตามหลักเกณฑ์ที่อธิบายไว้ในบทบาทของบัญชีบริการและโทเค็นเว็บ JSON
  • คุณต้องรวมเอนทิตี Task ในเนื้อหาคำขอ

ตัวอย่างคำสั่ง curl

 # 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=state,taskOutcome,taskOutcomeTime" \
   -H "Content-type: application/json" \
   -H "Authorization: Bearer ${JWT}" \
   --data-binary @- << EOM
 {
   "state": "CLOSED",
   "taskOutcome": "SUCCEEDED",
   "taskOutcomeTime": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
 }
 EOM

กำหนดผลลัพธ์ของงาน

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

รายละเอียดผลลัพธ์ของงาน

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

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

คุณใช้วิธีการใดก็ได้ต่อไปนี้ในการตั้งค่า task_outcome_location และ task_outcome_time

  • อัปเดตเหตุการณ์เหล่านั้นในคำขอเดียวกันซึ่งจะกำหนดผลลัพธ์ของงาน
  • อัปเดตในภายหลังหลังจากที่คุณตั้งค่าผลลัพธ์ของงานแล้ว
  • แก้ไขอีกครั้งหลังจากตั้งค่าแล้ว

Fleet Engine ป้องกันการอัปเดตต่อไปนี้ซึ่งเกี่ยวข้องกับผลลัพธ์ของงาน

  • คุณจะแก้ไขผลลัพธ์ของงานไม่ได้เมื่อตั้งค่าเป็น SUCCEEDED หรือ FAILED แล้ว
  • คุณไม่สามารถตั้งค่าสถานที่หรือเวลาของผลลัพธ์ของงานสำหรับงานที่ไม่มีผลลัพธ์ที่กำหนด

ฟิลด์งานสำหรับการตั้งค่าผลลัพธ์

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

ช่องที่ต้องกรอก ค่า
taskOutcome Outcome.SUCCEEDED หรือ Outcome.FAILED

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

ตัวอย่างผลลัพธ์ของงาน

ตัวอย่างต่อไปนี้แสดงวิธีใช้ไลบรารี Java gRPC และการเรียก HTTP REST ไปยัง UpdateTask เพื่อตั้งค่าผลลัพธ์ของงานเป็น SUCCEEDED และตั้งค่าตำแหน่งที่งานเสร็จสมบูรณ์

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)
   .setTaskOutcome(TaskOutcome.SUCCEEDED)
   .setTaskOutcomeTime(now())
   .setTaskOutcomeLocation(               // Grand Indonesia East Mall
     LocationInfo.newBuilder().setPoint(
       LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
   .build();

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

PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=taskOutcome,taskOutcomeTime,taskOutcomeLocation

  • &lt;id&gt; เป็นตัวระบุที่ไม่ซ้ำสำหรับงาน
  • ส่วนหัวของคำขอต้องมีช่อง Authorization ที่มีค่า Bearer <token> ซึ่งเซิร์ฟเวอร์ของคุณออก <token> ตามหลักเกณฑ์ที่อธิบายไว้ในบทบาทของบัญชีบริการและโทเค็นเว็บ JSON
  • เนื้อหาของคำขอต้องมีเอนทิตี Task
 # 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=taskOutcome,taskOutcomeTime,taskOutcomeLocation" \
   -H "Content-type: application/json" \
   -H "Authorization: Bearer ${JWT}" \
   --data-binary @- << EOM
 {
   "taskOutcome": "SUCCEEDED",
   "taskOutcomeTime": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")",
   "taskOutcomeLocation": {
     "point": {
       "latitude": -6.195139,
       "longitude": 106.820826
     }
   }
 }
 EOM

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