实际上就是把前端传过来的订单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是一个分布式版本控制工具,主要用于管理开发过程中的源代码文件(Java类、xml文件、html页面等),在软件开发中广泛使用
学完后能干什么?
远程仓库操作——从远程仓库拉取
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?
学完能干什么?
SSH(Secure Shell):建立在应用层基础上的安全协议
常用的SSH连接工具:putty、secureCRT、xshell、finalshell
通过SSH连接工具就可以实现从本地连接到远程的Linux服务器
Linux系统中的目录:/是所有目录的顶点、目录结构像一颗倒挂的树
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字符串的位置
手工部署项目运行的问题:
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脚本自动部署项目
操作步骤:
在Linux中安装Git
yum list git 列出git安装包
yum install git 在线安装git
使用git克隆代码 cd /usr/local/
git clone 仓库地址
在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:$PATHsource /etc/profile
mvn -version
vim /usr/local/apache-maven-3.5.4/conf/settings.xml 修改配置文件内容如下
/usr/local/repo
编写Shell脚本(拉取代码、编译、打包、启动)
将资料中提供的Shell脚本复制到Linux bootStart.sh
Shell脚本(Shell script),是一种Linux系统中的脚本程序
使用Shell脚本编程跟JavaScript、java编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。对于Shell脚本编写不作为重点,直接使用课程资料中提供的脚本文件bootStart.sh即可
为用户授予执行Shell脚本的权限
chmod(英文全拼:change mode)命令是控制用户对文件的权限的命令
Linux中的权限分为:读®、写(w)、执行(x)三种权限
Linux的文件调用权限分为三级:文件的所有者(Owner)、用户组(Group)、其他用户(Other Users)
只有文件的所有者和超级用户可以修改文件或目录的权限
要执行Shell脚本需要有对此脚本文件的执行权限,如果没有则不能执行
只读:4 只写:2 只执行:1 无:0
执行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