门店课消

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

项目简介

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

3
子项目(后端 / 后台 / 小程序)
21
核心业务模块 M1–M21
3
角色(超管 / 销售 / 辅导)
196
角色隔离回归断言全通过
核心设计理念:围绕"学员"这一实体,所有业务操作都以对话消息的形式沉淀在学员对话流中;自动加入会话、撤回回滚、复核锁定,保证数据可追溯、可信。在「招生 → 签约充值 → 排课课消 → 督学续费」主干之上,另延伸出我的班级(按班级管理)、课程排课(按日期排课 + 一键扣消)、门店账本(店主隐私记账)与智能签到(App 端刷脸 1:N 识别 + Web 后台实时签到 + 全端 NFC 刷卡,共用出勤打卡链路)四大能力。
小程序界面预览 共 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

招生获客

销售沟通跟进线索(AI 语音录入 → 自动结论与跟进标签 → 加微 → 诺访 → 到店 → 体验课 → 转化),体验课预约到店转化,一键转为正式学员。

2

签约充值

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

3

排课课消

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

4

到店签到

三种通道共用一条打卡链路:手工打卡(按门店配置图片 / 文字)、刷脸签到(本地/服务器识别、命中即签)、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 个业务域;人脸签到双形态——App 端只提供底库、打卡落库与照片存储(识别全链路在设备本地完成),Web 后台实时签到由服务端对上传帧完成检测识别后落库。

SMART CHECK-IN

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

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

🖐️

手工打卡 / 缺勤

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

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

刷脸签到 · App + Web 后台

App 端在设备本地完成检测 → 对齐 → 128 维向量 → 1:N 比对,命中即提示「XX 签到成功」并震动,人脸原图不上云;Web 后台门店管理页「实时签到」弹窗则将摄像头帧流上传,由服务端检测识别后直接落打卡——两形态共用同一底库与判定阈值。

本地识别(App)服务端识别(Web)乐观打卡会话内防重底库秒开
💳

NFC 刷卡签到 · 全端 + Web

学员持卡贴读卡设备完成签到,后端按卡号定位学员并走同一打卡链路(文案追加「(NFC刷卡)」)。App / H5 / 小程序读 NFC 卡 UID;Web 后台另支持键盘口(HID)ID 读卡器——十进制卡号自动识别转换为十六进制 UID。一卡一学员,重复绑卡当场提示对方学员。

App/H5/小程序Web 键盘口读卡十进制自动识别卡号归一化
刷脸签到(App 端) · 一次进入 = 一个持续监测会话 会话内可连续为多名学员签到
1

进页秒开

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

2

引擎预热

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

3

持续检测

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

4

周期识别

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

5

命中即签

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

6

后台落库

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

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

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

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

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

合规与取舍:刷脸签到提供两种形态——App 端(端侧本地识别,H5 / 小程序无 WASM 运行环境且人脸生物特征采集有平台合规限制)与 Web 后台实时签到(帧流上传服务端识别,端上不做任何人脸计算);端侧模型与推理库只打进 App 产物。App 端人脸原图不上云;Web 后台仅上传摄像头帧流,命中帧作为出勤凭证。不做手动选人、不做抓拍留存。刷脸与刷卡均不新增考勤口径——同一学员当日到店 / 缺勤仍只允许一条记录。
SALES COMMUNICATION

销售沟通 · 打完电话,跟进结论自己长出来

教培机构的线索大半活在电话和微信里,最容易丢的不是客户,而是「这次到底聊了什么、下一步该谁做什么」。销售沟通模块把这段链路做成录进去就有结论:电话、录音、上传、手打四个入口,点下去立刻生成一条沟通明细;语音边说边转成文字,随即 AI 边想边写,输出【沟通要点 / 客户意向 / 异议与顾虑 / 跟进建议】四段结论,并自动打上四档跟进标签——列表上只看得到最近一次的标签。

🎙️

四条录入链路,一个落点

电话(拨号后回来补传通话录音)、录音(应用内直接录)、上传(本地音频,≤200MB 且走格式白名单)、输入(手打一段话,≤4000 字)。四者殊途同归:都写同一条沟通明细,后续转写、分析、标签完全一致。

电话录音上传手打
🧠

AI 四段结论 · 边想边写

