门店课消

围绕"学员"的对话式教务 / 门店运营管理系统
覆盖「招生 → 签约充值 → 排课课消 → 到店签到 → 督学续费」全生命周期,提供 Web 管理后台与员工移动端小程序,按角色双向隔离数据;到店签到支持手工打卡(图片/文字)、App 端刷脸签到、NFC 刷卡签到三种通道;并额外提供 AI 自然语言操作入口与免登录学员查询页,让经营数据"门店课消、管理有度"。
Web管理后台 H5/小程序/安卓 AI系统 三角色数据隔离 实时增量同步 业务操作复核 21个业务模块 M1–M21 三类充值项目(课包/储值卡/独立产品) 课程排课 · 一键扣消 App 端刷脸签到 NFC 刷卡签到 我的班级 门店账本(店主隐私) 行业文案映射(松鼠AI/培训/通用)
ABOUT

项目简介

「门店课消」是一套面向教培机构的数字化运营管理工具,将门店、员工、学员(会员)、充值项目(课包 / 储值卡 / 独立产品)、进账流水、消账记录、销售沟通、体验预约、督学规划、我的班级、课程排课、学员出勤与三种签到通道(手工 / 刷脸 / NFC)、门店账本、提醒与标签等核心业务全量数字化。其最大的设计特点是类微信对话式交互——所有业务操作(充值、课消、督学、出勤打卡、备注)都以消息形式沉淀在学员对话流中,大幅降低使用门槛。

3
子项目(后端 / 后台 / 小程序)
21
核心业务模块 M1–M21
3
角色(超管 / 销售 / 辅导)
196
角色隔离回归断言全通过
核心设计理念:围绕"学员"这一实体,所有业务操作都以对话消息的形式沉淀在学员对话流中;自动加入会话、撤回回滚、复核锁定,保证数据可追溯、可信。在「招生 → 签约充值 → 排课课消 → 督学续费」主干之上,另延伸出我的班级(按班级管理)、课程排课(按日期排课 + 一键扣消)、门店账本(店主隐私记账)与智能签到(App 端刷脸 1:N 识别 + 全端 NFC 刷卡,共用出勤打卡链路)四大能力。M1–M21 全部已交付:Web 后台与小程序双端对齐,人脸签到为 App 端专属、NFC 签到覆盖 App / H5 / 微信小程序。
小程序界面预览 共 19 屏 · 自动滚动,悬停暂停
界面 1 界面 2 界面 3 界面 4 界面 5 界面 6 界面 7 界面 8 界面 9 界面 10 界面 11 界面 12 界面 13 界面 14 界面 15 界面 16 界面 17 界面 18 界面 19 界面 1 界面 2 界面 3 界面 4 界面 5 界面 6 界面 7 界面 8 界面 9 界面 10 界面 11 界面 12 界面 13 界面 14 界面 15 界面 16 界面 17 界面 18 界面 19
LIFECYCLE

业务全生命周期

从线索到续费、再到门店经营记账,全链路闭环管理,每个环节的数据自动回流到学员对话流。

1

招生获客

销售沟通跟进线索(加微 → 诺访 → 到店 → 体验课 → 转化),体验课预约到店转化,一键转为正式学员。

2

签约充值

购买课包 / 储值卡 / 独立产品,自动生成实例与价格快照,实时累加累计充值。

3

排课课消

按日期排课(课程×时段×地点×老师×学员),一键按课包分组批量扣消,缺勤不扣;亦可单笔课消/核销,支持退费标记。

4

到店签到

三种通道共用一条打卡链路:手工打卡(按门店配置图片 / 文字)、App 端刷脸签到(本地识别、命中即签)、NFC 刷卡签到(App / H5 / 小程序)。缺勤填原因,日历热力图 + 按月次数统计,超管可补打卡。

5

督学续费

按周督学计划 + 编组矩阵 + 我的班级,到期 / 剩余课时 / 长时未课消自动提醒,促进续费。

6

经营记账

