ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

艺培场馆课时预约小程序用户端 后台联动踩坑下篇(排课核销、定时任务、教师端联动、弱网并发、页面交互异常)

艺培场馆课时预约小程序用户端  后台联动踩坑下篇(排课核销、定时任务、教师端联动、弱网并发、页面交互异常) 承接第五篇联动上篇本篇聚焦剩余全部非底层安全类问题核销与爽约跨端同步、教师端与管理员后台的数据联动、云开发定时任务业务异常、网络弱网并发场景、三端视图渲染、遗留体验类缺陷。 纯后台内部 Bug 回看第四篇预约课时缓存类联动回看第五篇Token 安全、分包、PC 管理端 Demo 放到第七篇。 全部案例来自三端整体功能测试格式统一现象 → 根因分析 → 修复方案 → 开发启示。一、核销、爽约业务跨三端联动踩坑坑 1后台管理员撤销核销学员端课时不即时刷新现象管理员后台执行撤销核销数据库课时已经返还学员打开个人套餐、消费流水页面仍然显示扣减后的旧课时需要下拉刷新才看到返还后的课时。根因学员端课时、流水页面存在内存缓存撤销核销是后台逆向操作客户端没有感知页面不会主动刷新。修复方案课时、流水页面onShow每次进入强制拉取最新数据撤销核销完成后下发订阅消息提醒学员课时变动。开发启示撤销、回滚这类逆向业务同样会改变用户资产客户端页面进入必须重新拉取服务端数据。坑 2教师端标记学员爽约后台预约状态不同步现象教师在教师端把学员标记爽约管理员后台打开该排班预约列表学员状态仍然是未上课爽约标记没有同步到后台。根因教师端爽约标记只写教师端本地视图没有调用公共的爽约记录写入接口没有更新数据库预约记录的爽约字段。修复方案教师端标记爽约调用统一公共接口更新数据库预约记录爽约状态后台、教师端读取同一套数据库字段展示状态。开发启示教师端属于后台能力裁剪出来的子端所有写操作必须调用统一后端接口禁止教师端只修改前端本地状态。坑 3教师端生成核销二维码排班已取消仍然可以生成令牌现象管理员后台手动取消某条排班教师端进入该排班依旧可以生成有效期 30 分钟核销二维码学员扫码还可以完成核销扣课时。根因教师端生成二维码接口没有校验排班当前业务状态只做简单的排班 ID 存在性判断。修复方案生成核销二维码接口增加排班状态校验已取消、已过期、已结课排班禁止生成核销令牌。开发启示凭证、令牌生成接口必须校验关联业务单据真实状态不能只校验单据是否存在。坑 4同一学员教师端和后台手动重复核销同一笔预约现象教师端正在核销学员同时管理员后台对同一个学员做手动核销并发情况下两次核销都执行成功学员课时被重复扣减。根因核销接口缺少行级状态锁没有先判断预约是否已经完成核销并发请求同时读到 “未核销” 状态双双执行扣课时。修复方案核销业务执行前查询预约状态如果已经核销直接拦截使用云开发事务保证「更新预约状态 扣减课时 写入核销记录」为原子操作防止并发重复核销。开发启示扣减资产类业务并发场景一定要做状态校验 事务保证原子性避免重复扣减。二、教师端与管理员后台联动问题坑 5教师端数据隔离失效可以看到其他教师排班数据现象教师账号登录教师端部分列表接口返回全部教师排班不限于自己授课的班级出现数据越权。根因部分排班查询接口教师角色的过滤条件没有正确拼接超级管理员角色过滤条件生效教师角色忘记拼接teacherId过滤。修复方案封装角色鉴权查询中间件教师身份自动在查询条件追加teacherId 当前登录教师ID强制过滤非本人授课数据。开发启示多角色数据隔离不要在每一处业务手动写过滤封装公共查询中间件避免某一处接口漏掉过滤条件造成越权。坑 6后台修改教师可授课时间 / 休息日教师端没有即时生效现象管理员后台修改教师每周可授课时间、休息日配置教师端查看个人授课配置依旧展示旧的休息日与可授课时段。根因教师端对教师档案做了本地缓存后台修改教师档案之后教师端没有清除缓存。修复方案教师端个人信息、授课配置页面 onShow 重新拉取服务端教师档案数据不使用长期缓存。开发启示后台会修改的角色配置信息客户端不要持久缓存每次进入页面拉取最新。坑 7教师端回复评价后台评价列表看不到教师回复内容现象教师在教师端完成课程评价回复管理员后台评价管理页面看不到这条教师回复C 端学员端可以正常看到回复。根因教师端回复评价写入的数据库字段和后台读取的回复字段不是同一个字段命名不一致导致后台读取不到。修复方案统一评价回复数据库字段教师端、管理员后台读写同一套回复字段。开发启示多端读写同一张数据表字段命名、结构体必须严格对齐避免出现写 A 字段读 B 字段这类低级错误。三、云开发定时任务业务异常服务端定时任务引发三端状态不同步坑 8定时任务 30 分钟校正排班预约状态部分异常排班没有被更新现象部分早已过期的排班定时任务没有自动把预约状态更新为已过期三端页面一直显示未上课。根因定时任务云函数批量遍历数据单次查询数量受限部分记录没有被遍历到部分异常脏数据的时间字段为 null时间判断逻辑报错跳过该条记录。修复方案定时任务使用分页分批遍历全部数据避免查询截断漏掉数据对时间字段做空值兜底判断跳过脏数据或者标记异常日志。开发启示云开发定时任务批量处理数据一定要做分页分批注意边界脏数据会中断整个循环。坑 9定时任务执行失败无告警业务异常完全无感知现象定时任务云函数因为接口报错、数据库超限异常终止开发 / 运营人员完全不知道定时任务没有执行大量预约状态不会自动流转。根因定时任务没有增加异常捕获、日志上报、告警通知逻辑。修复方案定时任务增加 try‑catch 捕获全部异常执行完成输出执行统计日志发生异常记录日志通过订阅消息通知管理员。开发启示定时任务属于后台隐形业务执行失败不会有页面反馈必须增加异常捕获与告警。坑 10定时任务自动过期预约没有返还学员冻结课时现象定时任务把超时预约状态改为已过期但是没有执行课时返还学员课时被冻结无法使用也不会退回。根因定时任务只修改预约记录状态没有调用预约取消公共函数漏掉课时返还逻辑。修复方案定时任务触发预约过期直接调用公共cancelAppointment()函数统一完成状态变更、课时返还、流水写入。开发启示定时任务修改业务数据不要直接写数据库尽量服用已封装好的业务公共函数保证业务逻辑和手动操作完全一致。四、弱网、并发、三端视图渲染与遗留体验缺陷坑 11弱网环境教师端生成核销二维码延迟重复点击生成多个令牌现象网络较差时教师点击生成签到码接口响应慢教师重复点击按钮生成多个不同有效期的核销二维码令牌。根因前端没有接口请求中 loading 置灰重复点击触发多次接口调用生成多条令牌记录。修复方案生成二维码按钮请求期间置灰 loading禁止重复点击后端校验同一个排班未结束只允许存在一个有效令牌旧令牌自动失效。开发启示网络抖动场景按钮防重复点击后端也要做业务层限制不能只靠前端 loading。坑 12后台排班周视图大量排班数据渲染卡顿现象后台排班管理切换到周视图当周排班数量很多的时候页面渲染卡顿滚动不流畅。根因一次性渲染整周全部排班 DOM没有做虚拟列表分页渲染。修复方案周视图做虚拟滚动只渲染可视区域排班卡片减少一次性渲染 DOM 节点数量。开发启示B 端日历、周视图数据量大一定要做虚拟列表否则页面会出现严重卡顿。坑 13批量排班存在多条冲突时错误提示信息过于笼统现象后台批量生成排班多条排班发生教师、教室冲突仅提示 “部分排班失败”看不到冲突明细。第四篇讲后台侧本篇站在三端联动视角教师端、学员端也无法感知哪一些班次创建失败。根因批量接口只返回成功失败计数没有返回失败明细列表前端只展示计数没有展示冲突详情。修复方案批量接口收集每一条失败记录的日期、冲突原因返回明细数组前端弹窗展示全部失败条目。开发启示批量操作返回失败明细降低排查问题成本。坑 14学员端超小屏手机课程介绍文本换行溢出现象在分辨率很小的手机上课程详情课程介绍文本超出容器出现文字溢出遮挡大屏手机显示正常。根因文本容器写死高度没有开启自动换行、文本溢出处理。修复方案调整 css 样式开启自动换行超长文本做折叠展开交互。开发启示移动端小程序要覆盖小屏机型测试文本类内容要做好溢出兜底。五、第六章通用开发启示教师端是管理员后台裁剪出来的轻量化子端教师端所有写操作必须调用统一后端接口禁止只修改前端本地状态否则会出现三端数据不一致。核销、扣课时、回滚返还这类资产变更业务并发场景要使用事务、状态前置校验防止重复扣减、重复回滚。定时任务属于服务端隐形业务不要直接裸写数据库更新尽量复用业务公共函数增加异常捕获、日志、告警防止任务失败无人知晓。多角色的数据隔离尽量封装公共查询中间件不要在每一个接口手动写过滤条件避免遗漏造成越权泄露数据。弱网环境下前端按钮防抖置灰只是第一层防护后端仍然要做重复请求、重复操作的业务拦截。日历、周视图这类大量数据渲染页面必须考虑大数据量渲染性能必要时使用虚拟列表。移动端必须覆盖小屏幕机型文本、容器样式做好溢出兜底不能只在开发机测试。本文属于《全栈项目实战手记艺培场馆课时预约小程序》专栏系列持续更新可订阅专栏阅读完整连载。连载目录回顾第一篇艺培场馆课时预约小程序 B 端管理后台完整产品设计思路第二篇艺培场馆课时预约小程序 C 端学员端完整产品设计思路第三篇艺培场馆课时预约小程序后台、教师端、学员端实拍与业务流程图汇总第四篇艺培场馆课时预约小程序后台开发踩坑复盘课程、学员、权限配置类 Bug第五篇艺培场馆课时预约小程序用户端 后台联动踩坑上篇预约、课时、同步问题第六篇艺培场馆课时预约小程序用户端 后台联动下篇排课核销、定时任务、页面交互异常第七篇艺培场馆课时预约小程序 底层安全、交互、分包全量迭代复盘第八篇艺培场馆课时预约小程序 PC 管理端 Demo 完整开发成果展示 第九篇艺培场馆课时预约小程序全项目开发历程完整复盘总
返回列表