B站黑马苍穹外卖总结

项目介绍:开发一个微信小程序,可以在上面实现对外卖的购买。在这上面,我们可以添加我们想要购买的菜品,加入购物车,选择地址,支付。后端会收到订单提示,对订单进行处理。

1.先说后端

后端功能有数据统计,可以查看近七日(或者几日)收入数据,关于订单的售卖清空,新增的用户多少,那个菜品畅销。员工,菜品,套餐,分类的各种操作

2.员工管理

即可以登录后端的人员的管理。主要操作如下

按照视频的流程,员工管理分为新增,分页查询,账号的启用禁用和修改员工信息

(2.1)员工的新增

主要两个问题,比如用户名一样了,要抛异常,在全局异常处理器处理。新增员工要insert创建人的ID,创建员工的人的ID要通过ThreadLocal解决--在请求每次经过拦截时设置登录用户ID即可。

(2.2)员工的分页查询

没特别的

(2.2)员工的账号启用

用的是修改的方法,可以和员工修改用同一个update,Mapper层的update方法的接受参数是一个员工类,所以在service实现时要new一个对象,放入想要修改的参数即可

3.分类管理

然后来说,说到分类就要联系到咱们的菜品和套餐了。菜品嘛好说的,就比如红烧鱼,清蒸大虾这就是一个菜品,单独的一个菜品。但菜品也有分类,比如红烧鱼,就算鱼类,清蒸大虾算虾类。套餐是几个菜品组合到一起的,套餐也有分类,比如这个叫人气套餐A,人气套餐B这样。套餐管理如下:

分类的查询修改添加没别的,主要注意一下删除分类。分类不能随便删除,先查一下这个分类有没有关联菜品,有没有关联套餐,没得话可以删

4.菜品管理

说一下新增菜品吧,新增菜品的同时还需要在口味表同时insert。需要注意的是,新增口味需要一个属性叫dish_id,以便辨认这个口味是那个菜品的,但是菜品刚刚添加,需要在Mapper的方法添加:useGeneratedKeys="true" keyProperty="id",来获得刚添加菜品的id。

菜品的删除,要考虑菜品是不是起售中,有没有关联套餐,都成立了删除菜品的同时还要删除菜品的口味

菜品的修改,每次修改菜品也需要修改菜品口味。为了方便,直接删除所有口味,然后添加新口味。

5.套餐管理

新增套餐也要新增菜品,分页查询没什么,删除套餐看看起售否?删除传来一个1,2,3这样的形式,controller接受时这样:(@RequestParam List ids)然后套餐和关联的菜品都要删除。

6.订单管理

订单搜索

可以看看涉及到String类型获取。

接单

直接update

拒单

订单存在且状态为待接单再update,退钱

派送订单

订单存在且状态为已接单再update

取消订单

如果付款就退钱update

完成订单

订单存在且是派送中

(后台)数据统计

StringUtils.join使用

LocalDateTime beginTime = LocalDateTime.of(localDate, LocalTime.MIN)->年月日转化跟详细的时间

.stream().reduce(Integer::sum).get()使用,和各种变形

SQL语句编写

7.C端购物车

前端传来的数据模型有菜品和套餐id和菜品口味,根据这些数据查找购物车是否有相同的对象,有的话,就让数量加一。不存在就根据菜品或者套餐id查询对应的物品,设置信息,加入一条数据到购物车。
删除购物车某一个商品数量减一,也是先查,数量为1就删除,负则就update。

8.C端地址

设置默认地址,先把所有地址设置为0,在根据id把地址设置为1。别的没什么。

9.C端订单

用户下单

看地址是否为空。购物车是否为空,再考虑插入订单表,订单明细表。(下单操作是没点记支付的前的哪一步操作---也就是点击去支付这个按钮,就调用方法)

订单支付

就是付费了。我们先把购物车清空,然后修改订单的支付状态,支付时间啥的就行。(websocket发语言提示)

取消订单

咱们要先判读订单存在么?订单是不是支付过了(支付过了要退款),然后订单状态,退款理由啥的更新一下update

看一下一些技巧吧

关于redis和缓存Spring-Cache

关于登录时JWT令牌拦截器处理流程

传递账号和密码,根据账号查找对象,存在的话对比密码。登录成功在controller生成JWT令牌,需要传递密钥,时间,和传递的登录员工ID。Jwt令牌要放入的信息,设置签名使用的签名算法和签名使用的密钥,和过期时间
拦截器实现HandlerInterceptor接口的preHandle方法,先判断当前拦截到的是Controller的方法还是其他资源,从请求头获取令牌,然后校验。
全局配置类继承WebMvcConfigurationSupport,然后注册自定义拦截器。

