# 租户商品主数据（QueryTenantGoods）

> 自动生成于 2026-02-13 | 数据来源：本地 JSON 样本

## 基本信息

| 属性 | 值 |
|------|-----|
| 接口路径 | `TenantGoods/QueryTenantGoods` |
| 完整 URL | `https://pc.ficoo.vip/apiprod/admin/v1/TenantGoods/QueryTenantGoods` |
| 请求方法 | `POST` |
| Content-Type | `application/json` |
| 鉴权方式 | Bearer Token（`Authorization` 头） |
| ODS 对应表 | `tenant_goods_master` |
| 分页方式 | `page` + `limit`（最大 100） |
| 时间范围 | 不需要 |

## 请求参数

| 参数名 | 类型 | 示例值 | 说明 |
|--------|------|--------|------|
| `costPriceType` | int | `0` | 成本价类型（0=全部） |
| `ableDiscount` | int | `-1` | 是否可折扣（-1=全部） |
| `tenantGoodsStatus` | int | `0` | 商品状态（0=全部） |
| `page` | int | `1` | 页码（从 1 开始） |
| `limit` | int | `100` | 每页条数（最大 100） |

## 响应字段（共 31 个）

| # | 字段名 | 类型 | 示例值 |
|---|--------|------|--------|
| 1 | `categoryName` | string | '饮料' |
| 2 | `isInSite` | bool | False |
| 3 | `commodityCode` | array | ['10000028'] |
| 4 | `id` | int | 2791925230096261 |
| 5 | `tenant_id` | int | 2790683160709957 |
| 6 | `goods_name` | string | '东方树叶' |
| 7 | `goods_cover` | string | 'https://oss.ficoo.vip/admin/ZwS8fj_1753175129443.jpg' |
| 8 | `goods_state` | int | 1 |
| 9 | `goods_category_id` | int | 2790683528350539 |
| 10 | `unit` | string | '瓶' |
| 11 | `supplier_id` | int | 0 |
| 12 | `create_time` | string | '2025-07-15 17:13:15' |
| 13 | `is_delete` | int | 0 |
| 14 | `goods_second_category_id` | int | 2790683528350540 |
| 15 | `cost_price` | float | 0.0 |
| 16 | `market_price` | float | 8.0 |
| 17 | `pinyin_initial` | string | 'DFSY,DFSX' |
| 18 | `goods_bar_code` | string | '' |
| 19 | `able_discount` | int | 1 |
| 20 | `min_discount_price` | float | 0.0 |
| 21 | `commodity_code` | string | '10000028' |
| 22 | `goods_number` | string | '1' |
| 23 | `update_time` | string | '2025-10-29 23:51:38' |
| 24 | `cost_price_type` | int | 1 |
| 25 | `remark_name` | string | '' |
| 26 | `sale_channel` | int | 1 |
| 27 | `able_site_transfer` | int | 2 |
| 28 | `common_sale_royalty` | int | 0 |
| 29 | `point_sale_royalty` | int | 0 |
| 30 | `is_warehousing` | int | 1 |
| 31 | `out_goods_id` | int | 0 |

## 新增字段（相对本地 JSON 样本）

以下字段在最新 API 响应中出现，但本地 JSON 样本中不存在：

| 字段名 | 类型 |
|--------|------|
| `not_sale` | int |

## 详细字段分析

> 以下内容迁移自旧版 `tenant_goods_master-Analysis.md`，包含字段的业务含义、枚举值、跨表关联等详细说明。

二、单条商品档案记录字段说明（31 个字段）

为便于理解，按逻辑分组说明。

1. 主键与租户维度字段

id

类型：int

含义：商品档案主键 ID，唯一标识一条商品。

作用：作为其他业务表（销售明细、库存流水、门店商品表等）的外键，通常以 tenant_goods_id 或类似字段出现。

tenant_id

类型：int

当前值：全表 156 条记录均为同一个值。

含义：租户/品牌 ID。

作用：和其它 JSON 中的 tenant_id / tenantId 一致，用于区分不同商户（本次数据只包含同一租户）。

2. 分类维度字段

categoryName

类型：string

含义：商品一级分类名称（业务可读）。

取值情况：

共 14 种分类名称，出现频次较高的包括：

零食（43 条）

饮料（34 条）

香烟（16 条）

其他2（16 条）

雪糕（13 条）

酒水、球杆、小吃、面、槟榔 等。

说明：纯展示用名称，真实关联通过下面的 goods_category_id / goods_second_category_id 完成。

goods_category_id

类型：int

含义：商品一级分类 ID。

取值情况：

共 9 个不同 ID，例如：

一个 ID 对应 46 条、一个对应 45 条、其他若干个对应 10 条以内。

特征：

明显是“分类维度”的主键，和某个“分类表”关联（本次导出中未单独给出分类表）。

各 ID 与 categoryName 一一对应（同一 ID 对应的名称相同）。

goods_second_category_id

类型：int

含义：商品二级分类 ID。

取值情况：

共 14 个不同 ID，与一级分类进一步细分。

