Files
gym-manage/docs/plans/2026-02-28-gym-manage-design.md
T
2026-03-05 13:48:13 +08:00

146 KiB
Raw Blame History

健身房管理系统产品设计文档

版本: v2.0 日期: 2026-02-28 作者: 张翔 更新日期: 2026-03-04


文档变更记录

版本 日期 变更内容 作者
v1.0 2026-02-28 初始版本,包含基础系统架构设计 张翔
v2.0 2026-03-04 新增产品版本架构、订阅与配置模块、营销分析与预测模块 张翔

一、项目概述

1.1 项目背景

打造一款全场景覆盖的健身房管理系统,支持综合型健身俱乐部、精品工作室、连锁品牌等多种业态,实现会员端便捷预约签到、管理后台数据洞察的核心需求。

1.2 核心目标

  • 会员端:一站式查看个人所有信息(会员卡、权益、预约、签到、训练数据)
  • 管理后台:全维度数据整理与分析,支撑运营决策
  • 便捷体验:约课、签到流程简单高效
  • 灵活配置:支持业务流程模块化配置,满足不同规模客户需求
  • 订阅模式:基础版保证业务闭环,订阅模块提供增值服务

1.3 适用场景

场景类型 说明 推荐版本
综合型健身俱乐部 多种团课 + 私教 + 器械区,会员规模 500-2000 人 基础版 + 体验升级类订阅
精品工作室 专注某一类课程,会员规模 100-300 人 基础版
连锁品牌 多门店运营,跨店约课,统一数据管理 基础版 + 业务扩展类订阅
大型连锁 10+门店,需要精细化运营和数据分析 基础版 + 全部订阅模块

1.4 产品版本架构

本系统采用基础版 + 订阅模块的产品架构,满足不同规模和业态的健身房需求:

1.4.1 基础版

基础版保证业务闭环,适合小型工作室、个人教练等场景:

包含模块:

  • 会员管理(完整)
  • 会员卡管理(完整)
  • 权益管理(完整)
  • 团课预约(完整)
  • 扫码签到(完整)
  • 基础数据统计(完整)
  • 系统管理(基础)

技术栈:

  • 前端:uniapp + Vue3 + TypeScript + Pinia
  • 后端:Spring Boot 3 + WebFlux + JDK 21
  • 数据库:PostgreSQL + R2DBC + Flyway
  • 缓存:Caffeine(本地缓存)

功能限制:

  • 单门店运营
  • 不支持营销精算模型
  • 不支持自定义促销活动预测
  • 不支持高级数据分析

1.4.2 订阅模块体系

订阅模块分为四大类别,客户可根据需求灵活订阅:

业务扩展类
模块名称 功能描述 月费 适用场景
多门店管理 支持多门店运营、跨店约课、统一数据管理 ¥299 连锁品牌
私教管理 私教课程管理、教练排班、学员跟进 ¥199 有私教业务的健身房
器械预约 器械时段预约、器械使用统计 ¥99 器械资源紧张的场景
体验升级类
模块名称 功能描述 月费 适用场景
人脸识别 刷脸签到、无感通行、人脸考勤 ¥199 高端健身房
NFC一卡通 NFC手环/卡片签到、储物柜联动 ¥149 传统健身房
在线课程 线上课程预约、视频点播、直播课 ¥249 混合运营模式
营销增长类
模块名称 功能描述 月费 适用场景
会员营销 会员标签、精准营销、自动化营销 ¥299 需要精细化运营
促销活动 优惠券、拼团、秒杀、限时折扣 ¥199 需要促销活动
推荐奖励 邀请奖励、裂变营销、会员推荐 ¥149 需要拉新裂变
数据智能类
模块名称 功能描述 月费 适用场景
营销精算模型 基于历史数据的促销策略预测 ¥499 需要数据驱动决策
自定义促销预测 多维度自定义促销活动效果预测 ¥399 需要灵活促销策略
高级数据分析 会员行为分析、流失预警、收入预测 ¥399 需要深度数据分析

1.4.3 计费方式

我们提供灵活的计费方式,满足不同客户的预算需求。

付费模式选择

我们提供两种付费模式,客户可根据自身情况选择:

模式A:固定月费模式

适合客户:交易量小、预算稳定的客户

计费方式

  • 基础版:¥299/月
  • 订阅模块:按模块定价(¥99-499/月)
  • 订阅周期:月付/季付/半年付/年付(享受相应折扣)

优势

  • 成本可预测,便于预算管理
  • 无交易量限制
  • 适合业务稳定的客户

模式B:成功费模式

适合客户:交易量大、希望按量付费的客户

计费方式

  • 基础版:交易额的1%-1.5%
  • 订阅模块:交易额的0.3%-0.8%
  • 交易额包括:会员卡充值、会员卡消费、私教课程购买、促销活动交易等

优势

  • 完全按使用量付费,降低门槛
  • 系统收益与客户业务增长绑定
  • 适合交易量大的客户

切换机制

  • 客户可随时在两种模式间切换
  • 切换后下个计费周期生效
  • 提供计算器帮助客户对比两种模式成本
订阅周期优惠
订阅周期 折扣力度 说明
月付 标准价格 灵活选择,随时调整
季付 9折优惠 适合短期试用
半年付 85折优惠 平衡成本与灵活性
年付 8折优惠 最大优惠,长期合作
行业类型推荐套餐

我们根据不同行业类型的特点,预设推荐套餐,同时采用动态折扣(模块越多,折扣越大)。

行业类型

1. 瑜伽工作室

  • 特点:会员规模小(100-300人)、课程单一、预算有限
  • 核心需求:会员管理、团课预约、基础统计
  • 推荐模块:在线课程、会员营销

2. 综合健身房

  • 特点:会员规模中等(500-2000人)、业务多样、需要私教
  • 核心需求:会员管理、团课预约、私教管理、基础统计
  • 推荐模块:私教管理、器械预约、人脸识别、会员营销

3. 连锁品牌

  • 特点:会员规模大(2000+人)、多门店、需要精细化运营
  • 核心需求:全功能 + 多门店管理 + 数据分析
  • 推荐模块:多门店管理、全部营销模块、全部数据智能模块

动态折扣规则

订阅模块数量 折扣力度
1个模块 9.5折
2个模块 9折
3个模块 8.5折
4-5个模块 8折
6-8个模块 7.5折
9-11个模块 7折
全部12个模块 6.5折

推荐套餐

🧘 瑜伽工作室推荐套餐

入门套餐(适合小型工作室)

  • 包含:基础版 + 在线课程
  • 模块数量:1个
  • 折扣:9.5折
  • 月费:¥299 + ¥249 × 0.95 = ¥536

成长套餐(适合中型工作室)

  • 包含:基础版 + 在线课程 + 会员营销
  • 模块数量:2个
  • 折扣:9折
  • 月费:¥299 + (¥249 + ¥299) × 0.9 = ¥763

🏋️ 综合健身房推荐套餐

标准套餐(适合小型健身房)

  • 包含:基础版 + 私教管理 + 器械预约
  • 模块数量:2个
  • 折扣:9折
  • 月费:¥299 + (¥199 + ¥99) × 0.9 = ¥538

专业套餐(适合中型健身房)

  • 包含:基础版 + 私教管理 + 器械预约 + 人脸识别 + 会员营销
  • 模块数量:4个
  • 折扣:8折
  • 月费:¥299 + (¥199 + ¥99 + ¥199 + ¥299) × 0.8 = ¥875

🏢 连锁品牌推荐套餐

企业套餐(适合区域连锁)

  • 包含:基础版 + 多门店管理 + 全部营销模块(3个)
  • 模块数量:4个
  • 折扣:8折
  • 月费:¥299 + (¥299 + ¥299 + ¥199 + ¥149) × 0.8 = ¥1,116

旗舰套餐(适合全国连锁)

  • 包含:基础版 + 全部订阅模块(12个)
  • 模块数量:12个
  • 折扣:6.5折
  • 月费:¥299 + ¥3,590 × 0.65 = ¥2,633

客户选择流程

  1. 选择行业类型:瑜伽工作室 / 综合健身房 / 连锁品牌
  2. 查看推荐套餐:系统根据行业类型推荐2-3个套餐
  3. 自定义或选择:客户可以选择推荐套餐,或自定义模块组合
  4. 选择计费模式:固定月费 / 成功费模式
  5. 系统自动计算:根据模块数量和计费模式计算月费
智能动态推荐

我们提供智能动态推荐系统,根据客户业务发展自动调整推荐套餐。

初始推荐

推荐维度

  • 行业类型(瑜伽工作室 / 综合健身房 / 连锁品牌)
  • 员工数量(教练、前台、管理人员总数)
  • 会员数量(当前会员总数)
  • 门店数量(门店总数)
  • 月交易额(月度交易总额)

推荐算法

  • 收集客户规模信息
  • 计算规模得分(0-100分)
  • 匹配推荐套餐
  • 提供上下两个套餐供选择
动态调整

