# 会员储值卡（GetTenantMemberCardList）

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

## 基本信息

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

## 请求参数

| 参数名 | 类型 | 示例值 | 说明 |
|--------|------|--------|------|
| `siteId` | int | `2790685415443269` | 门店 ID |
| `cardPhysicsType` | int | `0` | 卡物理类型（0=全部） |
| `status` | int | `0` | 状态（0=全部） |
| `page` | int | `1` | 页码（从 1 开始） |
| `limit` | int | `100` | 每页条数（最大 100） |

## 响应字段（共 68 个）

| # | 字段名 | 类型 | 示例值 |
|---|--------|------|--------|
| 1 | `site_name` | string | '朗朗桌球' |
| 2 | `member_name` | string | '胡先生' |
| 3 | `member_mobile` | string | '18620043391' |
| 4 | `member_card_type_name` | string | '活动抵用券' |
| 5 | `table_service_discount` | float | 10.0 |
| 6 | `assistant_service_discount` | float | 10.0 |
| 7 | `coupon_discount` | float | 10.0 |
| 8 | `goods_service_discount` | float | 10.0 |
| 9 | `is_allow_give` | int | 0 |
| 10 | `able_cross_site` | int | 1 |
| 11 | `cardSettleDeduct` | float | 0.0 |
| 12 | `tenantAvatar` | string | '' |
| 13 | `tenantName` | string | '' |
| 14 | `member_card_grade_code_name` | string | '活动抵用券' |
| 15 | `table_discount_sub_switch` | int | 2 |
| 16 | `tableAreaId` | array | [] |
| 17 | `goods_discount_sub_switch` | int | 2 |
| 18 | `goodsCategoryId` | array | [] |
| 19 | `assistant_discount_sub_switch` | int | 2 |
| 20 | `pdAssisnatLevel` | array | [] |
| 21 | `assistant_reward_discount_sub_switch` | int | 2 |
| 22 | `cxAssisnatLevel` | array | [] |
| 23 | `goods_discount_range_type` | int | 1 |
| 24 | `use_scene` | string | '' |
| 25 | `balance` | float | 0.0 |
| 26 | `table_deduct_radio` | float | 100.0 |
| 27 | `table_service_deduct_radio` | float | 100.0 |
| 28 | `goods_deduct_radio` | float | 100.0 |
| 29 | `goods_service_deduct_radio` | float | 100.0 |
| 30 | `assistant_deduct_radio` | float | 100.0 |
| 31 | `assistant_service_deduct_radio` | float | 100.0 |
| 32 | `assistant_reward_deduct_radio` | float | 100.0 |
| 33 | `coupon_deduct_radio` | float | 100.0 |
| 34 | `tableCardDeduct` | float | 0.0 |
| 35 | `tableServiceCardDeduct` | float | 0.0 |
| 36 | `goodsCarDeduct` | float | 0.0 |
| 37 | `goodsServiceCardDeduct` | float | 0.0 |
| 38 | `assistantCardDeduct` | float | 0.0 |
| 39 | `assistantServiceCardDeduct` | float | 0.0 |
| 40 | `assistantRewardCardDeduct` | float | 0.0 |
| 41 | `couponCardDeduct` | float | 0.0 |
| 42 | `deliveryFeeDeduct` | float | 0.0 |
| 43 | `is_allow_order_deduct` | int | 0 |
| 44 | `id` | int | 2955206162843781 |
| 45 | `assistant_discount` | float | 10.0 |
| 46 | `assistant_reward_discount` | float | 10.0 |
| 47 | `bind_password` | string | '' |
| 48 | `card_no` | string | '' |
| 49 | `card_physics_type` | int | 1 |
| 50 | `card_type_id` | int | 2793266846533445 |
| 51 | `create_time` | string | '2025-11-08 01:31:12' |
| 52 | `denomination` | float | 0.0 |
| 53 | `disable_end_time` | string | '0001-01-01 00:00:00' |
| 54 | `disable_start_time` | string | '0001-01-01 00:00:00' |
| 55 | `effect_site_id` | int | 0 |
| 56 | `end_time` | string | '2225-01-01 00:00:00' |
| 57 | `goods_discount` | float | 10.0 |
| 58 | `is_delete` | int | 0 |
| 59 | `last_consume_time` | string | '2025-11-09 07:48:23' |
| 60 | `member_card_grade_code` | int | 2790683528022856 |
| 61 | `register_site_id` | int | 2790685415443269 |
| 62 | `sort` | int | 1 |
| 63 | `start_time` | string | '2025-11-08 01:31:12' |
| 64 | `status` | int | 1 |
| 65 | `system_member_id` | int | 2955204540009605 |
| 66 | `table_discount` | float | 10.0 |
| 67 | `tenant_id` | int | 2790683160709957 |
| 68 | `tenant_member_id` | int | 2955204541320325 |