分布上，一般跟 categoryName 的细分类对应，如“饮料”下的不同子类。

使用场景：

在销售明细/统计报表中，用于按二级分类汇总。

小结：

categoryName 是分类名称展示字段；

goods_category_id / goods_second_category_id 是分类 ID，用于与“商品分类维表”关联；

其它业务 JSON（例如商品销售明细）中也出现这两个字段，用来做分类维度联表。

3. 商品基础信息字段

goods_name

类型：string

含义：商品名称（前台展示名称）。

特征：

156 条记录全唯一，例如“东方树叶”“红烧牛肉面”“百威235毫升”“雪碧”“双中支中华”等。

用途：

POS 前台展示、票据打印等。

remark_name

类型：string

当前值：全部为 ""（空字符串）。

含义（从命名推断）：商品备注名/别名，通常用来配置简写或特殊显示名称。

当前门店尚未使用该字段，字段设计为将来扩展预留。

goods_number

类型：string

含义：商品内部编码（自定义货号/系统货号）。

特征：

所有 156 条记录均不重复，例如 "1", "2", "3", "4", ...，还有 "10", "11" 等。

使用场景：

作为内部手工输入编码、或导入导出时的匹配字段。

pinyin_initial

类型：string

含义：拼音首字母/助记码。

特征：

156 条记录全不同，如 'DFSY,DFSX', 'HSNRM,GSNRM', 'SRC', 'BW235HS', 'SP' 等；

格式有的是拼音首字母组合，有的是字母+数字混合，说明可能用于多关键字检索。

用途：

前台“拼音码搜索”用的检索字段。

unit

类型：string

含义：计量单位。

取值（共 12 种左右）：

常见：包、瓶、个、份、根、盒、杯、桶、盘、支 等。

用途：

决定库存单位、销售单位（例如“按瓶卖”还是“按包卖”）。

goods_cover

类型：string

含义：商品封面图片 URL 地址。

特征：

共 123 个不同 URL，其中部分同一商品系列共享一张图片（例如某个 URL 出现 34 次）。

用途：

用于前端展示商品图片。

goods_bar_code

类型：string

当前值：全部为 ""（空）。

含义：商品条码（EAN 等），目前未维护。

说明：

字段设计上是用来对接扫码枪的，但当前门店商品条码没有录入。

out_goods_id

类型：int

当前值：全部为 0。

含义（推测）：外部系统商品 ID（对接第三方平台使用，如外卖、线上商城等）。

当前未启用外部对接，因此全部为 0。

commodity_code

类型：string

含义：商品编码（通常为对外商品编码或条码）。

特征：

共 35 种取值，其中：

"10000" 出现 85 条；

"100000" 出现 35 条；

还有 "100017", "100026", "0000000", "10000028", "10000002" 等。

说明：

多条不同 id 的商品可以共用同一个 commodity_code，说明它是某种“系列编码”或“外部编码”而非商品主键。

commodityCode

类型：list（列表内只有一个字符串元素）

示例：['10000']，['100000'] 等。

含义：

与 commodity_code 是同一信息的数组形式（冗余存储），便于支持一个商品对应多个编码的场景。

当前实际使用中，一条记录只有一个编码，因此列表长度均为 1。

4. 价格与折扣相关字段

market_price

类型：float

含义：商品标价 / 售价（标准销售单价）。

特征：

共 45 个不同价格，常见价格如 2、5、6、8、10、12、15、18、20、28 等。

用途：

POS 系统默认销售价格，结算时的基础价格。

min_discount_price

类型：float

含义：该商品允许售卖的最低价格（底价）。

特征：

共 41 个不同价格，分布包括 0.0（32 条）、6、4、15、7、8、5、10、3、28 等。

说明：

0.0 可能表示“未设置底价”或“按系统默认规则”。

cost_price

类型：float

含义：成本价格。

特征：

大部分为 0.0（152 条），少数为 2.0, 2.5, 3.0 等。

说明：

当前门店对绝大多数商品未录入成本，仅为少数商品录入了成本价。

该字段用于库存核算、成本统计等场景（本次不做金额分析，仅说明结构）。

cost_price_type

类型：int（枚举）

取值：

1：149 条

2：7 条

含义（推测）：

不同的成本价格来源或计算方式，如：

1：手工录入成本；

2：按最近进货价/加权平均价等自动计算。

具体含义需参考系统字典，但可以确定是“成本类型枚举”。

able_discount

类型：int（枚举）

当前值：全部为 1

含义（推测）：是否允许参与折扣/打折。

1：允许折扣；

其它值（当前未出现）可能代表“禁止打折”。

当前所有商品均标记为可打折。

sale_channel

类型：int（枚举）

当前值：全部为 1

含义（推测）：销售渠道类型，如“门店堂食/线下零售/线上小程序”等的一种编码。

现有数据只有一个值，说明本门店目前仅通过一种渠道销售这些商品。

5. 库存 / 仓储与门店相关字段

is_warehousing

类型：int（枚举）

当前值：全部为 1

含义（推测）：是否启用库存管理。

