最新Springboot+mp核心技术外卖入门实战项目(六)

文章目录

  • 额外补充的再来一单功能
  • Git的使用
  • Linux

额外补充的再来一单功能

实际上就是把前端传过来的订单id接收后查询订单详情表中的数据,然后再将其中的数据都添加到购物车表中,此时购物车表就相当于一个临时缓存的表。不过在这里我们要特别注意的是前端传来的数据我们要在controller’层中用Map接收,而且键和值都为String,然后先在controller层中转成Long类型然后再去Service层的实现类中去完善相应业务代码

// 对应接口加一个方法
//再来一单
    void againSubmit(Long orderId);

//实现类
/**
    * 再来一单
    *@Param [orderId]
    *@Return
    */
    @Override
    public void againSubmit(Long orderId) {
        //先通过订单id查到订单表的对象
        //Orders order = this.getById(orderId);
        //根据订单查询订单明细表中的集合
        LambdaQueryWrapper<OrderDetail> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(OrderDetail::getOrderId, orderId);
        List<OrderDetail> orderDetailList = orderDetailService.list(queryWrapper);
        //先清除购物车
        shoppingCartService.clean();
        //将订单详情表中的记录加到购物车
        List<ShoppingCart> shoppingCarts = orderDetailList.stream().map((item) -> {
            ShoppingCart shoppingCart = new ShoppingCart();
            //设置用户id,指定当前是哪个用户的购物车数据
            Long currentId = BaseContext.getCurrentId();
            shoppingCart.setUserId(currentId);
            shoppingCart.setName(item.getName());
            shoppingCart.setImage(item.getImage());
            shoppingCart.setDishFlavor(item.getDishFlavor());
            shoppingCart.setNumber(item.getNumber());
            shoppingCart.setAmount(item.getAmount());
            if(item.getOrderId() != null){
                shoppingCart.setDishId(item.getDishId());
            }
            if(item.getSetmealId() != null) {
                shoppingCart.setSetmealId(item.getSetmealId());
            }
            return shoppingCart;
        }).collect(Collectors.toList());
        shoppingCartService.saveBatch(shoppingCarts);
    }

// controller层
@ApiOperation(value = "下单", notes = "再来一单")
    @PostMapping("/again")
    public R<String> againSubmit(@RequestBody Map<String ,String> map){
        String ids = map.get("id");
        long id = Long.parseLong(ids);
        orderService.againSubmit(id);
        return R.success("再来一单");
    }

Git的使用

Git是一个分布式版本控制工具,主要用于管理开发过程中的源代码文件(Java类、xml文件、html页面等),在软件开发中广泛使用

学完后能干什么?

  1. 代码回溯
  2. 版本切换
  3. 多人协作
  4. 远程备份

远程仓库操作——从远程仓库拉取

git pull命令的作用是从远程仓库获取最新版本合并到本地仓库,命令格式:

git pull [short-name] [branch-name]

注意:如果当前本地仓库不是从远程仓库克隆,而是本地创建的仓库,并且仓库中存在文件,此时再从远程仓库拉取文件的时候会报错(fatal: refusing to merge unrelated histories)
解决此问题可以在git pull命令后加入参数

–allow-unrelated-histories

分支操作

分支是Git使用过程中非常重要的概念。使用分支意味着你可以把你的工作从主线上分离开来,以免影响开发主线。同一个仓库可以有多个分支,各个分支相互独立,互不干扰。

git branch 查看分支
git branch [name] 创建分支
git checkout [name] 切换分支
git push [shortName] [name] 推送至远程仓库分支
git merge [name] 合并分支

Linux

Linux是一套免费和自由传播的操作系统

为什么要学Linux?

  1. 企业用人要求
  2. 个人发展要求

学完能干什么?

  1. 环境搭建:Linux安装,远程连接…
  2. 常用命令:文件、目录拷贝、移动打包、压缩文本编辑…
  3. 文件上传:jdk、tomcat、mysql…
  4. 项目部署:Java应用、Python应用、日志查看、系统管理、用户权限…