门店账本记录日常收支,经营看板看净利润与支出构成;收入可按消账 / 按进账口径切换。

ARCHITECTURE

双端协同架构

同一套后端,同时驱动 Web 管理后台(完整业务 + 复核 + 导出)与员工移动端小程序(对话式交互),数据实时互通。后端 Spring Boot 3.x + Java 21,20 个业务 REST 控制器,菜单扁平化为一级业务菜单由后端动态下发,门店账本更以「按用户可见」过滤器实现细粒度裁剪。

🖥️

Web 管理后台 · vue_naive_admin

Vue 3 + Vite + Naive UI。12 个业务菜单(门店 / 充值项目 / 学员 / 进账 / 消账 / 销售沟通 / 体验课 / 督学 / 我的班级 / 课程排课·日历式 / 数据统计 / 门店账本)+ 员工管理、系统日志与隐藏的角色管理。菜单与路由由后端动态下发并已扁平化为一级,支持 Excel 批量导入导出、复核列、绩效表导出、多维统计看板、出勤弹窗(含超管补打卡)、进账/消账的辅导老师纠错(仅超管)。

动态路由菜单扁平化菜单按用户可见复核管理统计看板批量导入导出免登录查询页
📱

员工移动端小程序 · uni-preset-vue-vite-ts

UniApp + TDesign,一套代码编译 H5 / 微信小程序 / 安卓 App 三端。4 个 Tab(记录 / 学员 / 发现 / 我),以类微信对话流承载充值、课消、督学、出勤、我的班级、课程排课、门店账本等业务操作;发现页提供人脸签到(App 专属)与NFC 签到(全端)入口,支持增量同步、微信级消息分页与实时刷新。

H5微信小程序安卓 App对话式交互增量同步刷脸签到NFC 刷卡行业文案映射
⚙️

后端服务 · isme-java(Spring Boot 3.x + Java 21)

20 个业务 REST 控制器,MyBatis-Plus + MapStruct 持久层,Liquibase 自动建表与种子数据,Spring Security + JWT 鉴权,Redis 缓存与分布式锁,WebSocket 实时通知,/biz/sync 增量同步接口覆盖 8 个业务域;人脸签到只提供底库、打卡落库与照片存储,识别全链路在设备本地完成。

SMART CHECK-IN

智能签到 · 三种到店签到通道

到店签到的真实性,直接决定课消与出勤统计的可信度。系统提供手工打卡(按门店配置图片水印 / 文字模板)、App 端刷脸签到(本地 1:N 识别、命中即签)、NFC 刷卡签到(App / H5 / 微信小程序三端)三条通道,全部复用同一条出勤链路:每日一次校验、角色数据隔离、聊天系统消息留痕、签到明细可撤销。

🖐️

手工打卡 / 缺勤

按门店出勤配置执行:图片打卡(后端统一压缩并叠加门店水印文字与时间)或文字打卡(模板支持学员姓名变量)。缺勤填写原因;超管可补打卡、可取消打卡。

图片水印文字模板超管补卡日历热力图
🙂

刷脸签到 · App 专属

前台设备对准摄像头持续检测,端上完成检测 → 对齐 → 128 维向量 → 1:N 比对,命中即提示「XX 签到成功」并震动。识别全链路在设备本地完成,人脸原图不上云。

本地识别乐观打卡会话内防重底库秒开
💳

NFC 刷卡签到 · 全端

学员持 IC 卡贴读卡设备完成签到,后端按卡号定位学员并走同一打卡链路(文案追加「(NFC刷卡)」)。一卡一学员,重复绑卡当场提示对方学员;绑定随添加学员完成,换绑在学员信息页。

App/H5/小程序卡号归一化仅 Android 读卡
刷脸签到 · 一次进入 = 一个持续监测会话 会话内可连续为多名学员签到
1

进页秒开

先读本地底库缓存立即可用,同时后台拉最新底库(向量 + 各学员门店的打卡方式一并下发,打卡前不再串行查接口)。

2

引擎预热