1：该商品纳入库存管理；

0：不纳入库存管理（例如纯虚拟商品）。

当前所有商品都处于“有库存管理”的状态。

isInSite

类型：bool

当前值：全部为 False

含义（从命名推测）：是否在当前门店启用/上架。

现象：

虽然导出指定了某个门店，但这里全部为 False，说明这个文件更偏向“租户级商品库视角”，而不是“门店已上架商品视角”；

具体含义可能是“是否已同步到某个特定门店”，当前视图可能没启用这个标志。

able_site_transfer

类型：int（枚举）

取值：

2：155 条

0：1 条

含义（推测）：

字面意思是“是否允许门店间调拨/门店级操作”：

2：允许（或默认可调拨）；

0：不允许。

值使用 2 而非 1，说明内部枚举可能是多态（例如 1=未配置、2=允许、0=禁止），具体需结合系统配置才可精准解释。

当前有一条商品配置为 0，与其他商品行为可能存在差异。

goods_state

类型：int（枚举）

当前值：全部为 1

含义（推测）：商品状态（上架/下架等）。

1：正常/上架；

其他值（本数据未出现）可能表示下架、停用等状态。

6. 佣金 / 提成 / 积分相关字段

common_sale_royalty

类型：int

当前值：全部为 0

含义（推测）：普通销售提成比例或提成金额的配置字段。

当前门店未在商品档案上配置员工提成规则，全部为 0。

point_sale_royalty

类型：int

当前值：全部为 0

含义（推测）：积分销售提成/积分赠送规则相关配置。

当前同样未启用。

说明：
这两个字段与促销、积分、提成等高级功能相关，当前仅作为预留字段存在，未实际配置。

7. 供应商相关字段

supplier_id

类型：int

当前值：全部为 0

含义：供应商 ID，用于关联到供应商档案。

当前所有商品都未挂接具体供应商（或门店未使用供应链管理模块）。

8. 时间与删除状态字段

create_time

类型：string（时间）

格式：YYYY-MM-DD HH:MM:SS

含义：商品档案创建时间。

特征：

156 条记录全部有值，全部唯一。

update_time

类型：string 或 null

含义：商品档案最近一次修改时间。

分布：

null（或 None）：28 条，表示自创建以来未被修改；

其余为不同时刻的更新时间。

用途：

用于增量同步、数据对账等（只需要处理 update_time 大于某个时间点的记录）。

is_delete

类型：int（枚举）

当前值：全部为 0

含义：逻辑删除标志。

0：未删除（有效商品）；

1：已删除（逻辑删除，保留档案但前台不再展示）。

当前所有商品均处于“未删除”状态。

三、结构关系与设计线索（从字段/结构角度，不做金额或经营分析）

从 商品档案.json 的字段设计，可以看出以下几点与系统整体结构密切相关的线索：

“租户级商品库”与“门店级商品视图”的区分

tenant_id 存在，但没有 site_id 字段，且 isInSite 全为 False，is_warehousing 全为 1。

说明这一份是 租户维度的商品主档（Brand/集团统一商品列表），而不是某个门店独立维护的商品清单。

门店层的启用/下架、门店特有售价等，很可能在另一张“门店商品表”（比如带 siteId 的 orderGoods 或 siteGoods 表）中维护，这份只是底层档案。

与“商品销售明细/门店销售记录”的关联点

在另一个 JSON 中（门店商品销售明细），出现了 oneCategoryName, twoCategoryName, goods_category_id, goods_second_category_id 等字段。

可以推断：

销售明细中用 tenant_goods_id 或类似字段引用本表的 id；

用 goods_category_id / goods_second_category_id 建立分类维度统计；

goods_name、commodity_code、unit 等在销售明细中会“快照冗余”，方便查询和展示。

与“库存/仓储模块”的接口设计

is_warehousing 全为 1，说明所有商品都被纳入库存管理范围；

cost_price、cost_price_type、supplier_id 等字段，是典型的库存/进销存用途字段；

这意味着：另有库存流水 JSON（如入库单、出库单、盘点记录等），会通过商品 id（或 out_goods_id）与本表关联。

对接外部系统和扫码收银的预留

goods_bar_code 虽然目前为空，但字段设计表明系统支持条码扫描销售；

out_goods_id 预留了外部商品 ID，对接第三方平台（外卖、统一商品库等）时会使用；

commodity_code/commodityCode 强调了一个商品可以有多种编码的可能（当前只有单元素列表）。

可扩展的促销与提成机制

虽然 common_sale_royalty、point_sale_royalty 当前都为 0，但和“助教流水”“销售记录”中的推广/提成字段组合起来，可以构成统一的提成规则体系；

able_discount、min_discount_price、sale_channel 这几个字段一起，构成了商品在不同渠道、不同活动下允许打折的边界控制。

分类维度的稳定主数据角色

categoryName + goods_category_id + goods_second_category_id 说明分类层级已经固化：至少支持“两级分类”；

这些分类 ID 在多张表中反复出现（销售明细、可能的库存统计视图等），构成统一的“商品分类维度表”。
