主题
会员管理 PRD
文档信息
| 项目 | 内容 |
|---|---|
| 产品名称 | PMForge - 会员管理 |
| 文档版本 | v2.0 |
| 创建日期 | 2026-09-21 |
| 最后更新 | 2026-09-24 |
| 文档状态 | 评审中 |
| 优先级 | P0 |
一、功能概述
1.1 功能定位
会员管理是 PMForge 平台的用户运营中枢——如果把平台比作一家连锁酒店,会员管理就是前台的"宾客关系管理系统"。它记录每一位住客(会员)的基本信息、入住等级、偏好标签、积分余额,并围绕这些数据构建等级晋升、签到激励、精准营销等运营能力。
本模块承担三大核心职责:
- 会员档案中心:统一管理所有注册用户的基本信息、收货地址、账号状态,为客服和运营提供"一站式查询"能力
- 用户分层引擎:通过等级体系(经验值驱动)、标签体系(手动打标)、分组体系(运营自定义归类)三个维度将用户分层,让不同价值的用户看到不同的内容、享受不同的权益
- 日常活跃抓手:通过每日签到发放积分和经验值,培养用户"每天打开平台"的习惯,提升日活和留存
与"用户管理(01-01)"的区别:用户管理管的是"后台管理员账号"——谁能登录后台、有什么权限;会员管理管的是"前台C端用户"——平台的服务对象、收入来源。两套体系独立运行,但在数据上有关联(例如后台运营人员可以查看和修改会员信息)。
1.2 目标用户
| 用户类型 | 核心诉求 | 典型操作 |
|---|---|---|
| 超级管理员 | 掌控全局会员数据,配置会员体系底层规则 | 创建等级体系、配置签到规则、查看统计大盘 |
| 运营人员 | 精细化运营不同类型的会员,提升活跃和转化 | 打标签、调等级、分组推送、分析数据 |
| 客服人员 | 快速定位会员问题,协助处理积分和等级诉求 | 搜索会员、查看明细、手动调积分/等级 |
| 普通会员(C端) | 管理个人信息、签到领奖励、了解等级权益 | 签到、改信息、管地址、查积分 |
| 高价值会员 | 享受专属权益,快速升级 | 查看等级权益、使用折扣、累积经验值 |
1.3 业务价值
| 价值维度 | 具体收益 | 衡量指标 |
|---|---|---|
| 用户留存 | 签到积分机制培养每日打开习惯 | 日活/月活比、7日留存率 |
| 用户分层 | 等级+标签+分组实现"千人千面"运营 | 分层运营覆盖率、精准推送转化率 |
| 消费激励 | 等级折扣和积分奖励刺激持续消费 | 会员客单价、复购率 |
| 运营效率 | 统一管理后台减少跨系统查询 | 单次会员问题处理时长 |
| 数据驱动 | 会员增长、等级分布、活跃度可视化 | 运营报表产出频率 |
| SaaS 能力 | 多租户隔离支持集团化运营 | 租户数、数据隔离准确率 |
1.4 功能范围
| 功能分类 | 后台管理端 | 前台用户端 |
|---|---|---|
| 会员列表与搜索 | ✅ | — |
| 会员详情查看 | ✅ | — |
| 会员信息编辑 | ✅ | — |
| 会员状态管理(启用/禁用) | ✅ | — |
| 会员数据导出 | ✅ | — |
| 会员等级管理(CRUD) | ✅ | 查看等级权益 |
| 会员标签管理(CRUD) | ✅ | — |
| 会员分组管理(CRUD) | ✅ | — |
| 签到规则配置 | ✅ | 每日签到 + 签到日历 |
| 签到记录查询 | ✅ | — |
| 积分记录查询 | ✅ | 查看积分明细 |
| 经验值记录查询 | ✅ | 查看经验值明细 |
| 会员统计分析 | ✅ | — |
| 个人中心 | — | ✅ |
| 修改个人信息 | — | ✅ |
| 修改手机号 | — | ✅ |
| 修改/重置密码 | — | ✅ |
| 收货地址管理 | — | ✅ |
二、用户场景
2.1 用户角色
| 角色 | 描述 | 核心诉求 |
|---|---|---|
| 运营主管-李姐 | 负责平台用户增长和活跃,有3年电商运营经验 | 快速配置等级和标签体系,数据驱动决策 |
| 运营专员-小王 | 日常执行运营活动,负责打标和推送 | 批量操作高效,操作流程简洁 |
| 客服组长-小刘 | 处理用户投诉和咨询,管理客服团队 | 快速定位用户、查看明细、手动调整 |
| 学员-小张 | 平台普通会员,每天来学习 | 签到简单流畅、积分有用、等级权益清晰 |
| 学员-小陈 | 高等级活跃会员,金卡用户 | 享受专属折扣、快速升级路径明确 |
| 新注册学员-小赵 | 刚注册还没完成签到 | 快速了解等级体系、知道怎么升级 |
2.2 使用场景
场景1:运营李姐配置会员等级体系
背景:平台上线初期,需要建立"普通会员→银卡→金卡→钻石"四级体系。
操作流程:
- 李姐登录后台 → 进入"会员等级管理"页面
- 点击"新增等级" → 依次创建四个等级
- 为每个等级设置:等级名称、等级序号(1/2/3/4)、升级所需经验值(0/1000/5000/20000)、折扣率(100/98/95/90)、等级图标和背景图
- 确认无误后发布上线
- 在前台等级权益页面,学员可以看到四个等级的权益对比
期望:等级配置灵活,支持可视化设置,发布后前台即时展示。
验收标准:
- AC-01:创建等级后,该等级出现在前台等级列表中
- AC-02:经验值达到升级门槛时,系统自动升级并记录等级变更
- AC-03:关闭某等级后,前台不再展示该等级作为可升级目标
- AC-04:等级序号不重复,名称全局唯一
场景2:运营小王批量标签管理
背景:双十一活动即将开始,需要给符合条件的会员打上"活动参与"标签,便于后续精准推送。
操作流程:
- 小王在后台"标签管理"中创建"活动参与"标签,归入"营销活动"分组
- 进入"会员列表" → 筛选条件:注册时间 > 30天 且 累计消费 > 500元
- 勾选筛选出的200名会员 → 点击"批量打标"
- 选择"活动参与"标签 → 确认
- 系统提示"已成功为200名会员添加标签"
期望:批量操作高效,标签管理支持分组归类。
验收标准:
- AC-01:批量打标后,会员详情中可看到新增标签
- AC-02:同一分组下标签名称不可重复
- AC-03:删除标签时,已关联会员自动解除关联
- AC-04:标签支持按分组筛选查看
场景3:学员小张每日签到
背景:小张是普通会员,养成了每天签到领积分的习惯。
操作流程:
- 小张打开APP → 进入"签到中心"
- 看到今日未签到,点击"签到"按钮
- 页面动画反馈:获得10积分 + 5经验值
- 签到日历上今天标记为"已签到"
- 显示"已连续签到3天,再签4天可获得连续签到大奖"
- 第7天签到后,获得额外奖励(如50积分 + 20经验值),周期重新从第1天开始
期望:签到操作简单流畅,实时反馈奖励,连续签到有额外激励。
验收标准:
- AC-01:每日只能签到一次,重复点击提示"今日已签到"
- AC-02:签到后积分和经验值即时到账
- AC-03:连续签到天数正确计算,中断后从第1天重新计算
- AC-04:签到日历准确展示当月签到记录
- AC-05:签到奖励按后台配置的规则发放(第1天10积分/第7天50积分等)
场景4:客服小刘处理会员积分问题
背景:会员投诉"昨天消费了500元但积分没增加"。
操作流程:
- 小刘在后台"会员列表"搜索该会员手机号
- 进入会员详情 → 查看"积分记录"标签页
- 发现消费订单的积分记录确实缺失
- 排查后发现是积分规则配置遗漏了该商品类目
- 手动为该会员补发积分 → 填写补发原因"消费积分遗漏补发"
- 系统记录积分变动明细,标注业务类型为"后台管理"
期望:积分记录清晰可查,支持手动调整和追溯。
验收标准:
- AC-01:积分记录按时间倒序展示,包含变动类型、金额、变动后余额
- AC-02:手动调整积分需填写原因,记录操作人
- AC-03:积分不可调整为负数(扣减时校验余额)
- AC-04:调整操作写入操作日志
场景5:学员小陈查看等级权益
背景:小陈当前是银卡会员,想了解如何升级到金卡。
操作流程:
- 小陈进入"个人中心" → 点击等级图标
- 进入等级详情页:当前等级"银卡"、当前经验值2800、升级金卡还需2200经验值
- 下方展示所有等级权益对比表:银卡9.8折、金卡9.5折、钻石9折
- 页面底部有"升级攻略":完成课程+50经验、每日签到+5经验、消费1元+1经验
- 小陈决定多完成几门课程来加速升级
期望:清晰展示等级权益和升级路径,激励用户提升等级。
验收标准:
- AC-01:准确展示当前等级、经验值、升级所需经验值
- AC-02:等级权益对比表完整展示所有等级的折扣和特权
- AC-03:升级攻略中的经验值获取途径与后台配置一致
场景6:运营李姐进行会员数据分析
背景:月底运营复盘,需要向管理层汇报会员运营数据。
操作流程:
- 李姐进入"会员统计"页面
- 查看概览面板:会员总数12,580、今日新增35、今日活跃1,200
- 查看"会员增长趋势"折线图:选择最近30天,看到日均新增约30人
- 查看"等级分布"饼图:普通60%、银卡25%、金卡10%、钻石5%
- 查看"标签分布"柱状图:了解各标签关联的会员数量
- 导出Excel报表,用于管理层汇报
期望:数据可视化展示,支持多维度分析,可导出报表。
验收标准:
- AC-01:统计数据准确,与明细数据一致
- AC-02:支持按日/周/月切换增长趋势
- AC-03:导出Excel包含完整数据,格式规范
- AC-04:页面加载时间 < 3秒(含图表渲染)
场景7:学员小赵管理收货地址
背景:小赵下单购买课程配套教材,需要填写收货地址。
操作流程:
- 小赵进入"收货地址管理"
- 点击"新增地址" → 填写:收件人"赵同学"、手机号、选择省市区、输入详细地址
- 勾选"设为默认地址"
- 保存后返回列表,该地址排在最前
- 下单时自动填充默认地址信息
期望:地址管理方便,下单时能快速选择。
验收标准:
- AC-01:每个用户最多50个收货地址
- AC-02:设置默认地址后,其他地址自动取消默认
- AC-03:删除默认地址时提示重新设置默认
- AC-04:用户只能查看和操作自己的地址
三、功能需求
3.1 后台管理端
3.1.1 功能清单
| 功能 | 优先级 | 说明 |
|---|---|---|
| 会员列表 | P0 | 分页展示会员,支持多维度搜索筛选 |
| 会员详情 | P0 | 查看会员完整信息(基本/账户/标签/订单/积分等) |
| 会员编辑 | P0 | 修改会员基本信息、标签、分组 |
| 会员等级调整 | P0 | 手动调整会员等级(含降级) |
| 会员积分调整 | P1 | 手动调整会员积分(补发/扣减) |
| 会员状态管理 | P0 | 启用/禁用会员账号 |
| 会员数据导出 | P1 | 导出会员数据Excel |
| 等级管理(CRUD) | P0 | 创建/编辑/删除/查询会员等级 |
| 标签管理(CRUD) | P0 | 创建/编辑/删除/查询会员标签 |
| 标签分组管理 | P1 | 管理标签的分组归类 |
| 用户分组管理 | P1 | 管理会员分组 |
| 签到规则配置 | P1 | 配置签到奖励规则(7天周期) |
| 签到记录查询 | P1 | 查询会员签到记录 |
| 积分记录查询 | P0 | 查询会员积分变动记录 |
| 经验值记录查询 | P1 | 查询会员经验值变动记录 |
| 会员统计分析 | P1 | 增长趋势/等级分布/标签分布/活跃度 |
3.1.2 会员列表
页面描述:

