企业 销售 Lazada

Odoo 企业版 Lazada 发货为什么不是“打印面单就算出库”:pack、shipping label 与 RTS 状态回跳讲透

sale_lazada 把发货拆成打包、下载面单、设为 Ready to Ship 三段,package_extern_id、label 和平台状态彼此约束,不能一步跳过。

企业 销售
进阶 开发者 1 分钟阅读
0 评论 0 点赞 0 收藏 4 阅读

Lazada 履约流程里,“面单打印出来了”只是中段,不是终点。sale_lazada 把整个过程拆成 _pack_lazada_package()_fetch_lazada_shipping_label()_set_lazada_rts() 三段,说明平台发货不是一个按钮,而是多段状态回跳。

主要参考源码:

  • enterprise/sale_lazada/models/stock_picking.py

一、先 pack,说明平台先承认包裹,再承认发货

_pack_lazada_package() 只处理带 Lazada order item、状态还是 draft 且还没有 package_extern_id 的 picking。换句话说,系统先向 Lazada 申请/确认外部包裹身份,再进入后续动作。

二、拿到 label 不代表已经 RTS

_fetch_lazada_shipping_label() 负责下载 AWB,并对 eligible picking 继续更新状态;真正的 Ready to Ship 要到 _set_lazada_rts() 批量提交后才算。标签文件、外部包裹号和平台可发货状态是三件不同的事。

三、为什么要按 shop 分组和批量处理

源码先 _get_lazada_pickings_by_shop(),再按 shop 做 pack、label、RTS。这是在尊重平台边界:店铺上下文、接口限流和 provider 信息都不能混批。

四、落地时最容易误判什么

  • 以为有 label 就等于平台已允许发货;
  • 以为 picking done 之后平台状态一定自动追平;
  • 以为 package_extern_id 只是一个可有可无的外部字段。

实际上,package_extern_id 是后续 label 与 RTS 的锚点,没有它,平台根本不认这次发货链路。

五、结论

Lazada 发货不是“打印面单就算出库”,而是pack package -> 获取 label -> 设置 RTS 的分段回跳链。每一段都在校验前一段是否成功,少走一步就会出现 Odoo 已出库、平台却未 ready 的断层。

DISCUSSION

评论区

想参与讨论?先 登录 再发表评论。
还没有评论,你可以成为第一个留言的人。