# 门店商品销售记录（GetGoodsSalesList）

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

## 基本信息

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

## 请求参数

| 参数名 | 类型 | 示例值 | 说明 |
|--------|------|--------|------|
| `isSalesBind` | int | `0` | 是否绑定销售（0=全部） |
| `startTime` | string | `"2026-02-01 08:00:00"` | 查询起始时间 |
| `endTime` | string | `"2026-02-13 08:00:00"` | 查询结束时间 |
| `siteId` | int | `2790685415443269` | 门店 ID |
| `goodsSalesType` | int | `0` | 销售类型（0=全部） |
| `page` | int | `1` | 页码（从 1 开始） |
| `limit` | int | `100` | 每页条数（最大 100） |

## 响应字段（共 50 个）

| # | 字段名 | 类型 | 示例值 |
|---|--------|------|--------|
| 1 | `siteId` | int | 0 |
| 2 | `siteName` | string | '朗朗桌球' |
| 3 | `orderGoodsId` | int | 0 |
| 4 | `openSalesman` | int | 2 |
| 5 | `id` | int | 2957924029550406 |
| 6 | `order_trade_no` | int | 2957858167230149 |
| 7 | `site_id` | int | 2790685415443269 |
| 8 | `tenant_id` | int | 2790683160709957 |
| 9 | `operator_id` | int | 2790687322443013 |
| 10 | `operator_name` | string | '收银员:郑丽珊' |
| 11 | `order_settle_id` | int | 2957922914357125 |
| 12 | `ledger_name` | string | '哇哈哈矿泉水' |
| 13 | `ledger_group_name` | string | '酒水' |
| 14 | `ledger_unit_price` | float | 5.0 |
| 15 | `ledger_count` | int | 1 |
| 16 | `ledger_amount` | float | 5.0 |
| 17 | `order_pay_id` | int | 0 |
| 18 | `create_time` | string | '2025-11-09 23:35:57' |
| 19 | `is_delete` | int | 0 |
| 20 | `tenant_goods_category_id` | int | 2790683528350540 |
| 21 | `tenant_goods_business_id` | int | 2790683528317768 |
| 22 | `is_single_order` | int | 1 |
| 23 | `site_goods_id` | int | 2793026176012357 |
| 24 | `cost_money` | float | 0.01 |
| 25 | `ledger_status` | int | 1 |
| 26 | `site_table_id` | int | 2793003705192517 |
| 27 | `discount_money` | float | 0.0 |
| 28 | `salesman_user_id` | int | 0 |
| 29 | `salesman_name` | string | '' |
| 30 | `salesman_role_id` | int | 0 |
| 31 | `tenant_goods_id` | int | 2792115932417925 |
| 32 | `discount_price` | float | 5.0 |
| 33 | `real_goods_money` | float | 5.0 |
| 34 | `sales_type` | int | 1 |
| 35 | `package_coupon_id` | int | 0 |
| 36 | `order_coupon_id` | int | 0 |
| 37 | `goods_remark` | string | '哇哈哈矿泉水' |
| 38 | `returns_number` | int | 0 |
| 39 | `member_discount_amount` | float | 0.0 |
| 40 | `point_discount_money` | float | 0.0 |
| 41 | `point_discount_money_cost` | float | 0.0 |
| 42 | `push_money` | float | 0.0 |
| 43 | `sales_man_org_id` | int | 0 |
| 44 | `coupon_deduct_money` | float | 0.0 |
| 45 | `option_value_name` | string | '' |
| 46 | `option_price` | float | 0.0 |
| 47 | `option_member_discount_money` | float | 0.0 |
| 48 | `option_coupon_deduct_money` | float | 0.0 |
| 49 | `member_coupon_id` | int | 0 |
| 50 | `order_goods_id` | int | 2957858456391557 |

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

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

| 字段名 | 类型 |
|--------|------|
| `coupon_share_money` | float |

## 详细字段分析

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

二、单条销售记录字段逐项说明（共 50 个）

我按“业务维度”来分组说明，并标出类型、是否枚举以及与其他表的关系。

2.1 订单 / 商品 / 关联 ID 类字段

id

类型：int

唯一性：200 条记录全部不重复。

含义：本条「门店销售流水」记录的主键 ID。

用途：在系统内部唯一标识这一条销售明细。

order_trade_no

类型：int

唯一值个数：93

含义：订单交易号（业务单号）。

关系：

与台费流水、团购套餐流水、助教流水等表中的 order_trade_no 一致，用于把同一订单下的不同消费项目串联起来（台费、商品、助教、套餐等）。

order_settle_id

类型：int

唯一值个数：88