转写完成自动进入分析:先流式输出思考过程,再逐段写正文——沟通要点、客户意向、异议与顾虑、跟进建议。提示词带着「已到店 / 已参与体验课」这些阶段信息,不会把老客户按陌拜口吻来写。

四段固定结构思考可见阶段感知
🏷️

四档跟进标签,跟进一目了然

AI 在【跟进建议】段必须给出一个类别,后端把它原样存成中文(不存码),列表、详情、归档三页直接显示,颜色语义统一。只取最近一次沟通的标签,最新那次没结论就留空,不往前回落——宁可没有,也不给过期的判断。

快速 / 普通 / 暂缓 / 建议归档显示最新一次
一次跟进的全流程 · 从按下按钮到看见结论 每步都可在页面上看到进展,不存在"点了没反应"
1

建记录

点电话 / 录音 / 上传 / 输入,立刻生成一条明细并展开在该线索下,不必等转写完成。

2

转写

录音走实时通道逐字上屏;上传与通话录音走后台整段转写。状态标「转写中」。

3

思考

边想边显示思考过程,用户看得见 AI 正在做什么,长内容也不会以为卡住了。

4

结论

四段正文逐段写入;同时把主表的「最近沟通结果 / 汇总时长」一并刷新。

5

打标

从建议段抽出四档类别写入线索主表,列表立刻可见,只显示最新一次。

6

复盘

超管复核锁定;销售按标签排优先级;统计页看加微 → 诺访 → 到店 → 体验 → 转化漏斗。

ONE LOG

一条沟通明细长什么样

第 3 次沟通 · 电话 · 4 分 12 秒 快速跟进
转写原文

家长问了暑期班的课时和价格,说孩子现在二年级,担心跟不上;约好周六上午来试听……

沟通要点

关注暑期班课时安排与价格,孩子二年级、担心跟不上进度。

客户意向

意向明确,已接受试听邀约,属近期可成交客户。

异议与顾虑

担心班级节奏与孩子基础不匹配,需要看到分层教学证据。

跟进建议

快速跟进:48 小时内发一期同龄班课堂视频,并确认周六试听到店。

正文逐段流式写入,思考过程单独可见;同一屏里既有原话也有结论,不用再靠回忆补记录。

TAGS

四档跟进标签

快速跟进

有明确意向或时间点

48 小时内再联系一次。

普通跟进

有需求但没定时间

一周内跟进一次,按常规节奏。

暂缓跟进

短期不具备条件

按月回访,不占用日常精力。

建议归档

无继续跟进价值

AI 只给建议,归档仍是人工动作。

标签的抽取规则是工程化的:只读【跟进建议】段的段首 60 字,取出现位置最靠前的类别词,不按固定优先级硬套——"快速跟进:先发资料,两周无回应再建议归档"这种句子里两个类别词同时出现,按优先级匹配就会把档判错。

📥

线索池 · 导入 + 轮询分配

销售主管在 Web 后台 Excel 导入成批线索进「线索池」,再按数量分配给多名销售——按选择顺序轮询发牌,可留空表示全量分配。每次分配都写分配记录,谁在什么时候拿了多少条,事后可查,避免"好线索都进了同一个人手里"的争议。

Excel 导入轮询分配分配留痕来源文件可溯
🛠️

入口可配 · 开关只影响界面

四个录入入口的显隐由后端配置决定,用于按门店能力裁剪,例如没配通话录音就只留「录音 / 上传 / 输入」。开关只控制按钮显示,不拦接口——历史数据与其它端不会因此失效。

系统配置环境变量可覆盖fail-open
端上兼容与情绪识别:录音、上传录音文件、手动输入后AI分析 在 Web / H5 / 小程序 / App 都可用;其中H5 端和小程序支持录音实时转文字,Web和APP端支持录音完成后转文字。录音支持情绪识别,AI分析时会纳入情绪和历史记录进行分析,力求了解客户的真实情况,听懂潜台词,给出准确的跟进建议。
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 端(本地识别)与 Web 后台实时签到(服务端识别),M21 NFC 签到覆盖 App / H5 / 微信小程序并另有 Web 后台键盘口读卡。

M1

门店管理

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

✅ 已交付
M2

员工管理

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

✅ 已交付
M3

学员管理

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

✅ 已交付
M4

充值项目管理

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

✅ 已交付
M5

进账(流水)记录

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