## 新增字段（2026-02-14 全量刷新发现）

以下字段在最新 API 响应（100 条全量遍历）中出现，旧版 JSON 样本中不存在：

| 字段名 | 类型 | 出现率 | 说明 |
|--------|------|--------|------|
| `able_share_member_discount` | int | 100/100 | 是否共享会员折扣（1=是） |
| `electricity_deduct_radio` | float | 100/100 | 电费抵扣比例（百分比，100.0=全额可抵扣） |
| `electricity_discount` | float | 100/100 | 电费折扣（10.0=不打折，采用"几折"记法） |
| `member_grade` | int | 100/100 | 会员等级 ID |
| `principal_balance` | float | 100/100 | 本金余额（储值卡中本金部分的余额） |

> 注：`electricityCardDeduct` / `rechargeFreezeBalance` 为已有字段 `electricitycarddeduct` / `rechargefreezebalance` 的驼峰写法变体，API 返回时大小写不固定，实际为同一字段，不重复列出。

## 详细字段分析

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

一、文件整体类型与结构
1. 内容类型

从结构看，这个文件其实是 “会员卡列表 / 储值类卡片列表”，并不只包含“储值卡”，而是一个“卡片视图”：

一条记录 = 一张会员卡（已经开通的具体卡）。

记录中同时包含：

卡本身的定义属性（卡种、适用范围、折扣规则等）。

当前账户余额。

持卡会员的基本信息快照（姓名、手机号）。

有效期、最近消费时间等状态信息。

根据字段值，这一页数据中主要有六类卡：

储值卡、活动抵用券、台费卡、酒水卡、年卡、月卡

因此，这个 JSON 更准确地理解为：门店下所有储值/次卡/券类会员卡的列表视图。


二、卡片记录字段逐项说明

以下按逻辑分组：卡种信息 / 折扣规则 / 金额与余额 / 时间与有效期 / 会员信息 / 门店与适用范围 / 状态与开关类字段 / 预留扩展字段。

1. 卡种 / 类别相关字段
1.1 卡种主键与类别名称

card_type_id

类型：int

含义：卡种 ID（定义“这是哪一种卡”）。

枚举（按数据分布）：

| card_type_id | 卡种名称 |
|---|---|
| 2793249295533893 | 储值卡 |
| 2793266846533445 | 活动抵用券 |
| 2791990152417157 | 台费卡 |
| 2794699703437125 | 酒水卡 |
| 2791987095408517 | 年卡 |
| 2793306611533637 | 月卡 |

这些 ID 对应不同的卡种配置，具体含义在系统内部的“卡种配置表”中。

member_card_grade_code

类型：int

含义：卡等级/卡类代码，和下面两个名称字段一一对应。

枚举：

| member_card_grade_code | 卡种名称 |
|---|---|
| 2790683528022853 | 储值卡 |
| 2790683528022856 | 活动抵用券 |
| 2790683528022855 | 台费卡 |
| 2790683528022858 | 酒水卡 |
| 2790683528022857 | 月卡 |

> 注意：年卡（card_type_id `2791987095408517`）对应的 member_card_grade_code 尚未在样本数据中出现。

member_card_grade_code_name

类型：string

含义：卡等级/卡类名称。

枚举值（与上面 code 一一对应）：

"储值卡"、"活动抵用券"、"台费卡"、"酒水卡"、"月卡"、"年卡"

member_card_type_name

类型：string

含义：卡类型名称，实际与 member_card_grade_code_name 一致。

枚举值同上。

说明：更偏展示用的冗余字段。

结论：虽然文件名叫“储值卡列表”，但从字段看是“会员卡列表”，包含五类卡；card_type_id / member_card_grade_code / member_card_grade_code_name / member_card_type_name 共同定义“这张卡属于哪一类”。

card_physics_type

类型：int

含义：物理卡类型。

当前数据：全部为 1。

推测枚举：

1：实体卡或标准卡；

其他值（未出现）可能代表虚拟卡、第三方卡等。

card_no

类型：string

当前数据：全部为 ""（空）。

含义（推测）：实体卡物理卡号／条码号。当前这批卡看起来全部为“无物理卡号”（可能是全部虚拟卡或卡号隐藏不导出）。

bind_password

类型：string

当前数据：全部 ""。

含义：卡绑定密码，用于消费或查询验证（目前未启用）。

use_scene

类型：string

当前数据：全部 ""。

