Skip to content

用户系统

涉及子系统:云端 API(核心)、管理后台(管理)、小程序(注册/个人中心)
核心业务:用户注册、身份认证、人脸数据绑定、会员状态管理


用户注册流程


用户数据模型

User {
  id              String       # 用户唯一标识
  wxOpenId        String       # 微信 openId(唯一)
  wxUnionId       String?      # 微信 unionId(多平台互通用)
  nickname        String?      # 微信昵称
  avatarUrl       String?      # 头像 URL
  phone           String?      # 手机号(用户授权后获取)
  faceEnrolled    Boolean      # 是否已完成人脸录入
  faceEnrolledAt  DateTime?    # 人脸录入时间
  status          Enum         # ACTIVE / BANNED / DELETED
  createdAt       DateTime
  lastLoginAt     DateTime
}

会员状态查询

用户的会员状态不单独存储字段,而是实时从订单系统查询

GET /api/v1/user/membership?storeId=xxx


查询该用户在指定门店的 ACTIVE 订单


返回:
{
  "eligible": true/false,
  "memberships": [
    {
      "productName": "月卡",
      "expiresAt": "2026-04-11",
      "remainingTimes": null   // 不限次
    },
    {
      "productName": "次卡10次",
      "expiresAt": "2026-06-11",
      "remainingTimes": 7
    }
  ]
}

人脸绑定管理

操作入口说明
录入人脸小程序 → 个人中心 → 人脸管理首次录入,引导流程
重新录入小程序 → 个人中心 → 人脸管理覆盖旧数据
删除人脸管理后台 → 用户详情仅管理员可操作(如用户投诉隐私)
查看状态管理后台 → 用户详情显示已录入/未录入及录入时间

录入/重录后,工控机通过 MQTT 实时同步新的特征向量到本地库。


用户封禁逻辑

  • 管理员在管理后台可将用户设为 BANNED 状态
  • 封禁用户刷脸时,云端 API 返回 eligible: false, reason: "账号已封禁"
  • 工控机拒绝开门并播报提示

管理后台用户功能

  • 用户列表:搜索(手机号/昵称)、筛选(会员状态/有无人脸)
  • 用户详情
    • 基本信息(昵称、注册时间、手机号)
    • 会员状态(当前有效套餐)
    • 人脸信息(录入状态、录入时间)
    • 订单历史
    • 进出记录
    • 操作:手动封禁/解封、删除人脸数据
  • 数据导出:用户列表 Excel 导出

隐私合规说明

  • 人脸特征向量属于生物特征数据,需在用户授权后方可采集
  • 小程序端在人脸录入前需展示《隐私政策》并获取用户同意
  • 用户可随时申请删除人脸数据(通过客服或管理后台操作)
  • 人脸图片原图建议不做永久存储(特征向量提取后删除原图)

待确认事项

  • [ ] 手机号是否为必填(建议可选,降低注册门槛)
  • [ ] 是否支持同一用户在多门店独立建立人脸记录(目前设计为全局唯一)
  • [ ] 用户注销账号的流程(数据保留多久后彻底删除)
  • [ ] 微信 unionId 是否需要对接(跨小程序/公众号场景)

健身房服务系统内部规划文档