含义：订单结算 ID（结账单主键）。

关系：

与「小票详情」里的 orderSettleId 对应。

正常情况下，对应结账记录表中的结算主键（本次导出结账记录为空，但字段设计就是为此）。

order_pay_id

类型：int

唯一值个数：89

含义：关联支付记录的 ID。

关系：

对应「支付记录」中的主键或 relate_id，指向本条销售所属的那笔支付流水。

order_goods_id

类型：int

唯一值个数：200（每条都不同）

含义：订单商品明细 ID（订单内部的商品行主键）。

关系：

在其它明细表或小票详情中，如果需要区分订单里的多行商品，通常会用这个 ID 做关联。

orderGoodsId

类型：int

唯一值个数：1，全部为 0

含义：老版本字段 / 兼容字段，理论上也是订单内商品明细 ID。

说明：

当前接口已经统一使用 order_goods_id，orderGoodsId 处于「保留但未使用」状态，因此全部为 0。

site_goods_id

类型：int

唯一值个数：61

含义：门店商品 ID。

关系：

对应 门店商品档案1.json 中的 id 字段。

所有库存与销售明细针对的商品，在门店维度都是用这个 ID 做主键。

tenant_goods_id

类型：int

唯一值个数：61

含义：租户（品牌）级商品 ID（全局商品 ID）。

关系：

对应「商品档案（全局）」中的 id 或同名字段。

一个全局商品在多个门店可以生成多个 site_goods_id，但共享同一个 tenant_goods_id。

tenant_goods_category_id

类型：int

唯一值个数：9

含义：租户级商品一级分类 ID。

关系：

对应分类表中的一级分类主键，用于品牌维度的商品分类。

tenant_goods_business_id

类型：int

唯一值个数：7

含义：租户级商品「业务大类」ID（例如“零食类”“酒水类”等更高维度）。

2.2 门店 / 球台维度字段

tenant_id

类型：int

含义：租户/品牌 ID。

特征：所有记录为同一个值，对应「非球科技系统中你的商户」。

site_id

类型：int

含义：门店 ID（系统主键）。

关系：

与其它 JSON（台费流水、助教流水、库存类等）中的 site_id 一致，都指向同一家门店。

siteName

类型：string

观测值：全部为 "朗朗桌球"

含义：门店名称，是对 site_id 的冗余文本。

siteId

类型：int

观测值：全部为 0

含义：历史兼容字段，当前接口中不再使用。真正的门店 ID 已经统一用 site_id 表示。

site_table_id

类型：int

唯一值个数：31

观测值：既有非零长整型，也有为 0 的情况。

含义：球台 ID。

非 0：销售记录关联到具体某张桌台（例如顾客在台上点饮料）。

0：该商品销售未关联桌台（例如纯前台售卖或库存调整类销售）。

关系：

对应「台桌列表」中的 id 字段。

2.3 商品名称 / 分组 / 备注类字段

ledger_name

类型：string

含义：销售项目名称（商品名称），例如 “哇哈哈矿泉水”“地道肠”“东方树叶”等。

说明：业务展示用字段，历史流水即使商品改名，这里会保留当时的名字。

ledger_group_name

类型：string

观测值示例："酒水", "零食", "小吃", "服务费" 等。

含义：销售项目所属的「门店内部分组名称」，类似前台菜单分组或大类标签。

关系：

与 tenant_goods_category_id / 分类表是两套维度：
一套是品牌统一分类（tenant_goods_category_id），
一套是门店前台展示的分组（ledger_group_name）。

goods_remark

类型：string

观测：

部分记录为空；

部分与商品名相同，例如 ledger_name="哇哈哈矿泉水"，goods_remark="哇哈哈矿泉水"。

含义：商品备注/口味说明/特殊说明。

用途：点单时如果需要额外说明，可以写在这里。

option_value_name

类型：string

观测值：本批数据全部为空字符串。

含义：商品选项名称（如规格、口味：大杯/小杯，不加冰等）。

结构用途：

为将来支持“多规格/多口味商品”留的位；当前门店未启用，所有销售都视为单规格。

2.4 金额 / 单价 / 数量相关字段

ledger_unit_price

类型：float

含义：商品在该次销售中的「结算单价」（元/单位）。

观测值示例：5.0, 8.0, 2.0, 10.0, 72.0 等。

ledger_count

类型：int

含义：销售数量（以 unit 为单位，unit 字段在门店商品档案中）。

观测值：如 1, 2, 3, 6, 36 等。

ledger_amount

类型：float

含义：原始应收金额，公式上接近 ledger_unit_price × ledger_count。