业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 默认按创建时间倒序排列 | 最新注册的用户优先展示,方便运营关注新用户 |
| R-02 | 手机号/昵称/邮箱支持模糊搜索 | 运营通常只记得部分信息,模糊匹配提高查找效率 |
| R-03 | 标签筛选支持多选(AND关系) | 精准定位同时满足多个标签的用户 |
| R-04 | 列表中展示名称而非ID | 运营人员不需要记住ID,名称更直观 |
| R-05 | 支持多租户数据隔离 | SaaS场景下不同租户只能看到自己的会员 |
| R-06 | 手机号中间4位脱敏显示 | 保护用户隐私,防止信息泄露 |
| R-07 | 禁用状态会员在列表中灰色标识 | 一眼区分正常和禁用账号 |
数据字段:
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | Long | 会员ID |
| nickname | String | 用户昵称 |
| avatar | String | 头像URL |
| mobile | String | 手机号(脱敏显示) |
| String | 邮箱 | |
| sex | Integer | 性别(0-未知 1-男 2-女) |
| birthday | LocalDateTime | 出生日期 |
| areaName | String | 所在地名称 |
| status | Integer | 状态(0-正常 1-禁用) |
| point | Integer | 当前积分 |
| totalPoint | Integer | 累计积分 |
| experience | Integer | 经验值 |
| levelName | String | 会员等级名称 |
| tagNames | List<String> | 标签名称列表 |
| groupName | String | 分组名称 |
| registerIp | String | 注册IP |
| loginIp | String | 最后登录IP |
| loginDate | LocalDateTime | 最后登录时间 |
| createTime | LocalDateTime | 注册时间 |
接口设计:
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 获取会员分页 | GET | /admin-api/member/user/page | 获取会员分页列表 |
| 获取会员详情 | GET | /admin-api/member/user/get | 获取会员详细信息 |
请求参数(分页查询):
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| nickname | String | 否 | 用户昵称(模糊匹配) |
| mobile | String | 否 | 手机号(模糊匹配) |
| String | 否 | 邮箱(模糊匹配) | |
| levelId | Long | 否 | 会员等级编号 |
| tagIds | List<Long> | 否 | 会员标签编号列表 |
| groupId | Long | 否 | 用户分组编号 |
| loginDate | LocalDateTime[] | 否 | 最后登录时间范围 |
| createTime | LocalDateTime[] | 否 | 创建时间范围 |
| pageNo | Integer | 是 | 页码 |
| pageSize | Integer | 是 | 每页条数 |
3.1.3 会员详情
页面描述:

业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 分区展示不同类型信息 | 信息量大时分类展示,避免一页堆砌 |
| R-02 | 积分/签到/经验值记录内嵌展示 | 运营无需跳转页面即可查看明细 |
| R-03 | 敏感信息脱敏(姓名、手机号) | 符合隐私保护要求 |
3.1.4 会员编辑
页面描述:

