民以食为天,日常不管是工作餐,商务宴请,聚会,活动,都离不开和餐厅打交道。现在其实餐厅的信息化已经走的比较靠前了,有的提供机器人负责制作和服务。我们本次实战教程,就是结合这种日常的生活场景,结合微搭低代码工具,从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端如何进行开发。