SSH(Secure Shell):建立在应用层基础上的安全协议
常用的SSH连接工具:putty、secureCRT、xshell、finalshell
通过SSH连接工具就可以实现从本地连接到远程的Linux服务器

Linux系统中的目录:/是所有目录的顶点、目录结构像一颗倒挂的树

  1. bin存放二进制可执行文件
  2. boot存放系统引导时使用的各种文件
  3. dev存放设备文件
  4. etc存放系统配置文件
  5. home存放系统用户的文件
  6. lib存放运行程序所需的共享库和内核模块
  7. opt额外安装的可选应用程序包所放置的位置
  8. root超级用户目录
  9. sbin存放二进制的可执行文件,只有root用户才能访问
  10. tmp存放临时文件
  11. usr存放系统应用程序
  12. var存放运行时需要改变数据的文件,例如日志文件

Linux常用命令

使用小技巧

Tab键自动补全
连续两次Tab键,给出操作提示
使用上下箭头快速调出曾经使用过的命令
使用clear命令或者Ctrl+l快捷键实现清屏

command [-options] [parameter] 命令名 选项 传给命令的参数,可以是0、1或多个

文件目录操作命令

ls 查看当前目录下的内容 -a就会显示所有文件及目录(.开头的隐藏文件也会列出)
pwd 查看当前所在目录
cd [目录名] 切换目录 ~表示用户的home目录 . 目前所在目录 … 当前目录位置的上级目录
touch [文件名] 如果文件不存在,新建文件
mkdir [目录名] 创建目录 -p 确保目录名称存在,不存在就创建一个 可以实现多层目录同时创建
rm [文件名] 删除指定文件 -p 当子目录被删除后使父目录为空目录的话,则一并删除
- r 递归删除 -f 无需确认,直删除
cat [-n] fileName 显示文件内容 -n由1开始对所有输出的行数编号 例如 cat/etc/profile
more 以分页的形式显示文件内容 more fireName 回车键 向下滚动一行 空格键 向下滚动一屏 b 返回上一屏
q或者Ctrl+C 退出more
tail [-f] fileName 查看文件末尾的内容 -f 动态读取文件末尾内容并显示,通常用于日志文件的内容输出

拷贝移动命令

cp 复制文件或者目录 cp [-r] source dest - r 如果复制的是目录需要使用此选项,此时将复制该目录下的所 有的子目录和文件
mv mv source dest 为文件或目录改名,或将文件或目录移动到其他位置

打包压缩命令

tar 对文件进行打包、解包、压缩、解压
tar [-zcxvf] fileName [files]
包文件后缀为.tar 表示只是完成了打包,并没有压缩
包文件后缀为.tar.gz 表示打包的同时还进行了压缩

说明:
-z: gzip 通过gizp命令处理文件,gzip可以对文件压缩或者解压
-c:create 即创建新的包文件
-x:extract 实现从包中还原文件
-v:verbose 显示命令的执行过程
-f:f代表的是file,用于指定包文件的名称

