企业 POS 后厨屏

Odoo 企业版 POS:后厨屏加载的不是一张表,而是一整套关联数据

很多人以为 preparation display 只是“查出待做订单列表”。实际上 pos_enterprise 把它设计成一套独立的前端数据图谱:订单、行、状态、产品、属性和值一起下发,再用

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

如果把后厨屏理解成“后台列表换个皮肤”,你大概率会低估它的复杂度。真正的后厨屏不是看一张订单表,而是要同时知道哪单、哪一行、在哪个阶段、带了哪些配料和属性,还要能实时响铃。

这篇文章主要参考了以下企业版源码入口:

  • enterprise/pos_enterprise/models/pos_prep_display.py
  • enterprise/pos_enterprise/models/pos_prep_order.py

一、这篇功能真正解决什么问题

pos_enterprise 里的 preparation display 解决的是后厨工作台的数据组织问题。厨房不是财务报表,不接受“点开订单再看明细”的交互;它需要屏幕一打开就拿到足够完整的数据,少跳转、少等待、少猜测。

二、核心链路怎么走

1. display 自己声明要加载哪些模型

_load_preparation_data_models() 返回的不是一个模型,而是一串相关模型:pos.prep.orderpos.prep.linepos.prep.statepos.orderproduct.productproduct.attributeproduct.template.attribute.value 等。官方很明确:后厨屏需要的是一个局部业务图谱,而不是单点查询。

2. load_preparation_data() 负责把首屏数据一次打包

这个方法会先读当前 pos.prep.display 本身,再遍历每个关联模型,调用各自的 _load_pos_preparation_data(...)。如果某个模型因为权限报 AccessError,它会优雅地退成空列表,而不是整屏崩掉。这一点对餐饮现场非常重要。

3. 后续更新靠 bus 通知,而不是整屏重载

pos.prep.order.process_order() 检测到订单有 preparation change,会找到命中的 display,然后调用 _send_load_orders_message()。这说明首屏取数和增量刷新是两套协同机制:前者解决“打开能看”,后者解决“变化及时到”。

三、新手最容易踩的坑

  • 以为后厨屏只要查 pos.order 就够了,结果配料、属性、自定义值全丢。
  • 以为实时刷新就是前端轮询。实际上官方更倾向 bus 通知驱动,减少整屏反复重取。
  • 以为权限异常会直接暴露成错误页。源码在加载阶段已经做了容错处理。

四、实战落地时最该盯的点

  • 新增自定义口味、配料或打印字段时,先想清楚它属于哪一层模型,后厨屏有没有跟着装载。
  • 如果门店抱怨“偶尔不刷新”,先查 process_order() 有没有判断出 change,再查 display 通知是否发出。
  • 别把后厨屏当后台报表优化;它更像一个事件驱动的作业终端,优化思路完全不同。

五、结论

Preparation display 真正的难点,是把订单、行、阶段、产品属性和实时通知揉成一套可工作的前端数据图。明白这一点,很多“为什么不是直接查订单表”的疑问自然就消失了。

DISCUSSION

评论区

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