触发时机

  • 会员数量增长超过阈值(如增长50%
  • 月交易额增长超过阈值(如增长30%
  • 门店数量增加(如新增门店)
  • 员工数量增加(如新增员工)
  • 季度业务回顾(每季度自动评估)

调整策略

  • 升级推荐:业务增长后,推荐更高级的套餐
  • 降级推荐:业务萎缩后,推荐更经济的套餐
  • 模块调整:根据业务变化,推荐增减订阅模块
  • 个性化推荐:基于历史行为和行业趋势调整推荐
推荐通知

通知方式

  • 系统通知:在管理后台显示推荐提示
  • 邮件通知:发送推荐建议到客户邮箱
  • 短信通知:重要推荐变更发送短信提醒
  • 客服跟进:客服主动联系客户,解释推荐理由

通知内容

  • 当前套餐分析:当前套餐的使用情况
  • 业务变化分析:业务指标的变化情况
  • 推荐理由:为什么推荐新套餐
  • 对比分析:新旧套餐的对比
  • 预期收益:切换到新套餐的预期收益
推荐示例

场景1:会员数量增长

初始状态

  • 行业类型:综合健身房
  • 员工数量:8人
  • 会员数量:300人
  • 当前套餐:标准套餐(¥538/月)

业务变化

  • 会员数量增长到600人(增长100%

动态推荐

  • 推荐套餐:专业套餐(¥875/月)
  • 推荐理由:会员数量增长,需要更多营销和数据分析功能
  • 预期收益:提升会员留存率,增加营销效率

场景2:门店数量增加

初始状态

  • 行业类型:连锁品牌
  • 门店数量:2家
  • 会员数量:800人
  • 当前套餐:企业套餐(¥1,116/月)

业务变化

  • 门店数量增加到5家(增长150%

动态推荐

  • 推荐套餐:专业套餐(¥2,067/月)
  • 推荐理由:门店数量增加,需要更多数据智能功能
  • 预期收益:提升跨店运营效率,增强数据分析能力

场景3:月交易额增长

初始状态

  • 行业类型:瑜伽工作室
  • 员工数量:3人
  • 会员数量:80人
  • 月交易额:¥20,000
  • 当前套餐:入门套餐(¥536/月)

业务变化

  • 月交易额增长到¥50,000(增长150%)

动态推荐

  • 推荐套餐:成长套餐(¥763/月)
  • 推荐理由:交易额增长,需要更多营销功能
  • 预期收益:提升营销效率,增加会员活跃度

试用政策
  • 免费试用:所有订阅模块提供14天免费试用
  • 随时取消:试用期内可随时取消,无需任何费用
  • 自动续费:试用到期后自动续费,可提前取消

二、系统架构

2.1 整体架构图

┌─────────────────────────────────────────────────────────────────┐
│                         客户端层                                  │
├─────────────┬─────────────┬─────────────┬─────────────────────────┤
│  会员小程序   │  教练端App   │  管理后台PC  │   硬件设备(人脸/NFC)      │
│  (uniapp)   │  (uniapp)   │  (Vue3)     │                         │
└──────┬──────┴──────┬──────┴──────┬──────┴────────────┬────────────┘
       │             │             │                   │
       └─────────────┴──────┬──────┴───────────────────┘
                            │
                    ┌───────▼───────┐
                    │   应用网关     │
                    │  (统一入口)    │
                    └───────┬───────┘
                            │
                    ┌───────▼───────┐
                    │   单体应用     │
                    │  (Spring Boot) │
                    ├───────────────┤
                    │  • 会员模块    │
                    │  • 预约模块    │
                    │  • 签到模块    │
                    │  • 订阅模块    │
                    │  • 营销模块    │
                    │  • 数据模块    │
                    │  • 核心引擎层  │
                    └───────┬───────┘
                            │
       ┌────────────────────┼────────────────────┐
       │                    │                    │
┌──────▼──────┐     ┌───────▼───────┐    ┌──────▼──────┐
│  PostgreSQL │     │     Redis     │    │ Elasticsearch│
│  (主数据库)  │     │    (缓存)     │    │   (搜索)     │
└─────────────┘     └───────────────┘    └─────────────┘

2.2 核心设计理念

  • 单体应用架构:简化部署和运维,降低复杂度,适合中小规模业务
  • 多租户架构:支持连锁多门店,数据隔离,统一管理
  • 资源抽象:团课名额、教练时段、场地、线上课程统一为"可预约资源"
  • 响应式编程:WebFlux处理高并发预约请求,JDK 21虚拟线程优化阻塞操作
  • 事件驱动:签到、预约、消费等行为触发事件,驱动数据统计和通知推送
  • 模块化设计:虽然采用单体架构,但内部按模块划分,保持代码清晰

2.3 技术栈

层级 技术选型
前端-会员端 uniapp + Vue3 + TypeScript + Pinia
前端-管理后台 Vue3 + TypeScript + Vite + Element Plus
后端框架 Spring Boot 3 + WebFlux + JDK 21
数据库 PostgreSQL + R2DBC + Flyway
缓存 Redis(分布式缓存)
搜索 Elasticsearch(全文搜索)
消息队列 RabbitMQ(异步处理)
部署 Docker Compose(单机部署)

三、会员权益引擎

3.1 会员体系数据模型

┌─────────────────────────────────────────────────────────────────┐
│                        会员体系                                  │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   ┌─────────┐     ┌─────────────┐     ┌─────────────┐          │
│   │  会员    │────▶│  会员卡实例  │◀────│  卡模板     │          │
│   │ Member  │     │ MemberCard  │     │ CardTemplate│          │
│   └─────────┘     └──────┬──────┘     └──────┬──────┘          │
│                          │                   │                  │
│                          ▼                   ▼                  │
│                   ┌─────────────┐     ┌─────────────┐          │
│                   │ 权益包实例   │     │ 权益包模板  │          │
│                   │ BenefitPack │     │BenefitDef   │          │
│                   └──────┬──────┘     └──────┬──────┘          │
│                          │                   │                  │
│                          ▼                   ▼                  │
│                   ┌─────────────────────────────────┐          │
│                   │         权益明细                 │          │
│                   │  - 时长权益 (有效期)             │          │
│                   │  - 次数权益 (剩余次数)           │          │
│                   │  - 储值权益 (余额)               │          │
│                   │  - 等级权益 (等级+特权)          │          │
│                   └─────────────────────────────────┘          │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

3.2 四种权益类型

权益类型 数据结构 消费逻辑 典型场景
时长权益 validFrom, validTo 签到时校验有效期 月卡、年卡
次数权益 totalCount, usedCount 预约/签到时扣减 10次卡、私教课时包
储值权益 balance 消费时扣减金额 预充值账户
等级权益 level, exp, privileges 消费累计经验值 VIP会员体系

3.3 权益校验优先级

校验顺序(可配置):
1. 次数权益 → 2. 时长权益 → 3. 储值权益 → 4. 等级折扣

示例场景:
会员预约私教课 → 优先扣减私教课时包(次数) → 无则检查年卡是否有效(时长)
→ 无则使用储值余额支付 → 根据VIP等级享受折扣

3.4 会员等级升级逻辑

升级条件(满足任一):
- 累计消费金额达到阈值
- 累计签到次数达到阈值
- 储值余额保持N元以上

等级特权(可配置):
- 课程预约优先权(提前N小时开放)
- 专属课程解锁
- 消费折扣
- 免费储物柜

四、预约服务模块

4.1 统一预约资源模型

┌─────────────────────────────────────────────────────────────────┐
│                     预约资源抽象层                               │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐  │
│   │              BookableResource (可预约资源)               │  │
│   ├─────────────────────────────────────────────────────────┤  │
│   │  id, type, name, capacity, status                       │  │
│   │  availableSlots[]  // 可预约时段                         │  │
│   │  pricingRules[]    // 定价规则                          │  │
│   │  constraints[]     // 预约约束                          │  │
│   └─────────────────────────────────────────────────────────┘  │
│                              △                                  │
│         ┌──────────┬──────────┼──────────┬──────────┐         │
│         │          │          │          │          │         │
│   ┌─────▼─────┐┌───▼───┐┌─────▼─────┐┌───▼───┐┌────▼────┐   │
│   │  团课课程  ││ 私教课 ││   场地     ││线上课程││ 教练时段 │   │
│   │ GroupClass││Private││  Venue     ││Online ││CoachSlot│   │
│   └───────────┘└───────┘└───────────┘└───────┘└─────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

4.2 四种预约类型对比

类型 库存单位 预约窗口 取消规则 确认流程
团课 课程名额(如20人) 开课前N小时截止 开课前2小时免费取消 系统自动确认
私教 教练时段(1对1 需提前预约 需提前24小时取消 教练确认/系统自动
场地 场地时段(如1小时) 可预约未来7天 开始前1小时免费取消 系统自动确认
线上 观看权限(无限) 随时可预约 无需取消 付款即开通

4.3 预约状态流转

┌─────────┐    预约请求    ┌─────────┐   确认/自动   ┌─────────┐
│  初始   │──────────────▶│  待确认  │─────────────▶│  已确认  │
│ PENDING │               │PENDING  │              │CONFIRMED│
└─────────┘               └────┬────┘              └────┬────┘
                               │                        │
                          拒绝│                   签到/开始
                               ▼                        ▼
                          ┌─────────┐              ┌─────────┐
                          │  已取消  │              │  已完成  │
                          │CANCELLED│              │COMPLETED│
                          └─────────┘              └─────────┘
                               ▲                        │
                               │        未签到           │
                               └────────────────────────┘
                               │                        │
                               │        已签到           │
                               │                        ▼
                          ┌─────────┐              ┌─────────┐
                          │  缺席   │              │  已签到  │
                          │NO_SHOW │              │CHECKED_IN│
                          └─────────┘              └─────────┘

4.4 预约冲突检测

冲突检测维度:
1. 时间冲突: 会员同一时段已有其他预约
2. 名额冲突: 团课已满员
3. 权益冲突: 会员无对应权益或次数不足
4. 资源冲突: 场地/教练时段已被占用

并发处理:
- 使用PostgreSQL行级锁 + 乐观锁
- WebFlux响应式处理高并发抢课
- Caffeine缓存热点课程库存

4.5 预约提醒机制

提醒节点:
- 预约成功 → 即时推送
- 课程开始前2小时 → 提醒推送
- 课程开始前30分钟 → 最后提醒
- 课程结束后 → 邀请评价

推送渠道:
- 微信模板消息(小程序)
- 站内消息中心
- 短信(可选,付费功能)

五、签到服务模块

5.1 统一签到网关架构

┌─────────────────────────────────────────────────────────────────┐
│                        签到网关                                  │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐          │
│   │ 扫码签到 │  │ 刷脸签到 │  │ NFC签到  │  │教练代签 │          │
│   │  QR     │  │ Face    │  │ NFC     │  │ Manual  │          │
│   └────┬────┘  └────┬────┘  └────┬────┘  └────┬────┘          │
│        │            │            │            │                │
│        └────────────┴─────┬──────┴────────────┘                │
│                           ▼                                     │
│                  ┌─────────────────┐                           │
│                  │   签到请求解析   │                           │
│                  │  - 会员身份识别  │                           │
│                  │  - 签到类型判断  │                           │
│                  └────────┬────────┘                           │
│                           ▼                                     │
│                  ┌─────────────────┐                           │
│                  │   签到规则引擎   │                           │
│                  │  - 权益校验      │                           │
│                  │  - 时段校验      │                           │
│                  │  - 防重复签到    │                           │
│                  └────────┬────────┘                           │
│                           ▼                                     │
│                  ┌─────────────────┐                           │
│                  │   签到结果处理   │                           │
│                  │  - 扣减权益      │                           │
│                  │  - 记录日志      │                           │
│                  │  - 触发事件      │                           │
│                  └─────────────────┘                           │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

5.2 四种签到方式

签到方式 硬件需求 验证流程 适用场景
扫码签到 门店展示二维码 会员扫码 → 验证门店/时段 → 签到成功 团课入场、日常健身
刷脸签到 人脸识别终端 人脸采集 → 1:N比对 → 签到成功 高端健身房、无感通行
NFC签到 读卡器/手环 刷卡/手环 → 读取会员ID → 签到成功 传统健身房、存物柜联动
教练代签 教练端App 教练选择学员 → 确认签到 → 记录教练ID 私教课、小班课

5.3 签到业务场景

场景一:团课签到
┌──────────────────────────────────────────────────────┐
│  会员预约团课 → 课程开始前30分钟开放签到入口          │
│       ↓                                              │
│  会员扫码/刷脸 → 校验预约记录 → 签到成功             │
│       ↓                                              │
│  更新预约状态(CHECKED_IN) → 记录签到时间             │
└──────────────────────────────────────────────────────┘

场景二:日常健身签到(无预约)
┌──────────────────────────────────────────────────────┐
│  会员直接到店 → 扫码/刷脸 → 校验会员卡有效性         │
│       ↓                                              │
│  有效 → 签到成功 → 扣减次数/记录入场时间             │
│  无效 → 提示续费/购卡                               │
└──────────────────────────────────────────────────────┘

场景三:私教课签到
┌──────────────────────────────────────────────────────┐
│  教练端查看今日私教预约列表                          │
│       ↓                                              │
│  学员到场 → 教练点击"签到" → 扣减私教课时            │
│       ↓                                              │
│  同步更新会员端状态 → 记录教练+学员双向确认          │
└──────────────────────────────────────────────────────┘

5.4 防作弊机制

1. 地理位置校验
   - 扫码签到时验证GPS是否在门店范围内
   - 允许误差范围可配置(如500米)

2. 时间窗口限制
   - 团课签到:开课前30分钟 ~ 开课后15分钟
   - 日常签到:门店营业时间内
   - 单日签到次数上限(防止恶意刷次数)

3. 设备绑定
   - 刷脸设备需在后台注册绑定门店
   - NFC设备MAC地址白名单

4. 异常行为检测
   - 短时间内多次签到尝试 → 触发风控
   - 同一设备多账号签到 → 标记异常

5.5 离线签到处理

网络故障场景:
1. 签到设备本地缓存会员基础信息(Caffeine本地缓存)
2. 签到记录存入本地队列
3. 网络恢复后自动同步到服务器
4. 后台标记"离线签到"供人工核对

六、计划中心模块

6.1 计划体系架构

┌─────────────────────────────────────────────────────────────────┐
│                        计划中心                                  │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐            │
│  │ 训练计划     │  │ 课程排期     │  │ 会员目标     │            │
│  │TrainingPlan │  │ClassSchedule│  │MemberGoal   │            │
│  └──────┬──────┘  └──────┬──────┘  └──────┬──────┘            │
│         │                │                │                    │
│         │    ┌───────────┴───────────┐    │                    │
│         │    │                       │    │                    │
│         ▼    ▼                       ▼    ▼                    │
│  ┌─────────────────────────────────────────────────┐          │
│  │              教练工作计划 (CoachSchedule)        │          │
│  │  - 排班管理                                      │          │
│  │  - 可预约时段生成                                │          │
│  │  - 工作量统计                                    │          │
│  └─────────────────────────────────────────────────┘          │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

6.2 四种计划类型

6.2.1 训练计划(教练→会员)

┌─────────────────────────────────────────────────────┐
│ 训练计划结构                                        │
├─────────────────────────────────────────────────────┤
│ TrainingPlan                                        │
│  ├─ 基本信息: 名称、目标、周期、教练ID              │
│  ├─ 适用会员: 单人/多人/公开模板                    │
│  ├─ 训练阶段[]:                                     │
│  │   ├─ 阶段名称: "适应期"、"增肌期"、"塑形期"      │
│  │   ├─ 持续周数: 2-4周                            │
│  │   └─ 每周训练[]:                                │
│  │       ├─ 训练日: 周一/三/五                     │
│  │       ├─ 训练内容[]: 动作、组数、次数、重量     │
│  │       └─ 预计时长: 60分钟                       │
│  └─ 进度追踪: 完成率、训练日志、效果评估           │
└─────────────────────────────────────────────────────┘

会员端展示:
- 今日训练任务提醒
- 训练动作视频指导
- 训练记录打卡
- 阶段完成进度可视化

6.2.2 课程排期(管理员→系统)

┌─────────────────────────────────────────────────────┐
│ 课程排期结构                                        │
├─────────────────────────────────────────────────────┤
│ ClassSchedule                                       │
│  ├─ 课程信息: 课程名、类型、教练、门店              │
│  ├─ 排期规则:                                       │
│  │   ├─ 单次排期: 指定日期时间                      │
│  │   └─ 周期排期: 每周一/三 19:00,持续N周         │
│  ├─ 容量设置: 最大人数、预约开始时间、截止时间      │
│  ├─ 价格规则: 会员价、非会员价、VIP折扣            │
│  └─ 特殊设置: 取消政策、签到窗口、等待队列         │
└─────────────────────────────────────────────────────┘

智能排课功能:
- 教练时间冲突检测
- 场地占用检测
- 历史上座率参考
- 批量复制排期

6.2.3 会员目标(会员自主)

┌─────────────────────────────────────────────────────┐
│ 会员目标结构                                        │
├─────────────────────────────────────────────────────┤
│ MemberGoal                                          │
│  ├─ 目标类型: 减重/增肌/塑形/体能提升/康复         │
│  ├─ 目标指标:                                       │
│  │   ├─ 目标体重: 70kg                             │
│  │   ├─ 目标体脂率: 15%                            │
│  │   └─ 目标日期: 2024-06-30                       │
│  ├─ 系统推荐:                                       │
│  │   ├─ 推荐课程: 基于目标的课程匹配               │
│  │   ├─ 推荐计划: 关联训练计划模板                 │
│  │   └─ 每周建议: 训练频率、饮食建议               │
│  └─ 进度记录:                                       │
│      ├─ 体重曲线图                                  │
│      ├─ 体测数据记录                                │
│      └─ 目标达成预测                                │
└─────────────────────────────────────────────────────┘

6.2.4 教练工作计划

┌─────────────────────────────────────────────────────┐
│ 教练排班结构                                        │
├─────────────────────────────────────────────────────┤
│ CoachSchedule                                       │
│  ├─ 排班规则:                                       │
│  │   ├─ 固定班次: 周一至周五 10:00-20:00           │
│  │   └─ 弹性时段: 可预约私教的时间窗口              │
│  ├─ 时段状态:                                       │
│  │   ├─ 可预约: 会员可预约私教                     │
│  │   ├─ 已预约: 显示预约会员信息                   │
│  │   ├─ 团课时间: 不可预约私教                     │
│  │   └─ 休息时间: 不可预约                         │
│  └─ 统计看板:                                       │
│      ├─ 本月课时数                                  │
│      ├─ 私教收入                                    │
│      └─ 会员评分                                    │
└─────────────────────────────────────────────────────┘

联动机制:
- 排班变更 → 自动更新可预约时段
- 请假申请 → 已有预约自动通知改约
- 课时统计 → 自动生成绩效报表

6.3 计划间联动关系

┌──────────────────────────────────────────────────────────────┐
│                                                              │
│   课程排期 ──────▶ 生成团课预约资源                          │
│       │                                                      │
│       └──────────▶ 教练工作计划(团课时段自动占用)          │
│                                                              │
│   教练工作计划 ──▶ 生成私教可预约时段                        │
│                                                              │
│   训练计划 ──────▶ 关联推荐课程 ──▶ 课程排期                 │
│       │                                                      │
│       └──────────▶ 会员目标(训练计划作为达成路径)          │
│                                                              │
│   会员目标 ──────▶ 系统推荐 ──▶ 训练计划模板                 │
│                               └─▶ 推荐课程预约               │
│                                                              │
└──────────────────────────────────────────────────────────────┘

七、会员端功能设计

7.1 信息架构

┌─────────────────────────────────────────────────────────────────┐
│                      会员小程序/App                              │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  ┌─────────────────────────────────────────────────────────┐   │
│  │                      首页                                │   │
│  │  - 今日待办(预约课程、训练任务)                        │   │
│  │  - 快捷入口(预约、签到、我的卡券)                      │   │
│  │  - 推荐课程/活动                                         │   │
│  └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│  ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐                  │
│  │  预约   │ │  我的   │ │  训练   │ │  个人   │                  │
│  │  课程   │ │  卡券   │ │  计划   │ │  中心   │                  │
│  └────────┘ └────────┘ └────────┘ └────────┘                  │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

7.2 四大核心模块

7.2.1 预约课程模块

┌─────────────────────────────────────────────────────┐
│ 预约课程                                            │
├─────────────────────────────────────────────────────┤
│                                                     │
│  筛选条件:                                          │
│  ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐                  │
│  │门店 │ │类型 │ │教练 │ │时间 │                  │
│  └─────┘ └─────┘ └─────┘ └─────┘                  │
│                                                     │
│  课程列表:                                          │
│  ┌─────────────────────────────────────────────┐   │
│  │ 🧘 瑜伽基础课          周一 19:00-20:00     │   │
│  │ 教练: 张教练  |  剩余: 5/20人              │   │
│  │ [预约] [加入候补]                          │   │
│  └─────────────────────────────────────────────┘   │
│  ┌─────────────────────────────────────────────┐   │
│  │ 💪 私教-增肌训练       可选时段             │   │
│  │ 教练: 李教练  |  ¥200/课时                 │   │
│  │ [查看时段] [立即预约]                       │   │
│  └─────────────────────────────────────────────┘   │
│                                                     │
│  我的预约:                                          │
│  - 待参加课程                                       │
│  - 历史记录                                         │
│  - 取消记录                                         │
│                                                     │
└─────────────────────────────────────────────────────┘

7.2.2 我的卡券模块

┌─────────────────────────────────────────────────────┐
│ 我的卡券                                            │
├─────────────────────────────────────────────────────┤
│                                                     │
│  会员卡:                                            │
│  ┌─────────────────────────────────────────────┐   │
│  │ 💳 年卡会员                          VIP2   │   │
│  │ 有效期: 2024.01.01 - 2024.12.31            │   │
│  │ 状态: ✅ 正常使用                           │   │
│  └─────────────────────────────────────────────┘   │
│                                                     │
│  权益明细:                                          │
│  ┌─────────────────────────────────────────────┐   │
│  │ 时长权益: 剩余 286 天                        │   │
│  │ 私教课时: 剩余 8/10 次                       │   │
│  │ 储值余额: ¥1,280.00                         │   │
│  │ 会员等级: VIP2 (距VIP3还需消费¥2000)        │   │
│  └─────────────────────────────────────────────┘   │
│                                                     │
│  消费记录:                                          │
│  - 2024.03.15 私教课扣费 -¥200                     │
│  - 2024.03.10 储值充值 +¥1000                      │
│  - 2024.03.01 月卡续费 -¥299                       │
│                                                     │
│  快捷操作:                                          │
│  [续费] [充值] [购课] [转赠]                        │
│                                                     │
└─────────────────────────────────────────────────────┘

7.2.3 训练计划模块

┌─────────────────────────────────────────────────────┐
│ 训练计划                                            │
├─────────────────────────────────────────────────────┤
│                                                     │
│  我的目标:                                          │
│  ┌─────────────────────────────────────────────┐   │
│  │ 🎯 目标: 减重5kg                            │   │
│  │ 当前进度: 72kg → 目标 67kg                  │   │
│  │ [████████░░░░░░░░] 60%                     │   │
│  │ 预计达成: 2024.05.30                        │   │
│  └─────────────────────────────────────────────┘   │
│                                                     │
│  今日训练:                                          │
│  ┌─────────────────────────────────────────────┐   │
│  │ 📋 增肌计划 - 第3周 第1天                   │   │
│  │ 胸部训练日                                  │   │
│  │                                             │   │
│  │ □ 平板卧推 4组×12次                        │   │
│  │ □ 上斜哑铃飞鸟 3组×15次                    │   │
│  │ □ 绳索夹胸 3组×12次                        │   │
│  │                                             │   │
│  │ [开始训练] [查看动作演示]                   │   │
│  └─────────────────────────────────────────────┘   │
│                                                     │
│  训练记录:                                          │
│  - 本周训练: 3/4 次                                 │
│  - 本月打卡: 12 天                                  │
│  - 连续训练: 5 天 🔥                                │
│                                                     │
└─────────────────────────────────────────────────────┘

7.2.4 个人中心模块

┌─────────────────────────────────────────────────────┐
│ 个人中心                                            │
├─────────────────────────────────────────────────────┤
│                                                     │
│  ┌─────────────────────────────────────────────┐   │
│  │  👤 张三                      VIP2 会员     │   │
│  │  会员号: GYM2024010001                      │   │
│  │  注册门店: XX健身·中关村店                  │   │
│  └─────────────────────────────────────────────┘   │
│                                                     │
│  我的数据:                                          │
│  ┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐         │
│  │ 签到  │ │ 预约  │ │ 消费  │ │ 评价  │         │
│  │ 56次  │ │ 23次  │ │¥3.2k │ │ 12条  │         │
│  └───────┘ └───────┘ └───────┘ └───────┘         │
│                                                     │
│  功能列表:                                          │
│  ├── 📊 体测记录                                    │
│  ├── 📋 签到记录                                    │
│  ├── 💰 消费明细                                    │
│  ├── ⭐ 我的评价                                    │
│  ├── 🎁 邀请好友                                    │
│  ├── 📞 联系客服                                    │
│  ├── ⚙️ 账号设置                                    │
│  └── ❓ 帮助中心                                    │
│                                                     │
└─────────────────────────────────────────────────────┘

7.3 会员端信息汇总

信息类别 具体内容 入口位置
会员身份 会员号、等级、注册门店、有效期 个人中心
权益状态 时长/次数/储值/等级权益明细 我的卡券
预约信息 待参加/历史/取消的预约记录 预约课程
签到记录 签到时间、签到方式、关联课程 个人中心
训练数据 训练计划进度、打卡记录、体测数据 训练计划
消费明细 充值、消费、退款流水 我的卡券/个人中心
评价反馈 已评价课程、教练评分记录 个人中心

八、管理后台功能设计

8.1 角色与权限体系

┌─────────────────────────────────────────────────────────────────┐
│                      管理后台角色体系                            │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  ┌─────────────┐                                                │
│  │  超级管理员  │  全平台权限,多门店管理,系统配置             │
│  └──────┬──────┘                                                │
│         │                                                       │
│  ┌──────┴──────────────────────────────────┐                   │
│  │                                          │                   │
│  ▼                                          ▼                   │
│  ┌─────────────┐                    ┌─────────────┐            │
│  │  门店店长    │                    │  运营管理员  │            │
│  │ 单店全权限   │                    │ 营销活动配置 │            │
│  └──────┬──────┘                    └─────────────┘            │
│         │                                                       │
│  ┌──────┼──────────────────────────┐                           │
│  │      │                          │                           │
│  ▼      ▼                          ▼                           │
│  ┌────────┐ ┌────────┐      ┌─────────────┐                   │
│  │ 前台   │ │ 教练   │      │  财务专员    │                   │
│  │ 接待签到│ │ 排课签到│      │  账单报表    │                   │
│  └────────┘ └────────┘      └─────────────┘                   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

8.2 功能模块架构

┌─────────────────────────────────────────────────────────────────┐
│                        管理后台                                  │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐  │
│  │ 数据看板 │ │ 会员管理 │ │ 课程管理 │ │ 教练管理 │ │ 财务管理 │  │
│  └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘  │
│                                                                 │
│  ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐  │
│  │ 门店管理 │ │ 签到管理 │ │ 营销中心 │ │ 系统设置 │ │ 硬件管理 │  │
│  └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘  │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

8.3 核心模块详解

8.3.1 数据看板

┌─────────────────────────────────────────────────────────────────┐
│ 数据看板                                    门店: 全部 ▼        │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  今日概览:                                                      │
│  ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐      │
│  │  今日签到  │ │  今日预约  │ │  今日收入  │ │  新增会员  │      │
│  │    128    │ │    86     │ │  ¥12,580  │ │    15     │      │
│  │  ↑ 12%   │ │  ↑ 8%    │ │  ↑ 23%   │ │  ↓ 5%    │      │
│  └───────────┘ └───────────┘ └───────────┘ └───────────┘      │
│                                                                 │
│  ┌─────────────────────────────┐ ┌─────────────────────────┐  │
│  │     签到趋势(近7天)        │ │    课程上座率排行       │  │
│  │  📊 折线图                   │ │  1. 瑜伽课    95%       │  │
│  │                             │ │  2. 动感单车  88%       │  │
│  │                             │ │  3. 搏击课    82%       │  │
│  └─────────────────────────────┘ └─────────────────────────┘  │
│                                                                 │
│  ┌─────────────────────────────┐ ┌─────────────────────────┐  │
│  │     会员活跃度分布           │ │    即将到期会员预警     │  │
│  │  🥧 饼图                     │ │  本月到期: 45人         │  │
│  │  高活跃 35%                  │ │  已续费: 12人           │  │
│  │  中活跃 40%                  │ │  待跟进: 33人           │  │
│  │  低活跃 25%                  │ │  [一键发送续费提醒]     │  │
│  └─────────────────────────────┘ └─────────────────────────┘  │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

8.3.2 会员管理

┌─────────────────────────────────────────────────────────────────┐
│ 会员管理                                                        │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  筛选: [门店▼] [会员等级▼] [卡类型▼] [状态▼] [注册时间]        │
│  搜索: [会员号/姓名/手机号________________] [查询] [导出]       │
│                                                                 │
│  ┌─────────────────────────────────────────────────────────┐   │
│  │ 会员号    │ 姓名 │ 等级 │ 卡类型 │ 状态 │ 签到 │ 消费   │   │
│  ├───────────┼─────┼─────┼───────┼─────┼─────┼───────┤   │
│  │ GYM001234 │ 张三 │ VIP2│ 年卡  │ 正常 │ 56次│ ¥3.2k │   │
│  │ GYM001235 │ 李四 │ VIP1│ 次卡  │ 正常 │ 23次│ ¥1.5k │   │
│  │ GYM001236 │ 王五 │ 普通│ 月卡  │ 过期 │ 12次│ ¥299  │   │
│  └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│  批量操作: [发送通知] [批量续费] [导出数据] [标签管理]          │
│                                                                 │
│  会员详情页:                                                    │
│  ├── 基本信息: 个人资料、注册信息、绑定设备                     │
│  ├── 会员卡券: 持有卡列表、权益明细、消费记录                   │
│  ├── 预约记录: 历史预约、取消记录、爽约记录                     │
│  ├── 签到记录: 签到明细、签到趋势图                             │
│  ├── 训练数据: 体测记录、训练计划、目标进度                     │
│  └── 跟进记录: 销售跟进、客服记录、备注                         │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

8.3.3 其他模块概览

模块 核心功能
课程管理 课程类型管理、课程排期(日历视图)、场地管理、私教课程配置
教练管理 教练列表、排班管理、课时统计、会员评价、私教会员绑定
财务管理 营收概览、收入明细、财务报表、账单管理、退款管理
门店管理 门店信息、营业时间、门店配置、跨店规则
签到管理 签到记录查询、异常签到处理、签到设备绑定
营销中心 优惠券、活动配置、会员通知、短信推送
系统设置 角色权限、字典配置、操作日志、参数设置
硬件管理 人脸设备、NFC设备、扫码设备绑定与状态监控

九、数据库设计

9.1 核心实体关系

┌─────────────────────────────────────────────────────────────────────────┐
│                           核心数据模型                                   │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  ┌─────────┐     1:N      ┌───────────┐     N:M      ┌─────────┐      │
│  │ Tenant  │─────────────▶│   Store   │◀─────────────│  Coach  │      │
│  │ (租户)  │              │  (门店)    │              │ (教练)  │      │
│  └─────────┘              └─────┬─────┘              └────┬────┘      │
│                                 │                         │            │
│                           1:N   │                    1:N  │            │
│                                 ▼                         ▼            │
│  ┌─────────┐     N:M      ┌───────────┐     1:N      ┌─────────┐      │
│  │ Member  │◀────────────▶│   Card    │◀─────────────│CardTmpl │      │
│  │ (会员)  │              │ (会员卡)   │              │(卡模板) │      │
│  └────┬────┘              └─────┬─────┘              └─────────┘      │
│       │                         │                                      │
│       │ 1:N                     │ 1:N                                  │
│       ▼                         ▼                                      │
│  ┌──────────┐            ┌───────────┐                                │
│  │Booking   │            │ Benefit   │                                │
│  │(预约记录) │            │ (权益明细) │                                │
│  └────┬─────┘            └───────────┘                                │
│       │                                                                │
│       │ 1:1                                                            │
│       ▼                                                                │
│  ┌──────────┐            ┌───────────┐     N:M      ┌─────────┐      │
│  │CheckIn   │◀───────────│  Course   │◀─────────────│  Venue  │      │
│  │(签到记录) │     1:N    │  (课程)    │              │ (场地)  │      │
│  └──────────┘            └───────────┘              └─────────┘      │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘

9.2 基础字段规范

所有业务表统一包含以下基础字段:

created_at TIMESTAMP DEFAULT NOW(),      -- 创建时间
updated_at TIMESTAMP DEFAULT NOW(),      -- 更新时间
created_by BIGINT,                       -- 创建人ID
updated_by BIGINT,                       -- 更新人ID
deleted_at TIMESTAMP DEFAULT NULL        -- 软删除时间(NULL表示未删除)

9.3 核心表结构

9.3.1 会员相关表

-- 租户表
CREATE TABLE tenant (
    id BIGSERIAL PRIMARY KEY,
    name VARCHAR(128) NOT NULL,
    code VARCHAR(32) NOT NULL UNIQUE,
    status SMALLINT DEFAULT 1,
    config JSONB,
    created_at TIMESTAMP DEFAULT NOW(),
    updated_at TIMESTAMP DEFAULT NOW(),
    deleted_at TIMESTAMP DEFAULT NULL
);

-- 门店表
CREATE TABLE store (
    id BIGSERIAL PRIMARY KEY,
    tenant_id BIGINT NOT NULL REFERENCES tenant(id),
    name VARCHAR(128) NOT NULL,
    code VARCHAR(32) NOT NULL,
    address VARCHAR(256),
    longitude DECIMAL(10,6),
    latitude DECIMAL(10,6),
    phone VARCHAR(20),
    business_hours JSONB,
    status SMALLINT DEFAULT 1,
    created_at TIMESTAMP DEFAULT NOW(),
    updated_at TIMESTAMP DEFAULT NOW(),
    created_by BIGINT,
    updated_by BIGINT,
    deleted_at TIMESTAMP DEFAULT NULL
);

-- 会员表
CREATE TABLE member (
    id BIGSERIAL PRIMARY KEY,
    tenant_id BIGINT NOT NULL REFERENCES tenant(id),
    store_id BIGINT NOT NULL REFERENCES store(id),
    member_no VARCHAR(32) NOT NULL,
    name VARCHAR(64),
    phone VARCHAR(20) NOT NULL,
    avatar VARCHAR(512),
    gender SMALLINT,
    birthday DATE,
    level SMALLINT DEFAULT 0,
    exp INT DEFAULT 0,
    status SMALLINT DEFAULT 1,
    created_at TIMESTAMP DEFAULT NOW(),
    updated_at TIMESTAMP DEFAULT NOW(),
    created_by BIGINT,
    updated_by BIGINT,
    deleted_at TIMESTAMP DEFAULT NULL
);

-- 会员卡实例表
CREATE TABLE member_card (
    id BIGINT PRIMARY KEY,
    tenant_id BIGINT NOT NULL,
    member_id BIGINT NOT NULL,
    template_id BIGINT NOT NULL,
    card_no VARCHAR(32) NOT NULL,
    status SMALLINT DEFAULT 1,
    valid_from DATE,
    valid_to DATE,
    created_at TIMESTAMP DEFAULT NOW(),
    updated_at TIMESTAMP DEFAULT NOW(),
    created_by BIGINT,
    updated_by BIGINT,
    deleted_at TIMESTAMP DEFAULT NULL
);

-- 权益明细表
CREATE TABLE member_benefit (
    id BIGINT PRIMARY KEY,
    tenant_id BIGINT NOT NULL,
    member_id BIGINT NOT NULL,
    card_id BIGINT NOT NULL,
    benefit_type SMALLINT NOT NULL,      -- 1时长 2次数 3储值 4等级
    benefit_name VARCHAR(64),
    total_value DECIMAL(12,2),
    used_value DECIMAL(12,2) DEFAULT 0,
    remaining_value DECIMAL(12,2),
    valid_from DATE,
    valid_to DATE,
    status SMALLINT DEFAULT 1,
    created_at TIMESTAMP DEFAULT NOW(),
    updated_at TIMESTAMP DEFAULT NOW(),
    created_by BIGINT,
    updated_by BIGINT,
    deleted_at TIMESTAMP DEFAULT NULL
);

9.3.2 预约相关表

-- 可预约资源表
CREATE TABLE bookable_resource (
    id BIGINT PRIMARY KEY,
    tenant_id BIGINT NOT NULL,
    store_id BIGINT NOT NULL,
    resource_type SMALLINT NOT NULL,     -- 1团课 2私教 3场地 4线上
    resource_name VARCHAR(128) NOT NULL,
    capacity INT DEFAULT 1,
    status SMALLINT DEFAULT 1,
    created_at TIMESTAMP DEFAULT NOW(),
    updated_at TIMESTAMP DEFAULT NOW(),
    created_by BIGINT,
    updated_by BIGINT,
    deleted_at TIMESTAMP DEFAULT NULL
);

-- 预约时段表
CREATE TABLE booking_slot (
    id BIGINT PRIMARY KEY,
    tenant_id BIGINT NOT NULL,
    resource_id BIGINT NOT NULL,
    coach_id BIGINT,
    venue_id BIGINT,
    start_time TIMESTAMP NOT NULL,
    end_time TIMESTAMP NOT NULL,
    capacity INT NOT NULL,
    booked_count INT DEFAULT 0,
    waitlist_count INT DEFAULT 0,
    status SMALLINT DEFAULT 1,
    price DECIMAL(10,2),
    created_at TIMESTAMP DEFAULT NOW(),
    updated_at TIMESTAMP DEFAULT NOW(),
    created_by BIGINT,
    updated_by BIGINT,
    deleted_at TIMESTAMP DEFAULT NULL
);

-- 预约记录表
CREATE TABLE booking_record (
    id BIGINT PRIMARY KEY,
    tenant_id BIGINT NOT NULL,
    member_id BIGINT NOT NULL,
    slot_id BIGINT NOT NULL,
    booking_no VARCHAR(32) NOT NULL,
    status SMALLINT DEFAULT 1,
    check_in_time TIMESTAMP,
    cancel_time TIMESTAMP,
    cancel_reason VARCHAR(256),
    created_at TIMESTAMP DEFAULT NOW(),
    updated_at TIMESTAMP DEFAULT NOW(),
    created_by BIGINT,
    updated_by BIGINT,
    deleted_at TIMESTAMP DEFAULT NULL
);

9.3.3 签到相关表

-- 签到记录表
CREATE TABLE check_in_record (
    id BIGINT PRIMARY KEY,
    tenant_id BIGINT NOT NULL,
    store_id BIGINT NOT NULL,
    member_id BIGINT NOT NULL,
    booking_id BIGINT,
    check_in_type SMALLINT NOT NULL,     -- 1扫码 2刷脸 3NFC 4教练代签
    check_in_time TIMESTAMP NOT NULL,
    device_id VARCHAR(64),
    operator_id BIGINT,
    latitude DECIMAL(10,6),
    longitude DECIMAL(10,6),
    benefit_deducted JSONB,
    created_at TIMESTAMP DEFAULT NOW(),
    updated_at TIMESTAMP DEFAULT NOW(),
    created_by BIGINT,
    updated_by BIGINT,
    deleted_at TIMESTAMP DEFAULT NULL
);

9.4 索引设计

-- 部分索引:仅索引未删除数据
CREATE INDEX idx_member_phone ON member(tenant_id, phone)
WHERE deleted_at IS NULL;

CREATE INDEX idx_member_card_member ON member_card(member_id, status)
WHERE deleted_at IS NULL;

CREATE INDEX idx_booking_slot_time ON booking_slot(tenant_id, start_time, status)
WHERE deleted_at IS NULL;

CREATE INDEX idx_booking_record_member ON booking_record(member_id, status, created_at)
WHERE deleted_at IS NULL;

CREATE INDEX idx_check_in_member_time ON check_in_record(member_id, check_in_time)
WHERE deleted_at IS NULL;

-- 唯一约束:部分索引确保删除后可重用
CREATE UNIQUE INDEX idx_member_no_unique ON member(tenant_id, member_no)
WHERE deleted_at IS NULL;

CREATE UNIQUE INDEX idx_member_phone_unique ON member(tenant_id, phone)
WHERE deleted_at IS NULL;

9.5 缓存策略

┌─────────────────────────────────────────────────────────────┐
│                    缓存分层设计                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  L1 - 本地缓存 (Caffeine)                                   │
│  ├── 会员基础信息: 5分钟过期                                │
│  ├── 课程库存: 30秒过期(热点课程)                         │
│  └── 系统配置: 30分钟过期                                   │
│                                                             │
│  L2 - 分布式缓存(Redis,可选扩展)                          │
│  ├── 分布式锁: 预约库存扣减                                 │
│  ├── Session: 用户登录态                                    │
│  └── 验证码: 短信验证码                                     │
│                                                             │
│  缓存更新策略:                                               │
│  ├── 写穿透: 数据变更时同步更新缓存                         │
│  ├── 延迟双删: 高一致性场景                                 │
│  └── 订阅Binlog: 异步同步(后期扩展)                       │
│                                                             │
└─────────────────────────────────────────────────────────────┘

十、后端技术实现

10.1 项目依赖

<!-- pom.xml 核心依赖 -->
<dependencies>
    <!-- Spring Boot 3 WebFlux -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-webflux</artifactId>
    </dependency>

    <!-- R2DBC PostgreSQL -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-r2dbc</artifactId>
    </dependency>
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>r2dbc-postgresql</artifactId>
    </dependency>

    <!-- Flyway (需要JDBC连接用于迁移) -->
    <dependency>
        <groupId>org.flywaydb</groupId>
        <artifactId>flyway-core</artifactId>
    </dependency>
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <scope>runtime</scope>
    </dependency>

    <!-- Caffeine 缓存 -->
    <dependency>
        <groupId>com.github.ben-manes.caffeine</groupId>
        <artifactId>caffeine</artifactId>
    </dependency>
</dependencies>

10.2 Flyway 迁移脚本组织

src/main/resources/db/migration/
├── V1.0.0__init_schema.sql              # 初始化表结构
├── V1.0.1__init_member_tables.sql       # 会员相关表
├── V1.0.2__init_booking_tables.sql      # 预约相关表
├── V1.0.3__init_checkin_tables.sql      # 签到相关表
├── V1.0.4__init_coach_tables.sql        # 教练相关表
├── V1.0.5__init_course_tables.sql       # 课程相关表
├── V1.0.6__init_finance_tables.sql      # 财务相关表
├── V1.0.7__init_indexes.sql             # 索引创建
└── ...

10.3 R2DBC Repository 示例

// MemberRepository.java
public interface MemberRepository extends ReactiveCrudRepository<Member, Long> {

    @Query("SELECT * FROM member WHERE tenant_id = :tenantId AND phone = :phone AND deleted_at IS NULL")
    Mono<Member> findByPhone(Long tenantId, String phone);

    @Query("SELECT * FROM member WHERE tenant_id = :tenantId AND member_no = :memberNo AND deleted_at IS NULL")
    Mono<Member> findByMemberNo(Long tenantId, String memberNo);

    @Query("UPDATE member SET deleted_at = NOW() WHERE id = :id AND deleted_at IS NULL")
    Mono<Integer> softDeleteById(Long id);
}

// BookingSlotRepository.java
public interface BookingSlotRepository extends ReactiveCrudRepository<BookingSlot, Long> {

    @Query("UPDATE booking_slot SET booked_count = booked_count + 1 WHERE id = :id AND booked_count < capacity AND deleted_at IS NULL")
    Mono<Integer> incrementBookedCount(Long id);

    @Query("UPDATE booking_slot SET booked_count = booked_count - 1 WHERE id = :id AND booked_count > 0 AND deleted_at IS NULL")
    Mono<Integer> decrementBookedCount(Long id);
}

10.4 响应式事务管理

@Service
public class BookingService {

    private final BookingRecordRepository bookingRecordRepository;
    private final BookingSlotRepository bookingSlotRepository;
    private final MemberBenefitRepository benefitRepository;
    private final ReactiveTransactionManager transactionManager;

    public Mono<BookingRecord> createBooking(BookingRequest request) {
        TransactionalOperator rxtx = TransactionalOperator.create(transactionManager);

        return Mono.defer(() ->
            // 1. 检查时段库存
            bookingSlotRepository.findById(request.getSlotId())
                .filter(slot -> slot.getBookedCount() < slot.getCapacity())
                .switchIfEmpty(Mono.error(new BusinessException("课程已满")))

            // 2. 扣减权益
            .flatMap(slot -> benefitRepository.deductBenefit(
                request.getMemberId(),
                slot.getPrice()
            ))

            // 3. 创建预约记录
            .flatMap(benefit -> {
                BookingRecord record = new BookingRecord();
                record.setMemberId(request.getMemberId());
                record.setSlotId(request.getSlotId());
                record.setStatus(BookingStatus.CONFIRMED);
                return bookingRecordRepository.save(record);
            })

            // 4. 增加预约人数
            .flatMap(record -> bookingSlotRepository
                .incrementBookedCount(request.getSlotId())
                .thenReturn(record)
            )
        ).as(rxtx::transactional);
    }
}

10.5 配置文件

# application.yml
spring:
  r2dbc:
    url: r2dbc:postgresql://localhost:5432/gym_manage
    username: gym_user
    password: ${DB_PASSWORD}
    pool:
      enabled: true
      initial-size: 5
      max-size: 20
      max-idle-time: 30m

  flyway:
    url: jdbc:postgresql://localhost:5432/gym_manage
    username: gym_user
    password: ${DB_PASSWORD}
    locations: classpath:db/migration
    baseline-on-migrate: true

  cache:
    type: caffeine
    caffeine:
      spec: maximumSize=10000,expireAfterWrite=5m

十一、前端技术架构

11.1 项目结构

gym-manage/
├── apps/
│   ├── member-app/          # 会员端 uniapp
│   │   ├── src/
│   │   │   ├── pages/       # 页面
│   │   │   ├── components/  # 组件
│   │   │   ├── stores/      # Pinia 状态管理
│   │   │   ├── api/         # 接口请求
│   │   │   ├── utils/       # 工具函数
│   │   │   └── styles/      # 样式
│   │   ├── manifest.json
│   │   └── pages.json
│   │
│   ├── coach-app/           # 教练端 uniapp
│   │   └── ...
│   │
│   └── admin-web/           # 管理后台 Vue3
│       ├── src/
│       │   ├── views/
│       │   ├── components/
│       │   ├── stores/
│       │   ├── api/
│       │   ├── router/
│       │   └── styles/
│       └── vite.config.ts
│
├── packages/                # 共享包
│   ├── shared-types/        # TypeScript 类型定义
│   ├── shared-utils/        # 共享工具函数
│   └── ui-components/       # 共享UI组件
│
└── package.json

11.2 状态管理示例

// stores/member.ts
import { defineStore } from "pinia";
import type { Member, MemberCard, MemberBenefit } from "@shared-types";

export const useMemberStore = defineStore("member", {
  state: () => ({
    member: null as Member | null,
    cards: [] as MemberCard[],
    benefits: [] as MemberBenefit[],
    token: "",
  }),

  getters: {
    isLoggedIn: (state) => !!state.token && !!state.member,
    currentLevel: (state) => state.member?.level ?? 0,
    activeCards: (state) => state.cards.filter((c) => c.status === 1),

    validBenefits: (state) => {
      const now = new Date();
      return state.benefits.filter(
        (b) => b.status === 1 && (!b.validTo || new Date(b.validTo) > now),
      );
    },
  },

  actions: {
    async login(phone: string, code: string) {},
    async fetchMemberInfo() {},
    logout() {},
  },

  persist: {
    key: "gym-member",
    paths: ["token"],
  },
});

11.3 共享类型定义

// packages/shared-types/src/index.ts

export interface Member {
  id: number;
  tenantId: number;
  storeId: number;
  memberNo: string;
  name: string;
  phone: string;
  avatar: string;
  gender: number;
  birthday: string;
  level: number;
  exp: number;
  status: number;
  createdAt: string;
  updatedAt: string;
}

export interface MemberBenefit {
  id: number;
  memberId: number;
  cardId: number;
  benefitType: 1 | 2 | 3 | 4;
  benefitName: string;
  totalValue: number;
  usedValue: number;
  remainingValue: number;
  validFrom: string;
  validTo: string;
  status: number;
}

export enum BookingStatus {
  PENDING = 1,
  CONFIRMED = 2,
  CANCELLED = 3,
  COMPLETED = 4,
  NO_SHOW = 5,
  CHECKED_IN = 6,
}

export interface ApiResponse<T> {
  code: number;
  message: string;
  data: T;
}

十二、订阅与配置模块

12.1 模块概述

订阅与配置模块是系统的核心基础设施,支持:

  • 业务流程模块化配置
  • 多租户多门店配置管理
  • 订阅生命周期管理
  • 计费管理

12.2 三层配置架构

┌─────────────────────────────────────────────────────────────────┐
│                    三层配置架构                                   │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐  │
│   │              系统默认配置 (System Default)              │  │
│   │              - 业务模块开关                              │  │
│   │              - 默认业务规则                              │  │
│   │              - 系统参数                                  │  │
│   └─────────────────────────────────────────────────────────┘  │
│                              ↓ 继承                              │
│   ┌─────────────────────────────────────────────────────────┐  │
│   │              租户级配置 (Tenant Config)                   │  │
│   │              - 租户业务模块配置                          │  │
│   │              - 租户业务规则覆盖                          │  │
│   │              - 租户参数                                  │  │
│   └─────────────────────────────────────────────────────────┘  │
│                              ↓ 继承                              │
│   ┌─────────────────────────────────────────────────────────┐  │
│   │              门店级配置 (Store Config)                   │  │
│   │              - 门店业务模块配置                          │  │
│   │              - 门店业务规则覆盖                          │  │
│   │              - 门店参数                                  │  │
│   └─────────────────────────────────────────────────────────┘  │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

12.3 配置继承机制

12.3.1 继承模式

模式 说明 适用场景
继承 完全继承上级配置 门店与租户规则一致
继承+覆盖 继承上级配置,部分覆盖 门店需要调整部分规则
自定义 完全自定义配置 门店有特殊业务需求

12.3.2 配置优先级

配置读取优先级(从高到低):
1. 门店自定义配置
2. 门店覆盖配置
3. 租户自定义配置
4. 租户覆盖配置
5. 系统默认配置

12.4 业务模块配置

12.4.1 模块配置数据模型

interface ModuleConfig {
  id: number;
  tenantId: number;
  storeId: number | null;
  moduleCode: string;
  moduleName: string;
  enabled: boolean;
  inheritMode: "inherit" | "inherit_override" | "custom";
  config: Record<string, any>;
  createdAt: string;
  updatedAt: string;
}

12.4.2 基础版模块配置

{
  "member": {
    "enabled": true,
    "config": {
      "allowRegister": true,
      "requirePhoneVerification": true,
      "maxMembers": 1000
    }
  },
  "card": {
    "enabled": true,
    "config": {
      "allowCustomCard": false,
      "maxCardTypes": 5
    }
  },
  "benefit": {
    "enabled": true,
    "config": {
      "benefitTypes": ["duration", "count", "balance", "level"],
      "validationPriority": ["count", "duration", "balance", "level"]
    }
  },
  "groupClass": {
    "enabled": true,
    "config": {
      "maxDailyClasses": 20,
      "maxBookingDays": 7,
      "cancelHours": 2
    }
  },
  "checkin": {
    "enabled": true,
    "config": {
      "methods": ["qr"],
      "allowWalkin": true,
      "checkinWindow": 30
    }
  },
  "statistics": {
    "enabled": true,
    "config": {
      "reportTypes": ["daily", "weekly", "monthly"]
    }
  }
}

12.5 订阅生命周期管理

12.5.1 订阅状态流转

┌─────────┐    订阅申请    ┌─────────┐   支付成功   ┌─────────┐
│  试用   │──────────────▶│  待支付  │─────────────▶│  活跃   │
│ TRIAL   │               │PENDING  │              │ ACTIVE  │
└─────────┘               └────┬────┘              └────┬────┘
                               │                        │
                          取消│                   到期/取消
                               ▼                        ▼
                          ┌─────────┐              ┌─────────┐
                          │  已取消  │              │  已过期  │
                          │CANCELLED│              │EXPIRED  │
                          └─────────┘              └─────────┘

12.5.2 订阅数据模型

interface Subscription {
  id: number;
  tenantId: number;
  storeId: number | null;
  moduleCode: string;
  moduleName: string;
  planType: "monthly" | "quarterly" | "half_yearly" | "yearly";
  status: "trial" | "pending" | "active" | "cancelled" | "expired";
  trialEndAt: string | null;
  startDate: string;
  endDate: string;
  autoRenew: boolean;
  price: number;
  discountRate: number;
  actualPrice: number;
  createdAt: string;
  updatedAt: string;
}

12.6 计费管理

12.6.1 计费规则

interface BillingRule {
  moduleCode: string;
  basePrice: number;
  discounts: {
    quarterly: 0.9;
    halfYearly: 0.85;
    yearly: 0.8;
  };
  bundleDiscounts: {
    basic: 0.85; // 3个模块
    professional: 0.8; // 6个模块
    enterprise: 0.75; // 全部模块
  };
}

12.6.2 计费流程

1. 订阅申请
   ↓
2. 计算价格(基础价格 × 周期折扣 × 套餐折扣)
   ↓
3. 生成账单
   ↓
4. 支付处理
   ↓
5. 激活订阅
   ↓
6. 定期续费检查

12.7 配置管理API

12.7.1 配置读取API

// 获取租户级配置
GET /api/v1/config/tenant/:tenantId

// 获取门店级配置
GET /api/v1/config/store/:storeId

// 获取模块配置
GET /api/v1/config/module/:moduleCode

12.7.2 配置更新API

// 更新租户级配置
PUT /api/v1/config/tenant/:tenantId

// 更新门店级配置
PUT /api/v1/config/store/:storeId

// 更新模块配置
PUT /api/v1/config/module/:moduleCode

12.8 订阅管理API

12.8.1 订阅操作API

// 订阅模块
POST /api/v1/subscription/subscribe

// 取消订阅
POST /api/v1/subscription/cancel/:subscriptionId

// 续费订阅
POST /api/v1/subscription/renew/:subscriptionId

// 查询订阅
GET /api/v1/subscription/:subscriptionId

12.9 缓存策略

12.9.1 配置缓存

// 配置缓存策略
const configCache = {
  systemConfig: {
    ttl: 86400, // 24小时
    refreshInterval: 3600, // 1小时
  },
  tenantConfig: {
    ttl: 3600, // 1小时
    refreshInterval: 600, // 10分钟
  },
  storeConfig: {
    ttl: 1800, // 30分钟
    refreshInterval: 300, // 5分钟
  },
};

12.9.2 订阅缓存

// 订阅缓存策略
const subscriptionCache = {
  activeSubscription: {
    ttl: 300, // 5分钟
    refreshInterval: 60, // 1分钟
  },
};

十三、营销分析与预测模块

13.1 模块概述

营销分析与预测模块提供数据驱动的营销决策支持,包括:

  • 营销精算模型
  • 促销策略预测
  • 多维度自定义促销活动
  • 促销活动效果预测

13.2 营销精算模型

13.2.1 模型架构

┌─────────────────────────────────────────────────────────────────┐
│                    营销精算模型架构                                │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐  │
│   │              数据采集层                                   │  │
│   │  - 会员行为数据                                          │  │
│   │  - 交易数据                                              │  │
│   │  - 营销活动数据                                          │  │
│   │  - 外部数据(节假日、天气等)                            │  │
│   └─────────────────────────────────────────────────────────┘  │
│                              ↓                                  │
│   ┌─────────────────────────────────────────────────────────┐  │
│   │              数据处理层                                   │  │
│   │  - 数据清洗                                              │  │
│   │  - 特征工程                                              │  │
│   │  - 数据聚合                                              │  │
│   └─────────────────────────────────────────────────────────┘  │
│                              ↓                                  │
│   ┌─────────────────────────────────────────────────────────┐  │
│   │              模型训练层                                   │  │
│   │  - 回归模型(收入预测)                                  │  │
│   │  - 分类模型(会员流失预测)                              │  │
│   │  - 聚类模型(会员分群)                                  │  │
│   │  - 时间序列模型(趋势预测)                              │  │
│   └─────────────────────────────────────────────────────────┘  │
│                              ↓                                  │
│   ┌─────────────────────────────────────────────────────────┐  │
│   │              预测服务层                                   │  │
│   │  - 促销策略推荐                                          │  │
│   │  - 收入预测                                              │  │
│   │  - 会员流失预警                                          │  │
│   │  - 最优定价建议                                          │  │
│   └─────────────────────────────────────────────────────────┘  │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

13.2.2 数据特征

interface MarketingFeatures {
  // 会员特征
  memberFeatures: {
    memberCount: number;
    activeMemberCount: number;
    newMemberCount: number;
    avgMemberAge: number;
    memberDistribution: Record<string, number>;
  };

  // 交易特征
  transactionFeatures: {
    totalRevenue: number;
    avgTransactionValue: number;
    transactionFrequency: number;
    revenueTrend: number[];
  };

  // 营销特征
  marketingFeatures: {
    campaignCount: number;
    avgCampaignCost: number;
    campaignConversionRate: number;
    campaignROI: number;
  };

  // 外部特征
  externalFeatures: {
    season: string;
    holiday: boolean;
    weather: string;
    localEvents: string[];
  };
}

13.2.3 预测模型

interface PredictionModel {
  // 收入预测模型
  revenuePrediction: {
    model: "linear_regression" | "random_forest" | "lstm";
    features: string[];
    accuracy: number;
    predictionHorizon: number; // 预测天数
  };

  // 会员流失预测模型
  churnPrediction: {
    model: "logistic_regression" | "xgboost" | "neural_network";
    features: string[];
    accuracy: number;
    riskThreshold: number;
  };

  // 促销策略推荐模型
  promotionRecommendation: {
    model: "collaborative_filtering" | "content_based" | "hybrid";
    features: string[];
    accuracy: number;
    recommendationCount: number;
  };
}

13.3 促销策略预测

13.3.1 促销策略推荐

interface PromotionStrategy {
  id: string;
  name: string;
  type: "discount" | "bundle" | "loyalty" | "referral";
  targetAudience: {
    segments: string[];
    criteria: Record<string, any>;
  };
  offer: {
    discountType: "percentage" | "fixed" | "buy_x_get_y";
    discountValue: number;
    minPurchase?: number;
    maxDiscount?: number;
  };
  timing: {
    startDate: string;
    endDate: string;
    duration: number;
  };
  predictedMetrics: {
    expectedRevenue: number;
    expectedConversion: number;
    expectedROI: number;
    confidence: number;
  };
}

13.3.2 推荐算法

促销策略推荐流程:
1. 分析历史促销活动效果
   ↓
2. 识别高价值会员群体
   ↓
3. 计算不同促销策略的预期效果
   ↓
4. 生成个性化促销策略推荐
   ↓
5. 预测促销活动效果

13.4 多维度自定义促销活动

13.4.1 促销活动配置

interface CustomPromotion {
  id: string;
  name: string;
  description: string;

  // 目标维度
  targetDimensions: {
    memberSegments: string[];
    memberLevels: number[];
    cardTypes: string[];
    stores: number[];
  };

  // 优惠配置
  offerConfig: {
    type: "percentage" | "fixed" | "buy_x_get_y" | "tiered";
    value: number;
    conditions: {
      minPurchase?: number;
      maxDiscount?: number;
      applicableItems?: string[];
      excludedItems?: string[];
    };
  };

  // 时间配置
  timeConfig: {
    startDate: string;
    endDate: string;
    validDays: number[];
    validHours: {
      start: string;
      end: string;
    };
  };

  // 使用限制
  usageLimits: {
    maxUsesPerMember: number;
    maxTotalUses: number;
    firstTimeOnly: boolean;
    memberLevelOnly: boolean;
  };

  // 渠道配置
  channelConfig: {
    online: boolean;
    offline: boolean;
    mobile: boolean;
    wechat: boolean;
  };
}

13.4.2 促销活动效果预测

interface PromotionPrediction {
  promotionId: string;
  promotionName: string;

  // 预测指标
  predictedMetrics: {
    // 参与度预测
    expectedParticipants: number;
    participationRate: number;

    // 收入预测
    expectedRevenue: number;
    revenueIncrease: number;
    revenueIncreaseRate: number;

    // 转化预测
    expectedConversions: number;
    conversionRate: number;

    // ROI预测
    expectedCost: number;
    expectedROI: number;
    paybackPeriod: number;

    // 会员增长预测
    newMemberAcquisition: number;
    memberRetention: number;

    // 时间维度预测
    dailyMetrics: {
      date: string;
      revenue: number;
      participants: number;
      conversions: number;
    }[];
  };

  // 风险评估
  riskAssessment: {
    cannibalizationRisk: number;
    profitMarginRisk: number;
    brandRisk: number;
    overallRisk: "low" | "medium" | "high";
  };

  // 优化建议
  optimizationSuggestions: {
    timingAdjustment: string[];
    offerAdjustment: string[];
    targetingAdjustment: string[];
    channelAdjustment: string[];
  };

  // 置信度
  confidence: {
    overall: number;
    revenue: number;
    conversion: number;
    roi: number;
  };
}

13.5 技术实现

13.5.1 技术栈

组件 技术选型
数据存储 PostgreSQL + Elasticsearch
数据处理 Apache Spark
机器学习 Python + scikit-learn + TensorFlow
API服务 Spring Boot + Python FastAPI
可视化 ECharts + D3.js

13.5.2 数据流

1. 数据采集
   - 从PostgreSQL读取历史数据
   - 从Elasticsearch读取实时数据
   - 从外部API获取节假日、天气等数据
   ↓
2. 数据处理
   - 使用Spark进行数据清洗和特征工程
   - 存储处理后的特征数据
   ↓
3. 模型训练
   - 使用Python训练机器学习模型
   - 定期更新模型
   ↓
4. 预测服务
   - 提供REST API进行预测
   - 缓存预测结果
   ↓
5. 可视化展示
   - 前端展示预测结果
   - 支持交互式分析

13.6 API设计

13.6.1 营销精算API

// 获取促销策略推荐
GET / api / v1 / marketing / promotion - recommendations;

// 预测促销活动效果
POST / api / v1 / marketing / predict - promotion;

// 获取收入预测
GET / api / v1 / marketing / revenue - prediction;

// 获取会员流失预警
GET / api / v1 / marketing / churn - warning;

13.6.2 自定义促销API

// 创建自定义促销活动
POST /api/v1/marketing/custom-promotions

// 更新自定义促销活动
PUT /api/v1/marketing/custom-promotions/:id

// 预测自定义促销活动效果
POST /api/v1/marketing/custom-promotions/:id/predict

// 获取促销活动效果
GET /api/v1/marketing/custom-promotions/:id/performance

十四、项目实施规划

14.1 MVP版本功能范围

P0 - 核心功能(必须)
├── 会员端
│   ├── 微信授权登录
│   ├── 会员卡展示 & 权益查看
│   ├── 团课预约 & 取消
│   ├── 扫码签到
│   └── 预约记录查看
│
├── 管理后台
│   ├── 数据看板(基础统计)
│   ├── 会员管理(增删改查)
│   ├── 课程排期(日历视图)
│   ├── 签到记录查询
│   └── 门店管理
│
└── 后端服务
    ├── 会员服务(注册、登录、信息管理)
    ├── 预约服务(团课预约、库存管理)
    ├── 签到服务(扫码签到)
    └── 基础数据服务

P1 - 重要功能(第二阶段)
├── 私教预约 & 教练端
├── 会员等级体系
├── 储值 & 次卡管理
├── 训练计划模块
└── 财务报表

P2 - 增强功能(第三阶段)
├── 多门店连锁
├── 刷脸签到硬件集成
├── 营销活动模块
├── App版本
└── 数据分析高级功能

14.2 开发里程碑

阶段一:基础搭建(2周)
├── Week 1
│   ├── 后端项目初始化(Spring Boot 3 + WebFlux
│   ├── 数据库设计 & Flyway迁移脚本
│   ├── 前端项目初始化(uniapp + Vue3 admin
│   └── 开发环境配置(Docker、CI/CD
│
└── Week 2
    ├── 用户认证服务(JWT + 微信登录)
    ├── 基础CRUD框架搭建
    └── 前端登录页面 & 路由守卫

阶段二:核心功能(4周)
├── Week 3-4: 会员模块
│   ├── 会员注册、信息管理
│   ├── 会员卡 & 权益管理
│   └── 会员端个人中心
│
└── Week 5-6: 预约 & 签到
    ├── 课程排期管理
    ├── 团课预约功能
    ├── 扫码签到功能
    └── 管理后台数据看板

阶段三:测试 & 上线(2周)
├── Week 7
│   ├── 集成测试
│   ├── 性能测试 & 优化
│   └── Bug修复
│
└── Week 8
    ├── 生产环境部署
    ├── 小程序审核提交
    └── 运维文档编写

14.3 技术风险与应对

风险 影响 应对措施 优先级
高并发预约抢课 热门课程开抢时系统压力 PostgreSQL行级锁 + Caffeine缓存 + WebFlux响应式 + 候补机制
微信小程序审核 上线时间不可控 提前了解审核规范、预留修改时间、准备H5备选
硬件设备集成 刷脸/NFC设备对接复杂 MVP仅支持扫码、签到网关预留扩展接口 低(P2
多租户数据隔离 连锁门店数据安全 tenant_id强制过滤 + 数据库RLS策略 中(P2

十四、ERPNext评估与方案选择

14.1 ERPNext评估结论

经过深入分析ERPNext开源项目的技术架构、核心功能模块以及当前健身房管理系统的设计文档,结论:ERPNext无法完全满足本项目需求。虽然ERPNext具备强大的企业资源规划能力,但在健身房行业的特定业务场景、多租户架构、订阅计费模型等方面存在显著差距。

14.1.1 功能覆盖度分析

模块 可直接复用 需深度定制 需完全开发 总覆盖度
会员管理 注册与信息管理(88% 统计与分析(70% 会员卡与权益体系(5% 54%
预约管理 - - 团课预约(7%)、私教预约(23%)、场地预约(0%) 10%
签到管理 - 记录与统计(40% 签到方式(0% 13%
订阅计费 财务集成(94% - 订阅管理(4% 49%
营销增长 会员营销(73% 会员营销(73% 促销活动(8%)、推荐奖励(0% 27%
数据智能 数据分析(92% - AI预测(0% 46%

总体覆盖度

  • 可直接复用:35%(用户管理、权限控制、财务模块、基础报表)
  • 需深度定制:40%(会员体系、预约系统、营销活动)
  • 需完全开发:25%(会员卡权益、时段管理、签到系统、订阅计费、AI预测)

14.1.2 技术栈对比

维度 ERPNext 项目需求 兼容性
后端语言 Python Java 不兼容
后端框架 Frappe Framework Spring Boot 3 不兼容
数据库 MariaDB/PostgreSQL PostgreSQL 兼容
前端框架 Vue.js (Frappe UI) Vue3 + Element Plus ⚠️ 部分兼容
架构模式 单体应用 + 插件系统 单体应用 + 模块化设计 兼容
部署方式 Docker/K8s Docker Compose 兼容

14.1.3 成本对比

方案 开发成本 周期 说明
基于ERPNext深度定制 245-375万 15-21个月 复用35%,定制65%
自研系统(微服务) 365-615万 15-21个月 完全自主开发
自研系统(单体) 200-280万 12-15个月 单体架构,简化部署
基于ERPNext设计思路自研 122-180万 10-12个月 借鉴设计,单体架构

14.2 ERPNext核心设计思路分析

14.2.1 元数据驱动架构(Metadata-Driven Architecture

ERPNext设计精髓

  • DocType不仅是数据库表,而是元数据驱动的完整定义
  • 通过元数据自动生成UI、API、验证逻辑
  • 实现低代码开发能力

核心优势

  • 快速构建业务实体
  • 自动生成CRUD操作
  • 统一的验证机制
  • 灵活的字段扩展

14.2.2 工作流引擎(Workflow Engine

ERPNext设计精髓

  • 内置状态机和工作流引擎
  • 可视化配置业务流程
  • 支持条件分支、自动操作

核心优势

  • 业务流程标准化
  • 状态转换可控
  • 自动化操作执行

14.2.3 权限系统(RBAC

ERPNext设计精髓

  • 基于角色的访问控制
  • 细粒度的权限控制
  • 数据权限过滤

核心优势

  • 权限管理灵活
  • 数据安全可控
  • 权限审计完整

14.2.4 动态报表系统

ERPNext设计精髓

  • 可视化报表构建器
  • SQL查询支持
  • 图表自动生成

核心优势

  • 报表开发快速
  • 数据分析灵活
  • 可视化展示

14.2.5 插件化架构

ERPNext设计精髓

  • 模块化设计
  • 可扩展的App系统
  • 独立部署能力

核心优势

  • 系统可扩展
  • 功能可独立升级
  • 代码可复用

14.3 设计思路在健身房系统的应用价值

14.3.1 元数据驱动的价值

应用场景 传统开发方式 元数据驱动方式 价值提升
会员管理 手写Entity、Controller、Service、Mapper 定义元数据,自动生成 开发效率提升60%
会员卡类型 手写多个Entity、复杂关联 定义元数据,自动关联 维护成本降低50%
预约时段 手写复杂的时间算法 定义元数据,自动计算 业务逻辑清晰度提升80%
报表开发 手写SQL、前端图表 可视化配置,自动生成 报表开发效率提升70%

核心价值

  • 🚀 开发效率:元数据驱动可减少60-70%的重复代码
  • 🎯 业务聚焦:开发人员专注于业务逻辑,而非CRUD
  • 🔧 灵活扩展:通过元数据配置即可扩展功能
  • 📊 统一规范:所有业务实体遵循统一的元数据规范

14.3.2 工作流引擎的价值

应用场景 传统开发方式 工作流引擎方式 价值提升
预约流程 手写状态判断、分支逻辑 可视化配置工作流 业务流程清晰度提升90%
会员卡激活 手写多个if-else 配置状态机 维护成本降低70%
权益扣减 手写复杂的事务逻辑 配置自动化操作 开发效率提升50%
订阅计费 手写复杂的计费逻辑 配置计费规则 计费规则灵活性提升80%

核心价值

  • 🔄 流程可视化:业务流程一目了然
  • ⚙️ 自动化执行:减少人工干预
  • 🎛️ 灵活配置:无需修改代码即可调整流程
  • 🔍 可追溯性:每个状态转换都有记录

14.3.3 权限系统的价值

应用场景 传统开发方式 ERPNext权限系统 价值提升
角色管理 手写Role表、关联表 内置RBAC系统 开发效率提升80%
数据权限 手写复杂的过滤逻辑 自动数据过滤 维护成本降低60%
权限审计 手写日志记录 自动审计日志 安全性提升90%

核心价值

  • 🔐 安全性:细粒度的权限控制
  • 📝 可审计:所有权限操作都有记录
  • 🎯 灵活性:支持复杂的权限规则
  • 高性能:自动权限过滤,查询效率高

14.4 可借鉴的设计模式和最佳实践

14.4.1 元数据驱动设计模式

核心设计思路

  • 通过元数据定义业务实体(EntityMetadata
  • 元数据引擎自动生成CRUD代码、REST API、前端UI
  • 支持字段类型、验证规则、关联关系等完整定义

应用到健身房系统

  • 会员元数据:自动生成会员CRUD、API、表单
  • 会员卡元数据:自动生成会员卡CRUD、关联查询
  • 预约时段元数据:自动生成时段管理、冲突检测
  • 报表元数据:自动生成报表查询、图表展示

预期收益

  • 减少重复代码60-70%
  • 统一代码规范
  • 快速响应需求变更
  • 自动生成文档

14.4.2 工作流引擎设计模式

核心设计思路

  • 定义工作流(WorkflowDefinition)、状态(StateDefinition)、转换(TransitionDefinition
  • 工作流引擎执行状态转换、触发自动化操作
  • 支持条件判断、分支逻辑、日志记录

应用到健身房系统

  • 预约工作流:草稿→已预约→已签到→已完成
  • 会员卡工作流:未激活→有效→已过期
  • 权益扣减工作流:预约→扣减→记录日志

预期收益

  • 业务流程可视化
  • 状态转换可控
  • 自动化操作执行
  • 易于维护和扩展

14.4.3 权限系统设计模式

核心设计思路

  • 定义权限(Permission)、角色(Role)、数据权限(DataPermission
  • 权限引擎执行权限检查、数据过滤
  • 支持细粒度的权限控制和审计

应用到健身房系统

  • 角色管理:会员、教练、店长、超级管理员
  • 功能权限:查看、编辑、删除、管理
  • 数据权限:门店数据、个人数据

预期收益

  • 细粒度权限控制
  • 数据权限自动过滤
  • 权限审计完整
  • 易于配置和管理

14.4.4 动态报表系统设计模式

核心设计思路

  • 定义报表(ReportDefinition)、查询参数(QueryParameter)、报表列(ReportColumn
  • 报表引擎执行报表查询、生成图表数据
  • 支持SQL查询、可视化配置、多格式导出

应用到健身房系统

  • 会员统计报表:新增、活跃、流失统计
  • 预约统计报表:预约量、完成率、取消率
  • 签到统计报表:签到次数、高峰时段
  • 财务统计报表:收入、成本、利润

预期收益

  • 报表开发效率提升70%
  • 支持可视化配置
  • 灵活的参数配置
  • 自动生成图表

14.5 基于ERPNext设计思路的自研架构方案

14.5.1 整体架构设计

┌─────────────────────────────────────────────────────────────────┐
│                        健身房管理系统架构                          │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  ┌───────────────────────────────────────────────────────┐  │
│  │                    前端层                            │  │
│  ├───────────────────────────────────────────────────────┤  │
│  │  • 会员端小程序  • 管理端Web  • 教练端App        │  │
│  └───────────────────────────────────────────────────────┘  │
│                              ↓                                       │
│  ┌───────────────────────────────────────────────────────┐  │
│  │                   应用网关层                          │  │
│  ├───────────────────────────────────────────────────────┤  │
│  │  • 统一入口  • 认证授权  • 限流熔断               │  │
│  └───────────────────────────────────────────────────────┘  │
│                              ↓                                       │
│  ┌───────────────────────────────────────────────────────┐  │
│  │                   单体应用层                          │  │
│  ├───────────────────────────────────────────────────────┤  │
│  │  ┌─────────────────────────────────────────────┐    │  │
│  │  │              业务模块层                    │    │  │
│  │  ├─────────────────────────────────────────────┤    │  │
│  │  │  • 会员模块  • 预约模块  • 签到模块    │    │  │
│  │  │  • 订阅模块  • 营销模块  • 数据模块    │    │  │
│  │  └─────────────────────────────────────────────┘    │  │
│  │  ┌─────────────────────────────────────────────┐    │  │
│  │  │              核心引擎层                    │    │  │
│  │  ├─────────────────────────────────────────────┤    │  │
│  │  │  • 元数据引擎  • 工作流引擎             │    │  │
│  │  │  • 权限引擎    • 报表引擎               │    │  │
│  │  └─────────────────────────────────────────────┘    │  │
│  └───────────────────────────────────────────────────────┘  │
│                              ↓                                       │
│  ┌───────────────────────────────────────────────────────┐  │
│  │                   数据访问层                          │  │
│  ├───────────────────────────────────────────────────────┤  │
│  │  • PostgreSQL  • Redis缓存  • Elasticsearch搜索        │  │
│  └───────────────────────────────────────────────────────┘  │
│                              ↓                                       │
│  ┌───────────────────────────────────────────────────────┐  │
│  │                   基础设施层                          │  │
│  ├───────────────────────────────────────────────────────┤  │
│  │  • Docker Compose  • RabbitMQ  • 监控日志          │  │
│  └───────────────────────────────────────────────────────┘  │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

14.5.2 核心引擎设计

元数据引擎

  • 职责:管理业务实体元数据、自动生成CRUD代码、生成REST API、生成前端UI组件
  • 核心类:EntityMetadata、FieldMetadata、MetadataEngine、CodeGenerator
  • 应用场景:会员管理、会员卡管理、预约管理、签到管理

工作流引擎

  • 职责:管理业务流程定义、执行状态转换、触发自动化操作、记录流程日志
  • 核心类:WorkflowDefinition、StateDefinition、TransitionDefinition、WorkflowEngine
  • 应用场景:预约流程、会员卡流程、权益扣减流程

权限引擎

  • 职责:管理角色和权限、执行权限检查、过滤数据权限、记录权限审计
  • 核心类:Permission、Role、PermissionEngine、DataPermissionFilter
  • 应用场景:角色管理、功能权限、数据权限

报表引擎

  • 职责:管理报表定义、执行报表查询、生成图表数据、导出报表数据
  • 核心类:ReportDefinition、QueryParameter、ReportEngine、ChartGenerator
  • 应用场景:会员统计、预约统计、签到统计、财务统计

14.5.3 技术栈选择

层级 技术选型 说明
前端 Vue.js + Element Plus 参考ERPNext的Frappe UI
应用网关 Spring MVC + Filter 统一入口、认证授权
业务服务 Spring Boot 3 + WebFlux 单体应用,模块化设计
元数据引擎 自研 + JavaPoet 代码生成
工作流引擎 自研 + Spring State Machine 状态机
权限引擎 自研 + Spring Security RBAC
报表引擎 自研 + Apache ECharts 图表生成
数据库 PostgreSQL + R2DBC 主数据库
缓存 Redis 分布式缓存
搜索 Elasticsearch 全文搜索
消息队列 RabbitMQ 异步处理
部署 Docker Compose 单机部署

14.6 实施建议与成本估算

14.6.1 分阶段实施计划

阶段1:核心引擎开发(2-3个月)

模块 工作内容 工作量
元数据引擎 元数据定义、代码生成、API生成 3-4人月
工作流引擎 状态机、流程执行、日志记录 2-3人月
权限引擎 RBAC、数据权限、审计日志 2-3人月
报表引擎 报表定义、查询执行、图表生成 2-3人月
小计 9-13人月

阶段2:基础业务开发(3-4个月)

模块 工作内容 工作量
会员管理 元数据定义、工作流配置 2-3人月
会员卡管理 元数据定义、工作流配置 3-4人月
团课预约 元数据定义、工作流配置 4-5人月
签到管理 元数据定义、工作流配置 3-4人月
基础报表 报表定义、图表配置 2-3人月
小计 14-19人月

阶段3:增值业务开发(2-3个月)

模块 工作内容 工作量
私教管理 元数据定义、工作流配置 3-4人月
场地预约 元数据定义、工作流配置 2-3人月
营销活动 元数据定义、工作流配置 4-5人月
订阅计费 元数据定义、工作流配置 5-6人月
小计 14-18人月

阶段4:高级功能开发(2个月)

模块 工作内容 工作量
AI预测 模型训练、预测执行 5-6人月
智能推荐 推荐算法、规则引擎 3-4人月
小计 8-10人月

阶段5:优化与上线(1-2个月)

模块 工作内容 工作量
性能优化 数据库优化、缓存、索引 2-3人月
安全加固 权限控制、数据加密、审计 1-2人月
用户测试 功能测试、压力测试、UAT 2-3人月
正式上线 Docker Compose部署、监控、运维 1-2人月
小计 6-10人月

14.6.2 总工作量与成本估算

阶段 工作量 说明
阶段1:核心引擎 9-13人月 构建核心引擎框架
阶段2:基础业务 14-19人月 基础版功能
阶段3:增值业务 14-18人月 付费订阅版功能
阶段4:高级功能 8-10人月 AI预测功能
阶段5:优化与上线 6-10人月 性能、安全、测试
总计 51-70人月 约4-6人团队,10-12个月
成本项 估算 说明
人力成本 102-140万 4-6人团队,10-12个月,人均2万/月
基础设施 5-10万 单机部署,Docker Compose
第三方服务 10-20万 短信、支付、人脸识别等
测试与运维 5-10万 测试工具、监控、运维工具
总计 122-180万 约120-180万

14.7 预期收益

14.7.1 技术收益

收益维度 预期收益 说明
开发效率 提升60-70% 元数据驱动减少重复代码
维护成本 降低50-60% 统一的元数据和规范
扩展性 提升80% 插件化架构,易于扩展
灵活性 提升70% 工作流和权限可配置

14.7.2 业务收益

收益维度 预期收益 说明
业务响应 提升50% 元数据驱动,快速响应需求变更
流程优化 提升60% 工作流引擎,业务流程标准化
数据分析 提升70% 动态报表,灵活的数据分析
权限控制 提升80% 细粒度权限,数据安全可控

14.7.3 长期收益

收益维度 预期收益 说明
技术债务 降低70% 统一的架构和规范
团队成长 提升50% 学习优秀的设计模式
产品竞争力 提升60% 快速迭代,灵活响应市场
商业化潜力 提升80% 可形成行业解决方案

14.8 最终建议

14.8.1 推荐方案:基于ERPNext设计思路的自研

理由

  1. 技术栈匹配:项目设计基于Java/Spring Boot 3,自研可完全匹配,避免技术栈转型风险

  2. 业务独特性:健身房行业的会员卡、权益体系、时段管理等业务逻辑高度专业化,ERPNext无法满足

  3. 架构要求:项目要求单体应用、多租户、高可用架构,简化部署和运维,适合中小规模业务

  4. 性能要求:项目要求API响应≤500ms、支持500并发用户,自研可通过架构优化达到

  5. 长期维护:自研系统代码完全可控,无技术债务,长期维护成本更低

  6. 部署简化:采用Docker Compose单机部署,降低运维复杂度,减少基础设施成本

  7. 设计借鉴:借鉴ERPNext的元数据驱动、工作流引擎、权限系统等优秀设计思路,提升开发效率60-70%

14.8.2 关键成功因素

因素 说明 应对措施
元数据设计 需要合理的元数据模型 参考ERPNext,结合业务特点
工作流设计 需要清晰的业务流程 业务调研、流程梳理
权限设计 需要细粒度的权限控制 参考RBAC模型,结合数据权限
报表设计 需要灵活的报表配置 支持SQL查询、可视化配置

14.8.3 风险控制

风险 应对措施
开发周期超期 采用敏捷开发,分阶段交付,及时调整计划
技术难点 提前技术预研,引入专家,必要时寻求外部支持
需求变更 严格需求管理,变更需评估影响,控制变更频率
性能不达标 早期性能测试,持续优化,必要时架构调整

14.9 总结

经过全面评估,ERPNext无法完全满足健身房管理系统项目需求。虽然ERPNext在财务、HR等通用模块方面表现优秀,但在健身房行业的专业化业务(会员卡、权益体系、时段管理、签到系统、订阅计费、AI预测)方面存在巨大差距。

最终建议:采用基于ERPNext设计思路的自研方案,在Java/Spring Boot 3技术栈上,构建元数据驱动、工作流引擎、权限系统、动态报表等核心能力,实现健身房管理系统的全部业务需求。

预期收益

  • 实现全部业务需求
  • 技术栈匹配,团队熟悉
  • 开发效率提升60-70%
  • 维护成本降低50-60%
  • 技术债务降低70%
  • 可形成行业解决方案

预期挑战

  • ⚠️ 需要深入理解ERPNext设计思路
  • ⚠️ 需要团队具备架构设计能力
  • ⚠️ 核心引擎开发周期较长
  • ⚠️ 需要持续优化和迭代

十五、总结

15.1 设计方案总览

业务范围

  • 支持综合俱乐部、精品工作室、连锁品牌全场景
  • 会员体系:时长卡 + 次卡 + 储值 + 等级体系
  • 预约类型:团课 + 私教 + 场地 + 线上课程
  • 签到方式:扫码 + 刷脸 + NFC + 教练代签
  • 计划体系:训练计划 + 课程排期 + 会员目标 + 教练排班
  • 订阅模式:基础版 + 四大类订阅模块(业务扩展、体验升级、营销增长、数据智能)
  • 配置管理:三层配置架构(系统默认 → 租户 → 门店)+ 三种继承模式
  • 营销分析:营销精算模型 + 促销策略预测 + 多维度自定义促销活动

技术架构

  • 前端: uniapp(Vue3+TS) + Vue3管理后台
  • 后端: Spring Boot 3 + WebFlux + JDK 21
  • 数据库: PostgreSQL + R2DBC + Flyway
  • 缓存: Caffeine(本地)+ Redis(可选扩展)
  • 数据分析: Elasticsearch + Apache Spark + Python(scikit-learn + TensorFlow)
  • 部署: Docker + CI/CD

核心设计理念

  • 多租户架构支持连锁扩展
  • 资源抽象统一预约模型
  • 响应式编程应对高并发
  • 软删除保证数据可追溯
  • 模块化设计支持渐进式开发
  • 订阅模式满足不同规模客户需求
  • 配置继承机制支持灵活业务定制
  • 数据驱动营销决策支持

产品版本策略

  • 基础版:保证业务闭环,适合小型工作室
  • 订阅模块:按需订阅,灵活组合
  • 试用政策:14天免费试用,随时取消
  • 计费方式:多种周期选择,组合套餐优惠

十六、未来优化计划

我们持续优化产品和服务,为客户提供更好的体验。以下是我们的优化计划:

16.1 短期优化(1-3个月)

16.1.1 首月特惠

方案描述:新客户首月5折优惠

适用对象:首次注册的新客户

优惠力度

  • 基础版:¥149.5/月(原价¥299)
  • 订阅模块:按原价5折计算

限制条件

  • 首月必须选择固定月费模式
  • 同一手机号/身份证号3个月内只能享受一次

预期效果

  • 降低获客成本50%
  • 转化率提升20-30%
  • 快速扩大用户基数

实施步骤

  1. 系统开发:新客户标识、首月优惠逻辑、计费计算
  2. 营销物料:制作首月特惠宣传材料
  3. 推广渠道:官网、销售团队、社交媒体推广
  4. 数据监控:监控首月转化率、留存率

风险评估

  • 可能被滥用:客户注册后取消,重新注册享受优惠
  • 缓解措施:限制同一手机号/身份证号3个月内只能享受一次首月优惠

16.1.2 模块独立试用

方案描述:每个订阅模块独立14天试用

试用规则

  • 每个模块独立14天试用
  • 可同时试用多个模块,每个模块独立计时
  • 模块A试用后转正,模块B仍可继续试用

预期效果

  • 降低试用门槛
  • 模块订阅率提升15-20%
  • 客单价提升10-15%

实施步骤

  1. 系统开发:模块独立试用逻辑、试用期管理
  2. 计费调整:模块试用转正后,单独计费
  3. 用户体验:试用管理界面优化,清晰显示每个模块试用状态

风险评估

  • 系统复杂度增加:需要管理多个模块的试用状态
  • 缓解措施:优化试用管理界面,提供批量操作功能

16.1.3 在线计算器

方案描述:提供在线计费计算器,帮助客户对比两种付费模式

计算功能

  • 固定月费模式:根据选择的模块数量和订阅周期计算月费
  • 成功费模式:根据预估月交易额计算月费
  • 模式对比:自动计算两种模式的成本,推荐更优模式

输入参数

  • 行业类型(瑜伽工作室/综合健身房/连锁品牌)
  • 预估月交易额(成功费模式)
  • 选择模块数量
  • 订阅周期(月付/季付/半年付/年付)

预期效果

  • 决策时间缩短83%(从30分钟缩短到5分钟)
  • 转化率提升10-15%
  • 客户满意度提升

实施步骤

  1. 前端开发:计算器界面、参数输入、结果展示
  2. 后端开发:计费逻辑、模式对比算法
  3. 数据分析:收集客户使用数据,优化计算器推荐算法

风险评估

  • 预估交易额不准确:客户可能低估或高估交易额
  • 缓解措施:提供历史数据参考,引导客户合理预估

16.2 中期优化(3-6个月)

16.2.1 忠诚折扣

方案描述:连续订阅3年以上,额外享受95折优惠

适用条件

  • 连续订阅满36个月(3年)
  • 在当前折扣基础上额外95折
  • 适用范围:基础版 + 所有订阅模块

重置条件:中断订阅后,忠诚期重新计算

预期效果

  • 留存率提升15-20%
  • 客单价提升10-15%
  • 收入稳定性提升

实施步骤

  1. 系统开发:忠诚期计算、折扣叠加逻辑
  2. 客户通知:忠诚期即将到期提醒、续费优惠提醒
  3. 营销活动:忠诚客户专属活动、感恩回馈

风险评估

  • 客户等待忠诚期:客户可能故意中断订阅,等待忠诚期
  • 缓解措施:设置忠诚期上限(如最多享受2次),避免长期等待

16.2.2 推荐奖励

方案描述:老客户推荐新客户,双方获得优惠

推荐人奖励

  • 推荐成功:获得1个月免费订阅或等值优惠券
  • 推荐数量:无上限,鼓励持续推荐

被推荐人奖励

  • 新客户注册:首月5折优惠(可与首月特惠叠加)
  • 必须输入推荐码才能享受优惠

奖励发放:推荐成功后7天内发放

预期效果

  • 获客成本降低50-70%
  • 获客速度提升30-40%
  • 客户粘性提升20-30%

实施步骤

  1. 系统开发:推荐码生成、推荐关系追踪、奖励发放
  2. 营销物料:推荐活动宣传材料、推荐码分享工具
  3. 数据分析:推荐转化率、推荐人活跃度、被推荐人留存率

风险评估

  • 推荐作弊:客户可能虚假推荐获取奖励
  • 缓解措施:设置推荐条件(如被推荐人需消费满¥100才发放奖励)

16.2.3 行业扩展

方案描述:增加普拉提工作室、拳击馆、游泳馆等行业类型

新增行业类型

普拉提工作室

  • 特点:会员规模小(50-200人)、课程单一、预算有限
  • 核心需求:会员管理、团课预约、基础统计
  • 推荐模块:在线课程、会员营销
  • 推荐套餐:
    • 入门套餐:基础版 + 在线课程(¥536/月)
    • 成长套餐:基础版 + 在线课程 + 会员营销(¥763/月)

拳击馆

  • 特点:会员规模小(100-300人)、课程多样、需要私教
  • 核心需求:会员管理、团课预约、私教管理
  • 推荐模块:私教管理、器械预约、会员营销
  • 推荐套餐:
    • 标准套餐:基础版 + 私教管理 + 器械预约(¥538/月)
    • 专业套餐:基础版 + 私教管理 + 器械预约 + 会员营销(¥875/月)

游泳馆

  • 特点:会员规模中等(200-500人)、课程单一、时段管理复杂
  • 核心需求:会员管理、团课预约、时段管理
  • 推荐模块:器械预约、会员营销
  • 推荐套餐:
    • 标准套餐:基础版 + 器械预约(¥398/月)
    • 成长套餐:基础版 + 器械预约 + 会员营销(¥623/月)

预期效果

  • 市场覆盖扩大50%
  • 转化率提升15-20%
  • 客单价提升5-10%

实施步骤

  1. 需求调研:深入调研各行业特点和需求
  2. 套餐设计:设计各行业的推荐套餐
  3. 系统开发:行业类型选择、推荐套餐展示
  4. 营销推广:针对各行业的营销活动

风险评估

  • 行业分类不准确:客户可能选择错误的行业类型
  • 缓解措施:提供行业类型说明、允许客户修改行业类型

16.2.4 基于规模维度的智能推荐

方案描述:基于行业类型 + 规模维度(员工数量、会员数量、门店数量、月交易额)提供更精准的推荐套餐

规模维度

维度 说明 取值范围
员工数量 教练、前台、管理人员总数 1-5人 / 6-10人 / 11-20人 / 21人+
会员数量 当前会员总数 1-100人 / 101-300人 / 301-1000人 / 1001人+
门店数量 门店总数 1家 / 2-5家 / 6-10家 / 11家+
月交易额 月度交易总额 ¥1万以下 / ¥1-5万 / ¥5-20万 / ¥20万+

推荐算法

1. 收集客户信息
   - 行业类型(必选)
   - 员工数量(可选)
   - 会员数量(可选)
   - 门店数量(可选)
   - 月交易额(可选)

2. 计算规模得分
   - 员工数量得分(0-25分)
   - 会员数量得分(0-25分)
   - 门店数量得分(0-25分)
   - 月交易额得分(0-25分)
   - 总分:0-100分

3. 匹配推荐套餐
   - 行业类型 + 规模得分 → 推荐套餐
   - 提供上下两个套餐供选择

4. 个性化推荐
   - 根据客户历史行为调整推荐
   - 根据行业趋势调整推荐

推荐套餐矩阵示例

瑜伽工作室

规模 员工数量 会员数量 推荐套餐 月费
微型 1-2人 1-50人 入门套餐:基础版 + 在线课程 ¥536
小型 3-5人 51-100人 成长套餐:基础版 + 在线课程 + 会员营销 ¥763
中型 6-10人 101-200人 专业套餐:基础版 + 在线课程 + 会员营销 + 促销活动 ¥962

综合健身房

规模 员工数量 会员数量 推荐套餐 月费
小型 3-8人 51-300人 标准套餐:基础版 + 私教管理 + 器械预约 ¥538
中型 9-15人 301-800人 专业套餐:基础版 + 私教管理 + 器械预约 + 人脸识别 + 会员营销 ¥875
大型 16-30人 801-2000人 企业套餐:基础版 + 私教管理 + 器械预约 + 人脸识别 + 会员营销 + 促销活动 ¥1,074

连锁品牌

规模 门店数量 会员数量 推荐套餐 月费
区域连锁 2-5家 501-2000人 企业套餐:基础版 + 多门店管理 + 全部营销模块(3个) ¥1,116
中型连锁 6-10家 2001-5000人 专业套餐:基础版 + 多门店管理 + 全部营销模块 + 全部数据智能模块 ¥2,067
大型连锁 11家+ 5001人+ 旗舰套餐:基础版 + 全部订阅模块(12个) ¥2,633

预期效果

  • 推荐准确率提升:从60%提升到85%(+25%)
  • 客户满意度提升:从75%提升到90%(+15%)
  • 转化率提升:从15%提升到22%(+7%)
  • 客单价提升:从¥800提升到¥950(+19%)

实施步骤

  1. 短期(1-2个月):收集客户规模信息,基于行业类型 + 员工数量推荐套餐
  2. 中期(3-6个月):完善推荐算法,增加更多规模维度
  3. 长期(6-12个月):使用机器学习算法,提供更精准的推荐

风险评估

  • 客户不愿意提供规模信息:可能影响推荐准确性
  • 缓解措施:规模信息设为可选,基于已有信息进行推荐,引导客户补充信息

16.3 优化优先级

优化项 实施周期 预期效果 优先级
在线计算器 1个月 决策时间-80%,转化率+12% 🔴
首月特惠 1个月 转化率+25%,获客成本-50% 🔴
模块独立试用 2-3个月 模块渗透率+18%,客单价+12% 🟡
行业扩展(普拉提、拳击) 2-3个月 市场覆盖+30%,转化率+17% 🟡
基于规模维度的智能推荐 3-6个月 推荐准确率+25%,转化率+7% 🟡
推荐奖励 4-6个月 获客成本-60%,转化率+35% 🟡
行业扩展(游泳馆) 4-6个月 市场覆盖+20%,转化率+15% 🟡
忠诚折扣 7-12个月 留存率+18%,客单价+12% 🟢

综合预期

  • 转化率提升:30-40%
  • 获客成本降低:50-60%
  • 留存率提升:15-20%
  • 客单价提升:10-15%
  • 推荐准确率提升:25%

16.4 实施建议

第一阶段(1个月):立即实施

  1. 首月特惠:快速获客,提升转化率
  2. 在线计算器:降低决策成本,提升转化率

第二阶段(2-3个月):快速跟进 3. 模块独立试用:提升模块渗透率 4. 行业扩展(普拉提、拳击):扩大市场覆盖

第三阶段(4-6个月):稳定运营 5. 推荐奖励:建立推荐体系,降低获客成本 6. 行业扩展(游泳馆):完善行业覆盖 7. 基于规模维度的智能推荐:提升推荐准确率

第四阶段(7-12个月):长期优化 8. 忠诚折扣:提升留存率,增加收入稳定性


文档结束