微信小程序云开发如何搭建商家「预约排队 + 到号通知 + 到店核销」系统?数据表设计、云函数与后台管理端实操教程

广告 文章开头推广

用云开发搭一套「预约排队 + 到号通知 + 到店核销」的核心思路

你想要的其实就三件事:用户拿号系统叫号到店核销。用微信小程序云开发做,优势是不用自建服务器,数据库、云函数、定时任务、鉴权都能一把梭。

举个小案例:一家奶茶店高峰期每小时 60 人排队。你把“到号通知”做成订阅消息,店员用“核销码/订单号”一扫就完事,能把柜台解释时间从 15 秒压到 3 秒,队伍体验会明显好很多。

数据表(集合)怎么设计:少而稳,字段要为「排队状态」服务

建议 4 个集合就够跑起来,后面再加扩展表:

  • stores:_id、name、address、openTime、closeTime、queueRule(如每批放号数量)、status
  • queue_orders:_id、storeId、userOpenid、phone、peopleCount、bizDate(如 2026-05-10)、queueNo(如 A032)、status(WAIT/CALLING/ARRIVED/CANCELED/EXPIRED)、calledAt、arrivedAt、verifyCode(6 位或 8 位)、createdAt
  • staff:_id、storeId、openid、role(ADMIN/CLERK)、name、enabled
  • verify_logs:_id、orderId、storeId、staffOpenid、action(VERIFY/CANCEL)、createdAt、remark

关键点:queueNo 要按门店 + 当天递增,别用全局自增。status 只用一套枚举,后台、前台、云函数都按它来。

云函数实操:拿号、叫号、通知、核销怎么写得顺

1)拿号/预约:takeNumber

流程很直:校验门店营业时间 → 查今天最大号 → +1 生成 queueNo 和 verifyCode → 写入 queue_orders。并发时用事务或把“当日计数”单独放一个集合做原子更新,避免两个人拿到同一个 A032。

商家收款0.2%费率在线开户
收款码、服务号、小程序、PC网页、扫码枪、刷脸支付等多场景
立即开户

2)到号通知:notifyNext(手动触发 + 定时兜底)

叫号建议两种触发:

  • 店员后台点“叫下一个”:把下一单 status 改为 CALLING,写 calledAt,然后用云函数调 subscribeMessage.send 发订阅消息
  • 用云开发定时触发器每 1 分钟扫一遍:CALLING 超过 10 分钟未到店就改 EXPIRED,并自动叫下一位(看你业务要不要这么激进)

注意:订阅消息必须让用户在拿号时勾选授权,不然 2026-05-10 这种高峰日会出现“叫号了但发不出去”的尴尬。

3)到店核销:checkinVerify

核销就一句话:只允许 staff 角色操作。云函数里校验:订单是否属于该门店、是否 WAIT/CALLING、verifyCode 是否匹配;通过后把 status 改 ARRIVED,写 arrivedAt,并写一条 verify_logs。任何重复核销直接拒绝。

后台管理端怎么做:少页面也能很好用

后台别整太重,3 个页面就能跑:

  • 排队看板:按 WAIT/CALLING 分组,支持“一键叫号”“作废/过号”
  • 核销页:输入订单号/验证码,或接扫码枪(H5 管理端也能用)
  • 门店设置:营业时间、过号规则、订阅消息模板选择

权限用云开发的 openid 鉴权:staff 集合里没这人就不让进。数据库权限规则要卡死:queue_orders 普通用户只读自己的,写也只能新增自己的。

给你一套能落地的执行建议(今天就能开干)

  • status 流转图先画出来(WAIT→CALLING→ARRIVED,辅以 CANCELED/EXPIRED),所有页面和云函数都按这套走
  • 拿号时强制弹订阅授权,把“到号通知”做成必选项,别指望用户回头再开
  • 先按单门店日 300 单做容量预估:索引至少建 storeId+bizDate、storeId+status、userOpenid+bizDate
  • 上线前用 10 个测试号模拟排队,重点测:并发拿号是否重复、过号策略是否误伤、核销是否能防重复
THE END
广告 文章结尾推广

分享这篇文章

相关关键词
微信扫码分享
生成二维码中...
使用微信扫描二维码
将文章分享给好友或朋友圈