查找任务

本文档介绍了从 Google Cloud 控制台中查找任务信息的方法, 服务器或浏览器。Fleet Engine 支持通过以下两种方式查找任务:

  • 查找任务:您可以按照以下 ID 查找任务:

    • 任务 ID:可供有权访问完整 任务数据视图。
    • 跟踪 ID:供客户端软件用来提供有限的信息 例如,预计他们家中会收到包裹。

    请务必了解任务 ID 和任务之间的区别 跟踪 ID。这两者并不相同。请参阅基本任务字段 计划任务指南。

  • 列出任务:对任务的广泛访问权限,仅适用于可信用户。

查找任务

本部分介绍如何按任务 ID 或跟踪 ID 查找任务。它具有 以下要求:

  • 按跟踪 ID 查找的查询必须遵循可见性规则 请参阅所跟踪对象的可见性规则

  • 使用尽可能窄的令牌限制安全风险。例如,如果您 使用传送使用方令牌,则任何调用都会返回 只与最终用户相关的信息(如发货人或 收货人。Fleet Engine 会隐去 响应。如需详细了解令牌,请参阅 JSON Web 令牌

按任务 ID 查找任务

您可以使用 gRPC 或 REST。以下示例展示了如何使用 Java gRPC 库或 对 GetTask 发出 REST 请求。

gRPC

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

 DeliveryServiceBlockingStub deliveryService =
   DeliveryServiceGrpc.newBlockingStub(channel);

 // Task request
 String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
 GetTaskRequest getTaskRequest = GetTaskRequest.newBuilder()  // No need for the header
     .setName(taskName)
     .build();

 try {
   Task task = deliveryService.getTask(getTaskRequest);
 } catch (StatusRuntimeException e) {
   Status s = e.getStatus();
   switch (s.getCode()) {
      case NOT_FOUND:
        break;

      case PERMISSION_DENIED:
        break;
   }
   return;
 }

REST

GET https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<taskId>

  • &lt;id&gt; 是任务的唯一标识符。
  • &lt;taskId&gt; 是要查找的任务的 ID。
  • 请求标头必须包含字段 Authorization(值为 Bearer <token>,其中 <token> 由您的服务器发出 根据服务账号角色中所述的准则,以及 JSON Web 令牌
  • 请求正文必须为空。
  • 如果查找成功,响应正文将包含一个任务实体。

示例 curl 命令:

    # Set JWT, PROJECT_ID, and TASK_ID in the local environment
    curl -H "Authorization: Bearer ${JWT}" \
      "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}"

按跟踪 ID 查找任务

以下示例展示了如何按配送跟踪 ID 查找任务 使用 gRPC 或 HTTP REST 调用 GetTaskTrackingInfo

gRPC

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String TRACKING_ID = "TID-7449w087464x5";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Tasks request
String parent = "providers/" + PROJECT_ID;
GetTaskTrackingInfoRequest getTaskTrackingInfoRequest = GetTaskTrackingInfoRequest.newBuilder()  // No need for the header
    .setParent(parent)
    .setTrackingId(TRACKING_ID)
    .build();

try {
  TaskTrackingInfo taskTrackingInfo = deliveryService.getTaskTrackingInfo(getTaskTrackingInfoRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;

     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

GET https://fleetengine.googleapis.com/v1/providers/<project_id>/taskTrackingInfo/<tracking_id>

  • &lt;tracking_id&gt; 是与任务关联的跟踪 ID。

  • 请求标头必须包含字段 Authorization(值为 Bearer <token>,其中 <token> 提供正确的服务 账号角色。请参阅服务账号角色

  • 如果查找成功,响应正文将包含一个 taskTrackingInfo 实体。

示例 curl 命令:

# Set JWT, PROJECT_ID, and TRACKING_ID in the local environment
curl -H "Authorization: Bearer ${JWT}" \
  "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/taskTrackingInfo/${TRACKING_ID}"

列出任务

列出任务请求获得对任务的广泛访问权限。列出任务仅适用于 受信任的用户使用 Delivery Fleet Reader 或 Delivery Admin 身份验证令牌 。如需了解详情,请参阅服务账号角色 信息。

将列表分页

任务列表已分页。页面大小可以在列表任务请求中指定。 如果指定了页面大小,则返回的任务数不超过 超过指定的页面大小。如果没有页面大小,则使用合理的默认值 。如果请求的页面大小超过内部最大值, 则系统会使用内部最大值

任务列表可以包含用于读取下一页结果的令牌。接收者 检索下一页,则连同页面令牌一起重新发出相同的请求。 当返回的页面令牌为空时,没有其他任务可用于 检索。

列出任务时的字段

列出任务时,Fleet Engine 会隐去以下字段:

  • VehicleStop.planned_location
  • VehicleStop.state
  • VehicleStop.TaskInfo.taskId

根据 Google API 改进建议使用以下字段格式:

字段类型 格式 示例
时间戳 RFC-3339 task_outcome_time = 2022-03-01T11:30:00-08:00
时长 后跟 s 的秒数 task_duration = 120s
枚举 字符串 state = CLOSED AND type = PICKUP
位置 point.latitudepoint.longitude planned_location.point.latitude > 36.1 AND planned_location.point.longitude < -122.0

过滤列出的任务

您可以按大多数任务属性过滤列出的任务。对于过滤条件查询语法: 请参阅 AIP-160。如果未指定任何过滤条件查询,系统会列出所有任务。

下表显示了可用于过滤的有效任务属性:

用于过滤列表的任务属性
  • type
  • attributes
  • tracking_id
  • delivery_vehicle_id
  • state
  • planned_location
  • task_duration
  • task_duration_outcome
  • task_outcome
  • task_outcome_location
  • task_outcome_time

如需查看过滤条件查询运算符的完整列表,请参阅 AIP-160

列出任务示例

以下示例展示了如何列出 deliveryVehicleId 和 结合使用 Java gRPC 库和通过 HTTP REST 调用 ListTasks

成功的响应可以为空。空响应表示没有 与提供的 deliveryVehicleId 关联的任务。

gRPC

 static final String PROJECT_ID = "my-delivery-co-gcp-project";
 static final String TRACKING_ID = "TID-7449w087464x5";

 DeliveryServiceBlockingStub deliveryService =
   DeliveryServiceGrpc.newBlockingStub(channel);

 // Tasks request
 String parent = "providers/" + PROJECT_ID;
 ListTasksRequest listTasksRequest = ListTasksRequest.newBuilder()  // No need for the header
     .setParent(parent)
     .setFilter("delivery_vehicle_id = 123 AND attributes.foo = true")
     .build();

 try {
   ListTasksResponse listTasksResponse = deliveryService.listTasks(listTasksRequest);
 } catch (StatusRuntimeException e) {
   Status s = e.getStatus();
   switch (s.getCode()) {
      case NOT_FOUND:
        break;

      case PERMISSION_DENIED:
        break;
   }
   return;
 }

REST

GET https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks

如需对列出的任务应用过滤条件,请添加“过滤条件”以网址转义的过滤器查询作为其值的网址参数。

请求标头必须包含字段 Authorization(值为 Bearer <token>,其中 <token> 提供正确的服务 账号角色。请参阅服务账号角色

成功的查找会提供采用以下结构的响应正文:

    // JSON representation
    {
      "tasks": [
        {
          object (Task)
        }
      ],
      "nextPageToken": string,
      "totalSize": integer
    }

示例 curl 命令:

 # Set JWT, PROJECT_ID, and VEHICLE_ID in the local environment
 curl -H "Authorization: Bearer ${JWT}" \
   "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks?filter=state%20%3D%20OPEN%20AND%20delivery_vehicle_id%20%3D%20${VEHICLE_ID}"

后续步骤