# 会员余额变动(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,关键枚举字段 值分布: 1:163 条 3:16 条 4:16 条 7:2 条(备注为“充值退款”) 9:2 条(活动抵用券余额冲减) 2:1 条(正数增额) 含义(根据金额符号与 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、-1888,site_id=0,paySiteName 为空。 推测是“将活动抵用券额度从‘活动抵用券卡’里扣回/结算”,属于活动资金回收类。 2:其他增加(仅 1 条,正数 1865.8 元) 可能是某种“赠送+充值混合”的业务类型,当前只有单一案例,很难精确命名,但可确定是增额类型。 总体上,from_type 是本表中最重要的业务类型枚举,控制 account_data 的“方向”和解释: 1/7/9 为减余额类(消费扣款、退款冲减、活动冲减等), 2/3/4 为加余额类(充值、赠送、调整加款等)。 6. 支付方式字段 payment_method 类型:int,枚举 值分布: 0:168 条 3:16 条 4:16 条 结合 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 和枚举字段建立了清晰的结构关系,而本次你给的这家门店只是该结构在一个门店上的数据切片。