瑞吉外卖-复盘一
本章内容
- 软件开发整体介绍
- 瑞吉外卖项目介绍
- 开发环境搭建(静态资源映射)
- 后台登录功能开发(session的使用)
- 后台退出功能开发
1、瑞吉外卖项目介绍
1.1、项目介绍
本项目(瑞吉外卖)是专门为餐饮企业(餐厅、饭店)定制的一款软件产品,包括系统管理后台 和移动端应用 两部分。其中系统管理后台主要提供给餐饮企业内部员工使用,可以对餐厅的分类(菜品分类、套餐分类)、菜品、套餐、订单、员工等进行管理维护。移动端应用主要提供给消费者使用,可以在线浏览菜品、添加购物车、下单等。
1.2、功能模块
1)管理端
模块 | 描述 |
---|---|
登录/退出 | 内部员工必须登录后,才可以访问系统管理后台 |
员工管理 | 管理员可以在系统后台对员工信息进行管理,包含查询、新增、编辑、禁用等功能 |
分类管理 | 主要对当前餐厅经营的 菜品分类 或 套餐分类 进行管理维护, 包含查询、新增、修改、删除等功能 |
菜品管理 | 主要维护各个分类下的菜品信息,包含查询、新增、修改、删除、启售、停售等功能 |
套餐管理 | 主要维护当前餐厅中的套餐信息,包含查询、新增、修改、删除、启售、停售等功能 |
订单明细 | 主要维护用户在移动端下的订单信息,包含查询、取消、派送、完成,以及订单报表下载等功能 |
2)用户端
模块 | 描述 |
---|---|
登录/退出 | 在移动端,用户也需要登陆后使用APP进行点餐 |
点餐-菜单 | 在点餐界面需要展示出菜品分类/套餐分类,并根据当前选择的分类加载其中的菜品信息,供用户查询选择 |
点餐-购物车 | 用户选中的菜品就会加入用户的购物车,主要包含查询购物车、加入购物车、删除购物车、清空购物车等功能 |
订单支付 | 用户选完菜品/套餐后, 可以对购物车菜品进行结算支付, 这时就需要进行订单的支付 |
个人信息 | 在个人中心页面中会展示当前用户的基本信息, 用户可以管理收货地址, 也可以查询历史订单数据 |
1.3、技术选型
关于本项目的技术选型, 我们将会从 用户层、网关层、应用层、数据层 这几个方面进行介绍,而对于我们服务端开发工程师来说,在项目开发过程中,我们主要关注应用层及数据层技术的应用。
1)用户层
本项目中在构建系统管理后台的前端页面,我们会用到H5、Vue.js、ElementUI等技术。而在构建移动端应用时,我们会使用到微信小程序。
2)网关层
Nginx是一个服务器,主要用来作为Http服务器,部署静态资源,访问性能高。在Nginx中还有两个比较重要的作用: 反向代理和负载均衡, 在进行项目部署时,要实现Tomcat的负载均衡,就可以通过Nginx来实现。
3)应用层
SpringBoot: 快速构建Spring项目, 采用 “约定优于配置” 的思想, 简化Spring项目的配置开发。
Spring: 统一管理项目中的各种资源(bean), 在web开发的各层中都会用到。
SpringMVC:SpringMVC是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合,可以无缝集成。
SpringSession: 主要解决在集群环境下的Session共享问题。
lombok:能以简单的注解形式来简化java代码,提高开发人员的开发效率。例如开发中经常需要写的javabean,都需要花时间去添加相应的getter/setter,也许还要去写构造器、equals等方法。
Swagger: 可以自动的帮助开发人员生成接口文档,并对接口进行测试。
4)数据层
MySQL: 关系型数据库, 本项目的核心业务数据都会采用MySQL进行存储。
MybatisPlus: 本项目持久层将会使用MybatisPlus来简化开发, 基本的单表增删改查直接调用框架提供的方法即可。
Redis: 基于key-value格式存储的内存数据库, 访问速度快, 经常使用它做缓存(降低数据库访问压力, 提供访问效率), 在后面的性能优化中会使用。
5)工具
git: 版本控制工具, 在团队协作中, 使用该工具对项目中的代码进行管理。
maven: 项目构建工具。
junit:单元测试工具,开发人员功能实现完毕后,需要通过junit对功能进行单元测试。
1.4、功能架构
1). 移动端前台功能
手机号登录 , 微信登录 , 收件人地址管理 , 用户历史订单查询 , 菜品规格查询 , 购物车功能 , 下单 , 分类及菜品浏览。
2). 系统管理后台功能
员工登录/退出 , 员工信息管理 , 分类管理 , 菜品管理 , 套餐管理 , 菜品口味管理 , 订单管理 。
2、开发环境搭建
2.1、数据库环境搭建
2.1.1、创建数据库
2.1.2、数据库表导入
2.1.3、数据库表介绍
序号 | 表明 | 说明 |
---|---|---|
1 | employee | 员工表 |
2 | category | 菜品和分类表 |
3 | dish | 菜品表 |
4 | setmeal | 套餐表 |
5 | setmeal_dish | 套餐菜品关系表 |
6 | dish_flavor | 菜品口味关系表 |
7 | user | 用户表(c端) |
8 | address_book | 地址簿表 |
9 | shopping_cart | 购物车表 |
10 | orders | 订单表 |
11 | order_detail | 订单明细表 |
2.2、MAVEN项目创建
静态资源映射
创建配置类WebMvcConfig,设置静态资源映射。用于在Springboot项目中, 默认静态资源的存放目录为 : “classpath:/resources/”, “classpath:/static/”, “classpath:/public/” ; 而在我们的项目中静态资源存放在 backend, front 目录中, 那么这个时候要想访问到静态资源, 就需要设置静态资源映射。
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
@Slf4j
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
/**
* 设置静态资源映射
* @param registry
*/
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
log.info("开始进行静态资源映射...");
registry.addResourceHandler("/backend/**").addResourceLocations("classpath:/backend/");
registry.addResourceHandler("/front/**").addResourceLocations("classpath:/front/");
}
}
3、后台系统登录功能
处理逻辑如下:
①. 将页面提交的密码password进行md5加密处理, 得到加密后的字符串
②. 根据页面提交的用户名username查询数据库中员工数据信息
③. 如果没有查询到, 则返回登录失败结果
④. 密码比对,如果不一致, 则返回登录失败结果
⑤. 查看员工状态,如果为已禁用状态,则返回员工已禁用结果
⑥. 登录成功,将员工id存入Session, 并返回登录成功结果
存入session使用的是HttpServletRequest request,这个对象,使用request.getSession().setAttribute(“employee”,one.getId());语句
4、后台系统退出功能
在Controller中创建对应的处理方法,接收页面发送的POST请求 /employee/logout,具体的处理逻辑:
- 清理Session中的用户id,使用的是request.getSession().removeAttribute(“employee”);
- 返回结果
记录使用过的注解
- @Slf4j:是Lombok中提供的注解,用来通过slf4j记录日志。
- log.info(“项目启动成功…”);
- @SpringBootApplication:启动类需要添加的注解
- @Configuration:配置类上需要添加的注解,不同的配置类一半还需要继承不同的类
- WebMVC的配置类WebMvcConfig需要继承WebMvcConfigurationSupport
- Redis的配置列RedisConfig需要继承CachingConfigurerSupport
- @Data:lombok提供的注解,提供getter,setter方法,简化开发
- @TableField(fill = FieldFill.INSERT):用在实体类的属性上,在插入时对该字段进行自动填充
- @Mapper:MyBatisPlus中的注解,定义Mapper时使用,需要继承自BaseMapper
- @Service:MyBatisPlus中的注解,定义Service实现类使用,需要继承自ServiceImpl<EmployeeMapper,Employee> 和 实现Service接口
- @RestController:包含@ResponseBody和@Controller两个注解,一般用在controller上
- @Autowired:自动装配,从容器中找到该接口下的实现类的实体注入给对象。
- @RequestMapping:可以修饰类,也可以修饰方法。用于设置访问该类或者该方法的url(前缀)
- @PostMapping:修饰方法,设置访问该方法的类型为POST,也设置了访问的url。
- @RequestBody:前端的请求参数是json,在后端需要用一个对象接收,将json格式的数据封装到实体类中,需要在形参前加注解@RequestBody