业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 手机号不可修改 | 手机号是账号唯一标识,修改需走专门流程 |
| R-02 | 修改标签后即时更新关联关系 | 运营打标后希望立即在筛选中看到效果 |
| R-03 | 修改分组后即时更新归属 | 同上 |
| R-04 | 修改信息后记录操作日志 | 便于追溯谁改了什么,出问题时可定位 |
| R-05 | 头像需为URL格式,支持预览 | 确保图片可正常展示 |
接口设计:
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 更新会员 | PUT | /admin-api/member/user/update | 更新会员信息 |
请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | Long | 是 | 会员ID |
| nickname | String | 是 | 昵称 |
| avatar | String | 否 | 头像URL |
| sex | Integer | 否 | 性别 |
| birthday | LocalDateTime | 否 | 出生日期 |
| areaId | Long | 否 | 所在地编号 |
| mark | String | 否 | 会员备注 |
| tagIds | List<Long> | 否 | 标签ID列表 |
| groupId | Long | 否 | 分组ID |
3.1.5 会员等级调整
页面描述:

业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 调整后记录等级变更记录 | 等级变动影响权益,需可追溯 |
| R-02 | 可选择任意等级(包括降级) | 运营可能需要因违规降级或特殊原因升级 |
| R-03 | 调整后即时生效 | 运营调整后用户应立即看到变化 |
| R-04 | 需要"member:user:update-level"权限 | 等级调整是敏感操作,需权限控制 |
接口设计:
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 更新会员等级 | PUT | /admin-api/member/user/update-level | 手动调整会员等级 |
请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | Long | 是 | 会员ID |
| levelId | Long | 是 | 目标等级ID |
3.1.6 会员积分调整
页面描述:

业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 积分调整后记录积分变动明细 | 每笔变动需可追溯 |
| R-02 | 积分变动业务类型标记为"后台管理" | 区分系统自动发放和人工调整 |
| R-03 | 积分不可调整为负数 | 负积分无业务意义,扣减时校验余额 |
| R-04 | 需要"member:user:update-point"权限 | 积分涉及用户资产,需权限控制 |
接口设计:
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 更新会员积分 | PUT | /admin-api/member/user/update-point | 手动调整会员积分 |
请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | Long | 是 | 会员ID |
| point | Integer | 是 | 调整积分(正数增加,负数扣减) |
3.1.7 会员状态管理
业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 禁用后该会员无法登录 | 违规用户需阻止访问 |
| R-02 | 禁用后该会员的所有Token失效 | 立即踢出,不留安全隐患 |
| R-03 | 状态切换记录操作日志 | 禁用/启用是高风险操作,需可追溯 |
接口设计:
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 更新会员状态 | PUT | /admin-api/member/user/update | 通过更新接口修改状态字段 |
请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | Long | 是 | 会员ID |
| status | Integer | 是 | 状态(0-正常 1-禁用) |
3.1.8 会员数据导出
业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 支持xlsx格式 | 通用格式,运营人员习惯使用Excel |
| R-02 | 单次最多导出10000条 | 防止大数据量导致服务器压力 |
| R-03 | 密码字段不导出 | 安全底线 |
| R-04 | 大数据量采用异步导出 | 避免导出过程阻塞页面操作 |
| R-05 | 导出字段:昵称、手机号、邮箱、性别、等级、积分、经验值、标签、分组、注册时间、最后登录时间 | 覆盖运营常用分析维度 |
3.1.9 会员等级管理
页面描述:

等级列表数据字段:
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | Long | 等级ID |
| name | String | 等级名称 |
| level | Integer | 等级序号 |
| experience | Integer | 升级所需经验值 |
| discountPercent | Integer | 享受折扣(0-100,如98表示9.8折) |
| icon | String | 等级图标URL |
| backgroundUrl | String | 等级背景图URL |
| status | Integer | 状态(0-开启 1-关闭) |
| createTime | LocalDateTime | 创建时间 |
业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 等级名称全局唯一 | 避免运营混淆不同等级 |
| R-02 | 等级序号不能重复 | 序号决定等级高低排序 |
| R-03 | 升级经验值必须大于0(首个等级除外) | 确保等级体系有递进感 |
| R-04 | 折扣率范围0-100,0表示免费,100表示无折扣 | 统一折扣表达标准 |
| R-05 | 已有关联会员的等级不可直接删除 | 防止删除后会员等级数据丢失 |
| R-06 | 删除等级前需二次确认 | 防止误操作 |
| R-07 | 等级列表默认按level升序排列 | 从低到高展示,符合认知习惯 |
| R-08 | 关闭状态的等级不出现在前台升级选项中 | 临时下线的等级不影响现有用户 |
接口设计:
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 创建会员等级 | POST | /admin-api/member/level/create | 创建新等级 |
| 更新会员等级 | PUT | /admin-api/member/level/update | 更新等级配置 |
| 删除会员等级 | DELETE | /admin-api/member/level/delete | 删除等级 |
| 获取会员等级 | GET | /admin-api/member/level/get | 获取等级详情 |
| 获取会员等级列表 | GET | /admin-api/member/level/list | 获取等级列表 |
| 获取等级精简列表 | GET | /admin-api/member/level/list-all-simple | 获取启用等级精简列表(下拉用) |
创建/更新请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | String | 是 | 等级名称 |
| level | Integer | 是 | 等级序号(正整数) |
| experience | Integer | 是 | 升级所需经验值(正整数) |
| discountPercent | Integer | 是 | 享受折扣(0-100) |
| icon | String | 否 | 等级图标URL |
| backgroundUrl | String | 否 | 等级背景图URL |
| status | Integer | 是 | 状态(0-开启 1-关闭) |
3.1.10 会员标签管理
页面描述:

业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 标签名称在同一分组下唯一 | 同一分类下不允许重复标签 |
| R-02 | 删除标签前自动解除与会员的关联 | 避免删除失败或产生脏数据 |
| R-03 | 删除标签前需二次确认 | 防止误操作 |
| R-04 | 支持按标签ID列表批量查询 | 会员列表展示标签名称时需要批量关联 |
接口设计:
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 创建会员标签 | POST | /admin-api/member/tag/create | 创建新标签 |
| 更新会员标签 | PUT | /admin-api/member/tag/update | 更新标签 |
| 删除会员标签 | DELETE | /admin-api/member/tag/delete | 删除标签 |
| 获取会员标签 | GET | /admin-api/member/tag/get | 获取标签详情 |
| 获取会员标签分页 | GET | /admin-api/member/tag/page | 分页获取标签列表 |
| 获取标签精简列表 | GET | /admin-api/member/tag/list-all-simple | 获取全部标签精简列表 |
| 批量获取标签 | GET | /admin-api/member/tag/list | 根据ID列表批量获取标签 |
创建/更新请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | String | 是 | 标签名称 |
| groupId | Long | 否 | 标签分组ID |
3.1.11 会员分组管理
页面描述:

业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 分组名称全局唯一 | 避免运营选择时混淆 |
| R-02 | 关闭状态的分组不出现在前端下拉选项中 | 已停用的分组不应被新会员关联 |
| R-03 | 已有关联会员的分组不可直接删除 | 防止会员分组数据丢失 |
| R-04 | 删除分组前需二次确认 | 防止误操作 |
接口设计:
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 创建用户分组 | POST | /admin-api/member/group/create | 创建新分组 |
| 更新用户分组 | PUT | /admin-api/member/group/update | 更新分组 |
| 删除用户分组 | DELETE | /admin-api/member/group/delete | 删除分组 |
| 获取用户分组 | GET | /admin-api/member/group/get | 获取分组详情 |
| 获取分组分页 | GET | /admin-api/member/group/page | 分页获取分组列表 |
| 获取分组精简列表 | GET | /admin-api/member/group/list-all-simple | 获取启用分组精简列表 |
创建/更新请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | String | 是 | 分组名称 |
| status | Integer | 是 | 状态(0-开启 1-关闭) |
| remark | String | 否 | 备注 |
3.1.12 签到规则配置
页面描述:

