Files
ZQYY.FQ-ETL/docs/api-reference/endpoints/table_fee_transactions.md

740 lines
20 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 台费流水GetSiteTableOrderDetails
> 自动生成于 2026-02-13 | 数据来源:本地 JSON 样本
## 基本信息
| 属性 | 值 |
|------|-----|
| 接口路径 | `Site/GetSiteTableOrderDetails` |
| 完整 URL | `https://pc.ficoo.vip/apiprod/admin/v1/Site/GetSiteTableOrderDetails` |
| 请求方法 | `POST` |
| Content-Type | `application/json` |
| 鉴权方式 | Bearer Token`Authorization` 头) |
| ODS 对应表 | `table_fee_transactions` |
| 分页方式 | `page` + `limit`(最大 100 |
| 时间范围 | 需要startTime / endTime |
## 请求参数
| 参数名 | 类型 | 示例值 | 说明 |
|--------|------|--------|------|
| `startTime` | string | `"2026-02-01 08:00:00"` | 查询起始时间 |
| `endTime` | string | `"2026-02-13 08:00:00"` | 查询结束时间 |
| `siteId` | int | `2790685415443269` | 门店 ID |
| `isSaleManUser` | int | `0` | 是否销售员用户0=全部) |
| `page` | int | `1` | 页码(从 1 开始) |
| `limit` | int | `100` | 每页条数(最大 100 |
## 响应字段(共 39 个)
| # | 字段名 | 类型 | 示例值 |
|---|--------|------|--------|
| 1 | `siteProfile` | object | {'id': 2790685415443269, 'org_id': 2790684179467077, 'sho... |
| 2 | `id` | int | 2957924029058885 |
| 3 | `order_trade_no` | int | 2957858167230149 |
| 4 | `site_id` | int | 2790685415443269 |
| 5 | `tenant_id` | int | 2790683160709957 |
| 6 | `member_id` | int | 0 |
| 7 | `operator_id` | int | 2790687322443013 |
| 8 | `operator_name` | string | '收银员:郑丽珊' |
| 9 | `order_settle_id` | int | 2957922914357125 |
| 10 | `ledger_unit_price` | float | 48.0 |
| 11 | `ledger_name` | string | 'A17' |
| 12 | `ledger_count` | int | 3600 |
| 13 | `ledger_amount` | float | 48.0 |
| 14 | `order_pay_id` | int | 0 |
| 15 | `create_time` | string | '2025-11-09 23:35:57' |
| 16 | `is_delete` | int | 0 |
| 17 | `site_table_id` | int | 2793003705192517 |
| 18 | `site_table_area_id` | int | 2791963794329671 |
| 19 | `tenant_table_area_id` | int | 2791960001957765 |
| 20 | `is_single_order` | int | 1 |
| 21 | `ledger_start_time` | string | '2025-11-09 22:28:57' |
| 22 | `ledger_end_time` | string | '2025-11-09 23:28:57' |
| 23 | `ledger_status` | int | 1 |
| 24 | `site_table_area_name` | string | 'A区' |
| 25 | `real_table_charge_money` | float | 0.0 |
| 26 | `used_card_amount` | float | 0.0 |
| 27 | `adjust_amount` | float | 0.0 |
| 28 | `real_table_use_seconds` | int | 3600 |
| 29 | `coupon_promotion_amount` | float | 48.0 |
| 30 | `service_money` | float | 0.0 |
| 31 | `member_discount_amount` | float | 0.0 |
| 32 | `last_use_time` | string | '2025-11-09 23:28:57' |
| 33 | `salesman_name` | string | '' |
| 34 | `salesman_user_id` | int | 0 |
| 35 | `salesman_org_id` | int | 0 |
| 36 | `mgmt_fee` | float | 0.0 |
| 37 | `fee_total` | float | 0.0 |
| 38 | `start_use_time` | string | '2025-11-09 22:28:57' |
| 39 | `add_clock_seconds` | int | 0 |
## 新增字段(相对本地 JSON 样本)
以下字段在最新 API 响应中出现,但本地 JSON 样本中不存在:
| 字段名 | 类型 |
|--------|------|
| `activity_discount_amount` | float |
| `order_consumption_type` | int |
| `real_service_money` | float |
## 详细字段分析
> 以下内容迁移自旧版 `table_fee_transactions-Analysis.md`,包含字段的业务含义、枚举值、跨表关联等详细说明。
二、记录级字段拆解与说明
1. 顶层 / 分页相关
code在数组元素上
类型int
枚举:当前仅出现 0。
含义接口调用状态0 表示成功。
data.total
类型int
含义本次查询条件下台费流水总条数3813用于分页计算。
data.siteTableUseDetailsList
类型array
含义:台费流水记录列表,每个元素即一次台费使用记录。
2. 主键 / 订单维度字段
这些字段用来把台费流水和订单、小票、支付等其他表关联在一起。
id
类型int
唯一性:每条记录一个独立值。
含义:台费流水记录主键(事实表主键)。
order_trade_no
类型int
唯一性本文件中每条记录一个值200 条全不重复)。
含义:订单交易号,是整笔订单的主编号。
关联:
与其它 JSON如 助教流水、小票详情、门店销售记录)中的同名字段一致,用于把 同一订单下的台费、助教、商品等多条明细串联。
order_settle_id
类型int
唯一性每条记录一个值200 条全不重复)。
含义:结算单号/结账 ID对应一次结账操作。
关联:
与“小票详情.json”中的 orderSettleId 对应;
与(若存在)结账记录表的主键对应。
order_pay_id
类型int
含义:订单支付记录 ID。
关联:
对应“支付记录.json”中的 id 或 relate_id视模型而定用于追踪这条台费最终对应哪一条支付流水。
tenant_id
类型int
观测所有记录值相同2790683160709957
含义:租户/品牌 ID。本文件所有记录都属于同一租户。
关联:与所有其它 JSON 中的 tenant_id 一致,用于跨表做“商户维度”的过滤。
site_id
类型int
观测所有记录相同2790685415443269
含义:门店 ID本次数据全部来自同一门店朗朗桌球
关联:
与 siteProfile.id 一致;
与其它表(助教流水、销售记录等)中的 site_id 对应,保证“门店维度”一致。
3. 台桌维度字段
这些字段描述“哪一张台、在哪个区域”。
site_table_id
类型int
唯一性:约 45 个不同值。
含义:球台 ID。
关联:
对应“台桌列表”中的 id当前导出文件中有一类与之对应的台桌配置表
用于精确确定具体是哪个台。
ledger_name
类型string
示例值:"A1"、"A2"、"A3"、"A4"、"A5"、"A7"、"A8"、"A9"、"A10"、"S1" 等。
含义:台号名称,实际展示给员工/顾客看的桌台编号。
备注:与 site_table_id 一一对应,是桌台维表中的名称字段冗余到流水里的快照。
site_table_area_id
类型int
唯一性10 个左右的不同值。
含义:门店内“台桌区域” ID站在门店物理布局的角度
关联:
对应“门店台桌区域配置表”的主键;
与 site_table_area_name 搭配使用。
tenant_table_area_id
类型int
唯一性:与 site_table_area_id 数量相同,也是 10 个值。
含义:租户维度的台桌区域 ID品牌层面的同一类区域
关联:
对应租户层面的“区域维表”,支持多门店共享同一套区域配置。
site_table_area_name
类型string
枚举(本数据中观测值):
"A区"144 条)
"B区"21 条)
"斯诺克区"17 条)
"麻将房"6 条)
"C区"5 条)
"K包", "VIP包厢"(各 2 条)
"666", "TV台", "M8"(各 1 条)
含义:台桌区域的名称,用于门店表现和区域统计。
4. 会员维度与相关字段
member_id
类型int
观测:
多数为 0180 条),表示散客/非会员。
少量为非 0 的 10 个不同 ID。
含义:门店/租户内的会员 ID。
关联:
与“会员档案.jsontenantMemberInfos”内的 id 对应(有部分 ID 完全匹配,部分会员可能不在当前导出页)。
用于将台费流水关联到具体哪位会员。
member_discount_amount
类型float
观测:
大多数为 0.0
少量为正值,如 376.87、259.16、151.98、253.02、108.16 等。
含义:由会员权益产生的优惠金额,例如会员折扣、会员价等。
特点:
在部分记录中 ledger_amount = real_table_charge_money = member_discount_amount说明该台费完全通过会员权益抵扣记录在此字段同时仍保留原价。
used_card_amount
类型float
观测:当前样本全部为 0.0。
含义(推测):储值卡/次卡直接抵扣到台费的金额。
说明:字段已预留,但在本时间范围内台费未通过“卡余额”支付,或该信息不在此表体现。
5. 时间与时长相关字段
5.1 时间点
create_time
类型string格式 YYYY-MM-DD HH:MM:SS
含义:这条台费流水记录的创建时间,通常接近结账时间。
start_use_time
类型string
含义:台开始使用的时间(实际开台时间)。
特点:在数据中,与 ledger_start_time 完全相同(见下)。
last_use_time
类型string
含义:最后使用/操作时间。
特点:
大多数情况下与 ledger_end_time 只差 1 秒;
可以理解为“真实最后一次计时上报的时间”。
ledger_start_time
类型string
含义:台账上的计费起始时间。
关系:
当前数据中 ledger_start_time == start_use_time说明起算时刻与开台时间一致。
ledger_end_time
类型string
含义:台账上的计费结束时间。
关系:
和 last_use_time 多数情况下相差 1 秒last_use_time 比它晚 1 秒),说明计费结束时间经系统截断处理,而 last_use_time 是最后事件时间。
5.2 时长(秒)
ledger_count
类型int
含义:台账记录的计费秒数,计费用秒数(应收时长)。
特点:
大部分记录中 ledger_count 等于 real_table_use_seconds少数记录差 1 秒(对齐问题)。
为 0 的少数记录6 条),对应 real_table_use_seconds 也为 0。
real_table_use_seconds
类型int
含义:实际使用的总秒数(系统真实统计的使用时长)。
关系:
与 ledger_count 基本一致(只有 +1 秒的偏差),可以认为 ledger_count 是基于它做的计费截断结果。
当两者均为 0 且 is_single_order = 0 时,表示这条记录只是占位/关联记录,并未产生真实使用和收费(例如合单场景或转移)。
add_clock_seconds
类型int
含义:加钟秒数,在原有使用基础上追加的时长。
观测:
绝大部分记录为 0
少数为 240040 分钟、420070 分钟)等 60 的倍数。
说明:加钟逻辑为分钟级别,字段用于记录累计加钟时长。
6. 金额与优惠拆分字段
这些字段共同描述“台费原价金额”和各类优惠/调整后的分解。
ledger_unit_price
类型float
示例值48.0、58.0、68.0、88.0、98.0、116.0 等。
含义:台费结算时设置的 每小时单价/计费单价。
用途:与 ledger_count 共同决定原始应收额。
ledger_amount
类型float
含义:按单价与计费时长计算出的原始应收台费金额。
近似关系ledger_amount ≈ ledger_unit_price × ledger_count / 3600考虑到四舍五入会有小数差。
real_table_charge_money
类型float
含义:台费中实际向顾客收取的金额(现金/实付维度,未含券方承担或内部调账的那一部分)。
特点:
有的记录值为 0说明该台费完全由券或内部调账承担没有直接收取现金
有的记录 real_table_charge_money = ledger_amount说明没有外部优惠顾客按原价买单。
coupon_promotion_amount
类型float
观测:
常见值48.0、96.0、116.0、68.0、136.0、144.0... 等;
有大量记录值等于整小时单价或其整数倍。
含义:由优惠券/活动/团购(平台/门店促销)承担的优惠金额,直接抵扣在台费上。
特点:当 real_table_charge_money = 0 且该字段为 ledger_amount 时,说明整笔台费是由券促销全额承担。
member_discount_amount
上文已说明,这里补充与金额的结构关系:
功能:表示由会员折扣或会员权益承担的那部分金额。
特殊场景:
有些记录中 ledger_amount = real_table_charge_money = member_discount_amount从结构上看是“原价计费 + 会员承担 + 仍记录为台费收入”的一种设计(系统内部体现为会员权益消耗)。
adjust_amount
类型float
观测:
多数是 0.0
少数为正值,如 120.0、148.15、14.16、24.18...。
含义:调整金额/调账金额,用于将台费金额转移或冲减到其它项目,或手工调整。
特点:
部分记录中 ledger_amount 全部通过 adjust_amount 抵消real_table_charge_money = 0coupon_promotion_amount = 0adjust_amount = ledger_amount说明这笔台费被完全调账到其他地方例如包厢统一计费或计入套餐
used_card_amount
类型float
当前样本全为 0.0。
含义:由储值卡、次卡等“卡内余额”抵扣的金额。
说明:字段设计已预留,但本段时间内台费没有通过储值卡扣款,或者卡扣款在其他表体现。
service_money
类型float
当前样本全为 0.0。
含义(推测):门店用于记录“服务费/成本/分成金额”的字段,类似助教流水里的 service_money。
说明:当前门店未启用此字段结算台费。
mgmt_fee
类型float
当前样本全为 0.0。
含义(推测):管理费字段,用于未来支持“台费附加管理费/服务费”的功能。
当前未启用。
fee_total
类型float
当前样本全为 0.0。
含义:各种附加费用(如管理费、服务费)合计值。
说明:和 mgmt_fee 一样,目前作为预留字段,没有实际使用。
从结构上看,台费金额被拆成多个维度:
原始应收ledger_amount
实际收现real_table_charge_money
券促销承担coupon_promotion_amount
会员承担member_discount_amount
调账adjust_amount
卡扣款used_card_amount当前为 0
各字段合起来,描述一条台费从“原始计费”到“谁来承担”这一系列拆分,非常细颗粒度,但这里不做金额计算和盈利分析,仅从结构上说明。
7. 操作员 / 营业员相关字段
operator_id
类型int
含义:操作员 ID负责开台/结账的员工账号 ID。
关联:与员工/账号体系中的用户 ID 对应(与助教账号的 user_id 属于同一种 ID 体系)。
operator_name
类型string
含义:操作员姓名(冗余字段),便于直接阅读,不必再联表员工档案。
salesman_name
类型string
当前样本全部为空字符串。
含义:业务员/营业员姓名,如果台费有单独提成员工,这里记录归属人。
当前门店未启用该字段做提成归属。
salesman_user_id
类型int
当前全为 0。
含义:营业员的用户 ID与 salesman_name 搭配)。
salesman_org_id
类型int
当前全为 0。
含义:营业员所属机构/部门 ID。
8. 状态 / 标记类字段
ledger_status
类型int枚举。
观测:全部为 1。
含义(推测):
1正常已结算台费
其他值(例如 0 未结算、2 作废)在当前数据未出现,但从命名看属于状态位。
is_single_order
类型int枚举。
观测1194 条、06 条)。
含义(推测):
1该台费记录对应的是一个独立计费单元单独结算的桌费
0非独立结算条目可能依附于其他订单如合并结账、占位记录、转单/转台的中间记录)。
特点is_single_order = 0 的记录中ledger_count 和 real_table_use_seconds 为 0说明没有实际使用与收费是一种结构性的“占位/关联”记录。
is_delete
类型int枚举。
观测:全部为 0。
含义:逻辑删除标志:
0未删除有效记录
1已逻辑删除从界面隐藏历史保留
当前导出时间段没有被标记删除的台费记录。
9. 门店信息快照
siteProfile
类型object字典
观测:所有记录的 siteProfile 内容相同。
内部字段包括(概略):
id门店 ID与 site_id 相同)
org_id所属组织 ID
shop_name门店名称如“朗朗桌球”
full_address、address
longitude、latitude
tenant_site_region_id、tenant_id
一些门店级配置例如自动开灯、WiFi、客服二维码、营业状态等
含义:当前门店的完整档案快照,冗余到流水表中,便于报表直接读取而无需再联表门店档案。
三、与其它 JSON 的结构关联关系(从字段层面)
只从字段层面梳理,不做数值层面的分析:
与“助教流水.json”
关联键:
order_trade_no、order_settle_id同一订单下台费流水与助教流水共享同一交易号和结算号可以一起还原某次消费包含“台费 + 助教”的组合明细。
site_id、tenant_id门店与租户维度一致。
结构上:两者都是“事实表”,分别记录“台使用”和“助教服务”,共享同一套订单系统与支付系统。
与“小票详情.json”
关联键:
order_settle_id ↔ 小票详情中的 orderSettleId
order_trade_no ↔ 小票中的订单号。
结构线索:
小票层面是顾客看到的整笔账单;台费流水是其中“台费项目”的拆解结果(含时长、单价、优惠明细)。
与“会员档案.json会员信息
关联键:
台费流水中的 member_id ↔ 会员档案中的 idtenant_member_id
用途:
可以从台费流水倒推出是哪个会员在该台消费;
再通过会员档案看其手机号、姓名、卡状态等。
与“台桌列表/台桌配置.json”
关联键:
site_table_id ↔ 台桌列表的 id
site_table_area_id ↔ 门店台桌区域配置表;
tenant_table_area_id ↔ 租户层面区域配置表。
用途:
支持按台、按区域统计使用时长与台费占用情况;
结合 ledger_name 和 site_table_area_name 做场地运营维度分析(结构上可行,这里不做数值分析)。
与“支付记录.json”
关联键:
order_pay_id ↔ 支付记录中的 ID/关联 ID。
结构线索:
可从支付记录看付款方式(现金/二维码/微信/支付宝/卡扣等),与本表的 real_table_charge_money、used_card_amount 等金额字段拼接成完整支付结构。
与“门店销售记录/库存变动.json”
虽然台费不是库存商品,但在整体订单结构中,台费与商品销售在“订单主表”上共享 order_trade_no 和 order_settle_id结构上处于同一个“结账事件”下。
四、本表在整体模型中的结构角色(从字段设计角度的线索)
从字段设计和关联关系可以看出:
siteTableUseDetailsList 是标准的“台费事实表”
每条记录 = 一段台使用时长结算快照;
通过主键 id 唯一标识;
通过 site_table_id/site_table_area_id 关联台桌维度;
通过 order_trade_no、order_settle_id 关联订单与小票;
通过 member_id 关联会员;
通过 operator_id 关联操作员。
金额拆分字段非常细:
ledger_amount原始应收real_table_charge_money实收现金coupon_promotion_amount券促销承担member_discount_amount会员承担adjust_amount调账used_card_amount卡扣mgmt_fee/fee_total预留管理费
说明在“台费”这一单类目上,系统已经设计为支持按承担主体拆分金额,用于对接多种优惠渠道与内部对账,但当前门店部分字段尚未启用(如 mgmt_fee、used_card_amount、service_money
时间与时长字段区分了“计费时间”和“真实时间”:
real_table_use_seconds 与 ledger_count 基本一致,但仍保留两个字段,说明系统刻意区分“真实使用时长”和“计费时长”;
last_use_time 与 ledger_end_time 相差 1 秒左右,说明系统既保留了事件时间,也保留了计费截断时间。
状态/标志字段为后续扩展留了空间:
ledger_status、is_single_order、is_delete 在当前数据中值单一或高度偏向某个值,说明系统支持更多状态,但当前门店只是处于相对简单的使用方式(几乎全部是正常未删除的台费记录,少量非独立订单占位记录)。
区域与桌台配置两级 IDsite_table_area_id / tenant_table_area_id说明
区域体系既有门店维度 ID又有租户维度 ID这为将来多门店统一配置区域或者跨门店统计同类型区域的运营情况做了结构铺垫。
总的来说,台费流水.json 在结构上已经非常“规范化”:它作为台费的事实表,通过一系列 ID 字段与会员、门店、台桌、订单及支付等多张表关联,并在单条记录层面拆分了时长与金额的各个组成部分。这些都是后续做联表分析、建模和数据对齐时非常关键的结构信息。