含义：卡使用场景说明（比如“仅店内使用”“仅团建”等），本门店尚未使用此字段。

2. 会员信息与关联字段

这些字段把卡和会员档案关联起来。

member_name

类型：string 或 null

含义：持卡会员姓名快照。

特点：存在 null（20 张卡没有绑定会员名字）。

member_mobile

类型：string 或 null

含义：持卡会员手机号快照。

特点：与 member_name 对应，多数有值，少量为 null。

system_member_id

类型：int

含义：系统级会员 ID（跨门店统一主键）。

枚举特征：

0：约 20 条，为“未绑定具体会员”或“散客卡”。

非 0：与“会员档案.json”中的 system_member_id 对应。

tenant_member_id

类型：int

含义：当前商户（品牌/租户）中会员的主键 ID。

枚举特征：

0：同样是未绑定会员的卡。

非 0：与“会员档案.json”中的 id 对应。

关系：

这两个字段共同完成“卡 → 会员”的双钥匙关联：

system_member_id：全局会员；

tenant_member_id：本租户内会员档案主键。

3. 门店与适用范围字段

site_name

类型：string

当前值：全部为 "朗朗桌球"。

含义：卡归属门店名称（视图中的展示字段）。

tenantName

类型：string

当前值：全部为 ""。

含义：租户/品牌名称（当前导出为空）。

tenantAvatar

类型：string

当前值：全部为 ""。

含义：品牌头像 URL（未配置）。

tenant_id

类型：int

含义：租户/品牌 ID，与其他 JSON 中 tenant_id 一致。

register_site_id

类型：int

当前值：全部 2790685415443269。

含义：卡首次办理的门店 ID。

对应门店的 site_id；本数据中所有卡都是在同一家门店开卡。

effect_site_id

类型：int

当前值：全部 0。

含义（推测）：卡片限定生效门店 ID。

为 0 时，配合 able_cross_site=1，可解释为“所有门店可用”。

able_cross_site

类型：int，枚举。

当前值：全部 1。

含义：是否允许跨店使用。

1：可以跨门店使用；

0：仅限开卡门店。

结合 effect_site_id=0 可以解读为：当前卡种都配置为“全门店通用”。

4. 金额与余额类字段

balance

类型：float

含义：当前卡内余额（主要针对储值卡、部分券卡）。

特征：

有 59 个不同的值，大部分是 0.0，其它有 985、500、若干小数等。

对于“活动抵用券”“月卡”等，有可能余额意义不同（只是当前视图统一用 balance 作为额度字段）。

denomination

类型：float

当前值：全部 0.0。

含义（推测）：面额/初始储值额度。

本页数据未填充此字段；可能在分类型卡（如次卡/券）中才有意义，或者另有配置表。

5. 各类折扣与抵扣规则字段

这一块字段非常多，但结构有明显统一性：
按“消费场景 × 折扣类型”来区分。

三大消费场景：

台费：table_*

商品：goods_*

助教：assistant_* / assistant_reward_* / assistant_service_*

再叠加：

discount：折扣（打几折）

service_discount：服务类折扣

discount_sub_switch：折扣是否叠加/替代

deduct_radio：这类消费是否允许扣卡 & 扣卡比例（百分比）

CardDeduct：扣卡金额

ServiceCardDeduct、RewardCardDeduct：扣卡金额的不同“资金子账户”（储值金 / 服务金 / 奖励金）

5.1 折扣百分比类（打几折）

table_discount / goods_discount / assistant_discount / assistant_reward_discount / table_service_discount / goods_service_discount / assistant_service_discount

类型：float

当前值：全部 10.0（所有字段）。

含义：

采用“几折”的记法：10=不打折，9=九折，8=八折。

现状：当前这批卡，在所有场景/子场景（台费、商品、助教、奖励金）上的折扣统一都是 10.0，表示没有折扣设置。

5.2 折扣叠加开关

table_discount_sub_switch / goods_discount_sub_switch / assistant_discount_sub_switch / assistant_reward_discount_sub_switch

类型：int，枚举。

当前值：全部 2。

含义（推测）：“折扣是否叠加/替换其他折扣”的开关。

可能枚举：

1：叠加其他折扣；

2：不叠加，仅用卡折扣；

具体枚举值需看后台配置，但从命名能看出是折扣叠加策略字段。

5.3 抵扣比例类（%）

table_deduct_radio / goods_deduct_radio / assistant_deduct_radio / table_service_deduct_radio / goods_service_deduct_radio / assistant_service_deduct_radio / coupon_deduct_radio

类型：float

当前值：全部 100.0。

含义：允许从该卡余额中抵扣的比例（百分比）。

