连锁 · 多门店

总店与分店 · 数据关系说明

总店统一建品、分店选品上架;商品实体归总店,订单归属分店。本文说明表结构、前台展示、下单扣库存与总店汇总查询方式。

角色与商户类型

商户表 yjd_mchshop_type 区分连锁角色,分店通过 parent_mch_id 指向所属总店。

shop_type角色说明
0普通商户独立入驻,无连锁关系
1连锁总店创建分店后自动标记;维护商品库、分店销售策略
2连锁分店parent_mch_id = 总店 mch.id;从总店选品、独立上架价/库存

核心数据关系

一句话:商品在总店(goods.mch_id),分店在售关系在选品表,订单记在分店(order.mch_id

flowchart TB
  HQ["总店 mch\nshop_type=1"]
  BR["分店 mch\nshop_type=2\nparent_mch_id→总店"]
  G["yjd_goods\nmch_id=总店"]
  POL["yjd_mch_branch_goods_policy\n是否允许分店卖、改价、佣金"]
  BG["yjd_mch_branch_goods\n分店选品上架"]
  SKU["yjd_mch_branch_goods_sku\n分店 SKU 价/库存"]
  O["yjd_order\nmch_id=分店"]
  OD["yjd_order_detail\ngoods_id→总店商品"]

  HQ -->|parent_mch_id| BR
  HQ --> G
  G --> POL
  BR --> BG
  G --> BG
  BG --> SKU
  BR --> O
  O --> OD
  G --> OD

关键表说明

作用关键字段
yjd_mch_branch_goods_policy 总店对某商品的分店销售策略 goods_idhq_mch_idis_branch_sell(允许选品)、is_custom_price(分店可改价)、commission
yjd_mch_branch_goods 分店已选商品及上架状态 branch_mch_idhq_mch_idgoods_id(总店商品 ID)、statuspricestock(0 表示沿用总店)
yjd_mch_branch_goods_sku 多规格商品分店 SKU 价/库存 branch_mch_idgoods_idsku_idpricestock
yjd_goods 商品实体(总店维护) mch_id = 总店商户 ID
yjd_order 订单主体 mch_id = 分店商户 ID(谁在卖)
yjd_order_detail 订单明细 goods_id = 总店商品 ID(卖的是哪件货)

分店前台:商品怎么查出来

顾客进入分店店铺时,商品列表带分店 mch_id。查询条件为「分店自有商品」或「总店商品且分店已上架」:

餐饮点餐等同理:分店菜单会合并「本店分类」与「已选总店商品所属总店分类」;价格/库存优先读 mch_branch_goods / mch_branch_goods_sku,为 0 时回退总店。

下单与库存

  1. 结算按商户分组,order.mch_id 写入分店 ID(不是总店)。
  2. 明细 order_detail.goods_id 仍指向总店商品记录。
  3. 扣库存:若该商品是分店已上架的总店货,优先扣分店库存(SKU 表 → 选品表 → 回退总店 goods);分店自有商品走普通商户库存。

总店如何查分店数据

先取分店 ID 列表:parent_mch_id = 总店IDshop_type=2

查全部分店列表

SELECT id, name FROM yjd_mch
WHERE parent_mch_id = :hq_id AND shop_type = 2 AND is_delete = 0;

查各分店选了哪些总店商品(选品一览)

SELECT bg.*, g.name AS goods_name, m.name AS branch_name
FROM yjd_mch_branch_goods bg
INNER JOIN yjd_goods g ON g.id = bg.goods_id
INNER JOIN yjd_mch m ON m.id = bg.branch_mch_id
WHERE bg.hq_mch_id = :hq_id AND bg.is_delete = 0;

查某分店全部订单

SELECT o.* FROM yjd_order o
WHERE o.store_id = :store_id
  AND o.mch_id = :branch_id
  AND o.is_delete = 0;

查全部分店订单

SELECT o.* FROM yjd_order o
WHERE o.store_id = :store_id
  AND o.mch_id IN (:branch_ids)
  AND o.is_delete = 0;

查分店卖出的「总店商品」订单(对账常用)

SELECT DISTINCT o.*, od.goods_id, g.name AS goods_name
FROM yjd_order o
INNER JOIN yjd_order_detail od ON od.order_id = o.id
INNER JOIN yjd_goods g ON g.id = od.goods_id
WHERE o.mch_id IN (:branch_ids)      -- 订单归分店
  AND g.mch_id = :hq_id              -- 商品归总店
  AND o.is_delete = 0;
注意:总店默认商品列表只显示 goods.mch_id = 总店;分店订单列表只显示 order.mch_id = 分店。 总店要看「全部分店订单」需在查询中扩展 order.mch_id IN (分店IDs),目前需二次开发或按上表 SQL 汇总。

后台与小程序入口

操作PC 商家后台小程序商家端
总店:分店管理user/branch/shop/index经营工具「连锁总店」菜单(API 下发)
总店:商品分店策略商品编辑页「分店权限」
分店:选品上架user/branch/shop/goods分店商品管理
分店:订单我的店铺 → 订单shop_pages/order
分店列表(C 端)API mchshop/index/mchs-list

与其它文档的关系

数据库补丁

新环境需执行 SQL 补丁(按顺序):