页面挂载即初始化检测 / 识别引擎,与摄像头启动并行,压缩首帧识别前的空白期;不满足条件(无权限、底库为空)直接给明确遮罩文案。

3

持续检测

逐帧检测人脸框与关键点,多脸按面积取最大;脸太小提示「请靠近一点」。状态位常驻刷新,绝不让操作者面对"什么都没发生"。

4

周期识别

关键点对齐 112×112 取 128 维向量,限频 + 命中退避 + 只吃新鲜快照,识别绝不阻塞检测。

5

命中即签

余弦相似度 ≥ 0.50 且领先第二名 ≥ 0.08 才判同一人;立即提示「XX 签到成功」+ 震动 + 记入本次签到列表(零网络等待)。

6

后台落库

打卡请求(含命中帧编码落盘)后台异步提交;任何后端错误不上屏,但会静默撤回乐观展示,考勤以后端落库为准。

签到明细 · 本次 / 历史双模式

进页默认展示本次会话(人脸与同步 NFC 记录混排,可搜索、可取消签到);点「历史」切换为全量签到记录——人脸(附照片与相似度)、NFC(蓝标签)、手动(灰标签)按日期分组、分页加载。取消签到联动清理人脸 / NFC 两个签到页的本次列表。

人脸底库与录入 · 录入即有、随人更新

添加学员 / 学员信息页拍照 → 本地检测对齐取向量 → 与底库查重(相似度过高提示「疑似重复录入」)→ 向量随学员新增 / 修改落库。人脸签到页的底库人数卡点一下即可重载底库,无需退出页面。

合规与取舍:刷脸签到只在 App 端提供(H5 / 小程序无 WASM 运行环境,且人脸生物特征采集有平台合规限制),端侧模型与推理库只打进 App 产物;不做手动选人、不做抓拍留存,仅「图片打卡」门店上传识别命中的那一帧作为出勤凭证。刷脸与 NFC 均不新增考勤口径——同一学员当日到店 / 缺勤仍只允许一条记录。
AI ASSISTANT

AI 智能端 · 自然语言操作系统

在 Web 后台与员工小程序之外,门店课消提供 AI 自然语言操作入口:用户用日常语言下达指令,AI 解析意图后调用现有后端接口完成教务操作,或生成经营分析与话术建议。把"点十几下菜单"变成"说一句话"。

🤖

对话式指令入口

在 AI 对话框中用自然语言描述诉求,AI 自动识别学员、金额、课包等要素,并经确认后执行——全程复用既有鉴权与角色隔离,超管/销售/辅导老师各按权限行事。

自然语言理解意图识别操作前确认复用既有权限
🔌

Skills · 基于 workbuddy 技能平台

AI 智能端接入 workbuddy 的 Skills 能力,将各教务动作封装为可调用的 skill,由 AI 在对话中按需编排组合调用,对应系统已有的 REST 接口与业务规则(价格快照、退费标记、督学联动等)。

workbuddy Skills标准接口对齐可编排组合结果回对话流
OPERATION

操作类 Skills

充

办理充值

"给张小明充 60 课时秋季班课包 ¥4200"

消

发起课消

"给李雷消 2 课时,辅导老师王老师"

查

查询余额/课时

"王芳还剩多少有效课时?"

约

预约体验课

"给赵同学约本周六试听课"

督

生成督学计划

"给陈思远排下周数学督学计划"

卡

到店打卡/缺勤

"给张小明补昨天的到店打卡"

签

签到明细查询

"今天刷脸和 NFC 签到都有谁?"

贴

NFC 绑卡/换绑

"把王小二的卡换绑成 A1B2C3D4"

提

续费提醒

"把 7 天内到期、剩余≤3 课时的学员加入提醒"

排

课程排课

"给王老师周一 19:00 排一节数学课,带上 3 名学员"

账

门店记账

"记一笔支出:房租 ¥8000,微信支付"

INSIGHT

分析 / 生成类 Skills

报

经营周报

"生成本周门店流水与转化概览"