业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 同一签到天数不能重复配置 | 每天只能有一套奖励标准 |
| R-02 | 奖励积分和经验不能同时为0 | 签到必须有奖励,否则无激励效果 |
| R-03 | 积分和经验值均不能为负数 | 签到不会扣减用户资产 |
| R-04 | 连续签到天数越大,奖励应越高(前端建议) | 递进奖励增强连续签到动力 |
| R-05 | 关闭状态的规则不参与签到奖励计算 | 临时关闭某天的奖励而不删除配置 |
| R-06 | 签到周期通常为7天一轮 | 一周一个完整周期,符合用户习惯 |
接口设计:
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 创建签到规则 | POST | /admin-api/member/sign-in/config/create | 创建签到规则 |
| 更新签到规则 | PUT | /admin-api/member/sign-in/config/update | 更新签到规则 |
| 删除签到规则 | DELETE | /admin-api/member/sign-in/config/delete | 删除签到规则 |
| 获取签到规则 | GET | /admin-api/member/sign-in/config/get | 获取规则详情 |
| 获取签到规则列表 | GET | /admin-api/member/sign-in/config/list | 获取全部规则列表 |
创建/更新请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| day | Integer | 是 | 签到第x天 |
| point | Integer | 是 | 奖励积分(>=0) |
| experience | Integer | 是 | 奖励经验(>=0) |
| status | Integer | 是 | 状态(0-开启 1-关闭) |
3.1.13 签到记录查询
业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 按签到时间倒序排列 | 最新签到优先展示 |
| R-02 | 关联查询会员昵称 | 运营不需要记住会员ID |
接口设计:
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 获取签到记录分页 | GET | /admin-api/member/sign-in/record/page | 分页获取签到记录 |
请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| userId | Long | 否 | 会员ID |
| createTime | LocalDateTime[] | 否 | 签到时间范围 |
| pageNo | Integer | 是 | 页码 |
| pageSize | Integer | 是 | 每页条数 |
3.1.14 积分记录查询
页面描述:

业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 变动积分正数显示绿色带+号,负数显示红色带-号 | 直观区分收支方向 |
| R-02 | 支持按业务类型筛选 | 运营通常只关心某一类变动 |
| R-03 | 支持按变动方向筛选 | 快速定位扣减记录排查问题 |
接口设计:
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 获取积分记录分页 | GET | /admin-api/member/point/record/page | 分页获取积分记录 |
3.1.15 经验值记录查询
业务规则:与积分记录查询类似,支持按会员、业务类型、时间范围筛选。
接口设计:
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 获取经验值记录分页 | GET | /admin-api/member/experience/record/page | 分页获取经验值记录 |
3.1.16 会员统计分析
页面描述:

统计维度:
| 统计项 | 说明 | 数据来源 |
|---|---|---|
| 会员总数 | 平台注册会员总数 | member_user 表 COUNT |
| 今日新增 | 今日新注册会员数 | member_user 表 create_time 筛选 |
| 今日活跃 | 今日有登录或签到行为的会员数 | member_user.login_date + sign_in_record |
| 会员增长趋势 | 按日/周/月统计新注册会员数 | member_user 表按时间分组 |
| 等级分布 | 各等级会员数量占比 | member_user 表按 level_id 分组 |
| 标签分布 | 各标签关联会员数量统计 | member_user_tag 表按 tag_id 分组 |
| 活跃度统计 | 日活/周活/月活会员数 | 登录记录 + 签到记录综合 |
3.2 前台用户端
3.2.1 功能清单
| 功能 | 优先级 | 说明 |
|---|---|---|
| 查看个人信息 | P0 | 查看自己的基本信息、等级、积分 |
| 修改个人信息 | P0 | 修改昵称、性别、生日 |
| 修改手机号 | P0 | 更换绑定手机号(需验证码验证) |
| 修改密码 | P0 | 修改登录密码 |
| 重置密码 | P1 | 忘记密码时通过验证码重置 |
| 收货地址管理 | P0 | 增删改查收货地址,设置默认地址 |
| 查看等级列表 | P0 | 查看所有等级及权益说明 |
| 查看经验值记录 | P1 | 查看经验值变动明细 |
| 每日签到 | P0 | 每日签到获取积分和经验 |
| 签到日历 | P1 | 查看签到日历和连续签到天数 |
| 查看积分记录 | P1 | 查看积分变动明细 |
3.2.2 个人中心
页面描述:

接口设计:
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 获取个人信息 | GET | /app-api/member/user/get | 获取当前用户基本信息 |
返回结果:
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | Long | 会员ID |
| nickname | String | 昵称 |
| avatar | String | 头像URL |
| levelName | String | 等级名称 |
| levelIcon | String | 等级图标URL |
| point | Integer | 当前积分 |
| experience | Integer | 当前经验值 |
3.2.3 修改个人信息
业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 手机号不可在此修改 | 手机号修改需验证码验证,走专门流程 |
| R-02 | 修改后即时生效 | 用户体验要求 |
| R-03 | 昵称为必填项 | 昵称是社交展示的基础 |
接口设计:
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 修改个人信息 | PUT | /app-api/member/user/update | 修改当前用户信息 |
请求参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| nickname | String | 是 | 昵称 |
| sex | Integer | 否 | 性别 |
| birthday | LocalDateTime | 否 | 出生日期 |
3.2.4 修改手机号
业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 新手机号不能与其他会员重复 | 手机号是账号唯一标识 |
| R-02 | 新手机号需短信验证码验证 | 确保用户拥有该手机号 |
| R-03 | 修改成功后所有设备退出登录 | 安全考虑,防止旧设备继续访问 |
| R-04 | 支持通过微信小程序授权获取手机号 | 小程序场景下的便捷方式 |
接口设计:
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 修改手机号 | PUT | /app-api/member/user/update-mobile | 通过验证码修改手机号 |
| 微信修改手机号 | PUT | /app-api/member/user/update-mobile-by-weixin | 通过微信小程序授权修改 |
3.2.5 修改密码
业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 当前密码必须正确 | 防止他人恶意修改 |
| R-02 | 新密码不能与当前密码相同 | 确保密码真正被更改 |
| R-03 | 修改成功后所有设备退出登录 | 安全考虑 |
| R-04 | 密码长度不少于6位 | 基本安全要求 |
接口设计:
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 修改密码 | PUT | /app-api/member/user/update-password | 修改登录密码 |
3.2.6 重置密码
业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 手机号必须是已注册的号码 | 防止未注册用户重置 |
| R-02 | 短信验证码必须正确 | 身份验证 |
| R-03 | 重置成功后所有设备退出登录 | 安全考虑 |
| R-04 | 此接口无需登录(@PermitAll) | 用户忘记密码时无法登录 |
接口设计:
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 重置密码 | PUT | /app-api/member/user/reset-password | 忘记密码重置(无需登录) |
3.2.7 收货地址管理
页面描述:

