全栈项目实战手记|艺培场馆课时预约小程序后台开发踩坑复盘(课程、学员、权限配置类 Bug)

全栈项目实战手记|艺培场馆课时预约小程序后台开发踩坑复盘(课程、学员、权限配置类 Bug)
承接前面三篇产品设计与素材汇总本篇聚焦纯管理员后台内部开发阶段遇到的真实业务 Bug只讲后台模块自身问题。 全部问题均来自实际功能测试按照现象 → 根因分析 → 修复方案 → 开发启示的结构整理覆盖排班、课程管理、学员档案 套餐、核销管理、权限账号、列表筛选、页面 UI、日志模块做 B 端小程序后台业务开发可以作为避坑参考。一、排班管理模块踩坑排班是教务最高频操作业务校验规则多也是后台 Bug 集中爆发区域。坑 1编辑排班时没有覆盖旧数据反而新增一条排班记录现象进入已有排班点击编辑修改时间、教师等信息后保存数据库会多出一条全新排班原有旧排班数据依旧保留造成同一时段重复排班后台列表出现重复班期。根因调用接口没有传入目标排班的_id主键后端逻辑直接走新增分支没有执行更新逻辑前端编辑弹窗没有正确回填主键参数。修复方案编辑弹窗打开时带入当前排班唯一 ID后端做分支判断存在 ID 执行更新无 ID 才执行新增增加业务层校验防止无 ID 的编辑请求。开发启示新增 / 编辑复用同一弹窗是常见开发模式必须保证编辑场景主键 ID 完整透传到后端不能完全依靠前端页面限制后端要做二次防护。坑 2教室同一时段排班冲突校验缺失允许重复排课现象同一教室、同一个时间段可以重复创建多条排班出现教室资源冲突同一个教室同时开设两节课。根因仅在前端做了简单校验前端校验可以被绕过后端保存排班接口缺少教室 时段的数据库层面冲突判断。修复方案后端新增校验逻辑新增、修改排班时查询当前教室该时间段是否已存在有效排班存在则直接拦截返回业务错误禁止保存。开发启示资源冲突类校验不能只依赖前端后端必须实现强校验防止抓包绕过前端限制产生脏数据。坑 3教师休息日没有做排课拦截休息日依然可以创建排班现象后台给教师配置好了每周休息日新增排班依旧可以把课程排到教师休息日。根因教师休息日配置只做了页面展示排班保存接口没有读取教师休息日配置做业务拦截。修复方案后端排班保存接口读取教师固定排班配置判断所选上课日期是否属于休息日如果属于直接弹窗提示拦截保存。开发启示配置类参数不要只做页面展示涉及业务变更的接口都要读取配置参与校验。坑 4批量生成排班发生冲突时错误提示笼统看不到冲突明细现象批量导入生成多条排班部分排班发生教室、教师冲突仅提示 “部分排班失败”无法看到到底哪些日期、哪些时段冲突教务排查困难。根因批量接口只统计成功、失败计数没有收集每一条失败记录的冲突原因。修复方案批量循环处理每一条排班把冲突的日期、时段、冲突原因收集返回给前端弹窗展示明细列表。开发启示批量操作除了成功失败总数尽量返回失败项明细降低使用者排查成本。坑 5手动修改课程状态未联动更新内部关联字段现象管理员手动把排班标记为「已取消」仅修改页面展示状态底层manualStatus标记字段没有同步写入清除手动状态时无法恢复系统自动计算。根因状态修改接口只修改对外展示 status漏掉manualStatus专属人工标记字段赋值。修复方案手动修改状态同时写入manualStatus清除手动状态接口将该字段置空恢复系统自动计算逻辑。开发启示存在 “系统自动计算 人工干预” 两套状态逻辑时要区分业务状态字段与人工标记字段两个字段同步维护。二、课程 分类管理模块踩坑坑 6课程移入回收站后依然可以被绑定到新排班现象课程移入回收站已经逻辑删除管理员新建排班时下拉选择框还能看到该课程可以继续创建排班。根因回收站只在课程列表做过滤排班的课程下拉选择接口没有过滤 isDelete 已标记删除的课程。修复方案所有读取课程下拉、课程选择的接口统一增加过滤条件过滤回收站标记课程回收站课程禁止被新排班引用。开发启示逻辑删除的数据不能仅仅在列表页隐藏所有关联下拉选择、查询接口都要带上删除状态过滤条件。坑 7删除二级分类时没有校验是否存在关联课程现象二级分类下面还挂载有正常课程后台可以直接删除该二级分类导致课程的分类 ID 变成无效 ID课程分类展示错乱。根因删除二级分类接口没有做关联引用校验直接执行删除。修复方案删除前查询该分类下是否存在有效课程存在关联课程则拦截删除提示需要先转移或者删除下属课程。开发启示主数据删除接口必须做引用关系校验防止产生外键逻辑断裂的脏数据。坑 8场馆规则编辑同名场馆允许重复新增现象后台可以录入两条完全同名的场馆记录排课下拉出现重复场馆选项教务选择容易混淆。根因场馆新增接口没有做场馆名称唯一性校验。修复方案新增、编辑场馆时后端校验场馆名称重复重复则拦截保存。开发启示业务主数据对业务意义上唯一的名称字段后端增加重复校验避免字典脏数据。三、学员与套餐管理模块踩坑坑 9套餐冻结状态下后台核销入口依旧可以执行核销扣课时现象学员套餐设置为冻结管理员后台核销页面依旧可以对该学员做核销操作正常扣减课时。业务预期冻结套餐不允许消耗课时。根因冻结状态校验只写在了学员端预约逻辑后台手动核销接口遗漏套餐冻结状态校验。修复方案后台手动核销接口增加套餐状态校验套餐冻结直接拦截返回提示不执行扣课时逻辑。开发启示同一业务规则存在多个操作入口后台独立入口必须复用相同校验不能只依赖 C 端校验。坑 10后台手动新增学员手机号允许重复录入现象后台新增学员档案两个学员可以录入完全一样手机号造成学员数据重复后续套餐、预约会出现数据匹配错乱。根因后台新增学员接口没有对手机号做唯一性校验。修复方案后台新增、编辑学员接口后端校验手机号重复重复则拦截保存。开发启示手机号作为学员唯一业务标识后台录入接口增加唯一性约束避免多条学员记录同一手机号。坑 11给学员新增套餐过期时间传空未做兜底处理现象后台给学员添加课时套餐如果管理员没有填写过期时间后端没有兜底expireTime 存入 null后续套餐状态判断逻辑报错。根因接口未对过期时间入参做空值兜底。修复方案后台接口做参数校验过期时间必填或者为空自动赋予一个极大过期时间。开发启示后台表单的时间、数字类业务字段后端必须做空值、非法值校验兜底不能完全依赖前端表单校验。四、核销管理模块踩坑坑 12撤销核销操作没有校验核销记录状态支持重复撤销现象一条核销记录已经执行过撤销核销管理员再次操作撤销核销接口仍然可以执行多次重复返还学员课时造成课时越返越多。根因撤销核销接口没有判断核销记录当前状态没有判断是否已经撤销过。修复方案撤销之前先查询核销记录状态已经撤销过直接拦截不执行课时返还逻辑。开发启示逆向业务操作撤销、回滚一定要先校验当前业务单据状态防止重复逆向操作造成数据错乱。坑 13后台生成核销二维码排班已经取消依旧可以生成有效二维码令牌现象某条排班已经被管理员手动取消核销页面依旧可以生成 30 分钟有效签到二维码。根因生成二维码接口没有校验排班当前业务状态不管排班是否取消都可以生成令牌。修复方案生成二维码前校验排班状态已取消、已过期排班禁止生成核销二维码。开发启示生成令牌、凭证类接口必须校验关联业务单据的当前状态不能只单纯生成令牌字符串。五、账号、权限与日志模块踩坑坑 14禁用的后台账号后台登录接口缺少状态校验现象管理员账号在后台被设置为禁用该账号依旧可以完成登录获取后台操作权限。根因登录接口只校验账号密码正确没有读取账号 status 状态做拦截。修复方案登录鉴权阶段校验账号状态禁用账号直接拦截登录写入登录失败日志。开发启示账号状态校验放在登录接口不要只在页面做隐藏。坑 15后台多条件组合筛选逻辑失效现象后台预约管理页同时勾选教师、场馆、课程状态多个筛选条件列表过滤结果不正确出现不该展示的数据单条件筛选正常。根因筛选逻辑多个条件使用或or而非且and空条件没有跳过过滤处理。修复方案重构筛选逻辑多条件为同时满足关系未选择筛选项不加入过滤条件完善多条件场景测试。开发启示后台列表组合筛选是高频出错点必须覆盖单条件、多条件组合、条件清空等场景。坑 16后台部分业务操作不会写入操作审计日志现象手动修改排班状态、后台代预约、撤销核销部分操作完成审计日志表无记录后期无法追溯是谁执行变更。根因开发只对普通 CRUD 写日志状态变更、代预约、撤销核销这类衍生业务动作忘记调用统一日志工具。修复方案封装统一日志公共工具函数所有变更数据的业务动作统一调用日志写入补齐全部业务动作枚举。开发启示凡是修改业务数据不只是新增删除状态变更、代操作、回滚撤销都要记录操作日志方便对账排查问题。六、页面 UI、交互、兼容性类后台 Bug坑 17后台数据看板小分辨率屏幕布局错位溢出现象较小分辨率设备打开后台首页看板统计卡片、快捷入口布局错乱、内容溢出大屏开发机显示正常。根因页面大量写死固定 px 宽度未使用弹性自适应布局。修复方案改用弹性栅格布局去除硬编码固定宽度适配多种屏幕分辨率。开发启示B 端后台不能只在开发大屏测试需要覆盖多种分辨率。坑 18后台列表分页pageSize 参数前端可传入超大值一次性返回巨量数据现象后台各类列表分页后端没有限制 pageSize 最大值前端抓包修改 pageSize 传很大数字接口一次性返回上千条记录数据库查询压力大。根因只依赖前端下拉分页限制条数后端没有对 pageSize 做上限拦截。修复方案所有后台列表接口后端强制限制 pageSize 最大 50超过则强制截断。开发启示分页参数后端必须做上限限制防范恶意大查询压垮数据库。七、后台开发通用总结启示前端只负责交互体验后端才是最终防线。资源冲突、状态、唯一性、引用关系校验后端必须再做一层强校验不能信任前端提交的数据。同一业务规则存在多个后台操作入口校验逻辑必须复用公共函数避免 A 入口校验B 入口漏掉校验。例如冻结套餐校验、单据状态校验。逻辑删除不能只隐藏列表页所有下拉、选择、关联查询接口都要带上过滤条件防止被旧业务继续引用。做删除操作优先校验关联引用关系避免删除主数据之后子数据 ID 悬空产生脏数据。逆向回滚类业务撤销核销等操作前必须校验单据当前状态严防重复回滚造成数据越改越错。批量操作不能只返回成功 / 失败计数尽量返回失败明细降低运维人员排查成本。分页、表单时间、手机号等入参后端要做边界值、非法值、最大值限制不能完全信任前端表单校验。不仅仅普通增删改状态变更、代预约、撤销核销这类衍生业务全部要写入操作审计日志方便业务对账与问题回溯。本文属于《全栈项目实战手记艺培场馆课时预约小程序》专栏系列持续更新可订阅专栏阅读完整连载。连载目录回顾第一篇艺培场馆课时预约小程序 B 端管理后台完整产品设计思路第二篇艺培场馆课时预约小程序 C 端学员端完整产品设计思路第三篇艺培场馆课时预约小程序后台、教师端、学员端实拍与业务流程图汇总第四篇艺培场馆课时预约小程序后台开发踩坑复盘课程、学员、权限配置类 Bug第五篇艺培场馆课时预约小程序用户端 后台联动踩坑上篇预约、课时、同步问题第六篇艺培场馆课时预约小程序用户端 后台联动下篇排课核销、定时任务、页面交互异常第七篇艺培场馆课时预约小程序 V2.0 底层安全、交互、分包全量迭代复盘第八篇艺培场馆课时预约小程序 PC 管理端 Demo 完整开发成果展示第九篇艺培场馆课时预约小程序全项目开发历程完整复盘总结

最新新闻

日新闻

周新闻

月新闻