สรุปงาน

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

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

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

ปิดงาน

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

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

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

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

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

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

ช่องที่ต้องกรอก ค่า
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

  • <id> คือตัวระบุที่ไม่ซ้ำกันสำหรับงาน
  • ส่วนหัวของคำขอต้องมีช่อง Authorization ที่มีค่า 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 เท่านั้น

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

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

  • สถานที่ตั้งของผลลัพธ์ของงาน: 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 การประทับเวลาเมื่อทำงานเสร็จสมบูรณ์

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

ตัวอย่างต่อไปนี้แสดงวิธีใช้ไลบรารี gRPC ของ Java และการเรียก 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

  • <id> คือตัวระบุที่ไม่ซ้ำกันสำหรับงาน
  • ส่วนหัวของคำขอต้องมีช่อง 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

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