✅ 已交付
M6

消账记录

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

✅ 已交付
M7

数据统计

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

✅ 已交付
M8

销售沟通

线索 + 沟通明细两层模型;电话 / 录音 / 上传 / 输入四条 AI 录入链路,语音实时逐字转写,AI 输出四段结论并打四档跟进标签;含线索池导入与轮询分配、复核锁定、独立归档页。

✅ 已交付
M9

体验课预约

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

✅ 已交付
M10

督学规划

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

✅ 已交付
M11

对话模块

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

✅ 已交付
M12

续费/未课消提醒

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

✅ 已交付
M13

会员标签

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

✅ 已交付
M14

个人信息

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

✅ 已交付
M15

学员出勤

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

✅ 已交付
M16

学员公开查询

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

✅ 已交付
M17

我的班级

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

✅ 已交付
M18

课程排课

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

✅ 已交付
M19

门店账本

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

✅ 已交付
M20

人脸签到(刷脸)

App 端:端上 YuNet + SFace 本地 1:N 识别、乐观打卡(错误静默、失败撤回)、会话内防重;Web 后台实时签到弹窗:摄像头帧流上传服务端识别,与 App 共用底库与阈值,人脸原图不上云。

✅ 已交付
M21

NFC 刷卡签到

全端(App / H5 / 小程序)+ Web 后台键盘口(HID)读卡器:走 M15 同一打卡链路(文案留「(NFC刷卡)」、卡号留痕);绑卡随添加学员完成。

✅ 已交付
ROLES

三角色数据权限隔离

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

超

超级管理员

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

销售

SALES
  • 仅本人名下客户
  • 跟进线索、销售沟通、体验邀约
  • 四条 AI 录入链路记沟通(电话 / 录音 / 上传 / 输入),结论与跟进标签自动生成
  • 促成签约充值、增删改学员、学员迁移(可给新学员绑 NFC 卡)
  • 消账记录只读、不可改辅导老师;无督学、我的班级、门店账本入口
  • 课程排课:仅可看课程卡片,无明细权限
辅

辅导老师

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

技术亮点

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

🔄

增量同步 + WebSocket

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

🔒

角色数据隔离(双层)

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

🧾

业务复核锁定

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

🎧

实时语音转写

录音时把 16k PCM 以纯 JS 编码实时上行(WebSocket /ws/asr-realtime,先连通道再开麦,避免开头几句话被吞),识别文本逐字回写到明细;暂停时当前这句即定稿,断开前先取快照再决定「收尾定稿」还是「整段落盘转写」。同一条明细只允许一路桥接,后来者会被明确拒绝。

📡

AI 流式输出 · 偏移轮询替代 SSE

AI 的思考与正文不在请求里干等:服务端把生成快照存进内存流仓库,前端按字符偏移只取增量(r/t/c),800ms 一跳,断网重进也能接着看。相比 SSE 不怕移动端代理截断,也不占长连接;服务重启后未完成的生成改判失败并保留原文,可一键重跑。

📲

H5 重载兜底

安卓微信 / X5 在 hash 路由页选文件后会整页重载,tel: 拨号本身就是一次导航——两者都会冲掉页面内存里的状态。做法是:选文件用单例 input(只降透明度、不重建)并在前后写本地标记,重载后主动补问;拨号改由隐藏 iframe 承载(仅安卓,iOS 仍用 location);「是否补传录音」的标记应答后才清。

🗂️

线索池导入与轮询分配

成批线索从 Excel 进池后按数量分配给多名销售,按选择顺序轮询发牌,可留空表示全量;每次分配写分配记录,来源文件与分配去向都可回查。线索从"谁先看到归谁"变成可审计的分配动作。

⚡

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、Web 后台支持键盘口(HID)读卡器;卡号按同一规则归一化(去分隔符转大写 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;Web 后台:键盘口(HID)读卡器捕获 + 十进制卡号自动识别(大端 / 字节序反转双候选)
语音识别(ASR)阿里云百炼「千问 ASR」,按音频长短自动三档路由:qwen3-asr-flash(同步,短音频)→ qwen3-asr-flash-filetrans(超限转异步长音频,最长 12 小时)→ qwen3-asr-flash-realtime(WebSocket 双向流逐字识别);开逆文本标准化(「三千八」→「3800」),能同时捕获说话人情感