业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 每个用户最多50个收货地址 | 防止滥用存储资源 |
| R-02 | 设置默认地址时,其他地址自动取消默认 | 同一时间只能有一个默认地址 |
| R-03 | 删除地址时,若为默认地址需提示重新设置默认 | 避免下单时无默认地址 |
| R-04 | 收件人手机号需为合法手机号 | 确保快递能联系到收件人 |
| R-05 | 用户只能操作自己的地址 | 通过 loginUserId 隔离,防止越权 |
接口设计:
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 创建收货地址 | POST | /app-api/member/address/create | 创建新收货地址 |
| 更新收货地址 | PUT | /app-api/member/address/update | 更新收货地址 |
| 删除收货地址 | DELETE | /app-api/member/address/delete | 删除收货地址 |
| 获取收货地址 | GET | /app-api/member/address/get | 获取地址详情 |
| 获取默认地址 | GET | /app-api/member/address/get-default | 获取默认地址 |
| 获取地址列表 | GET | /app-api/member/address/list | 获取当前用户所有地址 |
3.2.8 签到中心
页面描述:

业务规则:
| 规则编号 | 规则描述 | 设计原因 |
|---|---|---|
| R-01 | 每日只能签到一次(自然日0:00-23:59) | 签到本质是"每天一次"的激励 |
| R-02 | 签到后即时发放积分和经验值 | 即时反馈增强签到体验 |
| R-03 | 连续签到中断后从第1天重新计算 | 鼓励持续签到而非补签 |
| R-04 | 签到周期为7天一轮,第7天后重新从第1天开始 | 周期性奖励循环 |
| R-05 | 签到奖励按后台配置的规则发放 | 运营可灵活调整奖励力度 |
| R-06 | 签到同时记录积分变动和经验值变动明细 | 便于用户查看来源 |
接口设计:
| 接口名称 | 请求方式 | 接口路径 | 说明 |
|---|---|---|---|
| 会员签到 | POST | /app-api/member/sign-in/create | 执行签到 |
| 获取签到日历 | GET | /app-api/member/sign-in/get-sign-in-calendar | 获取当月签到记录 |
| 获取签到统计 | GET | /app-api/member/sign-in/get-sign-in-statistics | 获取连续签到天数等 |
四、非功能需求
4.1 性能需求
| 指标 | 要求 | 说明 |
|---|---|---|
| 会员列表查询 | < 500ms | 含标签和等级关联查询 |
| 会员详情加载 | < 300ms | 含积分记录和签到记录 |
| 签到操作 | < 200ms | 含积分和经验值发放 |
| 统计数据加载 | < 3s | 含图表数据聚合计算 |
| 数据导出 | < 30s(10000条) | 异步导出,完成后通知下载 |
| 并发签到 | 支持1000 QPS | 早高峰签到场景 |
| 标签批量操作 | < 5s(1000名会员) | 批量打标/取消标签 |
4.2 安全需求
| 安全项 | 要求 | 说明 |
|---|---|---|
| 数据隔离 | 多租户数据严格隔离 | 所有查询自动注入 tenant_id |
| 隐私保护 | 手机号、姓名等敏感信息脱敏 | 列表展示时中间位用*替代 |
| 权限控制 | 后台接口基于 RBAC 权限模型 | 不同操作需对应权限标识 |
| 操作审计 | 敏感操作记录操作日志 | 等级调整、积分调整、禁用等 |
| 防越权 | 前台接口通过 loginUserId 隔离 | 用户只能操作自己的数据 |
| 验证码 | 修改手机号/重置密码需短信验证 | 防止账号被盗后恶意修改 |
| Token 失效 | 修改密码/手机号后所有设备退出 | 安全考虑,强制重新认证 |
| 防重复签到 | 数据库唯一索引 + Redis分布式锁 | 双重保障防止并发签到漏洞 |
| 积分安全 | 积分扣减需校验余额 | 防止出现负积分 |
| 防接口刷取 | 签到等接口需限流保护 | 防止恶意刷积分 |
4.3 兼容性需求
| 兼容项 | 要求 |
|---|---|
| 数据库兼容 | 支持 MySQL、PostgreSQL、Oracle 等(通过 MyBatis Plus 抽象层) |
| 多端适配 | 前台支持 H5、小程序、APP(uni-app) |
| 接口规范 | 后台 admin-api、前台 app-api 分离 |
| 时区处理 | 签到按服务器时区的自然日判断 |
| PC浏览器(后台) | Chrome 80+、Firefox 75+、Safari 13+、Edge 80+ |
| 移动端H5(前台) | iOS Safari 12+、Android Chrome 80+、微信内置浏览器 |
| 微信小程序 | 基础库 2.10.0+ |
五、数据设计
5.1 member_user 会员用户表
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| id | bigint | 是 | 自增 | 主键ID |
| nickname | varchar(64) | 是 | - | 用户昵称 |
| avatar | varchar(512) | 否 | NULL | 头像URL |
| mobile | varchar(20) | 否 | NULL | 手机号(唯一) |
| varchar(64) | 否 | NULL | 邮箱 | |
| name | varchar(64) | 否 | NULL | 真实姓名 |
| sex | tinyint | 否 | 0 | 性别:0-未知 1-男 2-女 |
| birthday | datetime | 否 | NULL | 出生日期 |
| area_id | int | 否 | NULL | 所在地编号(关联地区表) |
| area_name | varchar(128) | 否 | NULL | 所在地名称(冗余) |
| mark | varchar(256) | 否 | NULL | 会员备注(运营填写) |
| status | tinyint | 是 | 0 | 状态:0-正常 1-禁用 |
| point | int | 是 | 0 | 当前积分 |
| total_point | int | 是 | 0 | 累计积分(只增不减的累计值) |
| experience | int | 是 | 0 | 当前经验值 |
| level_id | bigint | 否 | NULL | 会员等级ID |
| group_id | bigint | 否 | NULL | 用户分组ID |
| register_ip | varchar(64) | 否 | NULL | 注册IP |
| register_terminal | tinyint | 否 | NULL | 注册终端:1-H5 2-小程序 3-APP |
| login_ip | varchar(64) | 否 | NULL | 最后登录IP |
| login_date | datetime | 否 | NULL | 最后登录时间 |
| creator | varchar(64) | 否 | NULL | 创建者 |
| create_time | datetime | 是 | CURRENT_TIMESTAMP | 创建时间 |
| updater | varchar(64) | 否 | NULL | 更新者 |
| update_time | datetime | 是 | CURRENT_TIMESTAMP | 更新时间 |
| deleted | bit(1) | 是 | 0 | 逻辑删除 |
| tenant_id | bigint | 是 | 0 | 租户ID |
索引设计:
- 主键:id
- 唯一索引:uk_mobile (mobile, tenant_id) — 同租户手机号唯一
- 普通索引:idx_level_id (level_id)
- 普通索引:idx_group_id (group_id)
- 普通索引:idx_create_time (create_time)
- 普通索引:idx_tenant_id (tenant_id)
5.2 member_level 会员等级表
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| id | bigint | 是 | 自增 | 主键ID |
| name | varchar(64) | 是 | - | 等级名称 |
| level | int | 是 | - | 等级序号(正整数,越大越高) |
| experience | int | 是 | - | 升级所需经验值 |
| discount_percent | int | 是 | 100 | 享受折扣(0-100) |
| icon | varchar(512) | 否 | NULL | 等级图标URL |
| background_url | varchar(512) | 否 | NULL | 等级背景图URL |
| status | tinyint | 是 | 0 | 状态:0-开启 1-关闭 |
| creator | varchar(64) | 否 | NULL | 创建者 |
| create_time | datetime | 是 | CURRENT_TIMESTAMP | 创建时间 |
| updater | varchar(64) | 否 | NULL | 更新者 |
| update_time | datetime | 是 | CURRENT_TIMESTAMP | 更新时间 |
| deleted | bit(1) | 是 | 0 | 逻辑删除 |
| tenant_id | bigint | 是 | 0 | 租户ID |
索引设计:
- 主键:id
- 唯一索引:uk_name (name, tenant_id) — 同租户名称唯一
- 普通索引:idx_level (level)
- 普通索引:idx_tenant_id (tenant_id)
5.3 member_tag 会员标签表
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| id | bigint | 是 | 自增 | 主键ID |
| name | varchar(64) | 是 | - | 标签名称 |
| group_id | bigint | 否 | NULL | 标签分组ID |
| creator | varchar(64) | 否 | NULL | 创建者 |
| create_time | datetime | 是 | CURRENT_TIMESTAMP | 创建时间 |
| updater | varchar(64) | 否 | NULL | 更新者 |
| update_time | datetime | 是 | CURRENT_TIMESTAMP | 更新时间 |
| deleted | bit(1) | 是 | 0 | 逻辑删除 |
| tenant_id | bigint | 是 | 0 | 租户ID |
索引设计:
- 主键:id
- 唯一索引:uk_name_group (name, group_id, tenant_id) — 同分组下名称唯一
- 普通索引:idx_group_id (group_id)
- 普通索引:idx_tenant_id (tenant_id)
5.4 member_tag_group 标签分组表
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| id | bigint | 是 | 自增 | 主键ID |
| name | varchar(64) | 是 | - | 分组名称 |
| status | tinyint | 是 | 0 | 状态:0-开启 1-关闭 |
| remark | varchar(200) | 否 | NULL | 备注 |
| creator | varchar(64) | 否 | NULL | 创建者 |
| create_time | datetime | 是 | CURRENT_TIMESTAMP | 创建时间 |
| updater | varchar(64) | 否 | NULL | 更新者 |
| update_time | datetime | 是 | CURRENT_TIMESTAMP | 更新时间 |
| deleted | bit(1) | 是 | 0 | 逻辑删除 |
| tenant_id | bigint | 是 | 0 | 租户ID |
5.5 member_user_tag 会员-标签关联表
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| id | bigint | 是 | 自增 | 主键ID |
| user_id | bigint | 是 | - | 会员ID |
| tag_id | bigint | 是 | - | 标签ID |
| create_time | datetime | 是 | CURRENT_TIMESTAMP | 创建时间 |
索引设计:
- 主键:id
- 唯一索引:uk_user_tag (user_id, tag_id) — 防止重复打标
- 普通索引:idx_tag_id (tag_id)
5.6 member_address 收货地址表
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| id | bigint | 是 | 自增 | 主键ID |
| user_id | bigint | 是 | - | 会员ID |
| name | varchar(64) | 是 | - | 收件人姓名 |
| mobile | varchar(20) | 是 | - | 收件人手机号 |
| area_id | int | 是 | - | 所在地区编号 |
| area_name | varchar(128) | 否 | NULL | 所在地区名称(冗余) |
| detail_address | varchar(256) | 是 | - | 详细地址 |
| default_status | bit(1) | 是 | 0 | 是否默认地址 |
| creator | varchar(64) | 否 | NULL | 创建者 |
| create_time | datetime | 是 | CURRENT_TIMESTAMP | 创建时间 |
| updater | varchar(64) | 否 | NULL | 更新者 |
| update_time | datetime | 是 | CURRENT_TIMESTAMP | 更新时间 |
| deleted | bit(1) | 是 | 0 | 逻辑删除 |
| tenant_id | bigint | 是 | 0 | 租户ID |
索引设计:
- 主键:id
- 普通索引:idx_user_id (user_id)
- 普通索引:idx_tenant_id (tenant_id)
5.7 member_sign_in_config 签到规则配置表
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| id | int | 是 | 自增 | 主键ID |
| day | int | 是 | - | 签到第x天 |
| point | int | 是 | 0 | 奖励积分 |
| experience | int | 是 | 0 | 奖励经验 |
| status | tinyint | 是 | 0 | 状态:0-开启 1-关闭 |
| creator | varchar(64) | 否 | NULL | 创建者 |
| create_time | datetime | 是 | CURRENT_TIMESTAMP | 创建时间 |
| updater | varchar(64) | 否 | NULL | 更新者 |
| update_time | datetime | 是 | CURRENT_TIMESTAMP | 更新时间 |
| deleted | bit(1) | 是 | 0 | 逻辑删除 |
| tenant_id | bigint | 是 | 0 | 租户ID |
索引设计:
- 主键:id
- 唯一索引:uk_day (day, tenant_id) — 同租户天数不重复
- 普通索引:idx_tenant_id (tenant_id)
5.8 member_sign_in_record 签到记录表
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| id | bigint | 是 | 自增 | 主键ID |
| user_id | bigint | 是 | - | 会员ID |
| day | int | 是 | - | 签到天数(第几次连续签到) |
| point | int | 是 | 0 | 获得积分 |
| experience | int | 是 | 0 | 获得经验 |
| creator | varchar(64) | 否 | NULL | 创建者 |
| create_time | datetime | 是 | CURRENT_TIMESTAMP | 签到时间 |
| updater | varchar(64) | 否 | NULL | 更新者 |
| update_time | datetime | 是 | CURRENT_TIMESTAMP | 更新时间 |
| deleted | bit(1) | 是 | 0 | 逻辑删除 |
| tenant_id | bigint | 是 | 0 | 租户ID |
索引设计:
- 主键:id
- 普通索引:idx_user_id (user_id)
- 唯一索引:uk_user_date (user_id, create_time) — 按用户+日期防重复签到
- 普通索引:idx_tenant_id (tenant_id)
5.9 member_point_record 积分记录表
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| id | bigint | 是 | 自增 | 主键ID |
| user_id | bigint | 是 | - | 会员ID |
| biz_type | tinyint | 是 | - | 业务类型(见数据字典) |
| biz_id | varchar(64) | 否 | NULL | 关联业务编号 |
| title | varchar(128) | 否 | NULL | 标题/说明 |
| point | int | 是 | - | 变动积分(正增负减) |
| total_point | int | 是 | - | 变动后总积分 |
| creator | varchar(64) | 否 | NULL | 创建者 |
| create_time | datetime | 是 | CURRENT_TIMESTAMP | 变动时间 |
| updater | varchar(64) | 否 | NULL | 更新者 |
| update_time | datetime | 是 | CURRENT_TIMESTAMP | 更新时间 |
| deleted | bit(1) | 是 | 0 | 逻辑删除 |
| tenant_id | bigint | 是 | 0 | 租户ID |
索引设计:
- 主键:id
- 普通索引:idx_user_id (user_id)
- 普通索引:idx_biz_type (biz_type)
- 普通索引:idx_create_time (create_time)
- 普通索引:idx_tenant_id (tenant_id)
5.10 member_experience_record 经验值记录表
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| id | bigint | 是 | 自增 | 主键ID |
| user_id | bigint | 是 | - | 会员ID |
| biz_type | tinyint | 是 | - | 业务类型 |
| biz_id | varchar(64) | 否 | NULL | 关联业务编号 |
| title | varchar(128) | 否 | NULL | 标题/说明 |
| experience | int | 是 | - | 变动经验值(正增负减) |
| total_experience | int | 是 | - | 变动后总经验值 |
| creator | varchar(64) | 否 | NULL | 创建者 |
| create_time | datetime | 是 | CURRENT_TIMESTAMP | 变动时间 |
| updater | varchar(64) | 否 | NULL | 更新者 |
| update_time | datetime | 是 | CURRENT_TIMESTAMP | 更新时间 |
| deleted | bit(1) | 是 | 0 | 逻辑删除 |
| tenant_id | bigint | 是 | 0 | 租户ID |
索引设计:
- 主键:id
- 普通索引:idx_user_id (user_id)
- 普通索引:idx_biz_type (biz_type)
- 普通索引:idx_create_time (create_time)
- 普通索引:idx_tenant_id (tenant_id)
5.11 member_level_record 等级变更记录表
| 字段名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| id | bigint | 是 | 自增 | 主键ID |
| user_id | bigint | 是 | - | 会员ID |
| level_id | bigint | 是 | - | 等级ID |
| level | int | 是 | - | 等级序号 |
| experience | int | 是 | - | 变更时经验值 |
| change_type | tinyint | 是 | - | 变更类型:1-升级 2-降级 3-后台调整 |
| creator | varchar(64) | 否 | NULL | 创建者 |
| create_time | datetime | 是 | CURRENT_TIMESTAMP | 变更时间 |
| updater | varchar(64) | 否 | NULL | 更新者 |
| update_time | datetime | 是 | CURRENT_TIMESTAMP | 更新时间 |
| deleted | bit(1) | 是 | 0 | 逻辑删除 |
| tenant_id | bigint | 是 | 0 | 租户ID |
索引设计:
- 主键:id
- 普通索引:idx_user_id (user_id)
- 普通索引:idx_tenant_id (tenant_id)
5.12 数据字典
积分业务类型(biz_type)
| 枚举值 | 编号 | 说明 |
|---|---|---|
| SIGN_IN | 1 | 签到获得 |
| ORDER | 2 | 消费获得 |
| ADMIN | 3 | 后台调整 |
| ACTIVITY | 4 | 活动奖励 |
| REFUND | 5 | 退款扣减 |
| EXCHANGE | 6 | 积分兑换 |
经验值业务类型(biz_type)
| 枚举值 | 编号 | 说明 |
|---|---|---|
| SIGN_IN | 1 | 签到获得 |
| ORDER | 2 | 消费获得 |
| COURSE | 3 | 完成课程 |
| ADMIN | 4 | 后台调整 |
| LEVEL_CHANGE | 5 | 等级变更调整 |
等级变更类型(change_type)
| 枚举值 | 编号 | 说明 |
|---|---|---|
| UPGRADE | 1 | 自动升级(经验值达到门槛) |
| DOWNGRADE | 2 | 自动降级(经验值过期扣减) |
| ADMIN | 3 | 后台手动调整 |
注册终端(register_terminal)
| 枚举值 | 编号 | 说明 |
|---|---|---|
| H5 | 1 | H5网页 |
| MINI_APP | 2 | 微信小程序 |
| APP | 3 | APP客户端 |
| WECHAT_MP | 4 | 微信公众号 |
六、跨模块联动
6.1 联动关系总览
| 关联模块 | 联动方式 | 数据流向 | 触发场景 |
|---|---|---|---|
| 钱包管理(04-02) | 积分可兑换为余额 | 会员积分 → 钱包余额 | 用户在积分商城兑换 |
| 支付模块(04-01) | 等级折扣影响订单价格 | 等级折扣 → 订单计算 | 下单时自动应用等级折扣 |
| 商城模块(06-xx) | 消费产生积分和经验值 | 订单完成 → 积分/经验值 | 订单支付成功后自动发放 |
| 通知模块(01-06) | 等级变更/积分变动通知 | 事件触发 → 消息推送 | 升级/降级/积分到账时通知 |
| 日志审计(01-08) | 敏感操作记录 | 操作日志 → 审计记录 | 等级调整/积分调整/禁用 |
| 短信服务(02-03) | 修改手机号发送验证码 | 验证码请求 → 短信发送 | 修改手机号/重置密码 |
| 文件存储(02-02) | 头像/等级图标存储 | 图片上传 → 文件服务 | 上传头像/配置等级图标 |
6.2 关键联动流程
流程1:消费产生积分和经验值

