电子价签最难的从来不是“调通接口”,而是门店有成百上千个商品变动时,怎样既不把 API 打爆,又能让价签上的价格、税和促销信息保持可信。
核心链路
pricer_store.py里的setup_requests_session()先去 auth URL 拿 JWT,再把 token 写进 session header。企业版显然把 Pricer 当成需要会话管理的外部系统,而不是一次性匿名调用。PricerStore会分别计算auth_url、create_or_update_products_url、link_tags_url。这三个 URL 分离得很清楚:鉴权、商品同步、标签关联不是一个接口包打天下。_update_pricer_tags()不会在每次字段变更时立刻推送,而是先找出pricer_product_to_create_or_update和pricer_product_to_link的记录,再按 store 批量PATCH。这正是门店级集成需要的节流策略。product_product.py中write()只要命中 Pricer 相关字段,就把商品标记为待同步;真正生成 payload 时_get_create_or_update_body()会把商品名、条码、税后展示价、促销旧价、规格标签、库存等整理成统一 JSON。compute_prices()还专门处理“税含价与标价一致性”:如果税后总价与原价一致就展示含税,否则展示未税。对于电子价签,这一步直接决定门店看到的数字是不是符合当地习惯。
关键源码位置
/home/ubuntu/odoo-temp/enterprise/pos_pricer/models/pricer_store.py/home/ubuntu/odoo-temp/enterprise/pos_pricer/models/product_product.py
容易误解的地方
- 误区一:改价后立刻同步才叫实时。门店硬件集成反而更需要批量、异步和去抖。
- 误区二:价签上就显示
lst_price。源码还会算税、促销价和旧价。 - 误区三:删除标签只影响 Odoo 记录。
unlink_label()还会调用远端 API 解除绑定。
实战注意事项
- 做门店大批量调价时,先接受“标记待同步,再批量 patch”的节奏,别强求逐条实时。
- 接入前要和财税团队确认价签习惯展示含税还是未税,避免 API 通了但门店仍认为价格错了。
- 如果同步失败,先看
last_update_status_message,它已经把 HTTP 失败和凭证问题区分开了。
结语
企业版这些代码共同说明一件事:真正可上线的业务流程,靠的不是“页面上看起来能点通”,而是权限、状态、时机、对账口径和跨模块回写都被收紧。理解这些边界,实施和二开时就不容易走进“功能演示能跑、真实业务一用就散”的坑。
DISCUSSION
评论区