Skip to main content

中大件订单轨迹状态机机制

涉及部门:All

当前版本:1.0.90


中大件订单轨迹状态机用于统一管理订单从创建、入仓、分拣、司机取货、派送、配送失败、返仓、自提直至订单结束的完整流转过程。系统通过预先配置的轨迹节点、触发方式、触发条件、允许的前置节点及对应订单状态,判断某次业务操作是否可以触发新的轨迹节点,从而避免订单轨迹出现跳跃、倒退、重复更新或节点顺序不合理等情况。

在当前版本的轨迹系统中,订单轨迹不再仅由单一业务操作直接写入,而是先由系统识别当前发生的业务事件,再结合订单已有轨迹、当前订单状态及节点配置进行校验。只有当业务事件满足目标节点的触发规则时,系统才会生成对应轨迹,并按照节点配置更新订单状态。

轨迹状态机的设计原理

每一个轨迹节点都需要配置节点名称、节点编码、节点类型、显示类型、触发类型、触发条件、允许的前置节点,以及节点触发后需要更新的订单状态。

当司机、仓库人员或管理端用户执行某项业务操作时,系统首先将该操作识别为一个业务事件,例如客户下单、人工分拣、分配司机、司机取货、完成配送或配送失败。随后,系统根据该业务事件匹配对应的轨迹节点,并检查订单当前最后一个有效轨迹是否存在于目标节点允许的前置节点范围内。

如果前置节点校验通过,系统生成新的轨迹记录,并将订单状态更新为该节点配置的目标状态;如果前置节点不符合要求,则无法生成新轨迹,也不更新订单状态,以避免订单进入不合理的流转路径。

整体判断逻辑如下:

业务操作发生

识别对应的业务事件

匹配目标轨迹节点

读取订单当前最后一个有效轨迹

校验是否属于目标节点允许的前置节点

满足条件
├─ 是:生成轨迹,并更新订单状态
└─ 否:不生成轨迹,保留当前订单状态

轨迹状态机的流转规则

  1. 订单创建与揽收

    客户通过客户端、API 或代理产品完成下单后,系统自动生成 已预报/客户下单(100) 节点。该节点是中大件订单轨迹的开始节点,后续所有正常轨迹均应以订单已创建为基础。

    揽收成功(315)揽收失败(316)为自动触发节点,如果订单在上级节点生成72小时内无节点更新,系统自动判定并生成“揽收失败”节点,该节点的生成对后续节点的流转,后续操作符合触发条件时订单状态对应更新

  2. 入仓与分拣

    包裹通过分拣机、人工分拣 App 或管理端批量分拣完成处理后,系统触发 包裹分拣-NB包裹(360)/包裹分拣-非NB包裹(365) 节点,并将订单更新为仓库已收件状态。

  3. 分配司机与派送取货

    订单通过管理端路径规划分配给司机时,系统触发 分配派送司机(510) 节点。司机通过 App 预先扫描仓库中的订单,系统触发 司机预扫描(370) 节点

    司机进入【派送取货】并成功扫描包裹后,系统触发 派送司机取件(515)派送中(520)节点。“派送司机取货”和“派送中”属于两个不同节点,但触发时间接近,相差5秒左右

  4. 配送完成

    司机在 App 中完成订单配送并提交 POD 后,系统触发 已送达(900) 节点,并将订单更新为闭环状态。

    状态机应确保订单只有在已经进入派送中的情况下,才能触发已送达节点。对于仍处于仓库、待揽收或未分配司机状态的订单,不应允许直接进入已送达。

  5. 配送失败与重新派送

    当司机无法在当日完成配送,但判断订单后续仍可以再次派送时,可以在 App 中选择“重新派送”。系统根据该订单已有的配送失败次数,依次触发首次、第二次或第三次配送失败节点。

    第一次失败 → 首次配送失败(610)
    第二次失败 → 第二次配送(620)
    第三次失败 → 第三系配送失败,返回一级仓(630)

    失败次数不应由司机手动选择,而应由系统根据当前订单已有的有效失败轨迹自动计算。这样可以避免司机重复选择错误的失败次数,或订单轨迹出现第一次失败后直接跳到第三次失败的情况。

    当订单已经产生第一次配送失败轨迹后,下一次重新派送失败只能触发第二次配送失败;产生第二次失败后,下一次只能触发第三次配送失败。状态机不允许失败节点倒退或重复覆盖。

  6. 无法派送与返仓

    如果司机确认订单无法完成配送,且后续不再继续尝试,可以选择“无法派送”。系统触发 无法派送,返回一级仓(640) 节点,表示包裹应退回仓库。

    包裹返回仓库后,仓库人员通过返仓入库扫描确认包裹已经入库,系统触发 包裹返仓入库(700) 节点。

    这两个节点需要区分:

    节点含义
    无法派送,返回一级仓司机已终止派送,包裹正在返回仓库
    包裹返仓入库仓库已实际收到包裹并完成入库

    只有仓库完成接收或上架后,订单才可以进入等待自提、退回发件人或包裹销毁等后续流程。

  7. 自提、退回与销毁

    已返仓入库的包裹在管理端发送预约取货时间或短信后,系统触发 等待自提(720) 节点,表示包裹已经完成库存位置确认,等待收件人前往仓库自提。

    收件人完成自提后,管理端用户点击【自提出仓】,系统触发 自提包裹(910) 节点,订单完成闭环。

    对于超过规定库存期限且发货方没有退回要求的包裹,管理人员确认后可以执行【销毁】,系统触发 包裹销毁(920) 节点。

    对于需要退回发货方的包裹,仓库完成实际退回后,管理人员执行【逾期退回】,系统触发 退回发件人(930) 节点。

    销毁和退回发件人均属于终止类节点。节点生成后,订单原则上不应再进入普通派送流程。

