连锁健身会员与私教排期履约落地

日期:2026-07-26

本文为工程实践复盘,客户信息已脱敏;所述数据均为示意值。

一、项目背景

某连锁健身品牌在全国有数百家门店,会员卡、私教课包、团课三类业务分别跑在会员系统、排课 Excel、第三方约课小程序三套互不相通的东西上。我们接手做调研时,门店最频繁的客诉集中在两类:一类是"约课撞期",会员约好了时间到店发现教练被排到别处;另一类是"教练被重复排班",一个教练同一时段被两个店同时占用。总部则完全看不到各店教练的真实产能和课消进度,所谓的排班全靠店长个人经验。

更深层的问题是私教课包。课包买了不消、快到期了会员才想起来,续费完全依赖教练个人自觉去提醒,数据散在各个店的本地表格里,总部既看不到哪批课包临期,也算不清教练的真实产出。我们当时定的目标,是用一套会员与课程中台把"人、课、场、钱"四件事串起来,让排班、约课、课消、续费在同一套数据上流转。这个项目里我们采用 XpShop 新普MALL 的会员体系作为统一身份底座,排课与课消单独建设为中台服务。

二、落地场景

落地之后,会员在任意门店的小程序上约私教或团课,系统会先做"教练加教室加时间"的三维约束校验,一旦冲突就直接提示可约时段;预约成功后,系统占用教练工时并锁定教室时段,不再出现重复排班。课消在上课签到那一瞬间自动扣减对应课包,课包余量低于阈值时,系统同时给会员和对应教练推送续费提醒,把原来靠人记的事变成系统自动触发。

教练排班也不再是 Excel,而是基于门店产能模板自动生成底稿,店长只需在底稿上做微调后发布。总部看板第一次能实时看到每家店的教练利用率、团课满座率、课消完成率,以及哪些会员的课包即将到期,运营动作从"凭感觉拍脑袋"变成了"看板驱动"。对教练而言,空闲时段可视化之后,门店之间的忙闲也能被拉平,减少了过去"忙的忙死、闲的闲死"的情况。

三、关键技术挑战与解决思路

第一是多门店课程与教练排班约束。我们把约束抽象成"资源,也就是教练和教室,乘以时间片"的占用模型:约课即申请占用,释放即回收,跨门店共用教练时按归属店的优先级排队,从机制上杜绝重复占用。

第二是约课冲突与容量控制。团课有满座上限,私教有并发上限,我们用了基于时间片的容量计数器,超容量直接拒约并推荐邻近时段,既保护了体验也保护了教练产能。

第三是课消统计与续费提醒。这里有个关键设计:课消与签到解耦,先签到再扣减,避免"约了没来也扣"引发纠纷;同时按课包到期日做三十天、十五天、七天三档梯度提醒,时机比一次性提醒准得多。

第四是教练绩效与排班。排班数据回流到绩效,教练的空闲时段被可视化,店长调班有了依据,排班不再是拍脑门的表格游戏。

四、效果数据

上线大约两个月之后,以脱敏示意口径来看:约课冲突率从之前个位数百分比,降到千分级;教练平均利用率提升了大约十五个百分点;课消完成率,也就是按期消完的课包占比,提升约两成;会员在到期前主动续费的比例明显上升,续费率环比提升约八个百分点;课程相关的客诉下降约四成。需要说明,这些是示意值,不列审计级精确数字。

五、可复用经验总结

约课先约束再放量,课消数据驱动续费,这是这个项目最核心的两句话。我们最大的教训,是早期把"约课"和"课消"做成同一事务,导致教练请个假一节课全乱;拆成占用模型加独立课消之后才稳定下来。另外续费提醒一定要基于课包的真实余量,而不是基于会员等级,否则提醒的时机永远对不上,会员只会觉得被打扰。

结语

健身行业数字化,痛点往往不在"有没有系统",而在"几套系统说不通一种语言"。把人、课、场、钱统一到一个中台之后,很多过去靠店长人盯人的事,自然就变成了系统能算清的事。续费率的提升,本质上不是因为提醒多了,而是因为课消数据第一次被总部真正看见。

回过头看,健身行业的数字化痛点,往往不在有没有系统,而在几套系统说不通同一种语言。把人、课、场、钱统一到一个中台之后,很多过去靠店长人盯人的事,自然变成了系统能算清的事。我们后来把这套中台的能力进一步开放给一线私教,做个人产能与课消看板,教练对自己每天空闲时段和待消课包一目了然,续费提醒也从被动等待变为主动经营。续费率的提升,本质上不是因为提醒变多了,而是因为课消数据第一次被总部真正看见、被门店真正用起来,运营终于有了统一的抓手。排班不再靠表格博弈,约课不再靠口头协调,这套纪律沉淀下来之后,新店复制也快了很多。

案例片段(已脱敏):排班约束与冲突检测核心规则(示意) - 占用:occupy(coach_id, room_id, slot) = acquire_lock WHERE NOT EXISTS(conflict)- 容量:团课 cur_count < cap AND slot_open,私教 concurrent < max- 课消:on_checkin(course_id) -> deduct(package_id) ; if remain<=3 then remind(user, coach)

案例片段(已脱敏):某门店上线首周观察(示意)——教练工时占用从平均 4.2 小时/天提升到 5.8 小时/天,午晚高峰冲突工单由每天 6–8 条降至 0–1 条。