brother7 9d56c181fb 修复:补齐多项目公屏叫号播报
需求:管理员公屏在员工叫号后需播放项目名与号码。
实现:复用单项目号码播报格式,按项目跟踪新批次并播报项目名加号码,补充回归测试。
2026-07-31 17:14:33 +08:00
2026-07-12 15:53:24 +08:00
2026-07-28 10:36:32 +08:00
2026-07-12 15:53:24 +08:00
2026-07-12 15:53:24 +08:00
2026-07-12 15:53:24 +08:00
2026-07-12 15:53:24 +08:00

景区排队叫号系统

这是一个面向景区多项目运营的轻量排队叫号系统。一个排队号码可绑定多名同行游客;项目可配置按号码叫号、按人数叫号或同时支持两种方式。系统包含员工独立 H5、游客取号与私密状态页、管理端运营概览/项目设置/大屏中心、实体公示大屏、设备模拟器和审计基础。

产品与交互基线见:

技术架构

  • 前端React、TypeScript、Vite员工、游客、公示屏和管理端使用同一前端工程的独立路由。
  • 后端Go、标准库 HTTP 路由、GORM。
  • 数据库PostgreSQL 17版本化 SQL 迁移。
  • 实时更新REST 写入、SSE 推送,客户端轮询降级。
  • 部署:模块化单体;中心服务是唯一写入权威。

本地开发

已验证的工具版本Go 1.26、Node.js 22、pnpm 10、PostgreSQL 17。

make install
make db-init
cp server/.env.example server/.env

server/.env.example 只包含本地示例密钥。正式环境必须替换两把 32 字节密钥;本地长期使用也建议运行两次 openssl rand -base64 32 后替换。

启动 API、初始化演示数据和启动前端

make api
make seed
make web
  • APIhttp://localhost:8080
  • 前端:http://localhost:5173
  • 本地超级管理员账号:xqkwljtadmin(密码由 SUPER_ADMIN_PASSWORD 设置)
  • 本地演示员工:staff / ChangeMe123!

make seed 会注入一套可直接演示的基础数据:

  • DEMO 云栖观光车:运行中,同时支持按号码与按人数叫号,包含 110 人/号的多人数测试数据。
  • RAFT 峡谷漂流:暂停中,仅按人数叫号,包含 16 人/号的候场队列。
  • CABLE 云顶索道:未开放,仅按号码叫号,用于验证空队列和未开放态。

命令会在终端输出公示屏与游客页的本地路径。它可重复执行:每次只重置上述演示项目,不会删除其他项目。本地演示员工账号和固定演示令牌禁止用于生产。

设置本地超级管理员密码:

SUPER_ADMIN_PASSWORD='至少 12 位的本地密码' make bootstrap-admin

没有 Homebrew PostgreSQL 时,也可以使用:

docker compose up -d postgres

核心页面

  • /staff/login:员工 H5 独立登录,只接受员工账号。
  • /admin/login:管理端独立登录,只接受管理员账号。
  • 两端使用独立会话 Cookie可在同一浏览器同时登录不会互相覆盖。
  • /staff:员工 H5 叫号页;同时支持两种方式的项目会并列显示“按号码叫号”和“按人数叫号”操作栏,队列逐号显示绑定人数。
  • /staff/tickets:员工 H5 取号页;同行人数必填且创建后不可修改,取值范围由项目配置。
  • 按号码叫号取队首连续 N 个号码;按人数叫号取合计人数不超过目标值的最长连续队首,不拆号、不跳号。队首单号人数大于目标时拒绝操作。
  • /visitor:游客自助取号与手机号查询入口,通过页面顶部的“取号 / 查号” Tab 切换;手机号查询仍是运营测试入口,正式上线前需替换为验证码或外部身份接口。
  • /visitor/phone:手机号查询后的游客号码状态页,不再显示手机号输入框。
  • /visitor/:token:游客私密状态页。
  • /display/:projectCode:按项目编码打开单项目只读公示屏,例如 /display/RAFT;已有公示 Token 地址继续兼容。
  • /admin:管理端运营概览。
  • /admin/projects:配置项目支持的叫号方式、单号人数范围、两种方式各自的默认值与防误触单次上限,以及按单人间隔计算的预计等待时间。
  • /admin/display:无需登录的多项目只读大屏中心,可全屏展示公开运行状态。

质量检查

make test
make test-db
make check
make build
make smoke-real

make smoke-real 会创建一个临时 PostgreSQL 数据库并启动独立 Go API验证多人取号、人数模式不超过目标的连续 FIFO 选择、号码模式、号码数/人数双统计,以及员工全号、游客尾四位、管理端全号、公屏零手机号的隐私边界;结束后自动关闭测试 API 并删除临时数据库。它不使用前端 mock也不会改动日常开发数据库。

核心叫号写操作必须由服务端事务、行锁、幂等键和队列修订号共同保护;前端按钮禁用不能替代这些约束。

生产交接说明见 后端与数据库上线交接。生产环境先运行独立迁移命令,再启动 API不得运行 make seed

Description
No description provided
Readme 62 MiB
Languages
Go 38.8%
TypeScript 32.7%
CSS 21%
Python 4.4%
Java 2.1%
Other 0.9%