
 
文章目录
- 瑞吉外卖 — day01
- 1. 所需知识
- 2. 软件开发整体介绍
- 2.1 软件开发流程
- 2.2 角色分工
- 2.3 软件环境
 
- 3. 瑞吉外卖项目介绍
- 3.1 项目介绍
- 3.2 产品原型展示
- 3.3 技术选型
- 3.4 功能架构
- 3.5 角色
 
- 4. 开发环境搭建
- 4.1 数据库环境搭建
- 4.2 Maven项目构建
 
- 5. 后台系统登录功能
- 5.1 创建需要的结构(包、类)
- 5.2 通用返回结果类
- 5.3 登录功能处理
- 5.4 退出功能处理
 
 
瑞吉外卖 — day01
1. 所需知识
- Java基础
- Java Web
- MySQL
- Spring Boot
- SSM(Spring、Spring MVC、MyBatis)
- Maven
2. 软件开发整体介绍
2.1 软件开发流程
-  需求分析 - 产品原型:网页形式展现项目大体结构(页面设计及效果)
- 需求规格说明书:word文档,展现项目的功能
 
-  设计 - 产品文档
- UI界面设计:项目界面效果
- 概要设计
- 详细设计
- 数据库设计:需要几个数据库,数据库中需要的表,表中的字段
 
-  编码 - 项目代码
- 单元测试
 
-  测试 - 测试用例
- 测试报告
 
-  上线运维 - 软件环境安装
- 配置
 
2.2 角色分工
2.3 软件环境
- 开发环境(development):开发人员在开发阶段使用的环境,一般外部用户无法访问
- 测试环境(testing):测试人员使用的环境,用于测试项目, -般外部用户无法访问
- 生产环境(production):线上环境,正式提供对外服务的环境
3. 瑞吉外卖项目介绍
3.1 项目介绍
-  本项目(瑞吉外卖)是专门为餐饮企业(餐厅、饭店)定制的一款软件产 品,包括系统管理后台和移动端应用两部分。其中系统管理后台主要提供给餐饮企业内部员工使用,可以对餐厅的菜品、套餐、订单等进行管理维护。移动端应用主要提供给消费者使用,可以在线浏览菜品、添加购物车、下单等。 
-  本项目共分为3期进行开发: 第一期主要实现基本需求,其中移动端应用通过H5实现,用户可以通过手机浏览器访问。 
 第二期主要针对移动端应用进行改进,使用微信小程序实现,用户使用起来更加方便。
 第三期主要针对系统进行优化升级,提高系统的访问性能。
