# gitResturantCallSystem **Repository Path**: nemoSL/git-resturant-call-system ## Basic Information - **Project Name**: gitResturantCallSystem - **Description**: 餐饮排队叫号一体机 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-04 - **Last Updated**: 2025-11-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 餐厅叫号系统 (Restaurant Calling System) ## 项目概述 餐厅叫号系统是一个基于 HarmonyOS 开发的智能餐厅管理应用,集成排队取号、二维码识别、云端座位同步、语音播报等功能,旨在提升餐厅服务效率与顾客体验。 ## 主要功能 ### 🎫 排队取号系统 - 智能号码生成:自动生成格式为“字母+3位数字”的排队号码(如 A001、A002)。 - 实时叫号显示:主屏幕大字体显示当前叫号信息,便于顾客查看。 - 二维码生成:为每个排队号码生成专属二维码,包含排队信息与时间戳。 ### 📱 二维码扫描/识别 - 多种扫描方式:支持传统扫码与从相册选择图片识别。 - 图像解码:通过 `JsqrWrapper.ets` 调用 `jsQR.js` 进行 QR 识别。 ### 🪑 座位管理与云同步 - 实时座位状态:显示各区域座位的占用状态。 - 云端同步:使用 `CloudSeatService` 通过 Supabase REST 接口进行座位数据获取、更新、Upsert 与清空。 ### 🔊 语音播报 - 本地 TTS:集成 `@kit.CoreSpeechKit` 本地合成与播放。 - 云端合成:通过 `BaiduCloudTTS` 进行在线语音合成并播放。 - 回退与提示:未在阈值内开始播放时触发提示音,流程结束播放完成提示音。 ## 技术架构 ### 开发框架 - 平台:HarmonyOS (API Level 12) - 开发语言:ArkTS (TypeScript) - UI 框架:ArkUI - 构建工具:DevEco Studio ### 核心技术栈 - 路由管理:`@ohos.router`(页面导航与参数传递) - UI 组件:ArkUI 原生组件(Column、Row、Button、Text 等) - 二维码:`jsQR.js`(经 `JsqrWrapper.ets` 封装) - 网络请求:`@ohos.net.http`(云端与 AI 请求) - 媒体能力:`@ohos.multimedia.audio`(音频播放) ### 项目结构 ``` Restaurant_calling_system/ ├── entry/src/main/ets/ │ ├── pages/ # 页面文件 │ │ ├── Index.ets # 主页面 - 叫号显示与操作中心 │ │ ├── QueuePage.ets # 排队页面 - 显示二维码与倒计时 │ │ ├── JsQRAlbumTestPage.ets# 相册识别二维码页面 │ │ └── VoiceTestPage.ets # 语音测试页面 │ ├── services/ # 服务能力 │ │ ├── CloudSeatService.ets # 云端座位服务(Supabase REST) │ │ ├── CloudConfig.ets # 云端配置(URL/Key) │ │ ├── VoiceService.ets # 语音服务编排与播放 │ │ ├── BaiduCloudTTS.ets # 百度云 TTS │ │ └── HuaweiCloudTTS.ets # 音频工具(部分函数可复用) │ ├── utils/ │ │ ├── QueueNumberManager.ets # 排队号管理器 │ │ └── JsqrWrapper.ets # jsQR 封装 │ └── common/ │ └── SeatStatusManager.ets # 座位状态管理器 ├── docs/ # 项目文档 │ ├── TECHNICAL_ARCHITECTURE.md │ ├── BUSINESS_LOGIC.md │ ├── API.md │ └── USAGE_GUIDE.md └── AppScope/、resources/ 等 ``` ## 核心模块详解 ### 1. 排队号码管理器 (QueueNumberManager) ```typescript // 单例模式实现的排队号码管理 class QueueNumberManager { generateNextNumber(): string // 生成下一个排队号码,如 A001 → A002 getCurrentNumber(): string // 获取当前号码 reset(): void // 重置号码序列(字母与数字复位) } ``` ### 2. 主页面 (Index.ets) - 叫号显示区域:大字体显示当前叫号;维护等待队列并主动播报。 - 座位状态区域:网格显示云端同步的座位状态,定期静默刷新。 - 操作按钮区域:取号、扫码、队列页跳转等功能。 - 页面生命周期管理:处理页面间的参数传递与定时任务。 ### 3. 排队页面 (QueuePage.ets) - 二维码显示:生成包含排队号与时间戳的二维码。 - 倒计时功能:10 秒后自动返回主页并传递来源参数。 - 参数传递:接收与返回排队号码参数。 ### 4. QR 识别页面 (JsQRAlbumTestPage.ets) - 相册选择图片:转换为 `Uint8ClampedArray` 输入。 - 识别流程:调用 `JsqrWrapper.ets` 的 `jsqrDecode` 完成识别。 ### 5. 语音服务 (VoiceService.ets) - 本地 TTS 播放:初始化音频渲染器,合成与播放。 - 云端合成播放:调用 `BaiduCloudTTS` 合成,解析音频后播放。 - 回退机制:播放未开始则触发提示音,结束播放完成提示音。 ## 功能流程 ### 取号流程 1. 用户点击“取号”按钮。 2. 系统生成新的排队号码。 3. 主页面叫号显示更新并可语音播报。 4. 跳转到排队页面显示二维码。 5. 10 秒倒计时后自动返回主页。 ### 扫码就餐流程(相册识别示例) 1. 用户进入相册识别页面,选择图片。 2. 转换图像数据并识别 QR 内容。 3. 解析结果并可结合座位状态处理业务逻辑。 ## 安装和运行 ### 环境要求 - DevEco Studio 4.0+ - HarmonyOS SDK API Level 12+ - Node.js 16+ ### 安装步骤 1. 克隆或导入项目到本地。 2. 使用 DevEco Studio 打开工程。 3. 安装依赖:在工程目录执行 `ohpm install`。 4. 连接 HarmonyOS 设备或启动模拟器。 5. 点击运行按钮或使用快捷键。 ### 配置说明 - 云端座位服务:在 `CloudConfig.ets` 填写 `SUPABASE_REST_URL` 与 `SUPABASE_ANON_KEY`。 - 页面与权限:在 `AppScope/app.json5` 与路由配置文件中确认页面注册与权限声明。 - 依赖管理:`entry/oh-package.json5`。 ## 开发指南 ### 添加新页面 1. 在 `pages/` 下创建新的 `.ets` 文件。 2. 在路由配置中注册页面路径。 3. 使用 `router.pushUrl()` 进行页面导航。 ### 扩展功能 - 新增座位类型:修改 `SeatStatusManager.ets` 与相关展示。 - 自定义排队规则:扩展 `QueueNumberManager.ets`。 - 集成新的云/AI 服务:调整对应服务配置与调用。 ### 样式定制 - 主题与色彩:修改页面样式常量。 - 布局:调整 Column、Row 等组件属性。 - 字体大小:调整 Text 组件的 `fontSize`。 ## 版本信息 - 当前版本:1.0.0(演示) - 兼容性:HarmonyOS API Level 12+ - 包名:`com.example.restaurant_calling_system` ## 贡献指南 1. Fork 项目。 2. 创建功能分支(`git checkout -b feature/xxx`)。 3. 提交更改(`git commit -m 'feat: ...'`)。 4. 推送到分支(`git push origin feature/xxx`)。 5. 发起 Pull Request。 ## 许可证 本项目当前未附带开源许可证文件。请在使用与分发时遵守上游依赖与组织规范;如需开源协议,请在仓库添加相应 LICENSE 文件后更新本节。 ## 联系方式 如有问题或建议,请通过仓库 Issues 或团队既定渠道联系维护者。