前置节点校验机制

状态机的核心是通过“允许的前置节点”限制轨迹流转。

例如,已送达(900) 节点的前置节点可以包含派送中、首次配送失败后重新派送、第二次配送失败后重新派送等状态,但不应包含客户下单或包裹分拣。这样可以避免订单尚未进入配送流程就被错误标记为已送达。

同样,包裹返仓入库节点的前置节点通常应包括“第三次配送失败”和“无法派送,饭后一级仓”,不应允许正常派送中的订单在没有任何返仓操作的情况下直接进入已返仓。

系统在触发节点时,应按以下顺序进行校验:

  1. 判断当前业务动作是否已配置对应节点;
  2. 获取订单最后一个有效轨迹节点;
  3. 判断最后一个有效节点是否在目标节点的允许前置节点中;
  4. 校验订单是否已存在相同且不可重复的节点;
  5. 校验失败次数、司机身份、仓库操作结果等业务条件;
  6. 校验通过后生成轨迹并更新订单状态。

常见问题

  1. 第三方已确认送达,是否可以直接将"待返仓"订单更新为"已完成"?

    可以。

    当订单因超出派送范围而转交第三方配送,且第三方已确认完成配送时,可以直接为订单添加"已完成"轨迹节点。虽然当前订单可能处于"待返仓"状态,但"无法派送,返回一级仓"属于"已完成"节点的上级节点,因此符合状态机流转规则。

    后续版本将新增"转派第三方"和"第三方送达"两个轨迹节点,用于更加准确地记录第三方配送流程。功能上线后,本知识库将同步更新相关内容。

  2. 误添加了"已完成"轨迹节点,可以回退吗?

    不可以。

    轨迹状态机采用单向流转机制,轨迹节点一旦生成即视为有效业务记录,不支持回退、删除或修改,以保证订单轨迹的完整性和可追溯性。如因误操作导致轨迹异常,请联系系统管理员或相关技术人员,根据实际业务情况进行后续处理,不建议直接修改订单轨迹。