警

流失预警

"哪些学员 30 天没课消了?"

话

话术建议

"给很久没续费的 VIP 写条跟进话术"

稿

督学草稿

"起草一份期末复习督学内容"

析

转化漏斗解读

"解读本周销售漏斗哪个环节掉量"

结

学员小结

"总结刘洋这学期的课消与续费情况"

AI 端所有写操作均走与后台/小程序相同的后端接口与鉴权链路——角色数据隔离、复核锁定、分布式锁、对话流沉淀全部生效,AI 只是指令的"翻译层",不绕过任何既有业务规则。
MODULES

21 个核心功能模块

M1–M21 全部已交付,覆盖教务运营的完整业务面:M1–M19 后端 / Web 后台 / 小程序双端对齐,M20 人脸签到为 App 端专属,M21 NFC 签到覆盖 App / H5 / 微信小程序。

M1

门店管理

机构门店基础信息,启停与删除关联校验,门店出勤配置入口。

✅ 已交付
M2

员工管理

并入用户管理,累计客户/累计耗课课时自动统计。

✅ 已交付
M3

学员管理

核心对象,聚合课包/充值/消费/提醒/标签;支持学员批量迁移。

✅ 已交付
M4

充值项目管理

三类:课包 COURSE / 储值卡 CARD / 独立产品 SQUIRREL,字段随类型切换。

✅ 已交付
M5

进账(流水)记录

新签/续费流水,自动建实例 + 价格快照 + 聊天系统消息;辅导老师可由超管在编辑弹窗改写(须已绑定该学员,已复核锁定)。

✅ 已交付
M6

消账记录

课消流水,支持小数课时、退费标记,按三类项目分别描述;超管行内编辑可改辅导老师与备注(改老师时累计耗课按差值平移)。

✅ 已交付
M7

数据统计

门店流水/销售漏斗/充消/签单/续费率/学员增长/出勤等 30+ 个聚合接口,支持导出 Excel 与绩效表。

✅ 已交付
M8

销售沟通

销售跟进过程记录,加微/诺访/到店/体验/转化标记,自动计序号。

✅ 已交付
M9

体验课预约

线索与到店转化,转为正式学员,同名同手机号冲突拦截。

✅ 已交付
M10

督学规划

按周计划 + 自定义编组 + 学员×周次矩阵 + 批量状态。

✅ 已交付
M11

对话模块

会话列表 + 共享时间线(备注/图片/系统消息),微信级分页加载。

✅ 已交付
M12

续费/未课消提醒

到期档 + 剩余课时档(≤3/≤6/≤10)+ 未课消三档区间,个人状态管理。

✅ 已交付
M13

会员标签

流失/次卡/月卡/年卡预置,打标与筛选,标签增长统计。

✅ 已交付
M14

个人信息

账号/姓名/角色切换/改密/头像。

✅ 已交付
M15

学员出勤

到店打卡/缺勤(图片或文字),日历热力图 + 按月次数 + 超管补打卡;手工 / 刷脸 / NFC 三种签到共用同一链路与「每日一次」校验。

✅ 已交付
M16

学员公开查询

免登录 /query,手机号 + 图形验证码查本人项目明细。

✅ 已交付
M17

我的班级

复用督学编组表 + 成员课包;班级/学员/课包管理。仅超管与辅导老师可见,销售不可读。

✅ 已交付
M18

课程排课

按日期排课(课程×时段×地点×老师×一组学员,各绑课包);一键按课包分组批量扣消、缺勤不扣,全部已复核 / 全部撤回(仅超管);删除排课仅未扣消可删,修改排课为覆盖式通知。

✅ 已交付
M19

门店账本

门店日常收支记账 + 按月经营看板 + 收入口径切换;全局唯一按「用户」鉴权(店主 id=1 恒可见并可邀请超管),销售 / 老师不可访问。

✅ 已交付
M20

人脸签到(刷脸)