关于分模块开发,模块的继承聚合版本的控制

分模块开发

比如pojo分出去,until分出去单独成立一个模块,别的模块要用这些模块只需要在pom.xml里导入模块的坐标即可。如项目sky-server的pom.xml导入sky-common和sky-pojo的坐标。

模块继承

主要是依赖的传递。在子模块的parent里面加入父模块的< groupId>即可(groupId会继承下来,自己的可以删去),父工程打包方式要设置为pom

模块版本控制

父工程 < dependencyManagement>来管理,这个标签只代表控制版本号,并不代表引入了这个依赖。为了方便管理版本properties自定义属性

模块聚合

快速构建项目,比如打包

关于Spring-task

其中的maven坐标spring-boot-starter里面包含了spring-context

关于Websocket

双向通信,常用于实时聊天

关于AOP和枚举类型的使用

自定义注解要加注解,配合枚举类型来做判断。
来了解一下概念

切入点Pointcut

被我们拦截的方法

通知

拦截到方法之后,增强的内容

切面

切入点和通知的结合,我们要对那个方法做什么增强操作。

通知类型

After,Before,Around(意思是拦截到方法的前、后,或者在方法前后来做增强)

关于git

关于nginx

了解安装,每次目录的作用

负载均衡

反向代理

项目的部署

1.前端项目上传到html/
2.配置nginx.conf文件,反向代理,防火墙的关闭

关于公共字段填充

了解一下自动装配

关于swagger

关于全局异常处理

类上面加@RestControllerAdivce表示这是全局异常处理,方法上的@ExceptionHandler()括号里面表示,捕获的那种异常。
来了解一下异常的流程,Controller--service--mapper,异常从底层向上抛,到Controller后,有异常就交给全局异常处理,响应异常信息。没全局异常处理的话Controller把异常抛给spring框架,会返回一个JSON格式的信息,但不一定是我们想要的。

关于Bean类

比方阿里云上传文件

config包下封装了AliOssUtil的Bean对象,AliOssProperties读取yml的配置信息存在@Component,utils包下写方法。

主从复制和读写分离

主库配置

1./etc/my.cnf修改信息,mysql重启一下
2.GRANT REPLICATION SLAVE ON . to 'xiaoming'@'%'identified by 'Root@123456';授权一个用户用于主库从库数据通信
3.show master status;

从库配置

1.同上,不过二进制日志不用管了。(id唯一)重启mysql
2.change master to master_host='',master_user='',master_password='',master_log_file='',master_log_pos=; 然后start slave;
3.show slave status;

主从复制(条件)

增删改调用的是主数据库,这些操作会记录成二进制日志。从数据库,会读取主数据库的日志,然后重做将改变应用到自己的数据库中

读写分离(目的)

目的是实现增删改调用主库,查询调用一个或者多个从库。从而减轻数据库的压力

1.sharding-jdbc(Maven坐标)的导入
2.application.yml的编写(要了解spring下面各个配置的意义啊)

Docker容器

Linux

当前步骤吖:

1.安装jdk,java-version检测是否安装成功

2.安装Tomcat,8080端口防火墙记得开放,然后启动一下看看是否成功

3.安装mysql,先卸载mariadb,在安装,设置mysql开机自启,3306防火墙要关闭,密码重新设置,Datagrip连接主机IP地址测试要成功

4.安装lrzsz

5.手动部署项目(后台运行不挂断)

相关推荐
dremtri几秒前
双 Token 认证机制详解与完整 Demo
前端·后端
不想说话的麋鹿5 分钟前
《NestJS 实战:RBAC 系统管理模块开发 (三)》:角色权限分配与数据一致性
前端·后端·node.js
JuiceFS36 分钟前
深度解析 JuiceFS 权限管理:Linux 多种安全机制全兼容
运维·后端
站大爷IP41 分钟前
python3如何使用QT编写基础的对话框程序
后端
老夫运道一向好1 小时前
【YashanDB监控运维平台(YCM)】登录安全设置
后端
bing_1581 小时前
Spring Boot 中ConditionalOnClass、ConditionalOnMissingBean 注解详解
java·spring boot·后端
凌览1 小时前
斩获 7k Star,这个桌宠项目火了🔥
前端·javascript·后端
用户0595661192091 小时前
Java 基础篇必背综合知识点总结包含新技术应用及实操指南
java·后端
小杰来搬砖1 小时前
对 JWT(JSON Web Token)令牌的完整讲解
后端