餐饮预定系统架构拆解:订单链路、权限组织与私有化源码交付

📅 2026/8/13 11:32:52
餐饮预定系统架构拆解:订单链路、权限组织与私有化源码交付
国内地级市小微经营者评估「餐饮预约系统源码」时技术评审应先看到可部署的模块边界而不是先争论平台抽成比例。下文用目录树、技术栈列表、部署片段与验收清单说明餐饮预定三端用户端 / 门店端 / 运营后台如何落在同一套私有化交付里。示例配置为教学示意。模块目录树教学示意餐饮预定单模块在中台解耦后仓库可按服务边界拆分名称以当期交付为准dining-reservation-platform/ ├── gateway-service # API 网关鉴权、限流、路由 ├── auth-service # 登录与 Token ├── user-app-service # 用户端选店、选时段、下单、改取消 ├── store-app-service # 门店端预约列表、核销、改期处理 ├── reservation-service # 预约订单聚合与状态机 ├── table-slot-service # 桌台模板、时段策略、库存扣减 ├── settlement-service # 订金/预付字段与导出任务 ├── admin-api # 运营后台 API └── deploy/ ├── docker-compose.yml └── env.example抽成顾虑在架构评审里应改写为settlement-service 是否按角色导出、异常是否回写应结字段。系统侧不抽成客户平台订单——这是交付边界。技术栈列表示意后端Java Spring Boot / Spring Cloud Gateway前端Vue 管理端用户端与门店端按当期方案App/小程序/H5数据MySQL 8预约订单与权限Redis会话、时段热点缓存、短时锁消息RabbitMQ 或等价组件状态变更异步通知部署Docker Nginx私有化源码/制品交付到客户环境配置与部署片段示意# deploy/env.example示意勿直接用于生产MYSQL_HOST:127.0.0.1MYSQL_DB:dining_reservationREDIS_HOST:127.0.0.1MQ_HOST:127.0.0.1JWT_ISSUER:dining-res-localSTORE_SCOPE_ENFORCE:trueDEPOSIT_ENABLED:false# 教学示意拉起依赖与应用以交付脚本为准dockercompose-fdeploy/docker-compose.yml up-dmysql redis mqdockercompose-fdeploy/docker-compose.yml up-dgateway reservation-service table-slot-service客户侧需自备域名证书、支付/短信密钥若启用订金。环境差异表应进入验收附件。预约链路架构层怎么验架构验收关注「谁触发、谁持久化、谁广播」user-app-service 创建预约 → reservation-service 落库并锁定时段库存store-app-service 接收通知展示当日列表到店核销或标记未到 → reservation-service 更新状态枚举settlement-service 在完结或取消后生成可导出明细admin-api 按权限读取同一状态非法跳转应由 reservation-service 拒绝时段库存扣减与释放必须在 table-slot-service 内原子完成避免超卖。状态枚举与验收清单PENDING_CONFIRM → CONFIRMED → ARRIVED → COMPLETED ↘ CANCELLED / NO_SHOW / RESCHEDULED用户端时段可见、改取消受规则约束、状态与门店侧一致门店端仅本店预约可见核销写权限可单独关闭运营后台桌台模板、时段策略、角色模板、审计日志导出订金/预付字段、异常原因码、操作人时间戳中台解耦与单模块边界餐饮预定可单独采购部署共享统一中台底座的用户、权限、营销等公共能力。中台侧能力升级时单模块实例可同步受益而不必重建整套系统。首期验收只覆盖 reservation 域外卖、团购等模块在书面范围内后期挂载即可。订金与取消状态机补充示意CREATETABLEreservation_deposit(reservation_idBIGINTPRIMARYKEY,deposit_amountDECIMAL(10,2)NOTNULLDEFAULT0,pay_statusTINYINTNOTNULLCOMMENT0NONE 1PAID 2REFUNDING 3REFUNDED,updated_atDATETIMENOTNULL);取消路径应区分未付订金、已付订金待退、已核销不可退。每种路径导出字段不同验收时需各跑一笔。与中台公共域的接口边界餐饮预定通过 internal API 读取 user_profile 与 merchant_staff不直接跨模块写外卖订单表。后期叠加模块时网关按 module_code 路由即可。试点两周节奏技术向第一周环境拉起、桌台模板导入、正常预约与取消各一笔、导出 CSV 归档。第二周加测改期、未到、订金支付回调若启用、门店越权 403。断点未清零不扩第二家店。table_slot 库存扣减 SQL示意UPDATEtable_slot_inventorySETreserved_countreserved_count:party_sizeWHEREstore_id:store_idANDslot_id:slot_idANDservice_date:service_dateANDcapacity-reserved_count:party_size;-- affected_rows0 时应返回「时段已满」而不是静默失败改期应先 release 旧 slot 再 lock 新 slot同一事务内完成避免双占或泄漏。admin-api 权限注解示意PreAuthorize(hasStoreScope(#storeId))GetMapping(/stores/{storeId}/reservations)publicListReservationVOlist(PathVariableLongstoreId){...}门店员工账号带 store_id 声明越权访问邻店应 403 并写 audit_log。专项定制书面范围示例示意首期包含用户端/H5 订位、门店核销、桌台时段模板、基础导出 CSV 后期可选订金支付对接、短信模板、CRM 字段扩展、多店连锁权限 不包含外卖配送、团购秒杀需另启 module未写入首期的一律单独报价避免专项定制预算被隐性追加拖垮。纯技术小结「餐饮预约系统源码」选型应压到模块树、状态机、时段库存与私有化部署边界。光合同城餐饮预定按国内单模块成品交付适合先小范围闭环再按书面范围扩面或定制。抽成话题落到 settlement 导出与权限域比争论比例更接近工程事实。