100.0 表示允许 100% 用卡余额支付该类消费；

如果是 0，通常表示不允许该类消费抵扣。

当前：卡配置为“理论上所有消费场景都可以全额用卡支付”，只是在折扣、金额层面没有特别设定。

5.4 实际扣卡金额设置（配置层）

cardSettleDeduct

类型：float

当前值：0.0。

含义：结算时从卡中扣除的金额上限/规则配置（视图级；实际扣款在交易流水里体现）。

tableCardDeduct / goodsCarDeduct / assistantCardDeduct

类型：float

当前值：全部 0.0。

含义：针对台费/商品/助教三类消费的扣卡金额配置（类似“每小时从卡里扣 xx 元”或“每次抵扣 xx 元”的规则）。

当前：所有为 0，说明在卡定义层面并没有指定固定扣卡金额，而是按照一般储值逻辑消费。

tableServiceCardDeduct / goodsServiceCardDeduct / assistantServiceCardDeduct

类型：float

当前值：全部 0.0。

含义：如果系统中区分“储值金、服务金、奖励金”等子账户，这三个字段对应“服务金”子账户的扣款配置。

当前未启用。

assistantRewardCardDeduct

类型：float

当前值：0.0。

含义：助教奖励金方向扣款的配置。

当前未启用。

assistantRewardCardDeduct（拼写略有不同）

实际字段名是 assistantRewardCardDeduct，同上意义，当前为 0。

couponCardDeduct

类型：float

当前值：0.0。

含义：与卡绑定的“券额度扣除配置”。

deliveryFeeDeduct

类型：float

当前值：0.0。

含义：配送费可否/多少从卡中抵扣，目前无业务发生。

综合来看：本门店的卡片在“规则配置层”预留了大量细粒度控制字段，但目前实际使用只体现在“balance”和“可用范围”，折扣和具体扣卡规则基本都未启用（全部保持默认值 10 折、100%比例、0 扣款），真正扣款逻辑在交易流水中体现。

6. 时间与有效期相关字段

create_time

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

含义：卡片创建时间（开卡时间）。

start_time

类型：string

含义：卡片生效开始时间（有效期起始）。

end_time

类型：string

含义：卡片有效期结束时间。

start_time / end_time 组合就是卡的有效期。不同卡种有效期配置不同，如储值卡长效、月卡固定一个月等。

disable_start_time / disable_end_time

类型：string

当前值：全部 "0001-01-01 00:00:00"。

含义：停用时间段（比如临时冻结卡的起止时间）。

当前未启用，所有卡都是“未进入停用窗口”。

last_consume_time

类型：string

含义：最近一次消费时间。

特点：

对未消费过的卡，值为 "1970-01-01 00:00:00"（典型“未初始化时间”的占位值）。

对已消费卡，则记录最后一次交易时间。

7. 卡状态与逻辑标志

status

类型：int，枚举。

取值：

1：196 条；

4：4 条。

含义（推测）：

1：正常可用；

4：过期/停用/作废（具体哪一种需要结合系统配置和有效期判断）。

从结构看，这是卡当前状态的核心字段。

is_delete

类型：int，枚举。

当前值：0。

含义：逻辑删除标志。

0：未删除；

1：逻辑删除（软删除）。

is_allow_give

类型：int，枚举。

当前值：0。

含义：是否允许转赠/转让给其他会员。

0：不允许；

1：允许转赠。

is_allow_order_deduct

类型：int，枚举。

当前值：0。

含义：是否允许在“订单层面统一扣款”。

0：不允许（仅按项目扣卡）；

1：允许整单抵扣。

8. 适用范围扩展字段（列表）

tableAreaId

类型：list

当前值：全部 []。

含义：限定可使用的台区 ID 列表。

为空表示“不限制台区”。

goodsCategoryId

类型：list

当前值：全部 []。

含义：可用的商品分类 ID 列表。

为空表示对所有商品分类有效。

pdAssisnatLevel

类型：list

当前值：全部 []。

含义：允许使用的“陪打/助教等级”列表。

为空表示不限制助教等级。

cxAssisnatLevel

类型：list

当前值：全部 []。

含义：可能是“促销活动中的助教等级限制”（命名中 cx 多为“促销”缩写）。

当前未设置任何限制。

9. 其他字段

cardSettleDeduct

已在扣卡规则部分说明，当前为 0。

tableAreaId / goodsCategoryId / pdAssisnatLevel / cxAssisnatLevel

已上文说明：均为扩展限定维度，当前全部为空列表。

sort

类型：int

含义：在前端展示或某些列表中的排序权重。

