GogoAI智慧健身场馆系统,时段计费功能开发方案
痛点分析
自助健身场馆的按时计费模式和传统次卡、月卡逻辑差异很大。早期方案大多写死单价,不区分高峰、平峰、夜间时段,无法做分时调价;进场计时、离场结算强依赖前端上报,容易出现离场上报丢失、重复结算、计时错乱。
计费规则分散在业务代码中,新增阶梯价、免费时长、单日封顶、节假日调价都需要改代码发布版本。会员存在多种支付账户,储值余额、优惠券、体验权益混用,扣费优先级不好控制;网络异常、门磁信号丢失时,会出现一直计费、账单无法闭环的问题。账单明细不透明,财务对账时很难拆分不同时段的营收,退款冲正链路缺失。
GogoAI智慧健身场馆系统独立设计时段计费引擎,把定价规则、计时会话、结算、扣费做成可配置模块,对接门禁、门磁、AI离场识别,实现无人场景下自动计时、分时计价、账单自动生成。
整体设计思路
后端采用Spring Boot + MyBatis Plus,Redis维护进行中的计费会话,消息队列异步落账单和扣费记录。模块分为定价规则配置、计费会话管理、时长计算引擎、结算扣费、账单对账五个部分。
计费会话生命周期:入场创建会话 → 持续计时 → 离场触发结算 → 生成账单 → 扣减余额/核销优惠 → 会话关闭。支持两种离场触发方式:用户小程序主动结束运动、门禁/门磁/AI识别离场自动结束。
核心数据表:price_rule定价规则表、charge_session计费会话表、charge_bill账单表、charge_deduction扣费流水表。定价规则支持门店、日期类型(工作日/周末/节假日)、时段区间、单价、免费时长、阶梯价格、单日封顶金额配置。
时段计费引擎核心代码实现
使用策略模式封装不同计费算法,支持基础按时计费、阶梯计费、封顶控制,进场和离场时间作为计算输入,自动匹配对应时段价格。
@Service @Slf4j public class TimePricingEngine { /** * 计算时段费用 * @param enterTime 入场时间 * @param leaveTime 离场时间 * @param rule 定价规则 * @return 计费结果 */ public ResultDTO<BigDecimal> calcFee(LocalDateTime enterTime, LocalDateTime leaveTime, PriceRule rule) { Duration duration = Duration.between(enterTime, leaveTime); long totalMin = duration.toMinutes(); // 免费时长判断 if (totalMin <= rule.getFreeMinute()) { return ResultDTO.success(BigDecimal.ZERO); } long chargeMin = totalMin - rule.getFreeMinute(); BigDecimal unitPrice = rule.getUnitPrice(); BigDecimal fee = unitPrice.multiply(BigDecimal.valueOf(chargeMin)); // 单日封顶控制 if (rule.getMaxPrice() != null && fee.compareTo(rule.getMaxPrice()) > 0) { fee = rule.getMaxPrice(); } return ResultDTO.success(fee); } /** * 按时间匹配定价规则 */ public PriceRule matchRule(Long storeId, LocalDateTime time) { // 匹配门店、星期、是否节假日、所在时段,返回对应的定价规则 return priceRuleMapper.selectMatchRule(storeId, time); } }计费会话放在Redis缓存,key设计为charge:session:userId:storeId,记录入场时间、会话状态、门店ID,防止同一用户在同门店同时存在多个计费会话。数据库会话状态:计费中、已结算、异常挂起、已取消。
进场、离场与会话闭环流程
用户扫码开门入场,权限校验通过之后,系统创建计费会话,写入数据库并缓存到Redis,标记状态为计费中。如果是按时计费模式,不再扣次卡次数,以时间计费为准。
离场环节优先依靠门磁、门禁传感器上报离场事件;传感器上报失败时,支持AI人数识别,场内人数减少时触发结算兜底。收到离场事件后,取出入场时间,调用定价引擎计算费用,生成账单,按照预设优先级扣储值余额、抵扣优惠券。
离场事件做幂等控制,同一个离场事件只结算一次。如果结算中途余额不足,账单标记为待支付,小程序推送待支付提醒,未完成支付前无法再次开启新的计费会话。
分时调价、阶梯计费与优惠叠加控制
定价后台可视化配置多个时段段,例如工作日18:00-22:00高峰涨价,22点后夜间低价;周末全天统一价格;节假日可以单独一套规则。阶梯计费可以设置:前2小时单价A,超出部分单价B。
优惠规则单独管控,区分是否允许和时段计费叠加,优惠券可以设置最高抵扣上限。同时兼容混合模式:部分会员使用次卡直接放行,不走时段计费;新用户可以配置首次体验免费,由引擎自动判断走哪一套计费分支。
异常兜底与防超长计费机制
无人场馆硬件信号丢失是高频风险点,比如用户已经离场,门磁没有上报,会话一直处于计费中,持续累加时长。系统增加定时巡检任务,扫描长时间未关闭的计费会话,到达最大允许时长阈值时自动暂停计费,生成异常账单,推送提醒给管理员人工复核。
网络中断时,门禁本地只记录进出事件,不本地结算;恢复网络后批量同步进场离场记录,后台按原始时间重新核算账单,保证计费不丢失、不重复。所有账单都保留每一段匹配的时段规则,明细可查看,方便用户和财务核对。
账单、扣费与财务对账
每一次结算生成独立账单,账单里包含入场时间、离场时间、有效计费时长、分段价格明细、优惠金额、实付金额。扣费流水和财务分账模块打通,时段计费订单会同步流入分账引擎,按门店分成规则计算营收。
退款时支持按账单原路冲正,生成反向扣费流水,财务报表自动剔除退款金额。后台可以按门店、日期、时段导出时段计费营收报表,统计高峰时段收入,辅助运营人员调整定价策略。
和其他模块联动
时段计费模块和入场权限控制模块、安防模块、会员账户模块联动。权限校验时判断会员是次卡通行还是按时计费;安防AI识别到人员离场时,作为结算触发源;会员账户统一管理储值余额、优惠券,扣费之后同步更新会员账户余额。
模块设计上和之前的多卡种、预约模块解耦,同一个场馆可以同时开放预约制场地、次卡散客、按时付费三种模式,互不干扰。
落地效果总结
时段计费模块落地GogoAI智慧健身场馆系统后,场馆运营方不用硬编码价格,在后台配置分时、阶梯、封顶规则即可快速上线按时付费产品,适合临时健身用户引流。
会话+定时巡检的兜底方案解决了无人场景下传感器失联、离场上报丢失导致的超长计费问题,账单明细透明,降低客诉。整套模块和购卡预约、门禁权限、财务分账、安防预警串联,完善自助场馆多样化收费能力,提升场地闲置时段利用率。