说明：这是未考虑优惠前的金额基础，用于后续计算折扣和抵扣。

discount_price

类型：float

含义：折后单价（元/单位）。

观测：

对于无折扣商品，discount_price = ledger_unit_price；

对于有折扣商品，discount_price < ledger_unit_price，例如单价 8 元，折后单价 6 元。

discount_money

类型：float

含义：本条销售明细的「价格优惠金额」，即原价部分被减免掉的金额。

典型关系：

在简单场景下：ledger_amount - discount_money = real_goods_money（再加上积分/券抵扣后才是最终收入）。

观测示例：0.0, 1.0, 2.0, 4.0, 540.0 等。

real_goods_money

类型：float

含义：商品实际入账金额（考虑折扣、可能还会考虑其它抵扣后的实际销售金额）。

观测值：5.0, 10.0, 8.0, 6.0, 4.0 等。

结构地看：real_goods_money ≤ ledger_amount，差额由各类优惠字段解释（折扣、优惠券、积分等）。

cost_money

类型：float

含义：本条销售对应的成本金额（以元计）。

观测示例：0.01, 0.00, 3.58, 1.79, 0.64 等。

关系：

透视结构时，cost_money 对应该销售的成本摊销结果，来源于门店商品档案中 cost_price 与成本核算逻辑。

returns_number

类型：int

观测值：全部为 0

含义：退货数量（如果这条明细做了退货，会记录退货数量）。

当前导出时间段内，没发生退货，因此都是 0。

2.5 积分 / 优惠券 / 抵扣类字段

coupon_deduct_money

类型：float

观测值：全部为 0.0

含义：被优惠券 / 团购券直接抵扣到这条商品明细上的金额。

说明：

当前样本中没有券直接作用于单个商品，因此为 0；

如果有券只在订单级抵扣，这部分优惠就不会写到商品层的 coupon_deduct_money。

member_discount_amount

类型：float

观测值：全部为 0.0

含义：由会员身份（会员折扣）针对这一行商品产生的优惠金额。

说明：尽管字段存在，但当前实际折扣可能合并反映在 discount_money 中，这个字段没有拆开体现。

point_discount_money

类型：float

观测值：全部为 0.0

含义：由积分抵扣的金额（顾客兑换积分抵现金额）。

point_discount_money_cost

类型：float

观测值：全部为 0.0

含义：积分抵扣对应的“成本金额”（后台核算用），例如按积分成本来计提费用。

package_coupon_id

类型：int

观测值：全部为 0

含义：套餐券 ID。

关系：

若某商品是从套餐拆分出来的，可能会记录这个字段，用于追溯到「团购套餐流水」或相关套餐定义。当前样本中没有使用这个结构。

order_coupon_id

类型：int

观测值：全部为 0

含义：订单级优惠券 ID。

关系：

当整个订单使用某张优惠券（而非单个商品），会在订单主表 /订单层记录 order_coupon_id；
商品层的这个字段可能用于记录“订单级券对本行分摊的关系”。目前样本未使用。

member_coupon_id

类型：int

观测值：全部为 0

含义：会员券 ID（比如会员专享优惠券）。

当前数据未使用，属于为会员权益预留的字段。

option_price

类型：float

观测值：全部为 0.0

含义：商品选项（规格/加料）的附加价格。

说明：如加冰、加料、升级大杯等产生附加费用时，理论上应该体现到这里。当前门店未使用此功能。

option_member_discount_money

类型：float

观测值：全部为 0.0

含义：由会员折扣作用在“选项价格”上的优惠金额。

option_coupon_deduct_money

类型：float

观测值：全部为 0.0

含义：由优惠券抵扣“选项价格”的金额。

上面这三个 option_* 字段，是为“主商品 + 选项”的更复杂计价方式预留的，本店当前所有记录都是单规格，选项体系未启用。

2.6 操作员 / 销售员相关字段

operator_id

类型：int

唯一值个数：1

含义：操作员 ID（录入这笔销售的员工）。

关系：

与其它流水中的 operator_id 相同，可以跨台费/助教/商品销售统一看到是谁操作。

operator_name

类型：string

观测示例："收银员:郑丽珊" 等。

含义：操作员姓名，文字冗余。

openSalesman

类型：int，枚举

观测值：全部为 2

含义（结合系统其它文件推断）：

1：启用“营业员/销售员”机制（要指定 salesman）；

2：未启用营业员机制，本条记录不单独计算某销售员提成。

当前门店配置中显然未启用营业员分成功能，对全部商品都统一为 2。

salesman_name

类型：string

观测值：全部为空字符串

含义：营业员姓名（如果有为具体销售员记业绩，则在此填姓名）。