流程2:每日签到全流程

流程3:等级自动升级

6.3 数据一致性要求
| 一致性场景 | 要求 | 实现方式 |
|---|---|---|
| 签到发放积分 | 签到记录、积分变动、经验值变动必须同时成功或失败 | 数据库事务 @Transactional |
| 等级变更 | 等级更新和变更记录必须一致 | 数据库事务 |
| 消费发放积分 | 订单完成和积分发放最终一致 | 事件驱动 + 重试机制 |
| 积分扣减 | 积分余额不可为负 | 数据库层面校验 + 业务校验 |
七、附录
7.1 名词解释
| 名词 | 解释 | 类比 |
|---|---|---|
| 会员(Member) | 在平台注册并使用服务的C端用户 | 酒店的住客 |
| 会员等级(Level) | 根据经验值划分的用户层级,等级越高权益越多 | 酒店的会员等级(普卡/银卡/金卡/钻石卡) |
| 经验值(Experience) | 驱动等级晋升的数值,通过签到、消费、完成任务获得 | 酒店的"住宿积分",攒够就升级 |
| 积分(Point) | 可在平台使用的虚拟货币,可兑换商品或抵扣金额 | 信用卡积分,可换礼品 |
| 标签(Tag) | 给会员打上的分类标记,用于精准运营 | 给文件贴的标签纸 |
| 标签分组(Tag Group) | 标签的分类容器,用于组织和管理标签 | 文件夹,用来归类标签纸 |
| 用户分组(Group) | 将会员归入不同组别,便于批量管理 | 学校的班级 |
| 签到(Sign In) | 每日一次的打卡行为,获得积分和经验值奖励 | 上班打卡 |
| 连续签到 | 不间断地每日签到,天数越多奖励越丰厚 | 连续打卡30天的成就 |
| 签到日历 | 以日历形式展示当月每天的签到状态 | 墙上的打卡日历 |
| 收货地址 | 会员收货的物理地址信息 | 快递收件地址 |
| 默认地址 | 下单时自动填充的首选收货地址 | 通讯录里的"默认联系人" |
| 等级折扣 | 高等级会员享受的价格优惠 | VIP打折卡 |
| 脱敏 | 将敏感信息的中间部分用*号替代显示 | 手机号显示为 138****1234 |
| 多租户 | 一套系统服务多个独立客户,数据互相隔离 | 同一栋办公楼里的不同公司 |
| RBAC | 基于角色的权限控制模型 | 不同工牌进不同房间 |
| 逻辑删除 | 数据不真正删除,通过标记字段表示已删除 | 把文件放进回收站而非永久删除 |
| 业务类型(Biz Type) | 标识积分/经验值变动来源的分类编号 | 银行流水的"交易类型"列 |
7.2 接口汇总
7.2.1 后台管理端接口
| 序号 | 接口名称 | 请求方式 | 路径 | 权限标识 | 说明 |
|---|---|---|---|---|---|
| 1 | 会员分页 | GET | /admin-api/member/user/page | member:user:query | 分页查询会员列表 |
| 2 | 会员详情 | GET | /admin-api/member/user/get | member:user:query | 获取会员详细信息 |
| 3 | 更新会员 | PUT | /admin-api/member/user/update | member:user:update | 更新会员信息 |
| 4 | 更新会员等级 | PUT | /admin-api/member/user/update-level | member:user:update-level | 手动调整等级 |
| 5 | 更新会员积分 | PUT | /admin-api/member/user/update-point | member:user:update-point | 手动调整积分 |
| 6 | 创建等级 | POST | /admin-api/member/level/create | member:level:create | 创建会员等级 |
| 7 | 更新等级 | PUT | /admin-api/member/level/update | member:level:update | 更新等级配置 |
| 8 | 删除等级 | DELETE | /admin-api/member/level/delete | member:level:delete | 删除等级 |
| 9 | 等级详情 | GET | /admin-api/member/level/get | member:level:query | 获取等级详情 |
| 10 | 等级列表 | GET | /admin-api/member/level/list | member:level:query | 获取等级列表 |
| 11 | 等级精简列表 | GET | /admin-api/member/level/list-all-simple | 无需特殊权限 | 启用等级下拉列表 |
| 12 | 创建标签 | POST | /admin-api/member/tag/create | member:tag:create | 创建标签 |
| 13 | 更新标签 | PUT | /admin-api/member/tag/update | member:tag:update | 更新标签 |
| 14 | 删除标签 | DELETE | /admin-api/member/tag/delete | member:tag:delete | 删除标签 |
| 15 | 标签详情 | GET | /admin-api/member/tag/get | member:tag:query | 获取标签详情 |
| 16 | 标签分页 | GET | /admin-api/member/tag/page | member:tag:query | 分页获取标签 |
| 17 | 标签精简列表 | GET | /admin-api/member/tag/list-all-simple | 无需特殊权限 | 全部标签下拉 |
| 18 | 批量获取标签 | GET | /admin-api/member/tag/list | member:tag:query | 按ID列表批量获取 |
| 19 | 创建分组 | POST | /admin-api/member/group/create | member:group:create | 创建分组 |
| 20 | 更新分组 | PUT | /admin-api/member/group/update | member:group:update | 更新分组 |
| 21 | 删除分组 | DELETE | /admin-api/member/group/delete | member:group:delete | 删除分组 |
| 22 | 分组详情 | GET | /admin-api/member/group/get | member:group:query | 获取分组详情 |
| 23 | 分组分页 | GET | /admin-api/member/group/page | member:group:query | 分页获取分组 |
| 24 | 分组精简列表 | GET | /admin-api/member/group/list-all-simple | 无需特殊权限 | 启用分组下拉 |
| 25 | 创建签到规则 | POST | /admin-api/member/sign-in/config/create | point:sign-in-config:create | 创建签到规则 |
| 26 | 更新签到规则 | PUT | /admin-api/member/sign-in/config/update | point:sign-in-config:update | 更新签到规则 |
| 27 | 删除签到规则 | DELETE | /admin-api/member/sign-in/config/delete | point:sign-in-config:delete | 删除签到规则 |
| 28 | 签到规则详情 | GET | /admin-api/member/sign-in/config/get | point:sign-in-config:query | 获取规则详情 |
| 29 | 签到规则列表 | GET | /admin-api/member/sign-in/config/list | point:sign-in-config:query | 获取全部规则 |
| 30 | 签到记录分页 | GET | /admin-api/member/sign-in/record/page | point:sign-in-record:query | 查询签到记录 |
| 31 | 积分记录分页 | GET | /admin-api/member/point/record/page | point:record:query | 查询积分记录 |
| 32 | 经验值记录分页 | GET | /admin-api/member/experience/record/page | experience:record:query | 查询经验值记录 |
7.2.2 前台用户端接口
| 序号 | 接口名称 | 请求方式 | 路径 | 认证要求 | 说明 |
|---|---|---|---|---|---|
| 1 | 获取个人信息 | GET | /app-api/member/user/get | 需登录 | 获取当前用户信息 |
| 2 | 修改个人信息 | PUT | /app-api/member/user/update | 需登录 | 修改昵称等 |
| 3 | 修改手机号 | PUT | /app-api/member/user/update-mobile | 需登录 | 验证码方式 |
| 4 | 微信修改手机号 | PUT | /app-api/member/user/update-mobile-by-weixin | 需登录 | 小程序授权 |
| 5 | 修改密码 | PUT | /app-api/member/user/update-password | 需登录 | 需验证旧密码 |
| 6 | 重置密码 | PUT | /app-api/member/user/reset-password | 无需登录 | 忘记密码重置 |
| 7 | 创建收货地址 | POST | /app-api/member/address/create | 需登录 | 新增地址 |
| 8 | 更新收货地址 | PUT | /app-api/member/address/update | 需登录 | 修改地址 |
| 9 | 删除收货地址 | DELETE | /app-api/member/address/delete | 需登录 | 删除地址 |
| 10 | 获取收货地址 | GET | /app-api/member/address/get | 需登录 | 地址详情 |
| 11 | 获取默认地址 | GET | /app-api/member/address/get-default | 需登录 | 默认地址 |
| 12 | 获取地址列表 | GET | /app-api/member/address/list | 需登录 | 所有地址 |
| 13 | 获取等级列表 | GET | /app-api/member/level/list | 公开接口 | 所有启用等级 |
| 14 | 会员签到 | POST | /app-api/member/sign-in/create | 需登录 | 执行签到 |
| 15 | 签到日历 | GET | /app-api/member/sign-in/get-sign-in-calendar | 需登录 | 当月签到记录 |
| 16 | 签到统计 | GET | /app-api/member/sign-in/get-sign-in-statistics | 需登录 | 连续天数等 |
| 17 | 获取积分记录 | GET | /app-api/member/point/record/page | 需登录 | 积分变动明细 |
| 18 | 获取经验值记录 | GET | /app-api/member/experience/record/page | 需登录 | 经验值变动明细 |
7.3 错误码
| 错误码 | 说明 | 处理建议 |
|---|---|---|
| MEMBER_USER_NOT_EXISTS | 会员不存在 | 检查会员ID是否正确 |
| MEMBER_USER_MOBILE_EXISTS | 手机号已注册 | 提示用户直接登录或使用其他手机号 |
| MEMBER_USER_EMAIL_EXISTS | 邮箱已注册 | 提示使用其他邮箱 |
| MEMBER_LEVEL_NOT_EXISTS | 等级不存在 | 检查等级ID,可能已被删除 |
| MEMBER_LEVEL_NAME_EXISTS | 等级名称已存在 | 更换一个不重复的名称 |
| MEMBER_LEVEL_HAS_USER | 等级下有关联会员无法删除 | 先调整关联会员的等级再删除 |
| MEMBER_TAG_NAME_EXISTS | 标签名称已存在 | 同分组下标签名不可重复 |
| MEMBER_GROUP_NAME_EXISTS | 分组名称已存在 | 更换分组名称 |
| MEMBER_GROUP_HAS_USER | 分组下有关联会员无法删除 | 先移除关联会员再删除 |
| MEMBER_POINT_NOT_ENOUGH | 积分余额不足 | 扣减时余额不够,减少扣减数量 |
| MEMBER_SIGN_IN_TODAY | 今日已签到 | 明天再来 |
| MEMBER_SIGN_IN_CONFIG_EXISTS | 签到天数配置已存在 | 同一天不能重复配置 |
| MEMBER_ADDRESS_LIMIT | 收货地址数量达到上限 | 删除不用的地址后再添加 |
| MEMBER_PASSWORD_WRONG | 当前密码错误 | 输入正确的当前密码 |
| MEMBER_MOBILE_NOT_SAME | 两次输入的手机号不一致 | 重新确认手机号 |
7.4 变更记录
| 版本 | 日期 | 变更内容 |
|---|---|---|
| v1.0 | 2026-09-24 | 初稿,基础功能定义 |
| v2.0 | 2026-09-19 | 全面增强:补充用户场景和验收标准、ASCII原型图、业务规则增加设计原因、新增跨模块联动章节(消费积分/签到/升级3条关键流程)、完善名词解释(18项含类比)和错误码(15项) |