3.2 产品原型展示
- 产品原型,就是一款产品成型之前的一个简单的框架,就是将页面的排版布局展现出来,使产品的初步构思有一个可视化的展示。通过原型展示,可以更加直观的了解项目的需求和提供的功能。
- 产品原型只是展现项目功能,并不是最终的效果
3.3 技术选型
| 用户层 | H5 | VUE.js | ElementUI | 微信小程序 | 
| 网关层 | Nginx | |||
| 应用层 | Spring Boot | Spring MVC | Spring Session | |
| Spring | Swagger | lombok | ||
| 数据层 | Mysql | Mybatis | Mybatis Plus | Redis | 
-  Spring Session: Spring Session 是 Spring 框架的一个项目,旨在提供会话管理的解决方案。它可以与各种后端存储(如内存、数据库、Redis 等)集成,以便 将会话数据存储在可扩展的分布式环境中。Spring Session 不仅可以用于传统的 Web 应用程序,还可以用于微服务架构中的分布式系统。
-  Swagger: Swagger是一款RESTFUL接口的 文档在线自动生成+功能测试功能软件。Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTfu风格的web服务。目标是使客户端和文件系统作为服务器一同样的速度来更新文件的方法,参数和模型紧密集成到服务器。这个解释简单点来讲就是说,swagger是一款可以根据restful风格生成的接口开发文档,并且支持做测试的一款中间软件。
-  Redis: Redis是一种开源的 内存数据结构存储系统,是一个完全开源免费的高性能(NOSQL)的key-value数据库。它支持多种数据结构,如字符串、哈希、列表、集合、有序集合等。它可以用作数据库、缓存和消息中间件,并在性能、可扩展性和灵活性方面表现出色。
3.4 功能架构
| 移动端前台(H5、微信小程序) | 手机号登陆 | 微信登陆 | 地址管理 | 历史订单 | 
| 菜品规格 | 购物车 | 下单 | 菜品浏览 | |
| 系统后台管理 | 分类管理 | 菜品管理 | 套餐管理 | 菜品口味管理 | 
| 员工登录 | 员工退出 | 员工管理 | 订单管理 | 
3.5 角色
- 后台系统管理员:登录后台管理系统,拥有后台系统中的所有操作权限
- 后台系统普通员工:登录后台管理系统,对菜品、套餐、订单等进行管理
- C端用户:登录移动端应用,可以浏览菜品、添加购物车、设置地址、在线下单等
4. 开发环境搭建
4.1 数据库环境搭建
- 创建数据库 reggie
- 运行项目 sql 文件: db_reggie.sql
4.2 Maven项目构建
- 创建项目
- 添加pom.xml文件中的依赖
- appliation.yaml 文件
- 设置启动类
- 在配置类中,设置静态资源映射
5. 后台系统登录功能
5.1 创建需要的结构(包、类)
-  读出前端页面中与后端相关的信息 
-  pojo(实体类) 
-  mapper 要继承 BaseMapper<Employee>
-  service service接口要继承: IService<Employee>serviceImpl要继承和实现: extends ServiceImpl<EmployeeMapper, Employee> implements EmployeeService
-  controller 添加注解: @Slf4j 
 @RestController
 @RequestMapping(“employee”)
5.2 通用返回结果类
-  导入到 utils 包下 
-  通用返回结果类,服务端响应数据最终会封装成此对象 
5.3 登录功能处理

处理逻辑如下:
1、将页面提交的密码password进行md5加密处理
2、根据页面提交的用户名username查询数据库
3、如果没有查询到则返回登录失败结果
4、密码比对,如果不一致则返回登录失败结果
5、查看员工状态,如果为已禁用状态,则返回员工已禁用结果
6、登录成功,将员工id存入Session并返回登录成功结果
/**
     * 后台员工登录
     * @param request
     * @param employee
     * @return
     */
    @PostMapping("login")
    public R<Employee> login(HttpServletRequest request, @RequestBody Employee employee){
        //1、将页面提交的密码password进行md5加密处理
        String password = employee.getPassword();
        password = DigestUtils.md5DigestAsHex(password.getBytes());
        //2、根据页面提交的用户名username查询数据库
        LambdaQueryWrapper<Employee> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq(Employee::getUsername,employee.getUsername());
        Employee emp = employeeService.getOne(lambdaQueryWrapper);
        //3、如果没有查询到则返回登录失败结果
        if(emp == null){
            return R.error("用户不存在");
        }
        //4、密码比对,如果不一致则返回登录失败结果
        if(!emp.getPassword().equals(password)){
            return R.error("密码不一致");
        }
        //5、查看员工状态,如果为已禁用状态,则返回员工已禁用结果
        if(emp.getStatus() == 0){
            return R.error("账号已禁用");
        }
        //6、登录成功,将员工id存入Session并返回登录成功结果
        request.getSession().setAttribute("employee",emp.getId());
        return R.success(emp);
    }
5.4 退出功能处理
/**
     * 后台员工退出
     * @param request
     * @return
     */
    @PostMapping("logout")
    public R<String> logout(HttpServletRequest request){
        // 请理 session中保存的当前用户id
        request.getSession().removeAttribute("employee");
        return R.success("退出成功");
    }



















