本文档介绍 Fleet Engine 中的计划任务服务。本文假定您已阅读什么是 Fleet Engine?,并且了解所需的特定 Fleet Engine 服务功能。
在阅读本文档时,请注意以下几点:
- 您可以创建任务并将其与车辆停止点相关联,以模拟任务与预计停车地点之间的现实关联,以便驾驶员完成任务。请参阅车辆简介,更好地了解车辆在车队引擎中的运作方式。
- 用于计划任务的舰队引擎使用以下资源:
Task
和DeliveryVehicle
。Fleet Engine 同时提供 gRPC 服务和 REST 接口:
什么是定时任务?
Fleet Engine 中的安排的任务表示在运输作业的更广泛背景下,由驾驶员使用车辆完成的单个操作。它定义了驱动程序的具体目标。例如:
- 将商品送达住宅
- 自提包裹并将其退回配送站
- 在某个营业地点停车,为客户提供现场服务
- 进行预约停车以加油
任务元素
下图展示了标准车辆行程中的这些任务元素。
基本任务字段
字段 | 说明 |
---|---|
类型 | 定义与任务关联的操作类型。 |
任务 ID | 用于在系统中唯一标识任务的字符串。 |
计划内的位置 | 指定应执行任务的预期位置。 此位置并不总是与车站的预计位置相同。 |
州 | 指示任务是处于打开还是关闭状态。 |
任务结果 | 指示任务是成功还是失败。 |
任务的数据模型
以下图表说明了 Task
资源的数据模型,以及与其关联的 DeliveryVehicle
资源的图表。您可以查看这两个图表,以探索这两种资源之间的关系,请注意以下几点:
- 预计位置:车站和任务都有各不相同的预计位置。
- 对于任务,计划位置表示驾驶员操作应发生的位置。例如,如果将 15 个包裹投递到一个大型综合综合体,需要投递到同一综合体内不同邮件室位置。
- 对于车辆停靠点,计划地点表示车辆在驾驶员完成任务期间的停靠点。例如,车辆停在公寓大楼入口处,然后由司机将包裹手动送到公寓内的多个邮寄室。
- 状态:任务和车辆停靠站都有一个不同的 state 字段。
- 车辆停靠站的状态反映了车辆相对于停靠站的进度,用于车队跟踪。
- 任务状态指示任务是否处于活动状态。这会影响对任务执行的其他操作,例如设置其结果或将其分配给车辆。
任务结果:任务结果是数据模型中的一个重要字段,因为它用于表示任务是成功还是失败,与任务状态无关。
ID:
- 当您将任务分配给车辆时,Fleet 引擎会填充
deliveryVehicleId
字段。此只读字段用于指示任务所分配到的车辆。 - 任务 ID 是系统中所有任务的唯一标识符。
- 跟踪 ID 用于标识任务,以便跟踪运输。
- 当您将任务分配给车辆时,Fleet 引擎会填充
Tasks 数据模型
车辆数据模型
任务 ID
与 Fleet Engine 中的车辆 ID 类似,每个任务都必须包含一个 ID,以将其与系统中的其他任务区分开来。您可以按任务 ID 引用和管理工作流中的所有任务。您可以使用 CreateTaskRequest
服务并提供符合本部分所述要求的 ID 字符串来创建这些 ID。
然后,此字符串将构成任务资源本身名称的一部分,即 Task
对象上的输出专用字段。这类似于 Fleet Engine 构建车辆名称资源的方式。请参阅 Fleet Engine 简介中的资源命名部分。
属性 | 说明 |
---|---|
唯一性 | 每个任务 ID 在您的车队引擎实现中都必须是唯一的,以免造成混淆并确保正确识别。 |
格式 |
|
良好的任务 ID 示例 |
|
---|---|
不允许使用的任务 ID |
|
任务类型
Fleet Engine 支持使用各种任务类型来表示传输操作中的不同操作。本文对它们进行了介绍,并提供了相应的公开范围和结算详细信息。
任务类型 | 说明 | 货运跟踪可见性 | 已结算 |
---|---|---|---|
传送任务 | 用于为客户送达物品或完成任务。 | 消费者可以查看和跟踪此信息。 | 是 |
自提任务 | 用于指明从客户处取货。对于任何自提任务,都必须有相应的配送任务。 | 消费者可以查看和跟踪这些信息。 | 否 |
不提供服务任务 | 将车辆标记为无法提供服务,例如当司机休息或给车辆加油时。 | 消费者看不到。 | 否 |
计划停止任务 | 非送货任务,此类任务需要在特定地点经停。使用计划停止任务在特定地点按天安排每日取件站,与同一位置的其他配送或自提任务无关。你还可为来自保管箱的集合创建计划停靠任务,或者模拟给服务中心和服务点的供给车辆接送或停靠点。 | 使用方无法跟踪此特定任务,但可以在跟踪其他任务时看到它。 | 否 |
任务和历程生命周期
本部分详细介绍了 Fleet Engine 中的传送任务生命周期。任务生命周期与车辆行程相关联,因为车辆必须前往停车点,司机才能在计划的位置完成任务。
1. 创建任务
首次在 Fleet Engine 中创建任务时,您可以为任务设置各种字段,而无需将它们与停止相关联。
属性 | 说明 |
---|---|
州 | 设为“打开” |
ID | 如果您要为消费者使用物流跟踪,请设置任务和跟踪 ID。 |
计时 | 任务的计划时长及其目标时间范围。如需了解详情,请参阅任务时间。 |
预计到达位置 | 设置要完成任务的确切地理坐标。 |
2. 任务分配
向车辆分配任务时,需要与车辆停止操作一同执行。经停点是经度/纬度坐标,表示车辆在驾驶员完成与经停点相关的任务时停车的位置。停靠站通常是接入点,例如停靠站或道路拥堵位置。
3. 进行中
任务的状态为“待处理”或“已关闭”。不过,将任务分配给车辆后,您可以通过任务与车辆的关联以及车辆相对于任务完成地点的位置来跟踪任务进度。
一旦车辆离开经停点或开始导航,停靠状态应更改为 ENROUTE
。这样,消费者货物跟踪就可以更新任务的收件人,包括剩余经停次数和预计到达时间。此 API 还支持为消费者物流跟踪或车队跟踪提供任何实时可视化。
4. 到达和任务结果
当车辆到达一个停车点时,该停车点的状态应设置为 ARRIVED
。与 ENROUTE
停止状态一样,这不会影响任务本身的状态,但支持使用户通知和车队运营者用于车队跟踪的任何实时报告。它还支持后续分析和报告您的操作,以用于优化投放。
车辆到达相应经停点后,您的系统可以使用以下任一方法处理任务历程的其余部分:
在完成任务后关闭任务。
当司机将任务标记为完成时,您的系统可以将其从停止状态中移除,但保留该位置,同时为其分配其他任务。
从车辆中移除整个经停点。
当司机将所有任务标记为已完成,且车辆正在前往下一站的途中,您就可以从车辆中移除整个经停点。Fleet Engine 会自动关闭与已移除的停止相关联的所有任务。
关闭任务并不表示任务成功或失败
关闭任务仅表示系统不再将该任务视为正在进行。对于处于 CLOSED
状态的任务,您可以将其结果设置为 SUCCEEDED
或 FAILED
。这对于指明配送跟踪的实际结果以及正确结算都很有必要。Fleet Engine 仅对状态为 SUCCEEDED 的交付任务收费。
任务结果一经设置便无法更改
标记任务结果时,Fleet Engine 会使用最近一次的已知车辆位置自动填充任务结果位置。不过,您可以在设置完任务结果时间和任务结果位置后修改它们,Fleet Engine 不会替换这些字段。
5. 其他任务场景
您在 Fleet Engine 中建模的任务并不都适合典型的历程流程。例如:
- 自提任务。如果您有一个取件任务,用于将包裹退回仓库以供日后处理,则应为该包裹创建相应的送货任务,并将计划送货地点设为仓库。除此之外,自提任务通常遵循与配送任务相同的流程。
- 重新分配任务。您无法直接将任务重新分配给其他车辆。相反,如需将任务从一辆车移至另一辆车,请关闭原始任务,然后重新创建该任务,然后再为其分配新车辆。如果您更新已分配给其他车辆的任务的任务排序,Fleet Engine 会生成错误。
- 删除任务。与车辆一样,车队引擎会在七天后删除未更新的任务。如果您尝试重复使用之前已关闭的任务的 ID,如果该 ID 在过去 7 天内已被使用,Fleet Engine 会返回错误。反之,如果您想将任务数据保留超过 7 天,则必须自行实现此功能,例如通过安排作业来重置 7 天计时器。
分享任务进度
在 Fleet Engine 中,您可以实时监控任务进度,并通过以下两种主要方式分享司机的行程:
- 消费者体验:让消费者了解其发货订单或申请的服务订单的状态。
- 车队跟踪,供车队运营商跟踪和分析车队中车辆的状态。
消费者体验
如需共享任务进度,您可以使用 JavaScript 使用方 SDK 设置使用方体验。借助此 SDK,您可以改善 Web 应用或移动应用的视觉体验,让消费者能够监控货运状态、预计到达时间和交付车辆的实时位置信息更新。请参阅消费者 SDK 安排的任务概览。
使用方 SDK 包含一个 JavaScript 地图,以及用于与 Fleet Engine 连接的数据组件组件。该映射可以直接替换标准 google.maps.Map
对象。客户端应对最终用户进行身份验证,并使用 Google Cloud 项目中的 Delivery 使用方角色,以便仅返回特定于客户的信息。Fleet Engine 会过滤和隐去响应中的所有其他信息。例如,在不可用性任务期间,系统不会与最终用户分享任何位置信息。
在车队引擎中,您可以启用以下设置,以便与使用方共享任务进度:
- 任务使用
TaskTrackingViewConfig
属性。可选。 - 任务使用跟踪 ID,库需要使用该 ID 为使用方识别相关任务。
车队跟踪
借助 JavaScript 车队跟踪库,您可以近乎实时地直观呈现车队中车辆的位置。该库使用 Fleet Engine API 直观呈现交付车辆及其分配的任务。与 JavaScript 使用方 SDK 一样,它包含一个 JavaScript 地图组件,可替换标准 google.maps.Map
实体,并包含您用于与车队引擎连接的数据组件。
此库会在 Fleet Engine 中创建交付车辆后立即显示其可见性。对于此实现,您使用 Fleet Engine Service 超级用户 Cloud IAM 角色,并提供对交付车辆及其相关任务的访问权限的 Java Web 令牌声明。
计划任务场景
本部分介绍了各种任务场景,总结了本指南中此时间点提供的信息。本指南旨在帮助您了解如何根据自己的业务在车队引擎中以多种方式对运输操作进行建模。
配送跟踪
此配送场景显示,在行程开始时从仓库出发以及在行程结束时到达仓库时,为仓库分配了“计划停止”任务。它还显示了相应经停点的两个配送任务,其中一个任务已失败。使用此分配可启用从车库到车库的跟踪,并用作模拟当天开始和结束时间的方法。计划停止任务不会产生费用。
自提和配送到货
此场景展示了如何对接收点及其所需的对应传送任务进行建模。您将退回车站的操作设置为送达,以便结算。
接驳车
此场景显示了两次配送,其中中途有预定的补给车辆停靠点,目的是让配送车辆能够将部分包裹运回仓库。您还可以使用有计划停靠点的补充车辆对其进行建模。
任务计时
对任务时间进行建模有助于有效规划路线、预计预计到达时间以及管理交付预期。Fleet Engine 提供了两项关键功能来对任务时间进行建模和预测,如本部分所述。
任务时长
任务时长使用 task_duration
字段进行设置,该字段是必需字段,用于模拟司机在停车点完成任务或休息所预计花费的时间。对于充电站,这包括到达相应充电站后的所有必要活动,例如卸载包裹并与收件人互动。此信息越具体,Fleet Engine 能为行程中的后续经停点提供切合实际的到达时间和预计到达时间。如需了解字段详情,请参阅 Protocol Buffer 文档中的时长。
目标时间范围
目标时间定义了任务的建议时间范围,通常用于与客户沟通或进行内部规划。您可以使用 target_time_window
字段(由开始时间和结束时间组成)进行设置。这不会直接影响任何路线计算,但可用于以下情况:提醒消费者包裹送达的时间范围,或预计预约的服务工人何时到达。
任务属性
使用 ListTasks
请求时,Fleet Engine 中的任务属性提供了一种根据特定特征过滤任务的便捷方式。您还可以使用自定义任务属性通过 Cloud Logging 进行分析,以及向使用方传达信息或进行车队跟踪。其用途与车辆属性类似:用于从更集中的视角了解配送操作。
限制和局限
- 自定义属性创建:Fleet Engine 限制了您可以为每个任务定义的自定义属性的数量。请与您的销售代表联系,申请提高这些限额。
- 过滤功能:虽然任务属性可提供灵活的过滤功能,但不会取代核心任务数据字段。根据您的具体需求,将它们用于其他过滤。
- 每个属性必须具有唯一的键。
- 请勿在属性值中包含个人身份信息或其他敏感信息,因为用户可能会看到这些信息。
- 数据验证:确保自定义属性的数据类型和格式符合 Fleet Engine 的要求。