举例:
tar -acvf hello.tar.gz./* 将当前目录下所有的文件打包并压缩,打包后的文件名为hello.tar.gz
tar -zxvf hello.tar.gz 将hello.tar.gz文件进行解压,并将解压后的文件放在当前目录
tar -zxvf hello.tar.gz -C/usr/local 解压并放在/usr/local目录

文本编辑命令

vi/vim
vi命令是Linux系统提供的一个文本编辑工具,可以对文件内容进行编辑,类似于Windows中记事本
vim要自己安装 指令 yum install vim

说明:
1 在使用vim命令编辑文件时,如果指定的文件存在则直接打开此文件。如果指定的文件不存在则新建文件
2 分三种模式,分别是命令模式(Command mode)、插入模式(Insert mode)、底行模式(Last line mode),这三种模式可以切换

默认进入命令模式,另外两种模式要先进入命令模式,才能进入彼此
在命令模式按下[i,a,o]任意一个进入插入模式,可以对文件内容进行编辑,按下ESC,会回到命令模式
按下[:,/]任意一个,进入底行模式,可以对文件内容进行查找、显示行号、退出等操作,通过/进入,可以对文件内容进行查找。在底行模式输入wq保存并退出、q!不保存退出、set nu显示行号

查找命令

find 在指定目录下查找文件
find dirName -option fileName 可以使用通配符形式

举例:
find . -name “.java" 在当前目录及其子目录下查找.java结尾文件
find /itcast -name "
.java” 在/itcast目录及其子目录下查找.java结尾的文件

grep 从指定文件中查找指定的文本内容
grep word fileName

举例:
grep Hello HelloWorld.java 查找HelloWorld.java文件中出现Hello字符串的位置
grep hello *.java 查找当前目录中所有.java结尾的文件中包含hello字符串的位置

手工部署项目运行的问题:

  1. 线上程序不会采用控制台霸屏的形式运行程序,而是将程序在后台运行
  2. 线上程序不会将日志输出到控制台,而是输出到日志文件,方便运维查阅信息

nohup 命令:英文全称 no hang up(不挂起),用于不挂断地运行指令命令,退出终端不会影响程序的运行
语法格式:nohup Command [Arg …] [&]

参数说明:
Command:要执行的命令
Arg:一些参数,可以指定输出文件
&:让命令在后台运行
举例:
nohup java -jar boot工程.jar &>hello.log & 后台运行java -jar 命令,并将日志输出到hello.log文件

停止SpringBoot程序

先使用 ps -ef | grep ‘java -jar’ 找到相应进程 然后使用 kill -9 进程号

通过Shell脚本自动部署项目

操作步骤:

  1. 在Linux中安装Git

    yum list git 列出git安装包
    yum install git 在线安装git
    使用git克隆代码 cd /usr/local/
    git clone 仓库地址

  2. 在Linux中安装maven

    将资料中提供的maven安装包上传到Linux,在Linux中安装maven

    tar -zxvf apache-maven-3.5.4-bin.tar.gz -C /usr/local
    vim /etc/profile 修改配置文件,加入如下内容
    export MAVEN_HOME=/usr/local/apache-maven-3.5.4
    export PATH= J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:MAVEN_HOME/bin:$PATH

    source /etc/profile
    mvn -version
    vim /usr/local/apache-maven-3.5.4/conf/settings.xml 修改配置文件内容如下
    /usr/local/repo

  3. 编写Shell脚本(拉取代码、编译、打包、启动)

    将资料中提供的Shell脚本复制到Linux bootStart.sh
    Shell脚本(Shell script),是一种Linux系统中的脚本程序
    使用Shell脚本编程跟JavaScript、java编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。对于Shell脚本编写不作为重点,直接使用课程资料中提供的脚本文件bootStart.sh即可

  4. 为用户授予执行Shell脚本的权限

    chmod(英文全拼:change mode)命令是控制用户对文件的权限的命令
    Linux中的权限分为:读®、写(w)、执行(x)三种权限
    Linux的文件调用权限分为三级:文件的所有者(Owner)、用户组(Group)、其他用户(Other Users)
    只有文件的所有者和超级用户可以修改文件或目录的权限
    要执行Shell脚本需要有对此脚本文件的执行权限,如果没有则不能执行
    只读:4 只写:2 只执行:1 无:0

  5. 执行Shell脚本

    设置静态ip 修改文件/etc/sysconfig/network-scripts/ifcfg-ens33
    BOOTPROTO=“static” # 使用静态IP地址,默认为dhcp
    IPADDR=“192.168.138.100” # 设置的静态IP地址
    NETMASK=“255.255.255.0” # 子网掩码
    GATEWAY=“192.168.138.2” # 网关地址
    DNS1=“192.168.138.2” # DNS服务器

    重启网络服务 systemctl restart network
    注意:重启完网络服务后ip地址已经发生了改变,此时FinalShell已经连接不上Linux系统,需要创建一个新连接才能连接到Linux

你可能感兴趣的:(项目实战,spring,boot,java,git,linux,后端)