salesman_user_id

类型：int

观测值：全部为 0

含义：营业员用户 ID（系统账号 ID）。

salesman_role_id

类型：int

观测值：全部为 0

含义：营业员的系统角色 ID（例如某个角色代码表示“销售员”）。

sales_man_org_id

类型：int

观测值：全部为 0

含义：营业员所属组织/部门 ID。

当前门店全部为 0，说明未启用这套销售员分组织的体系。

push_money

类型：float

观测值：全部为 0.0

含义：本条销售对应的提成金额（给营业员/促销员的提成）。

在启用营业员体系时，这里才会出现正数。

2.7 记录状态 / 控制类字段

ledger_status

类型：int，枚举

观测值：全部为 1

含义：销售流水状态。

1：正常有效。

其他数值（未在本数据中出现）一般表示“待结算”“作废”等。

is_single_order

类型：int，枚举

观测值：全部为 1

含义：是否单独订单标识。

1：作为独立明细参与某个订单结算；

0：可能在某些特殊业务中合并为打包项目。

当前门店所有商品销售都按照常规方式参与订单，所以全部为 1。

sales_type

类型：int，枚举

观测值：全部为 1

含义：销售类型。

1：正常销售；

其他数值常见用法（数据中未出现）可能是：2 = 赠品；3 = 内部消耗；4 = 盘点调整等。

结构上，sales_type 决定这条记录在统计时属于哪类业务。

is_delete

类型：int，枚举

观测值：全部为 0

含义：逻辑删除标志。

0：正常有效；

1：已删除（仅保留历史，不再参与前端展示及统计）。

2.8 时间字段

create_time

类型：string（格式 YYYY-MM-DD HH:MM:SS）

含义：销售记录创建时间，通常就是结账时间或录入时间。

用途：用于按时间维度查询销售流水，与订单层的时间字段对齐。

三、从字段看「门店销售记录」在整体数据结构中的位置（纯结构关系）

只从字段结构出发，不做任何金额/盈利计算，可以看到这份销售记录在整个系统中的“连接点”：

订单维度

order_trade_no / order_settle_id
与台费、助教、团购套餐流水等表共享，形成「订单主表（结算）– 多种明细表」的结构。

如果结账记录表有数据，order_settle_id 对应那里的主键，create_time 与订单结束时间基本一致。

支付维度

order_pay_id
连接到「支付记录」中的一条支付流水，再通过支付的 relate_type/relate_id 把支付和订单、充值等业务区分开。

对于退款，则通过退款记录里的 relate_type/relate_id 反向关联到原来的订单或支付。

商品维度

site_goods_id ↔ 门店商品档案1.json.id

tenant_goods_id ↔ 全局商品档案 ID

tenant_goods_category_id / tenant_goods_business_id ↔ 分类与业务大类表
→ 这一层关系把「商品定义」与「销售明细」连接起来，方便做结构上的货品分析（类别、品牌维度等），而不是金额分析。

库存维度

在「库存变化记录1.json」中，siteGoodsId 就等于这里的 site_goods_id。

每一次商品销售理论上应对应一次库存的出库记录（stockType=出库），虽然那个表没有直接再写订单号，但通过商品 ID 和时间可以在结构上对应得上。

「库存汇总.json」则在商品维度上汇总了进出库数量，与 sale_num 等聚合指标对齐。

球台维度

site_table_id ↔ 「台桌列表.json」的 id

当 site_table_id 非 0 时，说明这条商品销售与具体球台关联（例如在某桌消费时点单）；
为 0 时则是与台桌无关的前台销售/其它业务。

人员维度

operator_id / operator_name 与其它流水（台费、助教等）的同名字段一致，形成一个统一的「操作员」维度。

openSalesman、salesman_* 一组字段则是预留的「营业员/提成」体系，目前处于关闭状态（全部 2 / 0）。

优惠 / 券 / 积分维度

本文件中的 coupon_deduct_money、order_coupon_id、member_coupon_id 等字段目前值都为 0，说明在当前时间段样本内：

优惠券/团购券更多是在订单级别处理，而非按商品行拆分；

但是结构已经支持将来按商品拆分优惠。

与「平台验券记录」「团购套餐流水」这类券相关表，理论上可以通过订单号或券 ID 去对应（当前样本内此方向的结构信息在订单级别更多）。

整体上，「门店销售记录.json」可以视为商品维度的核心事实表，它挂在订单主键下面，通过 site_goods_id 与商品档案、库存表相连，通过 site_table_id 与球台表相连，再通过 tenant_id/site_id 统一到门店维度，通过 operator_id 连接到操作员维度。