具体取值分布不重要，主要反映展示优先级。

三、与其他 JSON 的结构性关联（从字段角度）

只从字段关系来讲，不做任何金额/盈利分析：

与《会员档案.json》：

tenant_member_id ↔ 会员档案中的 id

system_member_id ↔ 会员档案中的 system_member_id

卡片列表是“余额视图”，会员档案是“会员主体信息维表”。

与储值/卡交易流水（如果有单独的“储值卡交易明细” JSON）：

应通过某个卡 ID（本文件中未见显式“card_id”，推测是 tenant_member_id + card_type_id 组合或还有一个隐藏键）。

本文件记录的是“当前余额”和规则；交易流水才是每次充值/消费的明细。

与台费流水 / 助教流水 / 门店销售记录：

折扣/抵扣规则维度：

台费相关：table_discount、table_deduct_radio 等；

商品相关：goods_discount、goods_deduct_radio 等；

助教相关：assistant_discount、assistant_deduct_radio 等。

在真正的消费记录里，会根据这些规则确定“从卡中扣多少”、“实际应收多少”，对应字段往往是“coupon_deduct_money”、“member_discount_amount”等。

与门店档案 / 台桌列表：

通过 register_site_id & site_name 与门店档案关联；

扩展字段 tableAreaId 理论上可以和台桌区域表关联（当前为 []，即不限制）。

与“门店销售汇总/对账视图”：

这个文件本质上是“卡余额视图”，余额字段会被用于对账和资产统计，但对应明细还是要依赖卡交易流水。

四、结构层面的几个重要线索（不涉及大数据和盈利分析）

从字段结构可以看出：

这是一个高度通用的“会员卡规则+余额视图”

同一张卡可以同时配置“台费折扣/商品折扣/助教折扣”，“储值金/服务金/奖励金”等多个子账户的使用规则。

当前门店只启用了“普通储值余额 + 全默认折扣”的简单模式，但字段结构明显支持更复杂的业务。

卡与会员，是多对一关系

一个会员可以有多张卡（不同 card_type_id / member_card_grade_code）。

每条记录都持有 system_member_id 和 tenant_member_id，即随时能从卡追溯到会员。

卡的有效期体系是严密的

有效期：start_time + end_time

停用窗口：disable_start_time + disable_end_time（当前未启用）

状态位：status、is_delete

最近使用：last_consume_time

这套结构足以支持：正常→停用→恢复→过期等多阶段。

适用范围具有多维度控制能力

门店维度：able_cross_site、effect_site_id、register_site_id

台区维度：tableAreaId

商品分类维度：goodsCategoryId

助教等级维度：pdAssisnatLevel、cxAssisnatLevel

当前门店这些维度都未限制，但字段设计说明系统支持非常细的策略，例如“某卡只在特定台区/特定商品/特定等级助教时可用”。

折扣与抵扣机制被拆得非常细

折扣（discount 系列）、抵扣比例（deduct_radio 系列）、抵扣金额（CardDeduct 系列），再叠加“服务金”“奖励金”这种资金子账户。

结构上完全可以做到：“这张卡台费九折、但最多只允许 50% 金额由卡支付，剩余必须现金；助教可全额抵扣但不打折”等非常复杂的组合。

当前导出数据处于“规则未开启、余额为主”的轻量使用阶段

折扣全部是 10.0；

抵扣比例全部 100.0；

各类 CardDeduct 字段全部为 0；

disable_* 时间全部为 0001-01-01；

很多扩展维度字段为空列表。

说明：门店暂时只使用了“储值余额 + 卡类型 + 有效期 + 会员关联”几块核心功能。


<!--
AI_CHANGELOG:
- 日期: 2026-02-14
- Prompt: P20260214-103000 — 上下文传递续接，修正占位符描述
- 直接原因: 合并 `electricityCardDeduct`/`rechargeFreezeBalance` 驼峰变体与已有小写字段去重，补充 5 个真正新字段描述
- 变更摘要: 去除大小写重复行，补充 able_share_member_discount/electricity_deduct_radio/electricity_discount/member_grade/principal_balance 的中文描述
- 风险与验证: 纯文档文案修正，无运行时影响；验证：grep "新发现字段" 返回 0 结果

- 日期: 2026-03-19
- Prompt: card_type_id 年卡/月卡映射同步
- 直接原因: 用户确认 2791987095408517=年卡、2793306611533637=月卡，同步到所有涉及 card_type_id 的文档
- 变更摘要: 补充年卡/月卡的 card_type_id 映射，将枚举列表改为表格形式并标注中文名称
- 风险与验证: 纯文档变更，无运行时影响
-->