App 端专属:端上 YuNet + SFace 本地 1:N 识别、命中即签的乐观打卡(错误静默、失败撤回)、会话内防重;底库随接口下发秒开,人脸原图不上云。

✅ 已交付 · 仅 App
M21

NFC 刷卡签到

全端:学员持卡贴设备即签到,走 M15 同一打卡链路(文案留「(NFC刷卡)」、卡号留痕);绑卡随添加学员完成,换绑在学员信息页编辑弹层。

✅ 已交付 · 全端
ROLES

三角色数据权限隔离

后端 Service 层行级过滤(requireOwnStudent / requireMyPlan 等)+ 前端按角色隐藏入口,双层防护。同一账号可多角色,登录后随时切换。门店账本是全局唯一「按用户而非角色」鉴权的模块;刷脸 / NFC 签到只增加打卡入口,不放大任何数据范围——仍按角色限定到本人客户 / 本人负责学员。

超

超级管理员

SUPER_ADMIN
  • 全模块全数据可见可操作
  • 机构配置与权限管理
  • 充值/课消/沟通等记录复核、排课全部复核与撤回、删除任意未扣消排课
  • 学员出勤补打卡、取消签到、调整课包有效期
  • 进账 / 消账的辅导老师纠错(仅超管,已复核锁定)
  • 门店账本:店主(id=1)恒可见,其余超管须受邀
销

销售

SALES
  • 仅本人名下客户
  • 跟进线索、销售沟通、体验邀约
  • 促成签约充值、增删改学员、学员迁移(可给新学员绑 NFC 卡)
  • 消账记录只读、不可改辅导老师;无督学、我的班级、门店账本入口
  • 课程排课:仅可看课程卡片,无明细权限
辅

辅导老师

TUTOR
  • 仅本人负责学员
  • 课消、填写督学计划、出勤打卡、管理本人班级
  • 课程排课:仅可进本人课程明细,排 / 改 / 删 / 扣消本人排课
  • 对学员完全只读(不可增删改/启停/充值)
  • 销售沟通只读、无销售沟通统计、无门店账本
HIGHLIGHTS

技术亮点

在性能、安全与体验上做了多项工程化设计,支撑真实经营场景下的高并发与数据可信。

🔄

增量同步 + WebSocket

/biz/sync 以 since 游标增量拉取,覆盖 8 个业务域;WebSocket /ws/sync 仅传"有变化"轻通知,断线退化为 60s 轮询。实测增量 avg 22ms。

🔒

角色数据隔离(双层)

后端 requireOwnStudent / requireMyPlan 等方法级 + 行级过滤,前端 v-permission 隐藏按钮。196 项断言回归 0 失败。

🧾

业务复核锁定

充值/消费/沟通/体验课/督学/聊天系统消息支持"已复核",已复核记录禁止编辑/删除/撤回,业务记录与聊天消息复核状态双向同步,保证数据可信。

⚡

Redisson 分布式锁

充值/课消/体验课转正等关键路径用 Redisson 锁串行化,持锁至事务提交后释放,防止并发累计值错乱与超扣课时。

↩️

消息撤回 + 业务回滚

长按系统消息可撤回,在事务内回滚业务影响(删除课包实例、恢复课时、删计划、撤回出勤打卡);撤回与复核状态互斥,数据始终自洽。

🏷️

对话式业务沉淀

充值/课消/督学/出勤等自动生成系统消息(角标区分充值/消费/退费/计划/到店/缺勤),自动把学员加入销售/辅导/超管会话列表,经营过程一目了然。

💬

微信级聊天体验

进入会话瞬时定位底部、触顶提前预加载并以高度差校正保持视野不抖动;图片按真实宽高预留气泡高度、上传路径 30 天长缓存,头像图片二次进入秒开。

📅

出勤打卡与水印

按门店配置图片/文字打卡,图片由后端统一压缩落盘并叠加地址与时间水印;出勤记录以日历热力图 + 按月出勤次数呈现,超管可补打卡、点格取消。

🗄️

Liquibase 自动建表

