目录
- 1 需求分析
- 1.1 顾客角色
- 1.2 服务员角色
- 1.3 后厨角色
- 1.4 收银员角色
- 2 数据源设计
- 2.1 用户表
- 2.2 餐桌表
- 2.3 菜品表
- 2.4 订单表
- 2.5 订单项表
- 2.6 菜品制作状态表
- 2.7 收银记录表
- 2.8 会员表
- 2.9 充值记录表
- 2.10 积分表
- 2.11 积分记录表
- 2.12 优惠券表
- 2.13 优惠券使用记录表
- 2.14 活动表
- 总结
民以食为天,日常不管是工作餐,商务宴请,聚会,活动,都离不开和餐厅打交道。现在其实餐厅的信息化已经走的比较靠前了,有的提供机器人负责制作和服务。我们本次实战教程,就是结合这种日常的生活场景,结合微搭低代码工具,从0到1构建一个点餐系统。
1 需求分析
在分析需求的时候,我们通常按照角色来梳理功能。比如餐厅我们可以分为常见的几种角色,包括顾客、服务员、收银、后厨。不同的角色我们可以设置不同的功能。
将功能拆分后,我们还要合并在一起,合并的逻辑就是按照实际的业务流程,分析在流程上各种角色如何有机的配合在一起。
按照角色我们先拆解一下功能点:
1.1 顾客角色
首页
- 餐厅信息、推荐菜品、促销活动展示
点餐
- 选择用餐方式(堂食/外卖)
- 浏览菜单,查看菜品详情(包括制作时间、会员价格、评价等)
- 添加菜品到购物车
- 显示热门菜品和推荐菜品
订单管理
- 查看当前订单状态和历史订单记录
- 进行催单操作
- 使用优惠券和积分抵扣
个人中心
- 管理个人信息、查看余额和积分
- 充值功能,查看充值记录
- 提供反馈和评价
1.2 服务员角色
首页
- 显示待处理订单、餐桌状态和重要通知
订单管理
- 查看所有订单的状态,进行催单、更新状态(如上菜、加急处理
- 记录上菜操作,更新菜品状态
餐桌管理
- 查看餐桌状态,管理空闲和占用的餐桌
个人中心
- 管理个人信息、查看工作记录、提供反馈
1.3 后厨角色
首页
- 显示待制作的菜品、制作状态和重要通知
制作管理
- 查看所有待制作的菜品,更新制作状态(如开始制作、完成)
历史记录
- 查看历史制作记录,分析制作效率
个人中心
- 管理个人信息、查看工作记录、提供反馈
1.4 收银员角色
首页
- 显示当前餐桌状态、待结算订单和重要通知
订单管理
- 查看所有订单的详细信息,进行结算操作
- 处理退款或修改订单
优惠券管理
- 创建和管理优惠券,查看使用情况
会员管理
- 查看会员信息,管理充值和积分
报表和分析
- 查看销售报表、顾客反馈和活动效果分析
用户管理
- 管理用户角色和权限
菜品管理
- 添加、编辑和删除菜品,管理菜品分类和价格
活动和促销管理
- 创建和管理促销活动,设置优惠券和积分活动
数据分析
- 查看销售数据、顾客行为分析和库存管理
2 数据源设计
有了一定的功能拆解后,我们需要将功能点设计和拆分到数据源的字段中,我们一共形成了如下的数据源:
2.1 用户表
CREATE TABLE Users (
user_id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
password VARCHAR(255) NOT NULL,
role ENUM(‘customer’, ‘waiter’, ‘chef’, ‘cashier’) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
用户表用来存储我们的登录人员信息
2.2 餐桌表
CREATE TABLE Tables (
table_id INT PRIMARY KEY AUTO_INCREMENT,
table_number VARCHAR(10) NOT NULL,
status ENUM(‘available’, ‘occupied’) DEFAULT ‘available’,
capacity INT NOT NULL,
has_table_sign BOOLEAN DEFAULT TRUE, – 是否有桌签
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
餐桌用来管理餐厅的可以使用的餐桌,餐桌是和点餐业务相关
2.3 菜品表
CREATE TABLE MenuItems (
item_id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
category VARCHAR(50) NOT NULL,
price DECIMAL(10, 2) NOT NULL,
member_price DECIMAL(10, 2) DEFAULT NULL, – 会员价格
description TEXT,
preparation_time INT DEFAULT 0, – 制作时间,以分钟为单位
available BOOLEAN DEFAULT TRUE, – 是否可点
popularity INT DEFAULT 0, – 热门程度
is_recommended BOOLEAN DEFAULT FALSE, – 是否为推荐菜品
is_sample BOOLEAN DEFAULT FALSE, – 是否为试吃样品
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
菜品是餐厅可以提供的服务的具体体现,日常可以由管理员维护好,后厨根据每日物资采购情况决定当天哪些菜品可以制作和售卖
2.4 订单表
CREATE TABLE Orders (
order_id INT PRIMARY KEY AUTO_INCREMENT,
table_id INT NULL, – 对于有桌签的订单
order_number VARCHAR(20) UNIQUE, – 对于无桌签的拼桌订单
user_id INT NOT NULL,
status ENUM(‘pending’, ‘in_progress’, ‘completed’, ‘cancelled’) DEFAULT ‘pending’,
total_price DECIMAL(10, 2) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (table_id) REFERENCES Tables(table_id),
FOREIGN KEY (user_id) REFERENCES Users(user_id)
);
订单表记录顾客点餐的具体信息
2.5 订单项表
CREATE TABLE OrderItems (
order_item_id INT PRIMARY KEY AUTO_INCREMENT,
order_id INT NOT NULL,
item_id INT NOT NULL,
quantity INT NOT NULL,
priority INT DEFAULT 0, – 优先级字段
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (order_id) REFERENCES Orders(order_id),
FOREIGN KEY (item_id) REFERENCES MenuItems(item_id)
);
一个订单可能要关联多个菜品,在订单项表记录顾客点餐的菜品信息
2.6 菜品制作状态表
CREATE TABLE DishStatus (
status_id INT PRIMARY KEY AUTO_INCREMENT,
order_item_id INT NOT NULL,
status ENUM(‘pending’, ‘in_progress’, ‘completed’, ‘served’) DEFAULT ‘pending’,
priority INT DEFAULT 0, – 优先级字段
order_time TIMESTAMP, – 下单时间字段
waiting_time INT DEFAULT 0, – 等待时间,以秒为单位
served_time TIMESTAMP NULL, – 记录上菜时间
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (order_item_id) REFERENCES OrderItems(order_item_id)
);
订单下单后,会通知后厨进行制作,后厨可以根据实际情况来安排菜品制作的优先级
2.7 收银记录表
CREATE TABLE Payments (
payment_id INT PRIMARY KEY AUTO_INCREMENT,
order_id INT NOT NULL,
amount DECIMAL(10, 2) NOT NULL,
payment_method ENUM(‘cash’, ‘credit_card’, ‘mobile_payment’) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (order_id) REFERENCES Orders(order_id)
);
用餐完毕后,可以在收银台进行结账,记录结账信息
2.8 会员表
CREATE TABLE Members (
member_id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT NOT NULL, – 关联用户
membership_level ENUM(‘regular’, ‘silver’, ‘gold’, ‘platinum’) DEFAULT ‘regular’, – 会员等级
balance DECIMAL(10, 2) DEFAULT 0.00, – 账户余额
bonus_amount DECIMAL(10, 2) DEFAULT 0.00, – 赠送金额
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES Users(user_id)
);
为了促进餐厅发展,可以结合会员充值赠送业务来促进回购
2.9 充值记录表
CREATE TABLE RechargeRecords (
recharge_id INT PRIMARY KEY AUTO_INCREMENT,
member_id INT NOT NULL,
amount DECIMAL(10, 2) NOT NULL, – 充值金额
bonus DECIMAL(10, 2) DEFAULT 0.00, – 赠送金额
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (member_id) REFERENCES Members(member_id)
);
记录会员的充值信息,为后续的经营提供数据参考
2.10 积分表
CREATE TABLE Points (
point_id INT PRIMARY KEY AUTO_INCREMENT,
member_id INT NOT NULL,
total_points INT DEFAULT 0, – 总积分余额
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (member_id) REFERENCES Members(member_id)
);
充值和消费都可以赠送一定的积分,积分可以用来兑换餐厅里的日常物品
2.11 积分记录表
CREATE TABLE PointsRecords (
record_id INT PRIMARY KEY AUTO_INCREMENT,
member_id INT NOT NULL,
points INT NOT NULL, – 积分数量(正数为获取,负数为使用)
source ENUM(‘recharge’, ‘purchase’, ‘referral’, ‘promotion’) NOT NULL, – 积分来源
order_id INT DEFAULT NULL, – 关联订单(如果适用)
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (member_id) REFERENCES Members(member_id),
FOREIGN KEY (order_id) REFERENCES Orders(order_id)
);
记录积分获取的过程和消费的过程
2.12 优惠券表
CREATE TABLE Coupons (
coupon_id INT PRIMARY KEY AUTO_INCREMENT,
code VARCHAR(50) UNIQUE NOT NULL, – 优惠券代码
discount_type ENUM(‘fixed’, ‘percentage’) NOT NULL, – 优惠类型(固定金额或百分比)
discount_value DECIMAL(10, 2) NOT NULL, – 优惠金额或百分比
start_date TIMESTAMP NOT NULL, – 开始日期
end_date TIMESTAMP NOT NULL, – 结束日期
usage_limit INT DEFAULT 1, – 每个用户的使用次数限制
total_limit INT DEFAULT 100, – 优惠券总使用次数限制
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
优惠券也是一种促销的手段,可以管理各类平台投放的优惠券
2.13 优惠券使用记录表
CREATE TABLE CouponUsage (
usage_id INT PRIMARY KEY AUTO_INCREMENT,
coupon_id INT NOT NULL,
user_id INT NOT NULL,
order_id INT NOT NULL,
used_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (coupon_id) REFERENCES Coupons(coupon_id),
FOREIGN KEY (user_id) REFERENCES Users(user_id),
FOREIGN KEY (order_id) REFERENCES Orders(order_id)
);
详细记录优惠券的核销数据
2.14 活动表
CREATE TABLE Promotions (
promotion_id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL, – 活动名称
description TEXT, – 活动描述
start_date TIMESTAMP NOT NULL, – 活动开始时间
end_date TIMESTAMP NOT NULL, – 活动结束时间
coupon_id INT, – 关联的优惠券(可选)
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (coupon_id) REFERENCES Coupons(coupon_id)
);
管理日常餐厅的促销活动
总结
我们的第一篇是先分析一下具体想开发的功能,还要做好数据的准备,后续篇幅我们就介绍小程序和PC端如何进行开发。