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

590 lines
17 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.
# 会员余额变动GetMemberCardBalanceChange
> 自动生成于 2026-02-13 | 数据来源:本地 JSON 样本
## 基本信息
| 属性 | 值 |
|------|-----|
| 接口路径 | `MemberProfile/GetMemberCardBalanceChange` |
| 完整 URL | `https://pc.ficoo.vip/apiprod/admin/v1/MemberProfile/GetMemberCardBalanceChange` |
| 请求方法 | `POST` |
| Content-Type | `application/json` |
| 鉴权方式 | Bearer Token`Authorization` 头) |
| ODS 对应表 | `member_balance_changes` |
| 分页方式 | `page` + `limit`(最大 100 |
| 时间范围 | 需要startTime / endTime |
## 请求参数
| 参数名 | 类型 | 示例值 | 说明 |
|--------|------|--------|------|
| `startTime` | string | `"2026-02-01 08:00:00"` | 查询起始时间 |
| `endTime` | string | `"2026-02-13 08:00:00"` | 查询结束时间 |
| `fromType` | int | `0` | 来源类型0=全部) |
| `page` | int | `1` | 页码(从 1 开始) |
| `limit` | int | `100` | 每页条数(最大 100 |
## 响应字段(共 25 个)
| # | 字段名 | 类型 | 示例值 |
|---|--------|------|--------|
| 1 | `memberCardTypeName` | string | '储值卡' |
| 2 | `paySiteName` | string | '朗朗桌球' |
| 3 | `registerSiteName` | string | '朗朗桌球' |
| 4 | `memberName` | string | '曾丹烨' |
| 5 | `memberMobile` | string | '13922213242' |
| 6 | `id` | int | 2957881605869253 |
| 7 | `account_data` | float | -120.0 |
| 8 | `after` | float | 696.3 |
| 9 | `before` | float | 816.3 |
| 10 | `card_type_id` | int | 2793249295533893 |
| 11 | `create_time` | string | '2025-11-09 22:52:48' |
| 12 | `from_type` | int | 1 |
| 13 | `is_delete` | int | 0 |
| 14 | `operator_id` | int | 2790687322443013 |
| 15 | `operator_name` | string | '收银员:郑丽珊' |
| 16 | `payment_method` | int | 0 |
| 17 | `refund_amount` | float | 0.0 |
| 18 | `register_site_id` | int | 2790685415443269 |
| 19 | `relate_id` | int | 2957881518788421 |
| 20 | `remark` | string | '' |
| 21 | `site_id` | int | 2790685415443269 |
| 22 | `system_member_id` | int | 2799212844549893 |
| 23 | `tenant_id` | int | 2790683160709957 |
| 24 | `tenant_member_card_id` | int | 2799219999295237 |
| 25 | `tenant_member_id` | int | 2799212845565701 |
## 新增字段(相对本地 JSON 样本)
以下字段在最新 API 响应中出现,但本地 JSON 样本中不存在:
| 字段名 | 类型 |
|--------|------|
| `principal_after` | float |
| `principal_before` | float |
| `principal_data` | float |
## 详细字段分析
> 以下内容迁移自旧版 `member_balance_changes-Analysis.md`,包含字段的业务含义、枚举值、跨表关联等详细说明。
二、记录级字段逐项说明(含类型、含义、枚举/规律)
下面按逻辑分类ID/关联、会员维度、卡种信息、金额余额、类型来源、支付方式、时间、站点/操作员、状态标志、备注等)逐项说明。
1. 主键与关联 ID 类字段
id
类型int
含义:余额变更记录的主键 ID唯一标识这一条“账户余额变化事件”。
relate_id
类型int
值分布:共 167 个不同值0 约 18 次,绝大部分为非 0 的长整型。
含义(推测):关联业务记录的 ID
例如某次充值记录的 ID、某张订单/结算单 ID、某次活动抵用券核销记录 ID 等。
为 0 时,通常表示没有挂接具体业务单(例如纯后台调整)。
与其它表的关系:
视 from_type 而定,可能对应:
充值记录(如果有导出);
订单结算记录;
活动抵用券账单等。
tenant_id
类型int
含义:租户/商户 ID本数据中是固定值同一品牌/商户)。
site_id
类型int
值分布:
2790685415443269朗朗桌球出现 198 条;
0 出现 2 条。
含义:
非 0记录所属的具体门店 ID与其他 JSON 内的 site_id 一致)。
0特殊场景通常代表“跨门店/虚拟站点/平台级操作”。在本数据中,这两条记录恰好是“活动抵用券”相关的退款/冲销记录。
关联可与门店档案siteProfile.id对应。
register_site_id
类型int
值:全为 2790685415443269
含义:会员卡的“注册门店 ID”即办卡所在门店。
对比:
register_site_id 表示“卡当初在哪家店办的”,
site_id 表示“本次余额变动发生在哪家店”。本数据两者绝大部分情况一致,只有活动抵用券退款那两条 site_id=0、register_site_id 仍是该门店。
2. 会员与会员卡维度字段
tenant_member_id
类型int
含义:商户维度的会员 ID租户内会员主键
关联:
对应“会员档案20251110_043209_…”中的 id 字段,即同一个租户下的会员主键。
作用:
在本表与会员档案之间形成外键关系:
余额变更记录.tenant_member_id = 会员档案.id
system_member_id
类型int
含义:系统级(全局)会员 ID。
关联:
对应会员档案中的 system_member_id 字段。
说明:
允许一个会员在多个租户/门店下有不同的 tenant_member_id但共享同一个 system_member_id。
在你当前的数据里,只存在一个门店,所以两个 ID 一般一一对应同一个会员,但本质上设计是“集团级 ID + 租户级 ID”双键。
tenant_member_card_id
类型int
含义:会员卡账户 ID在租户内唯一标识某张卡。
关联:
对应“会员档案/储值卡列表”中的 id卡账户 ID
作用:
一名会员可以有多张卡储值卡、台费卡、酒水卡、活动券等tenant_member_card_id 指明这条余额变更是针对哪一张卡。
card_type_id
类型int
值分布(与 memberCardTypeName 一一对应):
2793249295533893 → “储值卡”132 条)
2793266846533445 → “活动抵用券”52 条)
2794699703437125 → “酒水卡”9 条)
2791990152417157 → “台费卡”7 条)
含义:卡种类型 ID用于区分不同卡种。
memberCardTypeName
类型string
值:"储值卡", "活动抵用券", "酒水卡", "台费卡"
含义:卡种名称,与 card_type_id 一一对应,是一个 卡种枚举名称。
memberName
类型string
含义:会员姓名或称呼(非昵称字段)。
说明:例如“陈腾鑫”“胡先生”“江先生”等,多为中文姓名或带“先生”称呼。
memberMobile
类型string
含义:会员手机号。
说明:字符型存储,完整手机号,用来识别会员与联系客户。
3. 门店名称与办卡门店名称
paySiteName
类型string
值分布:
"朗朗桌球"198 条
""空字符串2 条
含义:发生本次余额变更的门店名称(即本次消费/充值所在门店)。
对应关系:
当 site_id = 朗朗桌球的ID 时,是该门店名称;
当 site_id = 0 时,这里为空,说明这两条记录是特殊的“活动抵用券退款”场景,不归属具体营业门店。
registerSiteName
类型string
值:全为 "朗朗桌球"
含义:卡片的注册门店名称(办卡地点),和 register_site_id 配套。
特点:与 paySiteName 不同,强调“办卡地”,而不是“交易发生地”。
4. 金额与余额字段
这是本表的核心:余额变化量与变化前后余额。
before
类型float
含义:本次变动前,该卡账户的余额(元)。
说明:
样本中有 0、数百、数千等各种值。
account_data
类型float
含义:本次变动的金额(元),正数表示增加,负数表示减少。
特点:
无 0 值,所有记录要么增加要么扣减。
常见值:
正数100、500、1000、3000、5000 等(充值或调整增加);
负数:-5、-8、-10、-120、-144、-5000、-10000 等(消费扣款或退款冲减)。
与 from_type 强烈相关(详见后文)。
after
类型float
含义:本次变动后,该卡账户的余额(元)。
重要关系:
所有记录都满足:
before + account_data = after浮点精度下完全成立
这是本表最重要的结构性约束之一。
refund_amount
类型float
值:全为 0.0
含义(推测):与退款业务相关的金额字段,但在当前这份导出中实际未使用:
可能用于标记“其中有多少金额是以‘退款’形式回流的”,或区分“退回余额”和“原路退回”两种模式。
当前所有记录没有单独标记,字段处于空置状态。
5. 变动来源类型from_type
from_type
类型int关键枚举字段
值分布:
1163 条
316 条
416 条
72 条(备注为“充值退款”)
92 条(活动抵用券余额冲减)
21 条(正数增额)
含义(根据金额符号与 remark 综合推断):
1日常消费扣款
account_data 均为负数(-120、-144、-114.61 等payment_method=0。
表示“用卡消费扣除余额”(例如用储值卡、台费卡支付消费)。
3充值增加
account_data 均为正数1000、3000、5000 等payment_method=4。
对应实际有外部支付行为的充值(如扫码充值),为卡增加余额。
4调整增加 / 赠送增加
account_data 多为 100、500、888 等payment_method=3。
很可能是“后台赠送/活动赠送/调整加款”,不是顾客直接付款。
7充值退款明确
两条记录 remark 字段均为 "充值退款"account_data 为 -5000、-10000 元payment_method=0。
结合上面 3 类充值记录,可以看出是“对前期充值的退款,以减少卡内余额的方式处理”。
9活动抵用券相关余额冲减
两条记录的 memberCardTypeName 均为“活动抵用券”account_data 为 -888、-1888site_id=0paySiteName 为空。
推测是“将活动抵用券额度从‘活动抵用券卡’里扣回/结算”,属于活动资金回收类。
2其他增加仅 1 条,正数 1865.8 元)
可能是某种“赠送+充值混合”的业务类型,当前只有单一案例,很难精确命名,但可确定是增额类型。
总体上from_type 是本表中最重要的业务类型枚举,控制 account_data 的“方向”和解释:
1/7/9 为减余额类(消费扣款、退款冲减、活动冲减等),
2/3/4 为加余额类(充值、赠送、调整加款等)。
6. 支付方式字段
payment_method
类型int枚举
值分布:
0168 条
316 条
416 条
结合 from_type 分析:
from_type=1/2/7/9 时payment_method=0
表示这类“内部扣减/内部调整/退款冲减”,并没有直接发生新的实收支付(或者实收在原单中记录,余额变动仅是内部记账)。
from_type=3 时payment_method=4
对应“充值类交易”,是顾客真实付款(扫码/银行卡等),这里记录的是付款渠道枚举之一(如微信/支付宝/银行卡等)。
from_type=4 时payment_method=3
一类“赠送/后台调账”渠道编码,表示这部分余额增加不是顾客直接付钱,而是后台发放或内部调整。
无法在不看系统配置的前提下精确说出 3/4 分别对应哪一个具体渠道(微信/支付宝/银行卡等),但可以明确:
0内部结算/非外部支付;
3、4外部支付或赠送渠道枚举。
7. 时间字段
create_time
类型string格式 YYYY-MM-DD HH:MM:SS
含义:本条余额变更记录的创建时间,通常接近交易发生时间。
说明:可与订单、支付记录的时间做对齐,构造时序链路(但你现在不要求做时序分析,这里只说明结构)。
8. 站点与操作员信息
register_site_id / registerSiteName
已在前文说明:办卡门店的 ID 与名称,所有记录一致,说明所有卡均在“朗朗桌球”注册。
site_id / paySiteName
表示本次余额变动的发生门店,绝大多数也在“朗朗桌球”,少数特殊业务(活动抵用券结算)显示为 site_id=0、paySiteName 为空。
operator_id
类型int
值分布3 个不同值:
主操作员工 ID出现 192 次;
另外两位店长/管理员各有若干条记录。
含义:执行此次余额变更操作的员工 ID。
operator_name
类型string
值示例:
'收银员:郑丽珊'(占绝大多数)
'店长:郑丽珊'
'店长:谢晓洪'
'店长:蒋雨轩'
'管理员:郑丽珊'
含义:操作员姓名(带职位前缀),是对 operator_id 的可读冗余字段。
9. 状态字段与标志
is_delete
类型int
值:全部为 0
含义:逻辑删除标记:
0正常
1逻辑删除这类记录在系统中被标记为删除但数据库中保留
当前导出数据中没有被逻辑删除的余额变更记录。
10. 备注字段
remark
类型string
值分布:
""198 条
"充值退款"2 条
含义:
当为空时,说明这条变动没有额外备注说明。
"充值退款" 明确标记该条记录是“充值退款”业务,这与 from_type=7 的两条记录完全对应,用于给操作者和报表更明确的文本说明。
三、余额变更记录与其他 JSON 的结构性关联(字段层面)
虽然你此问题主要关注字段本身,但这些字段设计是有明显的跨表关联意图的,这里从“字段结构”的角度简要列一下关键关联,不做任何金额/盈利分析。
与会员档案20251110_043209_…
tenant_member_id ↔ 会员档案 id
system_member_id ↔ 会员档案 system_member_id
这形成:
余额变更记录 ——(会员 ID)→ 会员基本信息(手机号、注册时间等)。
与储值卡/会员卡档案(储值卡列表/会员档案内卡记录)
tenant_member_card_id ↔ 卡档案 id每一张卡的账户主键
card_type_id ↔ 卡种定义表的主键(从当前 JSON 看不到卡种定义表本身,但可以通过 memberCardTypeName以及在其他表中的 member_card_grade_code 推测对应关系)。
这形成:
余额变更流水 ——(tenant_member_card_id)→ 某个具体卡账户 ——(card_type_id)→ 卡种类型(储值卡/酒水卡/台费卡/活动抵用券)。
与支付记录20251110_035941_…
逻辑上充值类的记录from_type=3应该对应一条支付记录
支付记录中 relate_type 标记为“充值”relate_id 对应某条充值记录 ID
而余额变更记录中 relate_id 很可能就是充值记录 ID。
同样payment_method 在两边都是枚举字段,应保持一致(如 4 代表某个线上支付渠道)。
由于你当前的充值记录 JSON 为空,完整链路难以直接验证,但结构设计就是通过 relate_id + from_type + payment_method 来将余额变动与支付流水相互印证。
与订单/消费类流水
当 from_type=1消费扣款或 from_type=9活动抵用券相关冲减
relate_id 通常对应某单据(订单/结算单/活动扣款单)的主键;
通过 relate_id 可以与台费流水、助教流水、门店销售记录中的 order_settle_id 或其他业务 ID 建立关系。
结构上,这些额度层面的变动记录,就是消费类流水在“会员账户余额维度”的映射。
四、结构层面的额外线索(不做任何盈利/统计)
从字段和值的规律,可以看到一些结构上的特征,对你后续做数据建模或迁移有用:
严格的余额恒等关系
所有记录都满足:
after = before + account_data
说明这个表是“余额快照 +变动量”的纯记账结构,不掺杂其他衍生数值(例如手续费等)进来。
from_type+payment_method 的组合语义很清晰
from_type 决定业务类型(消费、充值、赠送、退款等);
payment_method 决定是否有外部支付以及大致支付渠道;
对应关系稳定且方向明确(加额/减额与 from_type 显著相关),这是后续做“业务类型维度表”的重要线索。
卡种类型在本表中已经完全可识别
通过 card_type_id ↔ memberCardTypeName本表已经给出了储值卡、酒水卡、台费卡、活动抵用券四种卡型及各自的 ID
与“会员档案”里 member_card_grade_code / member_card_grade_name 可以配套构成更完整的“卡种维度”。
办卡门店与交易门店的区分
register_site_id/registerSiteName 始终是办卡门店;
site_id/paySiteName 则是余额变更发生门店;
少数记录的 site_id=0 提示了“平台级/活动结算”等场景,说明系统在结构上已经考虑跨店或虚拟门店场景。
remark 与 from_type 的配合使用
尽管 remark 大多为空,但“充值退款”这两个字只出现在 from_type=7 的记录上;
说明系统使用 remark 为部分场景提供更直观的文本说明,但逻辑判断仍以 from_type 为主。
逻辑删除与业务废除分离
本表只有 is_delete 字段(全 0没有诸如 is_trash 之类业务性废除标记;
说明在余额变更层面,系统倾向于“不可逆记账”(不直接作废账户流水),业务层面若要冲销,是通过新的相反方向变动(负充值或正向退款)来体现,而不是逻辑删除记录。
整体来看,余额变更记录.json 是会员卡层面的“总账/明细账表”,与“充值记录”“消费结算记录”“会员档案”“卡类型、卡实例”之间,通过一整套 ID 和枚举字段建立了清晰的结构关系,而本次你给的这家门店只是该结构在一个门店上的数据切片。