Tạo việc cần làm hàng loạt

Tài liệu này trình bày cách tạo một lô việc cần làm từ môi trường máy chủ bằng gRPC hoặc REST. Để biết thêm thông tin chi tiết về cách tạo việc cần làm, hãy xem:

Các trường việc cần làm để tạo việc cần làm theo lô

Khi tạo việc cần làm theo lô, mỗi CreateTasksRequest phần tử trong requests phải tuân thủ các quy tắc xác thực giống như yêu cầu CreateTask đối với một việc cần làm, ngoại trừ việc các trường parentheader là không bắt buộc. Nếu được đặt, các trường này phải giống với các trường tương ứng ở cấp cao nhất BatchCreateTasksRequest.

Để biết thêm thông tin, hãy xem tài liệu tham khảo API cho BatchCreateTasks đối với gRPC hoặc REST.

Các trường lô bắt buộc

TrườngGiá trị
yêu cầu Array<CreateTasksRequest>

Các trường việc cần làm theo lô không bắt buộc

TrườngGiá trị
tiêu đề DeliveryRequestHeader

Tạo một lô việc cần làm

Các ví dụ sau đây cho thấy cách tạo cả việc cần làm về đến lấy hàng và giao hàng bằng thư viện Java gRPC hoặc cách đưa ra yêu cầu HTTP REST đến BatchCreateTask. Hãy xem các phần tử JWT để biết cú pháp JWT chính xác.

gRPC

static final String PROJECT_ID = "my-delivery-co-gcp-project";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Delivery Task settings
Task deliveryTask = Task.newBuilder()
  .setType(Task.Type.DELIVERY)
  .setState(Task.State.OPEN)
  .setTrackingId("delivery-tracking-id")
  .setPlannedLocation(               // Grand Indonesia East Mall
    LocationInfo.newBuilder().setPoint(
      LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
  .setTaskDuration(
    Duration.newBuilder().setSeconds(2 * 60))
  .build();

// Delivery Task request
CreateTaskRequest createDeliveryTaskRequest =
  CreateTaskRequest.newBuilder()  // No need for the header or parent fields
      .setTaskId("task-8312508")  // Task ID assigned by the Provider
      .setTask(deliveryTask)      // Initial state
      .build();

// Pickup Task settings
Task pickupTask = Task.newBuilder()
  .setType(Task.Type.PICKUP)
  .setState(Task.State.OPEN)
  .setTrackingId("pickup-tracking-id")
  .setPlannedLocation(               // Grand Indonesia East Mall
    LocationInfo.newBuilder().setPoint(
      LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
  .setTaskDuration(
    Duration.newBuilder().setSeconds(2 * 60))
  .build();

// Pickup Task request
CreateTaskRequest createPickupTaskRequest =
  CreateTaskRequest.newBuilder()  // No need for the header or parent fields
      .setTaskId("task-8241890")  // Task ID assigned by the Provider
      .setTask(pickupTask)        // Initial state
      .build();

// Batch Create Tasks settings
String parent = "providers/" + PROJECT_ID;

// Batch Create Tasks request
BatchCreateTasksRequest batchCreateTasksRequest =
  BatchCreateTasksRequest.newBuilder()
      .setParent(parent)
      .addRequests(createDeliveryTaskRequest)
      .addRequests(createPickupTaskRequest)
      .build();

// Error handling
// If Fleet Engine does not have any task(s) with these task ID(s) and the
// credentials of the requestor pass, the service creates the task(s)
// successfully.

try {
  BatchCreateTasksResponse createdTasks = deliveryService.batchCreateTasks(
    batchCreateTasksRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
    case ALREADY_EXISTS:
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}

REST

Để tạo việc cần làm về giao hàng và nhận hàng từ môi trường máy chủ, hãy thực hiện lệnh gọi HTTP REST đến BatchCreateTasks:

POST https://fleetengine.googleapis.com/v1/providers/<project_id>/batchCreate

<id> là giá trị nhận dạng duy nhất cho việc cần làm.

Tiêu đề của yêu cầu phải chứa trường Authorization với giá trị Bearer <token>, trong đó <token> do máy chủ của bạn cấp theo nguyên tắc được mô tả trong bài viết Vai trò của tài khoản dịch vụMã thông báo web JSON.

Nội dung yêu cầu phải chứa một thực thể BatchCreateTasksRequest.

Ví dụ về lệnh curl:

# Set $JWT, $PROJECT_ID, $DELIVERY_TRACKING_ID, $DELIVERY_TASK_ID,
# $PICKUP_TRACKING_ID, and $PICKUP_TASK_ID in the local environment
curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks:batchCreate" \
 -H "Content-type: application/json" \
 -H "Authorization: Bearer ${JWT}" \
 --data-binary @- << EOM
{
 "requests" : [
   {
     "taskId": "${DELIVERY_TASK_ID}",
     "task" : {
       "type": "DELIVERY",
       "state": "OPEN",
       "trackingId": "${DELIVERY_TRACKING_ID}",
       "plannedLocation": {
         "point": {
             "latitude": -6.195139,
             "longitude": 106.820826
         }
       },
       "taskDuration": "90s"
     }
   },
   {
     "taskId": "${PICKUP_TASK_ID}",
     "task" : {
       "type": "PICKUP",
       "state": "OPEN",
       "trackingId": "${PICKUP_TRACKING_ID}",
       "plannedLocation": {
         "point": {
             "latitude": -6.195139,
             "longitude": 106.820826
         }
       },
       "taskDuration": "90s"
     }
   }
 ]
}
EOM

Bước tiếp theo