技术栈
吉瑞外卖
基于移动端和网页端的外卖项目
基于springboot + VUE
前端技术栈
H5 + VUE + ElementUI + 微信小程序
后端技术栈
springboot + mybaitisplus + redis + nginx
数据库
MySQL+Navicat
工具
git + maven + junit
功能
- 移动端前台:手机号登录、微信登陆、地址管理、历史订单、菜品规格、购物车、下单、菜品浏览
- 系统管理后台:分类管理、菜品管理、套餐管理、菜品口味管理、员工登录、员工退出、员工管理、订单管理
角色
-
后台系统管理员:登录后台管理系统,拥有后台系统中的所有操作权限
-
后台系统普通员工:登录后台管理系统,对菜品、套餐、订单进行管理
-
C端(客户端)用户:可以浏览菜品、添加购物车、设置地址、在线下单等
展示链接
客户端展示:菩提阁
管理端展示:瑞吉外卖管理端
注意:客户端需要使用手机仿真设备查看
开发环境搭建
数据库搭建
-
数据库名:reggie
-
数据表:
-
employee:员工表
DROP TABLE IF EXISTS `employee`; CREATE TABLE `employee` ( `id` bigint(20) NOT NULL COMMENT '主键', `name` varchar(32) COLLATE utf8_bin NOT NULL COMMENT '姓名', `username` varchar(32) COLLATE utf8_bin NOT NULL COMMENT '用户名', `password` varchar(64) COLLATE utf8_bin NOT NULL COMMENT '密码', `phone` varchar(11) COLLATE utf8_bin NOT NULL COMMENT '手机号', `sex` varchar(2) COLLATE utf8_bin NOT NULL COMMENT '性别', `id_number` varchar(18) COLLATE utf8_bin NOT NULL COMMENT '身份证号', `status` int(11) NOT NULL DEFAULT '1' COMMENT '状态 0:禁用,1:正常', `create_time` datetime NOT NULL COMMENT '创建时间', `update_time` datetime NOT NULL COMMENT '更新时间', `create_user` bigint(20) NOT NULL COMMENT '创建人', `update_user` bigint(20) NOT NULL COMMENT '修改人', PRIMARY KEY (`id`) USING BTREE, UNIQUE KEY `idx_username` (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='员工信息';
-
category:菜品和套餐分类表
DROP TABLE IF EXISTS `category`; CREATE TABLE `category` ( `id` bigint(20) NOT NULL COMMENT '主键', `type` int(11) DEFAULT NULL COMMENT '类型 1 菜品分类 2 套餐分类', `name` varchar(64) COLLATE utf8_bin NOT NULL COMMENT '分类名称', `sort` int(11) NOT NULL DEFAULT '0' COMMENT '顺序', `create_time` datetime NOT NULL COMMENT '创建时间', `update_time` datetime NOT NULL COMMENT '更新时间', `create_user` bigint(20) NOT NULL COMMENT '创建人', `update_user` bigint(20) NOT NULL COMMENT '修改人', PRIMARY KEY (`id`) USING BTREE, UNIQUE KEY `idx_category_name` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='菜品及套餐分类';
-
dish:菜品表
DROP TABLE IF EXISTS `dish`; CREATE TABLE `dish` ( `id` bigint(20) NOT NULL COMMENT '主键', `name` varchar(64) COLLATE utf8_bin NOT NULL COMMENT '菜品名称', `category_id` bigint(20) NOT NULL COMMENT '菜品分类id', `price` decimal(10,2) DEFAULT NULL COMMENT '菜品价格', `code` varchar(64) COLLATE utf8_bin NOT NULL COMMENT '商品码', `image` varchar(200) COLLATE utf8_bin NOT NULL COMMENT '图片', `description` varchar(400) COLLATE utf8_bin DEFAULT NULL COMMENT '描述信息', `status` int(11) NOT NULL DEFAULT '1' COMMENT '0 停售 1 起售', `sort` int(11) NOT NULL DEFAULT '0' COMMENT '顺序', `create_time` datetime NOT NULL COMMENT '创建时间', `update_time` datetime NOT NULL COMMENT '更新时间', `create_user` bigint(20) NOT NULL COMMENT '创建人', `update_user` bigint(20) NOT NULL COMMENT '修改人', `is_deleted` int(11) NOT NULL DEFAULT '0' COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE, UNIQUE KEY `idx_dish_name` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='菜品管理';
-
setmeal:套餐表
DROP TABLE IF EXISTS `setmeal`; CREATE TABLE `setmeal` ( `id` bigint(20) NOT NULL COMMENT '主键', `category_id` bigint(20) NOT NULL COMMENT '菜品分类id', `name` varchar(64) COLLATE utf8_bin NOT NULL COMMENT '套餐名称', `price` decimal(10,2) NOT NULL COMMENT '套餐价格', `status` int(11) DEFAULT NULL COMMENT '状态 0:停用 1:启用', `code` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT '编码', `description` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '描述信息', `image` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '图片', `create_time` datetime NOT NULL COMMENT '创建时间', `update_time` datetime NOT NULL COMMENT '更新时间', `create_user` bigint(20) NOT NULL COMMENT '创建人', `update_user` bigint(20) NOT NULL COMMENT '修改人', `is_deleted` int(11) NOT NULL DEFAULT '0' COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE, UNIQUE KEY `idx_setmeal_name` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='套餐';
-
setmeal_dish:菜品套餐关系表
DROP TABLE IF EXISTS `setmeal_dish`; CREATE TABLE `setmeal_dish` ( `id` bigint(20) NOT NULL COMMENT '主键', `setmeal_id` varchar(32) COLLATE utf8_bin NOT NULL COMMENT '套餐id ', `dish_id` varchar(32) COLLATE utf8_bin NOT NULL COMMENT '菜品id', `name` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT '菜品名称 (冗余字段)', `price` decimal(10,2) DEFAULT NULL COMMENT '菜品原价(冗余字段)', `copies` int(11) NOT NULL COMMENT '份数', `sort` int(11) NOT NULL DEFAULT '0' COMMENT '排序', `create_time` datetime NOT NULL COMMENT '创建时间', `update_time` datetime NOT NULL COMMENT '更新时间', `create_user` bigint(20) NOT NULL COMMENT '创建人', `update_user` bigint(20) NOT NULL COMMENT '修改人', `is_deleted` int(11) NOT NULL DEFAULT '0' COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='套餐菜品关系';
-
dish_flavor:菜品口味关系表
DROP TABLE IF EXISTS `dish_flavor`; CREATE TABLE `dish_flavor` ( `id` bigint(20) NOT NULL COMMENT '主键', `dish_id` bigint(20) NOT NULL COMMENT '菜品', `name` varchar(64) COLLATE utf8_bin NOT NULL COMMENT '口味名称', `value` varchar(500) COLLATE utf8_bin DEFAULT NULL COMMENT '口味数据list', `create_time` datetime NOT NULL COMMENT '创建时间', `update_time` datetime NOT NULL COMMENT '更新时间', `create_user` bigint(20) NOT NULL COMMENT '创建人', `update_user` bigint(20) NOT NULL COMMENT '修改人', `is_deleted` int(11) NOT NULL DEFAULT '0' COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='菜品口味关系表';
-
user:用户表(c端)
DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` bigint(20) NOT NULL COMMENT '主键', `name` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '姓名', `phone` varchar(100) COLLATE utf8_bin NOT NULL COMMENT '手机号', `sex` varchar(2) COLLATE utf8_bin DEFAULT NULL COMMENT '性别', `id_number` varchar(18) COLLATE utf8_bin DEFAULT NULL COMMENT '身份证号', `avatar` varchar(500) COLLATE utf8_bin DEFAULT NULL COMMENT '头像', `status` int(11) DEFAULT '0' COMMENT '状态 0:禁用,1:正常', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='用户信息';
-
address_book:地址簿表
DROP TABLE IF EXISTS `address_book`; CREATE TABLE `address_book` ( `id` bigint(20) NOT NULL COMMENT '主键', `user_id` bigint(20) NOT NULL COMMENT '用户id', `consignee` varchar(50) COLLATE utf8_bin NOT NULL COMMENT '收货人', `sex` tinyint(4) NOT NULL COMMENT '性别 0 女 1 男', `phone` varchar(11) COLLATE utf8_bin NOT NULL COMMENT '手机号', `province_code` varchar(12) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '省级区划编号', `province_name` varchar(32) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '省级名称', `city_code` varchar(12) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '市级区划编号', `city_name` varchar(32) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '市级名称', `district_code` varchar(12) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '区级区划编号', `district_name` varchar(32) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '区级名称', `detail` varchar(200) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '详细地址', `label` varchar(100) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '标签', `is_default` tinyint(1) NOT NULL DEFAULT '0' COMMENT '默认 0 否 1是', `create_time` datetime NOT NULL COMMENT '创建时间', `update_time` datetime NOT NULL COMMENT '更新时间', `create_user` bigint(20) NOT NULL COMMENT '创建人', `update_user` bigint(20) NOT NULL COMMENT '修改人', `is_deleted` int(11) NOT NULL DEFAULT '0' COMMENT '是否删除', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='地址管理';
-
shopping_cart:购物车表
DROP TABLE IF EXISTS `shopping_cart`; CREATE TABLE `shopping_cart` ( `id` bigint(20) NOT NULL COMMENT '主键', `name` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '名称', `image` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '图片', `user_id` bigint(20) NOT NULL COMMENT '主键', `dish_id` bigint(20) DEFAULT NULL COMMENT '菜品id', `setmeal_id` bigint(20) DEFAULT NULL COMMENT '套餐id', `dish_flavor` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '口味', `number` int(11) NOT NULL DEFAULT '1' COMMENT '数量', `amount` decimal(10,2) NOT NULL COMMENT '金额', `create_time` datetime DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='购物车';
-
orders:订单表
DROP TABLE IF EXISTS `orders`; CREATE TABLE `orders` ( `id` bigint(20) NOT NULL COMMENT '主键', `number` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '订单号', `status` int(11) NOT NULL DEFAULT '1' COMMENT '订单状态 1待付款,2待派送,3已派送,4已完成,5已取消', `user_id` bigint(20) NOT NULL COMMENT '下单用户', `address_book_id` bigint(20) NOT NULL COMMENT '地址id', `order_time` datetime NOT NULL COMMENT '下单时间', `checkout_time` datetime NOT NULL COMMENT '结账时间', `pay_method` int(11) NOT NULL DEFAULT '1' COMMENT '支付方式 1微信,2支付宝', `amount` decimal(10,2) NOT NULL COMMENT '实收金额', `remark` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '备注', `phone` varchar(255) COLLATE utf8_bin DEFAULT NULL, `address` varchar(255) COLLATE utf8_bin DEFAULT NULL, `user_name` varchar(255) COLLATE utf8_bin DEFAULT NULL, `consignee` varchar(255) COLLATE utf8_bin DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='订单表';
-
order_detail:订单明细表
DROP TABLE IF EXISTS `order_detail`; CREATE TABLE `order_detail` ( `id` bigint(20) NOT NULL COMMENT '主键', `name` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '名字', `image` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '图片', `order_id` bigint(20) NOT NULL COMMENT '订单id', `dish_id` bigint(20) DEFAULT NULL COMMENT '菜品id', `setmeal_id` bigint(20) DEFAULT NULL COMMENT '套餐id', `dish_flavor` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '口味', `number` int(11) NOT NULL DEFAULT '1' COMMENT '数量', `amount` decimal(10,2) NOT NULL COMMENT '金额', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='订单明细表';
-
项目准备以及配置
创建项目
创建maven项目,项目名为reggie_take_out的项目工程
导入依赖
创建pom.xml文件,导入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- MyBatis-Plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version> <!-- 适用的 commons-lang3 版本 -->
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.24</version>
</dependency>
</dependencies>
创建application配置
创建application.yml文件,添加配置
server:
port: 8080
spring:
application:
name: reggie_take_out
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/reggie
username: root
password: 0000
mybatis-plus:
configuration:
# 在映射实体或者属性时,将数据库中表名和字段名中的下划线去掉,按照驼峰命名法映射user_name-->userName
map-underscore-to-camel-case: true
# 输出日志
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# global-config 配置用于全局配置
global-config:
db-config:
# id-type 为 ASSIGN_ID,这意味着你想手动指定实体对象的 ID 值(主键)
id-type: ASSIGN_ID
创建启动类
创建启动类
@Slf4j
@SpringBootApplication
public class ReggieTakeOutApplication {
public static void main(String[] args) {
SpringApplication.run(ReggieTakeOutApplication.class, args);
log.info("项目启动成功!");
}
}
引入静态资源创建配置类
将前端静态资源front和后端静态资源backend粘贴进static文件夹下。
但是,这样设置的话,在浏览器中就直接访问不了静态资源,所以需要编写一个配置类,在启动类目录中创建一个配置文件夹config,新建一个配置类WebMvcConfig。
@Slf4j
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
/**
* 设置静态资源映射
*/
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
log.info("开始静态资源映射");
registry.addResourceHandler("/front/**").addResourceLocations("classpath:/front/");
registry.addResourceHandler("/backend/**").addResourceLocations("classpath:/backend/");
}
访问主页
localhost:8080/backend/index.html