微信点餐小程序
1. 系统概述1.1 产品定位基于微信生态的轻量化餐饮点餐工具通过扫桌码即点餐的模式替代传统纸质菜单和人工点单提升门店运营效率降低人力成本沉淀用户数据。1.2 核心目标- **效率提升**单桌点餐到下单时间缩短至2分钟内- **成本降低**减少每店至少1名点单服务员- **体验优化**避免漏单、错单支持菜品图片直观展示- **数据沉淀**获取用户消费数据为精准营销提供依据1.3 使用场景| 场景 | 流程 ||------|------|| 堂食 | 入座 → 扫码 → 授权登录 → 浏览菜单 → 加购 → 支付 → 等候上菜 || 自提 | 扫码/搜一搜 → 切换自提模式 → 选规格下单 → 到店取餐 || 外卖(可选) | LBS定位 → 选择门店 → 下单 → 同城配送 |2. 架构设计2.1 整体架构┌─────────────────────────────────────────────────────────────────┐│ 微信小程序前端 (C端) ││ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ││ │ 首页/菜单 │ │ 购物车 │ │ 订单管理 │ ││ │ 扫码点餐 │ │ 结算支付 │ │ 个人中心 │ ││ └──────────────┘ └──────────────┘ └──────────────┘ │└──────────────────────┬──────────────────────────────────────────┘│ HTTPS▼┌─────────────────────────────────────────────────────────────────┐│ 后端服务层 ││ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ││ │ API网关 │ │ 业务逻辑 │ │ 数据访问 │ ││ │ FastAPI │ │ Service │ │ SQLAlchemy│ ││ └──────────────┘ └──────────────┘ └──────────────┘ │└──────────────────────┬──────────────────────────────────────────┘│ SQLite/MySQL▼┌─────────────────────────────────────────────────────────────────┐│ 数据存储层 ││ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ││ │ 菜品数据 │ │ 订单数据 │ │ 用户数据 │ ││ │ 分类数据 │ │ 桌台数据 │ │ 优惠券 │ ││ └──────────────┘ └──────────────┘ └──────────────┘ │└─────────────────────────────────────────────────────────────────┘2.2 技术选型| 分类 | 技术 | 版本 | 说明 ||------|------|------|------|| 语言 | Python | 3.11 | 后端开发语言 || 框架 | FastAPI | 0.100 | 异步Web框架高性能 || ORM | SQLAlchemy | 2.0 | 数据库ORM框架 || 数据库 | SQLite | 3.40 | 轻量级嵌入式数据库 || 前端 | 微信小程序 | - | 微信生态前端 || 认证 | 微信OAuth2 | - | 用户身份认证 || 支付 | 微信支付 | - | 订单支付 |2.3 关键设计2.3.1 模块划分| 模块 | 职责 | 状态 ||------|------|------|| **menu** | 菜品分类、菜品管理、菜单展示 | ✅ || **cart** | 购物车管理、商品加减、库存检查 | ✅ || **orders** | 订单创建、支付、状态流转 | ✅ || **tables** | 桌台管理、二维码生成、状态管理 | ✅ || **admin** | 商家后台、统计数据、订单管理 | ✅ || **members** | 会员管理、积分、优惠券 | ✅ |2.3.2 核心流程图mermaidsequenceDiagramparticipant User as 用户participant App as 微信小程序participant API as 后端APIparticipant DB as 数据库User-App: 扫描桌码App-API: GET /tables/qr-code/{table_no}API-DB: 查询桌台信息DB--API: 返回桌台数据API--App: 返回桌台信息User-App: 浏览菜单App-API: GET /menu/dishesAPI-DB: 查询菜品列表DB--API: 返回菜品数据API--App: 返回菜品列表User-App: 选择菜品加入购物车App-API: POST /cartAPI-DB: 创建购物车项DB--API: 保存成功API--App: 返回购物车项User-App: 点击结算App-API: POST /ordersAPI-DB: 创建订单扣减库存DB--API: 保存成功API--App: 返回订单信息User-App: 确认支付App-API: PUT /orders/{id}/payAPI-DB: 更新订单状态DB--API: 更新成功API--App: 返回支付结果3. 数据库设计3.1 实体关系图mermaiderDiagramCATEGORIES ||--o{ DISHES : containsDISHES ||--o{ DISH_SPECIFICATIONS : hasDISHES ||--o{ CART_ITEMS : inDISHES ||--o{ ORDER_ITEMS : inTABLES ||--o{ ORDERS : placesORDERS ||--|{ ORDER_ITEMS : containsCOUPONS ||--o{ USER_COUPONS : issued_toMEMBERS ||--o{ USER_COUPONS : ownsMEMBERS ||--o{ ORDERS : places3.2 核心表结构3.2.1 dishes菜品表| 字段名 | 类型 | 约束 | 说明 ||--------|------|------|------|| id | INTEGER | PRIMARY KEY | 主键 || name | VARCHAR(200) | NOT NULL | 菜品名称 || description | TEXT | NULL | 菜品描述 || image_url | VARCHAR(500) | NULL | 菜品图片URL || original_price | FLOAT | NOT NULL | 原价 || price | FLOAT | NOT NULL | 售价 || stock | INTEGER | DEFAULT 0 | 库存 || monthly_sales | INTEGER | DEFAULT 0 | 月售量 || tags | VARCHAR(200) | NULL | 标签 || category_id | INTEGER | FOREIGN KEY | 分类ID || status | VARCHAR(20) | DEFAULT active | 状态 || created_at | DATETIME | DEFAULT now() | 创建时间 || updated_at | DATETIME | DEFAULT now() | 更新时间 |3.2.2 orders订单表| 字段名 | 类型 | 约束 | 说明 ||--------|------|------|------|| id | INTEGER | PRIMARY KEY | 主键 || order_no | VARCHAR(50) | UNIQUE | 订单号 || openid | VARCHAR(100) | NOT NULL | 用户OpenID || table_id | INTEGER | FOREIGN KEY | 桌台ID || mode | VARCHAR(20) | NOT NULL | 就餐模式 || total_amount | FLOAT | NOT NULL | 总金额 || discount_amount | FLOAT | DEFAULT 0 | 优惠金额 || actual_amount | FLOAT | NOT NULL | 实付金额 || status | VARCHAR(20) | DEFAULT pending_payment | 状态 || remark | TEXT | NULL | 备注 || paid_at | DATETIME | NULL | 支付时间 || completed_at | DATETIME | NULL | 完成时间 || created_at | DATETIME | DEFAULT now() | 创建时间 |3.2.3 tables桌台表| 字段名 | 类型 | 约束 | 说明 ||--------|------|------|------|| id | INTEGER | PRIMARY KEY | 主键 || table_no | VARCHAR(20) | UNIQUE | 桌号 || capacity | INTEGER | DEFAULT 2 | 座位数 || area | VARCHAR(50) | NULL | 区域 || status | VARCHAR(20) | DEFAULT empty | 状态 || qr_code_url | VARCHAR(500) | NULL | 二维码URL || created_at | DATETIME | DEFAULT now() | 创建时间 |4. API接口设计4.1 接口分类| 模块 | 接口数量 | 说明 ||------|----------|------|| menu | 3 | 分类管理、菜品管理 || cart | 4 | 购物车增删改查 || orders | 4 | 订单CRUD、支付 || tables | 6 | 桌台CRUD、状态管理 || admin | 6 | 分类、菜品、订单管理 |4.2 核心接口列表| API路径 | 方法 | 所属模块 | 说明 ||---------|------|----------|------|| /menu/categories | GET | menu | 获取分类列表 || /menu/dishes | GET | menu | 获取菜品列表 || /menu/dishes/{id} | GET | menu | 获取菜品详情 || /cart | GET | cart | 获取购物车 || /cart | POST | cart | 添加到购物车 || /cart/{id} | PUT | cart | 更新购物车数量 || /orders | POST | orders | 创建订单 || /orders/{id} | GET | orders | 获取订单详情 || /orders/{id}/pay | PUT | orders | 支付订单 || /tables | POST | tables | 创建桌台 || /tables/{id}/status | PUT | tables | 更新桌台状态 || /admin/statistics | GET | admin | 获取统计数据 |5. 安全性设计5.1 安全措施| 措施 | 说明 ||------|------|| **参数校验** | 使用Pydantic进行严格的参数校验 || **异常处理** | 全局异常处理统一错误响应格式 || **日志记录** | 记录所有请求日志便于追踪 || **库存锁** | 使用数据库事务保证库存一致性 || **超时控制** | 订单超时自动取消释放库存 || **CORS配置** | 限制允许的来源域名 |5.2 订单状态流转mermaidstateDiagram-v2[*] -- pending_payment : 创建订单pending_payment -- accepted : 支付成功pending_payment -- cancelled : 超时/取消accepted -- preparing : 商家接单preparing -- ready : 制作完成ready -- completed : 用户取餐completed -- [*]cancelled -- [*]6. 部署与运维6.1 依赖环境| 依赖 | 版本 ||------|------|| Python | 3.11 || uvicorn | 0.23 || fastapi | 0.100 || sqlalchemy | 2.0 || pydantic-settings | 2.0 || aiosqlite | 0.19 |6.2 启动方式bash# 开发环境cd backendpython -m uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload# 生产环境pip install -r requirements.txtpython -m uvicorn app.main:app --host 0.0.0.0 --port 8000
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2564821.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!