变更集带 preConditions 可重复启动;角色/菜单/演示用户/预置标签种子自举;业务账号由 demo_data.py 运行时自动创建。

🏭

Redis 缓存与多实例

门店/课包/标签下拉缓存;验证码、限流、登录防爆破跨实例共享,支持 caffeine 降级回退,支撑水平扩展。

🌐

行业文案映射

松鼠AI / 培训机构 / 通用三套映射,仅切换界面文案与 tabBar 文字(学员↔会员、课包↔服务包、课时→次),后端接口与字段完全一致。

🗓️

课程排课 · 一键扣消

按日期排课,学员逐人绑定课包、出勤可切换;一键扣消按课包分组批量写消账(复用既有消费流水线),缺勤不扣、余量不足整批拦截;状态显示即将开始、进行中、已扣消、已复核,超管可全部复核与全部撤回。

🔐

菜单「按用户可见」

全系统唯一按用户维度的菜单鉴权(MenuPermissionTreeFilter):门店账本菜单不绑角色,仅店主与被邀请超管可见,未受邀者菜单不出现且路由不注册,另有接口层兜底拦截。

📒

门店账本 · 只读口径复合

日常收支手工记账 + 经营看板(净利润/营收/支出 + 支出构成 Top5);本月营收可按「消账收入 / 进账收入」口径切换——按月份把课消/进账逐条转成收入行在页面复合展示,不落库、不写聊天、不参与复核。

👥

我的班级

班级/学员/课包一体化管理;辅导老师仅本人班级、超管按老师分栏看全部,销售不可见,与后端行级隔离一致。

🧠

端侧人脸识别(本地 1:N)

YuNet 检测 + SFace 128 维嵌入全部在设备本地(WASM)完成,底库向量随接口下发、本地缓存秒开;识别限频 + 命中退避 + 只吃新鲜快照,避免同步推理饿死检测循环;判定要求「最高分 ≥0.50 且领先第二名 ≥0.08」,把陌生人误签压到最低。

⚡

乐观打卡 + 静默撤回

刷脸命中即刻上屏「签到成功」(与已打卡回显同速),打卡请求与照片落盘全部后台异步;任何后端错误不上屏,但必须撤回乐观展示。会话内防重标记不回退,从根上避免「成功→撤回→再识别」死循环。

💳

三端 NFC 读卡

App 用 Native.js 反射系统 NfcAdapter(不依赖打包时的 NFC 原生模块,标准基座可用)、H5 走 Web NFC、小程序走 NFCAdapter;卡号按同一规则归一化(去分隔符转大写 HEX),一张卡只能绑一位学员,读卡预查 + 后端兜底双保险。

STACK

技术栈总览

层技术选型
后端框架Spring Boot 3.x + Java 21
ORM / 持久层MyBatis-Plus 3.5 + MapStruct(DTO/VO 转换)
数据库MySQL 8(生产)/ H2 内存库(开发);Liquibase 变更集驱动建表与种子
缓存 / 锁Redis(门店/课包下拉缓存 + 分布式锁)+ Caffeine 降级
实时通知Spring WebSocket(/ws/sync 轻通知)+ HTTP 增量同步(/biz/sync)
安全Spring Security + JWT(自定义 adminAuthz 方法级鉴权);免登录查询走图形验证码 + 一次性校验
Web 前端Vue 3 + Vite + Naive UI(vue_naive_admin 脚手架)
小程序UniApp + @tdesign/uniapp(H5 / 微信小程序 / 安卓 App 三端;人脸签到为 App 专属,NFC 读卡三端均仅 Android)
端侧 AI(人脸)onnxruntime-web(WASM)+ YuNet 检测 320px / SFace 128 维量化识别;renderjs 视图层取流与推理、逻辑层负责底库与打卡;模型仅打进 App 产物
NFC 读卡App:Native.js 反射 Android NfcAdapter(前台分发 + newintent);H5:Web NFC(NDEFReader,需 HTTPS);小程序:wx.getNFCAdapter