init: 项目初始提交 - NeoZQYY Monorepo 完整代码

This commit is contained in:
Neo
2026-02-15 14:58:14 +08:00
commit ded6dfb9d8
769 changed files with 182616 additions and 0 deletions

View File

@@ -0,0 +1,465 @@
# 会员档案GetTenantMemberList
> 自动生成于 2026-02-13 | 数据来源:本地 JSON 样本
## 基本信息
| 属性 | 值 |
|------|-----|
| 接口路径 | `MemberProfile/GetTenantMemberList` |
| 完整 URL | `https://pc.ficoo.vip/apiprod/admin/v1/MemberProfile/GetTenantMemberList` |
| 请求方法 | `POST` |
| Content-Type | `application/json` |
| 鉴权方式 | Bearer Token`Authorization` 头) |
| ODS 对应表 | `member_profiles` |
| 分页方式 | `page` + `limit`(最大 100 |
| 时间范围 | 不需要 |
## 请求参数
| 参数名 | 类型 | 示例值 | 说明 |
|--------|------|--------|------|
| `isMemberInBlackList` | int | `0` | 是否黑名单0=全部) |
| `status_Revoked` | int | `0` | 是否已注销0=全部) |
| `isBindOrg` | int | `0` | 是否绑定组织0=全部) |
| `registerSource` | int | `0` | 注册来源0=全部) |
| `page` | int | `1` | 页码(从 1 开始) |
| `limit` | int | `100` | 每页条数(最大 100 |
## 响应字段(共 15 个)
| # | 字段名 | 类型 | 示例值 |
|---|--------|------|--------|
| 1 | `id` | int | 2955204541320325 |
| 2 | `create_time` | string | '2025-11-08 01:29:33' |
| 3 | `member_card_grade_code` | int | 2790683528022853 |
| 4 | `mobile` | string | '18620043391' |
| 5 | `nickname` | string | '胡先生' |
| 6 | `register_site_id` | int | 2790685415443269 |
| 7 | `site_name` | string | '朗朗桌球' |
| 8 | `member_card_grade_name` | string | '储值卡' |
| 9 | `system_member_id` | int | 2955204540009605 |
| 10 | `tenant_id` | int | 2790683160709957 |
| 11 | `referrer_member_id` | int | 0 |
| 12 | `point` | float | 0.0 |
| 13 | `user_status` | int | 1 |
| 14 | `status` | int | 1 |
| 15 | `growth_value` | float | 0.0 |
## 新增字段(相对本地 JSON 样本)
以下字段在最新 API 响应中出现,但本地 JSON 样本中不存在:
| 字段名 | 类型 |
|--------|------|
| `pay_money_sum` | float |
| `person_tenant_org_id` | int |
| `person_tenant_org_name` | string |
| `recharge_money_sum` | float |
| `register_source` | int |
## 详细字段分析
> 以下内容迁移自旧版 `member_profiles-Analysis.md`,包含字段的业务含义、枚举值、跨表关联等详细说明。
三、主键 / 会员标识类字段
1. id
类型int
非空200 条
唯一值个数199有 1 个 ID 出现了 2 次,完全重复记录)
含义:
这是“租户内会员账户”的主键 ID。
对应一个 会员在当前租户下的一条账户档案(通常是一张卡/一个账户)。
和其它表的关系(从字段命名推断):
在余额变更、储值卡列表等表中,通常会有 member_card_id 或类似字段,按系统习惯,这类字段一般就对应这里的 id。
重复记录说明:
id=2799212615616261 的记录在文件中出现了两次,所有字段完全相同,明显是导出过程重复,不是设计层面的问题。
2. system_member_id
类型int
唯一值个数199同样有一个值出现了 2 次,对应上面的重复记录)
含义(结合其它文件):
这是“系统级会员 ID”在全平台唯一用来把一个会员在不同门店/不同卡类型下的账户统一到一个“人”的维度上。
在其它 JSON例如助教流水里也出现了 system_member_id用来标识消费对应哪个会员。
结构关系:
在“会员档案”这张表里system_member_id 与 id 是一对多的关系(理论上:一人可有多张卡),只是本次截取的数据里恰好只有一人一条记录(除那条导出重复)。
3. member_card_grade_code / member_card_grade_name
这两个字段是成对出现的:一个数值码,一个中文名称。
member_card_grade_code
类型int
唯一值个数4
member_card_grade_name
类型string
唯一值个数4
从数据可得对应关系:
member_card_grade_code -> member_card_grade_name
2790683528022853 -> "储值卡"
2790683528022855 -> "台费卡"
2790683528022856 -> "活动抵用券"
2790683528022857 -> "月卡"
含义:
这是“会员卡种类/等级”的定义字段。
member_card_grade_code 是内部编码(枚举 IDmember_card_grade_name 是展示用名称。
统计分布(只是为了说明结构,不做盈利分析):
储值卡112 条
台费卡82 条
活动抵用券4 条
月卡2 条
结构上的意义:
从设计上看,这张“会员档案”实际上是 “会员 × 卡种” 级别的账户记录:
system_member_id 表示“谁”;
member_card_grade_code/name 表示“哪种卡”;
id 则是这张卡在当前租户下的账号 ID。
四、联系方式与会员展示信息
4. mobile
类型string
唯一值个数1991 个号码重复,对应重复记录)
特征:
全部是 11 位手机号字符串,未发现空字符串或明显无效值。
含义:
会员绑定的手机号码。
结构意义:
在普通业务里,“手机号 + tenant_id”通常具备“会员唯一性”的作用禁止同租户重复注册同一个手机号
在本数据中,手机号重复仅出现在那条重复的会员记录上,可以判断是导出重复,而非同一手机号注册多个账户。
5. nickname
类型string
唯一值个数200每条记录昵称都不同
含义:
会员在当前租户下的显示名称(可以是姓名,也可以是昵称)。
与助教流水里的 nickname 区分:
助教流水中的 nickname 是“助教昵称”(服务人员),这里的 nickname 是“会员昵称”,虽然字段名相同,但含义不同,关联时要注意表的上下文。
五、注册门店 / 租户维度
6. register_site_id
类型int
唯一值个数1
所有记录都是同一个值2790685415443269
含义:
会员的注册门店 ID。
结构关系:
与其它 JSON 中普遍存在的 site_id 相同(都是“朗朗桌球”这家店的 ID
说明本文件的 200 条会员账户,全部是在这家门店注册的。
7. site_name
类型string
唯一值个数1
全部为 "朗朗桌球"
含义:
注册门店名称,属于冗余字段,用于直接展示。
与 register_site_id 关系:
register_site_id → 逻辑外键
site_name → 冗余的门店名称快照
8. tenant_id
类型int
唯一值个数1
全部为 2790683160709957
含义:
租户/品牌 ID。
确认这批会员都是属于同一个租户“朗朗桌球”(而非连锁多店场景)。
六、推荐关系与成长值字段
9. referrer_member_id
类型int
唯一值个数1
全部为 0
含义(按命名推断):
推荐人会员 ID用于记录该会员是由哪位老会员推荐。
目前数据的状态:
本批数据中全部为 0意味着在导出时间范围内这些会员账户没有记录任何推荐关系或该功能未使用
10. point
类型float
唯一值个数1
全部为 0.0
含义:
当前积分余额(这条会员账户的积分值)。
当前状态:
所有账户积分为 0说明要么积分体系刚启用要么此数据截取点时积分未开始累积或未导出非零记录。
11. growth_value
类型float
唯一值个数1
全部为 0.0
含义(按常见会员体系设计):
成长值 / 经验值,用于会员等级晋升的累计指标。
当前状态:
与 point 一样,全部为 0说明成长体系虽然有字段但目前没有实际使用或数据尚在初期。
从这三个字段可以看出:
系统预留了“推荐关系 + 积分 + 成长值”的完整会员运营链路,但这家门店在当前截取时间点上基本还处于“只建档案、不玩复杂运营”的状态。结构上功能完备,只是业务上尚未填充数据。
七、状态 / 启用标志相关字段
12. user_status
类型int枚举
唯一值个数1
全部为 1
含义(结合行业惯例):
用户账号状态(偏“用户逻辑”层面的状态)。
典型枚举可能为:
1正常启用
0禁用 / 冻结
其他值:例如已注销等(本数据尚未出现)
当前数据:
全为 1说明导出的都是正常有效的会员账户。
13. status
类型int枚举
唯一值个数1
全部为 1
含义(按命名推断):
帐户状态(偏“卡状态/档案状态”)。
在你之前的其它 JSON 里“status = 1”通常也是“正常”4 等值用来表示删除/失效等。
当前数据:
同样全部为 1表示这些档案都是有效的卡档案没有注销/停用记录被导出。
这里有一个设计上的细节:
user_status 和 status 都是状态字段,属于“业务状态 + 系统状态”并存的设计。
很多系统会用:
user_status 管用户层面(是否允许登录、是否冻结等);
status 管卡账户本身(卡是否作废、是否挂失)。
在你这份数据里,两者当前值完全一致(都是 1但从结构上可以看出未来可以出现两者不一致的场景例如用户已注销但卡余额仍在清算中等
八、时间字段
14. create_time
类型string
格式YYYY-MM-DD HH:MM:SS
唯一值个数86
典型样例:
'2025-07-20 20:46:38'(出现 5 次)
'2025-07-20 20:46:36'5 次)
含义:
会员账户的创建时间(即这条档案/这张卡在系统中被创建的时间)。
数据特征:
很多时间戳成批出现(同一时间出现 5 条),高度怀疑是“批量导入/老系统迁移”或“批量开卡”的结果,而不是一条条手动录入。
和其它业务数据(例如消费流水)相比,时间集中在 2025-07-20 晚间,说明这批会员是某个时间点一次性导入的。
九、综合结构判断与和其它 JSON 的关系
从字段设计可以得出以下结构层面的结论(仅从结构出发,不做任何盈利/行为分析):
记录粒度
每一条 tenantMemberInfos 记录,是一个“会员在当前租户下某个卡种/账户”的档案。
关键组合键可以理解为:
(tenant_id, system_member_id, member_card_grade_code)
或更加具体的主键 id。
与其它表的关联键
与消费流水(台费、助教、商品等)
通过 system_member_id 把会员消费流水与会员档案关联起来。
一些表里还会出现 member_card_id 或类似字段,对应这里的 id。
与储值卡/余额变更/充值等表:
这些表的 member_card_id / system_member_id / tenant_member_id在不同表叫法略有差异会与这里的 id 和 system_member_id 做主外键关系。
与门店site
register_site_id 与其他表的 site_id 援用同一门店 IDsite_name 是冗余名称。
枚举字段总结
卡种枚举(明确):
member_card_grade_code / member_card_grade_name 四种:
储值卡 / 台费卡 / 活动抵用券 / 月卡
状态枚举(当前只见到一种值,但显然是枚举型设计):
user_status1正常
status1正常
其它预留枚举(当前值全部为单一值):
referrer_member_id目前全为 0“无推荐人”状态
字段使用状态
已投入使用的字段:
id, system_member_id, member_card_grade_*, mobile, nickname, register_site_id, site_name, tenant_id, create_time, user_status, status。
这些字段组合起来,足以支持基本的会员识别、卡种区分和简单状态管理。
结构上预留但目前几乎未被使用的字段:
referrer_member_id推荐体系
point积分体系
growth_value成长值/等级成长体系)
这些字段从结构上完整存在,但在当前数据截面上全部为默认值 0说明门店尚未使用这些高级运营功能。
分页与导出行为的结构线索
data.total = 438而本次两个 page 合并只有 200 条,说明:
该接口是典型的分页接口(每页 100 条);
当前只导出了前两页(或者是时间/条件过滤导致只取到部分)。
id 和 system_member_id 各有一个值重复了两次,且所有字段完全相同:
很可能是分页处理时边界重叠导致的重复(比如页 1 末尾的记录又出现在页 2 的开头),不是数据设计错误。
十、小结:会员档案.json 的角色
从纯字段与结构角度,可以把 20251110_043209_会员档案.json 概括为:
它不是“纯粹的人头表”,而是“会员 × 卡种 的账户档案表”一条记录既包含“谁”system_member_id / mobile / nickname也包含“是什么卡”member_card_grade_xxx
它作为 会员维度的核心参照表,被其它业务表通过 system_member_id 和 id 广泛引用:
消费流水中的会员消费,回来可以通过这些键指向这一表;
储值余额变动、充值、退款等资金类流水,最终也会落到某个 id 所代表的“会员账户/卡”上。
从字段现状可见:门店目前主要使用的是“储值卡 + 台费卡 + 少量月卡/抵用券”的基本功能,重点在“建档与卡种区分”,尚未真正利用积分、成长值、推荐等高级字段。这是“结构完备、业务使用部分开启”的典型状态。