This commit is contained in:
shuhongfan
2023-09-04 16:40:17 +08:00
commit cf5ac25c14
8267 changed files with 1305066 additions and 0 deletions

View File

@@ -0,0 +1,178 @@
# 1、Jenkins介绍
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1672210026851-5c09d3ce-bb7e-4140-9aef-b0c2278011c6.png#averageHue=%23e2dedd&clientId=ud7981093-2aea-4&from=paste&height=139&id=u46b4991d&name=image.png&originHeight=209&originWidth=714&originalType=binary&ratio=1&rotation=0&showTitle=false&size=76590&status=done&style=shadow&taskId=ub4f7b119-5aff-4c71-a258-4bbaff7ac74&title=&width=476)
Jenkins 是一款流行的开源持续集成Continuous Integration工具广泛用于项目开发具有自动化构建、测试和部署等功能。官网 [http://jenkins-ci.org/](http://jenkins-ci.org/)。
Jenkins的特征
- 开源的 Java语言开发持续集成工具支持持续集成持续部署。
- 易于安装部署配置:可通过 yum安装,或下载war包以及通过docker容器等快速实现安装部署可方便web界面配置管理。
- 消息通知及测试报告:集成 RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知生成JUnit/TestNG测试报告。
- 分布式构建:支持 Jenkins能够让多台计算机一起构建/测试。
- 文件识别: Jenkins能够跟踪哪次构建生成哪些jar哪次构建使用哪个版本的jar等。
- 丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,如 gitsvnmavendocker等。
Jenkins安装和持续集成环境配置
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1672210072295-617c5616-0a60-476a-9205-2c69b2f04586.png#averageHue=%237eb60e&clientId=ud7981093-2aea-4&from=paste&height=278&id=u8147f98e&name=image.png&originHeight=417&originWidth=1208&originalType=binary&ratio=1&rotation=0&showTitle=false&size=162737&status=done&style=shadow&taskId=u0771606d-da9a-46bc-b5fa-5fcfca47b97&title=&width=805.3333333333334)
- 首先开发人员每天进行代码提交提交到Git仓库
- 然后Jenkins作为持续集成工具使用Git工具到Git仓库拉取代码到集成服务器再配合JDKMaven等软件完成代码编译代码测试与审查测试打包等工作在这个过程中每一步出错都重新再执行一次整个流程。
- 最后Jenkins把生成的jar或war包分发到测试服务器或者生产服务器测试人员或用户就可以访问应用。
# 2、部署安装
在神领物流项目中采用Docker方式部署Jenkins部署脚本如下
```shell
docker run -d \
-p 8090:8080 \
-p 50000:50000 \
-v /usr/local/src/jenkins:/var/jenkins_home \
-v /maven:/maven \
-v /etc/localtime:/etc/localtime \
-v /usr/bin/docker:/usr/bin/docker \
-v /var/run/docker.sock:/var/run/docker.sock \
--privileged \
--name jenkins \
-e TZ=Asia/Shanghai \
--restart=always \
--add-host=git.sl-express.com:192.168.150.101 \
--add-host=maven.sl-express.com:192.168.150.101 \
jenkins/jenkins:lts-jdk11
```
在部署脚本中指定了时区、hosts并且将宿主机的docker服务映射到容器内部。
访问地址:[http://jenkins.sl-express.com/](http://jenkins.sl-express.com/) 用户名密码为root/123
# 3、系统配置
Jenkins安装完成后需要进行一些配置才能正常使用。
## 3.1、配置Maven
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1672212699428-a143ccc0-ecda-4bac-8b83-12db7ba3dced.png#averageHue=%23f8f8f8&clientId=ud7981093-2aea-4&from=paste&height=395&id=udbab59f3&name=image.png&originHeight=593&originWidth=531&originalType=binary&ratio=1&rotation=0&showTitle=false&size=36748&status=done&style=shadow&taskId=u21724aff-16e9-4514-99e3-1942402a38a&title=&width=354)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1672212719033-637cef91-7ee6-42d3-81fc-fa6d4b7e150b.png#averageHue=%23fefefe&clientId=ud7981093-2aea-4&from=paste&height=330&id=u4e59c18f&name=image.png&originHeight=495&originWidth=1316&originalType=binary&ratio=1&rotation=0&showTitle=false&size=82675&status=done&style=shadow&taskId=uad33a848-6c47-4ff2-ae40-f1eb67b9d51&title=&width=877.3333333333334)
在【系统管理】中的【全局工具配置】中进行配置。
指定Maven配置文件
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1672212787844-163d592f-82ed-44f2-8bdd-892f08cf67a1.png#averageHue=%23fefefe&clientId=ud7981093-2aea-4&from=paste&height=507&id=u25e50645&name=image.png&originHeight=761&originWidth=1343&originalType=binary&ratio=1&rotation=0&showTitle=false&size=44366&status=done&style=shadow&taskId=u91749df2-8d57-404a-81ba-af9e150f624&title=&width=895.3333333333334)
配置文件内容如下:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<settings
xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>/maven/repository</localRepository>
<pluginGroups></pluginGroups>
<proxies></proxies>
<servers>
<server>
<id>sl-releases</id>
<username>deployment</username>
<password>deployment123</password>
</server>
<server>
<id>sl-snapshots</id>
<username>deployment</username>
<password>deployment123</password>
</server>
</servers>
<mirrors>
<mirror>
<id>mirror</id>
<mirrorOf>central,jcenter,!sl-releases,!sl-snapshots</mirrorOf>
<name>mirror</name>
<url>https://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>sl</id>
<properties>
<altReleaseDeploymentRepository>
sl-releases::default::http://maven.sl-express.com/nexus/content/repositories/releases/
</altReleaseDeploymentRepository>
<altSnapshotDeploymentRepository>
sl-snapshots::default::http://maven.sl-express.com/nexus/content/repositories/snapshots/
</altSnapshotDeploymentRepository>
</properties>
</profile>
</profiles>
<activeProfiles>
<activeProfile>sl</activeProfile>
</activeProfiles>
</settings>
```
## 3.2、配置Git
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1672213032095-b513d947-5df4-498a-b3d4-111655e7f542.png#averageHue=%23fefefe&clientId=ud7981093-2aea-4&from=paste&height=479&id=u6e470d56&name=image.png&originHeight=718&originWidth=1280&originalType=binary&ratio=1&rotation=0&showTitle=false&size=34645&status=done&style=shadow&taskId=u516af3c7-a91a-4a4a-91dd-775da67d72f&title=&width=853.3333333333334)
## 3.3、安装Gogs插件
我们使用的Git管理工具是Gogs需要在用户提交代码之后触发自动构建需要安装Gogs插件。
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1672213224083-014a2152-bf8e-40db-88c0-4b9bd847702a.png#averageHue=%23fefefe&clientId=ud7981093-2aea-4&from=paste&height=324&id=u5ecc49ce&name=image.png&originHeight=486&originWidth=1302&originalType=binary&ratio=1&rotation=0&showTitle=false&size=84071&status=done&style=shadow&taskId=ue5cb6581-cc8c-48b8-a8b9-bf6b752545c&title=&width=868)
搜索Gogs安装即可。
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1672213308896-2b56b7e1-b32d-4289-9f2f-ac16daae5cfd.png#averageHue=%23fafafa&clientId=ud7981093-2aea-4&from=paste&height=88&id=ucb5da071&name=image.png&originHeight=132&originWidth=955&originalType=binary&ratio=1&rotation=0&showTitle=false&size=13304&status=done&style=shadow&taskId=u853e087c-7028-4b02-96cd-8ace3fe3fda&title=&width=636.6666666666666)
在Gogs中的仓库设置钩子例如
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1672216872852-e3210595-d8e7-42df-a760-b407e15d4958.png#averageHue=%23fafafa&clientId=ud7981093-2aea-4&from=paste&height=312&id=u5d94e61c&name=image.png&originHeight=468&originWidth=1135&originalType=binary&ratio=1&rotation=0&showTitle=false&size=33439&status=done&style=shadow&taskId=u23f5be5b-a325-4d6d-88b8-1adbd330b65&title=&width=756.6666666666666)
格式:`http://jenkins.sl-express.com/gogs-webhook/?job=xxxx`
# 4、构建任务
在提供的虚拟机环境中虽然已经创建好了构建任务,如果不满足需求,可以执行创建任务,可以通过复制的方式完成。
首先点击【新建任务】:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1672217494669-37bdb4af-0619-4a61-9a42-3898853da928.png#averageHue=%23fefefe&clientId=u3d3a2c4b-3da3-4&from=paste&height=377&id=u851ce08a&name=image.png&originHeight=566&originWidth=463&originalType=binary&ratio=1&rotation=0&showTitle=false&size=35714&status=done&style=shadow&taskId=uacc5ff77-1078-4123-b7bb-c483ae31ed5&title=&width=308.6666666666667)
输入任务的名称,建议名称就是微服务的名字。
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1672223285357-27f76741-9473-4e8b-b9bb-e1a42d12264c.png#averageHue=%23c3ccd1&clientId=u3d3a2c4b-3da3-4&from=paste&height=160&id=ua1445f76&name=image.png&originHeight=240&originWidth=791&originalType=binary&ratio=1&rotation=0&showTitle=false&size=20265&status=done&style=shadow&taskId=ua084654a-c081-45d0-b31f-a82643cebe7&title=&width=527.3333333333334)
选择已有的构建任务:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1672223317069-8c6b59ff-c8e7-41db-ab74-f99b69910e3f.png#averageHue=%23f2f5ef&clientId=u3d3a2c4b-3da3-4&from=paste&height=333&id=ufad289b6&name=image.png&originHeight=499&originWidth=907&originalType=binary&ratio=1&rotation=0&showTitle=false&size=50324&status=done&style=shadow&taskId=u9d8cd9b0-2d2c-423b-bff2-fbd966556ff&title=&width=604.6666666666666)
输入任务的名称:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1672223360964-ab5618bd-4ea4-463d-ba05-f6a5332c7bdf.png#averageHue=%23fefefe&clientId=u3d3a2c4b-3da3-4&from=paste&height=275&id=uae90fbfe&name=image.png&originHeight=413&originWidth=1323&originalType=binary&ratio=1&rotation=0&showTitle=false&size=18586&status=done&style=shadow&taskId=uff336f37-4d0a-48dd-846a-83d6a52f95f&title=&width=882)
设置Gogs钩子
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1672223417593-c9b31c2b-f992-4450-8172-c4dac017e558.png#averageHue=%23fefefe&clientId=u3d3a2c4b-3da3-4&from=paste&height=285&id=uee8250bc&name=image.png&originHeight=428&originWidth=1318&originalType=binary&ratio=1&rotation=0&showTitle=false&size=36563&status=done&style=shadow&taskId=u50881726-afe5-4c04-a9e2-dec95c9770e&title=&width=878.6666666666666)
设置构建参数,主要用于构建时的脚本使用:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1672223459770-ce14e0e4-340b-4693-a760-e2f275f2b29e.png#averageHue=%23fefefe&clientId=u3d3a2c4b-3da3-4&from=paste&height=463&id=ue6bbfc6a&name=image.png&originHeight=694&originWidth=1286&originalType=binary&ratio=1&rotation=0&showTitle=false&size=39656&status=done&style=shadow&taskId=u88fcdc74-2ca1-4a21-9f54-cfe2805fc21&title=&width=857.3333333333334)
设置git地址每个项目都不一样一定要修改
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1672223518390-c7dcce43-1370-43a3-a2b5-0d7c5b027a6b.png#averageHue=%23fefefe&clientId=u3d3a2c4b-3da3-4&from=paste&height=530&id=u984b134f&name=image.png&originHeight=795&originWidth=1302&originalType=binary&ratio=1&rotation=0&showTitle=false&size=45846&status=done&style=shadow&taskId=u60cf4056-2002-4cc1-a3a5-81c117e4357&title=&width=868)
设置构建开始前将workspace删除确保没有之前编译产物的干扰
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1672223565505-b93b653f-ad2e-4314-a729-9d209a779b12.png#averageHue=%23fefefe&clientId=u3d3a2c4b-3da3-4&from=paste&height=426&id=uf9fd108f&name=image.png&originHeight=639&originWidth=931&originalType=binary&ratio=1&rotation=0&showTitle=false&size=42250&status=done&style=shadow&taskId=u7e22de1d-a4ab-46f2-835b-f12a76a21da&title=&width=620.6666666666666)
设置ssh执行命令主要是宿主机安装的docker服务具备权限可以在容器内执行
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1672224209134-2f2c031e-0c2e-434d-9fae-ee946a064439.png#averageHue=%23fefefe&clientId=u3d3a2c4b-3da3-4&from=paste&height=475&id=u28ed19e9&name=image.png&originHeight=712&originWidth=1282&originalType=binary&ratio=1&rotation=0&showTitle=false&size=41479&status=done&style=shadow&taskId=u40103788-709e-4071-ba68-04a054aa9eb&title=&width=854.6666666666666)
设置maven打包命令
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1672224358557-000ee2c1-392b-4a41-8273-c21203d3843b.png#averageHue=%23fefefe&clientId=u3d3a2c4b-3da3-4&from=paste&height=305&id=u092b8f47&name=image.png&originHeight=458&originWidth=1248&originalType=binary&ratio=1&rotation=0&showTitle=false&size=27920&status=done&style=shadow&taskId=u6c90488b-8fe8-4660-9038-b3c27ff7777&title=&width=832)
设置部署的ssh脚本主要是完成微服务打包成docker镜像进行部署
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1672224408294-2b9a586f-bdb6-4a21-a69c-1325b87cda7a.png#averageHue=%23fdfdfd&clientId=u3d3a2c4b-3da3-4&from=paste&height=528&id=ue2e7604e&name=image.png&originHeight=792&originWidth=1248&originalType=binary&ratio=1&rotation=0&showTitle=false&size=58046&status=done&style=shadow&taskId=uf5611e41-6683-4342-bf71-37af47c3b4f&title=&width=832)
执行命令如下:
```shell
#!/bin/bash
# 微服务名称
SERVER_NAME=${serverName}
# 服务版本
SERVER_VERSION=${version}
# 服务版本
SERVER_PORT=${port}
# 源jar名称mvn打包之后target目录下的jar包名称
JAR_NAME=$SERVER_NAME-$SERVER_VERSION
# jenkins下的目录
JENKINS_HOME=/var/jenkins_home/workspace/$SERVER_NAME
cd $JENKINS_HOME
# 修改文件权限
chmod 755 target/$JAR_NAME.jar
docker -v
echo "---------停止容器($SERVER_NAME---------"
docker stop $SERVER_NAME
echo "---------删除容器($SERVER_NAME---------"
docker rm $SERVER_NAME
echo "---------删除镜像($SERVER_NAME:$SERVER_VERSION---------"
docker rmi $SERVER_NAME:$SERVER_VERSION
echo "---------打包镜像($SERVER_NAME:$SERVER_VERSION---------"
docker build -t $SERVER_NAME:$SERVER_VERSION .
echo "---------运行服务---------"
docker run -d -p $SERVER_PORT:8080 --name $SERVER_NAME -e SERVER_PORT=8080 -e SPRING_CLOUD_NACOS_DISCOVERY_IP=${SPRING_CLOUD_NACOS_DISCOVERY_IP} -e SPRING_CLOUD_NACOS_DISCOVERY_PORT=${port} -e SPRING_PROFILES_ACTIVE=stu $SERVER_NAME:$SERVER_VERSION
```
最后,保存即可。

View File

@@ -0,0 +1,389 @@
测试代码在`sl-express-ms-base-service`的测试用例中,[点击查看](http://git.sl-express.com/sl/sl-express-ms-base-service/src/master/src/test/java/com/sl/transport/common/util)。
# 1、[树结构工具-TreeUtil](https://hutool.cn/docs/#/core/%E8%AF%AD%E8%A8%80%E7%89%B9%E6%80%A7/%E6%A0%91%E7%BB%93%E6%9E%84/%E6%A0%91%E7%BB%93%E6%9E%84%E5%B7%A5%E5%85%B7-TreeUtil?id=%e6%a0%91%e7%bb%93%e6%9e%84%e5%b7%a5%e5%85%b7-treeutil)
### 构建Tree示例
```java
package com.sl.transport.common.util;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.tree.Tree;
import cn.hutool.core.lang.tree.TreeNode;
import cn.hutool.core.lang.tree.TreeNodeConfig;
import cn.hutool.core.lang.tree.TreeUtil;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import java.util.List;
@Slf4j
class TreeUtilTest {
@Test
void treeTest() {
// 构建node列表
List<TreeNode<String>> nodeList = CollUtil.newArrayList();
nodeList.add(new TreeNode<>("1", "0", "系统管理", 5));
nodeList.add(new TreeNode<>("11", "1", "用户管理", 222222));
nodeList.add(new TreeNode<>("111", "11", "用户添加", 0));
nodeList.add(new TreeNode<>("2", "0", "店铺管理", 1));
nodeList.add(new TreeNode<>("21", "2", "商品管理", 44));
nodeList.add(new TreeNode<>("221", "2", "添加商品", 2));
//配置
TreeNodeConfig treeNodeConfig = new TreeNodeConfig();
// 自定义属性名 都要默认值的
treeNodeConfig.setWeightKey("weight");
treeNodeConfig.setIdKey("id");
// 最大递归深度
treeNodeConfig.setDeep(3);
//构造树结构
List<Tree<String>> treeNodes = TreeUtil.build(nodeList, "0",
(treeNode, tree) -> {
tree.setId(treeNode.getId());
tree.setParentId(treeNode.getParentId());
tree.putAll(BeanUtil.beanToMap(treeNode));
tree.remove("bid");
});
log.info("treeNodes {}", JSONUtil.toJsonStr(treeNodes));
}
}
```
### 输出结果
```json
[{
"id": "2",
"parentId": "0",
"name": "店铺管理",
"weight": 1,
"children": [{
"id": "221",
"parentId": "2",
"name": "添加商品",
"weight": 2
}, {
"id": "21",
"parentId": "2",
"name": "商品管理",
"weight": 44
}]
}, {
"id": "1",
"parentId": "0",
"name": "系统管理",
"weight": 5,
"children": [{
"id": "11",
"parentId": "1",
"name": "用户管理",
"weight": 222222,
"children": [{
"id": "111",
"parentId": "11",
"name": "用户添加",
"weight": 0
}]
}]
}]
```
# 2、[Bean工具-BeanUtil](https://hutool.cn/docs/#/core/JavaBean/Bean%E5%B7%A5%E5%85%B7-BeanUtil?id=bean%e5%b7%a5%e5%85%b7-beanutil)
### 对象转Bean
```java
@Slf4j
public class BeanUtilTest {
@Getter
@Setter
public static class SubPerson extends Person {
public static final String SUBNAME = "TEST";
private UUID id;
private String subName;
private Boolean slow;
private LocalDateTime date;
private LocalDate date2;
}
@Getter
@Setter
public static class Person {
private String name;
private int age;
private String openid;
}
/**
* 对象转Bean
*/
@Test
public void toBeanTest() {
SubPerson person = new SubPerson();
person.setAge(14);
person.setOpenid("11213232");
person.setName("测试A11");
person.setSubName("sub名字");
Map<?, ?> map = BeanUtil.toBean(person, Map.class);
Assert.assertEquals("测试A11", map.get("name"));
Assert.assertEquals(14, map.get("age"));
Assert.assertEquals("11213232", map.get("openid"));
// static属性应被忽略
log.info("map是否包含名为SUBNAME的key {}", map.containsKey("SUBNAME"));
}
}
```
### 输出结果
```
map是否包含名为SUBNAME的key false
```
# 3、[验证码工具-CaptchaUtil](https://hutool.cn/docs/#/captcha/%E6%A6%82%E8%BF%B0)
### 生成验证码
```java
package com.sl.transport.common.util;
import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.LineCaptcha;
import lombok.extern.slf4j.Slf4j;
import org.junit.Assert;
import org.junit.Test;
/**
* 直线干扰验证码单元测试
*
* @author looly
*/
@Slf4j
public class CaptchaTest {
/**
* 生成验证码
*/
@Test
public void lineCaptchaTest1() {
// 定义图形验证码的长和宽
LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(200, 100);
Assert.assertNotNull(lineCaptcha.getCode());
log.info("直线干扰验证码: {}", lineCaptcha.getCode());
log.info("直线干扰验证码验证结果: {}",lineCaptcha.verify(lineCaptcha.getCode()));
}
}
```
### 输出结果
```
直线干扰验证码: 5ku0o
直线干扰验证码验证结果: true
```
# 4、[类型转换工具类-Convert](https://hutool.cn/docs/#/core/%E7%B1%BB%E5%9E%8B%E8%BD%AC%E6%8D%A2/%E7%B1%BB%E5%9E%8B%E8%BD%AC%E6%8D%A2%E5%B7%A5%E5%85%B7%E7%B1%BB-Convert?id=%e7%b1%bb%e5%9e%8b%e8%bd%ac%e6%8d%a2%e5%b7%a5%e5%85%b7%e7%b1%bb-convert)
### 转换值为指定类型
```java
/**
* 转换值为指定类型
*/
@Test
public void toObjectTest() {
final Object result = Convert.convert(Object.class, "aaaa");
log.info(result + "");
}
```
### 输出结果
```
aaaa
```
# 5、[对象工具-ObjectUtil](https://hutool.cn/docs/#/core/%E5%B7%A5%E5%85%B7%E7%B1%BB/%E5%AF%B9%E8%B1%A1%E5%B7%A5%E5%85%B7-ObjectUtil?id=%e5%af%b9%e8%b1%a1%e5%b7%a5%e5%85%b7-objectutil)
### 对象相等
```java
/**
* 比较两个对象是否相等
*/
@Test
public void equalsTest() {
Object a = null;
Object b = null;
log.info("是否相等:{}" , ObjectUtil.equals(a, b));
}
```
### 输出结果
```
是否相等true
```
# 6、[数字工具-NumberUtil](https://hutool.cn/docs/#/core/%E5%B7%A5%E5%85%B7%E7%B1%BB/%E6%95%B0%E5%AD%97%E5%B7%A5%E5%85%B7-NumberUtil?id=%e6%95%b0%e5%ad%97%e5%b7%a5%e5%85%b7-numberutil)
### 加法运算
```java
/**
* 提供精确的加法运算
*/
@Test
public void addTest() {
final Float a = 3.15f;
final Double b = 4.22;
final double result = NumberUtil.add(a, b).doubleValue();
log.info(result + "");
}
```
### 输出结果
```
7.37
```
# 7、[日期时间工具-DateUtil](https://hutool.cn/docs/#/core/%E6%97%A5%E6%9C%9F%E6%97%B6%E9%97%B4/%E6%97%A5%E6%9C%9F%E6%97%B6%E9%97%B4%E5%B7%A5%E5%85%B7-DateUtil?id=%e6%97%a5%e6%9c%9f%e6%97%b6%e9%97%b4%e5%b7%a5%e5%85%b7-dateutil)
### 当前时间
```java
/**
* 当前时间
*/
@Test
public void nowTest() {
// 当前时间
final Date date = DateUtil.date();
Assert.assertNotNull(date);
// 当前时间
final Date date2 = DateUtil.date(Calendar.getInstance());
Assert.assertNotNull(date2);
// 当前时间
final Date date3 = DateUtil.date(System.currentTimeMillis());
Assert.assertNotNull(date3);
// 当前日期字符串格式yyyy-MM-dd HH:mm:ss
final String now = DateUtil.now();
Assert.assertNotNull(now);
// 当前日期字符串格式yyyy-MM-dd
final String today = DateUtil.today();
log.info(today);
}
```
### 输出结果
```
2023-03-10
```
# 8、[集合工具-CollUtil](https://hutool.cn/docs/#/core/%E9%9B%86%E5%90%88%E7%B1%BB/%E9%9B%86%E5%90%88%E5%B7%A5%E5%85%B7-CollUtil?id=%e9%9b%86%e5%90%88%e5%b7%a5%e5%85%b7-collutil)
### 自定义函数判断集合是否包含某类值
```java
/**
* 自定义函数判断集合是否包含某类值
*/
@Test
public void testPredicateContains() {
final ArrayList<String> list = CollUtil.newArrayList("bbbbb", "aaaaa", "ccccc");
log.info( "" + CollUtil.contains(list, s -> s.startsWith("a")));
log.info( "" + CollUtil.contains(list, s -> s.startsWith("d")));
}
```
### 输出结果
```
true
false
```
# 9、[集合串行流工具-CollStreamUtil](https://hutool.cn/docs/#/core/%E9%9B%86%E5%90%88%E7%B1%BB/%E9%9B%86%E5%90%88%E4%B8%B2%E8%A1%8C%E6%B5%81%E5%B7%A5%E5%85%B7-CollStreamUtil?id=%e9%9b%86%e5%90%88%e4%b8%b2%e8%a1%8c%e6%b5%81%e5%b7%a5%e5%85%b7-collstreamutil)
### 将Collection转化为map
```java
/**
* 将Collection转化为map(value类型与collection的泛型不同)
*/
@Test
public void testToMap() {
Map<Long, String> map = CollStreamUtil.toMap(null, Student::getStudentId, Student::getName);
Assert.assertEquals(map, Collections.EMPTY_MAP);
List<Student> list = new ArrayList<>();
map = CollStreamUtil.toMap(list, Student::getStudentId, Student::getName);
Assert.assertEquals(map, Collections.EMPTY_MAP);
list.add(new Student(1, 1, 1, "张三"));
list.add(new Student(1, 1, 2, "李四"));
list.add(new Student(1, 1, 3, "王五"));
map = CollStreamUtil.toMap(list, Student::getStudentId, Student::getName);
Assert.assertEquals(map.get(1L), "张三");
Assert.assertEquals(map.get(2L), "李四");
Assert.assertEquals(map.get(3L), "王五");
Assert.assertNull(map.get(4L));
// 测试value为空时
list.add(new Student(1, 1, 4, null));
map = CollStreamUtil.toMap(list, Student::getStudentId, Student::getName);
log.info(map.get(4L));
}
```
### 输出结果
```
null
```
# 10、[JSON工具-JSONUtil](https://hutool.cn/docs/#/json/JSONUtil?id=json%e5%b7%a5%e5%85%b7-jsonutil)
### JSON字符串转JSONObject对象
```java
/**
* JSON字符串转JSONObject对象
*/
@Test
public void toJsonStrTest2() {
final Map<String, Object> model = new HashMap<>();
model.put("mobile", "17610836523");
model.put("type", 1);
final Map<String, Object> data = new HashMap<>();
data.put("model", model);
data.put("model2", model);
final JSONObject jsonObject = JSONUtil.parseObj(data);
log.info("是否相等{}", ObjectUtil.equals( "17610836523", jsonObject.getJSONObject("model").getStr("mobile")));
}
```
### 输出结果
```
是否相等true
```
# 11、[唯一ID工具-IdUtil](https://hutool.cn/docs/#/core/%E5%B7%A5%E5%85%B7%E7%B1%BB/%E5%94%AF%E4%B8%80ID%E5%B7%A5%E5%85%B7-IdUtil?id=%e5%94%af%e4%b8%80id%e5%b7%a5%e5%85%b7-idutil)
### 获取随机UUID
```java
/**
*获取随机UUID
*/
@Test
public void randomUUIDTest() {
String randomUUID = IdUtil.randomUUID();
log.info(randomUUID);
}
```
### 输出结果
```
e514518b-21d7-4918-9b34-792b21b0b64f
```
# 12、[枚举工具-EnumUtil](https://hutool.cn/docs/#/core/%E5%B7%A5%E5%85%B7%E7%B1%BB/%E6%9E%9A%E4%B8%BE%E5%B7%A5%E5%85%B7-EnumUtil?id=%e6%9e%9a%e4%b8%be%e5%b7%a5%e5%85%b7-enumutil)
### 枚举类中所有枚举对象的name列表
```java
public enum TestEnum{
TEST1("type1"), TEST2("type2"), TEST3("type3");
TestEnum(String type) {
this.type = type;
}
private final String type;
@SuppressWarnings("unused")
private String name;
public String getType() {
return this.type;
}
public String getName() {
return this.name;
}
}
/**
* 枚举类中所有枚举对象的name列表
*/
@Test
public void getNamesTest() {
List<String> names = EnumUtil.getNames(TestEnum.class);
boolean equalList = CollUtil.isEqualList(CollUtil.newArrayList("TEST1", "TEST2", "TEST3"), names);
log.info(equalList + "");
}
```
### 输出结果
```
true
```

View File

@@ -0,0 +1,108 @@
# 1、说明
前端包括4个端分别是
- 用户端(微信小程序)
- 快递员端安卓app
- 司机端安卓app
- 后台管理端pc web
# 2、用户端
## 2.1、开发者工具
用户端是基于微信小程序开发的,首先需要下载并安装微信开发者工具:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666082052978-b1cdc9f0-9831-415c-91fa-55bbec63c8f2.png#averageHue=%23f9f8f8&clientId=u7729d0e1-b5cc-4&errorMessage=unknown%20error&from=paste&height=211&id=u3148892a&name=image.png&originHeight=348&originWidth=1114&originalType=binary&ratio=1&rotation=0&showTitle=false&size=50359&status=error&style=shadow&taskId=uf2b33888-c95b-42d2-bd9d-ab71acfc156&title=&width=675.1514761288107)
可以使用课程资料中提供的安装包或在线下载,[点击下载](https://developers.weixin.qq.com/miniprogram/dev/devtools/stable.html)
## 2.2、申请测试账号
接下来,申请微信小程序的测试账号,[点击申请](https://mp.weixin.qq.com/wxamp/sandbox),通过手机微信扫码进行操作。
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666082822936-8abbd126-8c4b-4e02-ad5a-4ca5c4e12e44.png#averageHue=%23e1e1e1&clientId=u7729d0e1-b5cc-4&errorMessage=unknown%20error&from=paste&height=426&id=u75add51e&name=image.png&originHeight=703&originWidth=541&originalType=binary&ratio=1&rotation=0&showTitle=false&size=67786&status=error&style=shadow&taskId=ud0d00d23-382d-4f91-b70e-1481e22c3e7&title=&width=327.8787689279054)
申请成功后,进行登录,[点击登录](https://mp.weixin.qq.com/),如下:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666082977858-38849f07-3112-4c0b-9058-e989b5fb58ad.png#averageHue=%234bce89&clientId=u7729d0e1-b5cc-4&errorMessage=unknown%20error&from=paste&height=385&id=ub8b3bb79&name=image.png&originHeight=635&originWidth=1811&originalType=binary&ratio=1&rotation=0&showTitle=false&size=862206&status=error&style=shadow&taskId=u38e41a32-910a-4f93-a642-41abffb52d9&title=&width=1097.575694137591)
通过手机微信进行扫码登录:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666083012252-db5ad7cc-68cf-4943-8af1-e5ad9ffe3ec0.png#averageHue=%23fefdfd&clientId=u7729d0e1-b5cc-4&errorMessage=unknown%20error&from=paste&height=246&id=u32ce2bb3&name=image.png&originHeight=406&originWidth=570&originalType=binary&ratio=1&rotation=0&showTitle=false&size=23572&status=error&style=shadow&taskId=u49786afa-1714-4ad9-a131-8ba9a344474&title=&width=345.4545254878116)
即可看到测试账号信息:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666083048608-08e392c6-426a-4794-abea-566f78431be6.png#averageHue=%23fafbfb&clientId=u7729d0e1-b5cc-4&errorMessage=unknown%20error&from=paste&height=405&id=ub7a7b181&name=image.png&originHeight=668&originWidth=1702&originalType=binary&ratio=1&rotation=0&showTitle=false&size=30981&status=error&style=shadow&taskId=u7dc5bb6d-39e1-41ed-acea-909dba457bc&title=&width=1031.515091895185)
需要将AppID和AppSecret保存到nacos配置中心的 `sl-express-ms-web-customer.properties`中:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666796771252-549b88a6-c41d-44b0-a7d6-f56753a4f902.png#averageHue=%23202020&clientId=uc1e66e0c-908f-4&from=paste&height=291&id=u79cded72&name=image.png&originHeight=436&originWidth=892&originalType=binary&ratio=1&rotation=0&showTitle=false&size=68561&status=done&style=shadow&taskId=ub7dd2e21-cb80-44e0-bed8-b45b43a02f5&title=&width=594.6666666666666)
## 2.3、导入代码
从git拉取代码地址[http://git.sl-express.com/sl/project-wl-yonghuduan-uniapp-vue3](http://git.sl-express.com/sl/project-wl-yonghuduan-uniapp-vue3)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666086804481-271ff5ec-8328-437f-baaa-990c6cec55cc.png#averageHue=%23e3ac64&clientId=u7729d0e1-b5cc-4&errorMessage=unknown%20error&from=paste&height=92&id=u8bc430e7&name=image.png&originHeight=152&originWidth=566&originalType=binary&ratio=1&rotation=0&showTitle=false&size=10589&status=error&style=shadow&taskId=u21062056-f2d3-438e-a565-bdcc8591bb3&title=&width=343.0302832036866)
打开微信开发者工具(需要通过手机上的微信客户端进行扫码登录,不要使用游客身份登录),导入代码,注意导入的目录为:`project-wl-yonghuduan-uniapp-vue3\unpackage\dist\dev\mp-weixin`,使用测试账号:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666086915604-93ab78eb-fa7f-4943-b447-5bc91f898a1b.png#averageHue=%23fafaf9&clientId=u7729d0e1-b5cc-4&errorMessage=unknown%20error&from=paste&height=549&id=u1a2fa314&name=image.png&originHeight=906&originWidth=1200&originalType=binary&ratio=1&rotation=0&showTitle=false&size=60171&status=error&style=shadow&taskId=u98a957d5-321f-4233-b8a2-3b8be18e60e&title=&width=727.2726852374981)
导入完成后,需要修改`env.js`配置文件,将`baseUrl`变量设置为:`http://api.sl-express.com/customer`,此链接为与后端服务交互的地址,入口为网关地址:(修改完成后需要点击【编译】按钮进行重新编译)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666087117309-34ab0053-42c7-4d53-a153-fdbf08f9a92c.png#averageHue=%23f4f1ee&clientId=u7729d0e1-b5cc-4&errorMessage=unknown%20error&from=paste&height=618&id=u5296f2da&name=image.png&originHeight=1020&originWidth=1920&originalType=binary&ratio=1&rotation=0&showTitle=false&size=337143&status=error&style=shadow&taskId=u947359a7-e668-46a7-9a23-a5f6a897862&title=&width=1163.636296379997)
如果需要完成登录,需要确保如下服务保持启动状态:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666087670046-af8e37f9-6cd0-435f-93a8-6dcc1d8bf60e.png#averageHue=%230f131d&clientId=u7729d0e1-b5cc-4&errorMessage=unknown%20error&from=paste&height=274&id=ud912be12&name=image.png&originHeight=452&originWidth=1651&originalType=binary&ratio=1&rotation=0&showTitle=false&size=76408&status=error&style=shadow&taskId=u7a9329b5-57a8-4407-90bc-2a883369682&title=&width=1000.6060027725912)
测试登录:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666088371030-e7a02156-1628-422d-bb22-e17880a327c0.png#averageHue=%23fdf1f0&clientId=ua3104b4f-a4f8-4&errorMessage=unknown%20error&from=paste&height=480&id=u5666bfec&name=image.png&originHeight=792&originWidth=484&originalType=binary&ratio=1&rotation=0&showTitle=false&size=23520&status=error&style=shadow&taskId=ue458f33d-48e5-4087-a501-228b0863dc9&title=&width=293.33331637912426)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666088396227-c20932d6-ed8e-45f1-8363-75c026878caa.png#averageHue=%23ccc7c6&clientId=ua3104b4f-a4f8-4&errorMessage=unknown%20error&from=paste&height=481&id=ua1f2b1ce&name=image.png&originHeight=793&originWidth=476&originalType=binary&ratio=1&rotation=0&showTitle=false&size=66392&status=error&style=shadow&taskId=u4c2cb589-f875-48f1-a6da-41822f7b251&title=&width=288.48483181087425)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666088428155-39d52547-94de-4d91-9414-241a17b338f6.png#averageHue=%238a8a8a&clientId=ua3104b4f-a4f8-4&errorMessage=unknown%20error&from=paste&height=479&id=u3ba12442&name=image.png&originHeight=790&originWidth=482&originalType=binary&ratio=1&rotation=0&showTitle=false&size=48078&status=error&style=shadow&taskId=u5d7ad405-a798-49ff-a638-4f8e618577b&title=&width=292.1211952370617)
登录成功:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666088451139-ee29c78c-7d5a-4e69-921c-45cc8f907c68.png#averageHue=%23f4dbd8&clientId=ua3104b4f-a4f8-4&errorMessage=unknown%20error&from=paste&height=480&id=u84493463&name=image.png&originHeight=792&originWidth=482&originalType=binary&ratio=1&rotation=0&showTitle=false&size=71682&status=error&style=shadow&taskId=ud8098131-4597-44a8-87b4-d00d292336c&title=&width=292.1211952370617)
# 3、司机、快递员端
司机和快递员端都是安卓app的可以安装在手机或通过模拟器进行使用这里介绍模拟器的方式进行使用。如果使用手机的话需要通过内网穿透的方式访问网关
## 3.1、模拟器
### 3.1.1、联想模拟器
在Windows平台推荐使用【联想模拟器】安装包在`资料\软件包\模拟器`中找到。(如果联想模拟器不能正常使用也可以使用其他的模拟器)
安装完成后,设置分辨率为【手机 720 * 1280】
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666094236717-cee34e71-9eb3-4697-bd72-4b6168e4038d.png#averageHue=%231d2527&clientId=u94370c3f-5450-4&errorMessage=unknown%20error&from=paste&height=507&id=ue5c31003&name=image.png&originHeight=837&originWidth=990&originalType=binary&ratio=1&rotation=0&showTitle=false&size=38403&status=error&style=shadow&taskId=u607528e2-fdf8-461b-9f62-2062597e6cd&title=&width=599.999965320936)
效果如下安装apk直接拖入即可
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666094259231-cd5432d0-c288-4cc9-b9e8-99ddf3f97baf.png#averageHue=%231e272e&clientId=u94370c3f-5450-4&errorMessage=unknown%20error&from=paste&height=582&id=uf4e39193&name=image.png&originHeight=961&originWidth=575&originalType=binary&ratio=1&rotation=0&showTitle=false&size=352553&status=error&style=shadow&taskId=ub513e2ff-228c-4312-bba5-592192de4ec&title=&width=348.48482834296783)
模拟器中的共享目录:
![image.png](https://cdn.nlark.com/yuque/0/2023/png/27683667/1677721099105-43b860fd-8057-46fb-827d-697d23a66e03.png#averageHue=%231f292e&clientId=u72f7516e-8236-4&from=paste&height=595&id=uf077d3fc&name=image.png&originHeight=892&originWidth=1032&originalType=binary&ratio=1.5&rotation=0&showTitle=false&size=114890&status=done&style=shadow&taskId=u9d3810cf-0d61-4ebd-a6d9-8403dc60399&title=&width=688)
在模拟器的定位功能中可以设定位置信息主要用于app中获取定位在项目用于车辆位置上报等场景
![image.png](https://cdn.nlark.com/yuque/0/2023/png/27683667/1677721897213-44032d06-29c7-415c-9de9-a93c4ea10b6a.png#averageHue=%23b6e8df&clientId=u72f7516e-8236-4&from=paste&height=539&id=u8df4dfb1&name=image.png&originHeight=809&originWidth=1244&originalType=binary&ratio=1.5&rotation=0&showTitle=false&size=615731&status=done&style=shadow&taskId=u64078e4f-b9bd-41f8-a254-c3673c6c709&title=&width=829.3333333333334)
### 3.1.2、官方模拟器
如果使用的是苹果Mac电脑并且是M1、M2芯片的同学可以安装官方的模拟器进行使用。
在资料文件夹中找到`android-emulator-m1-preview-v3.dmg`安装包,进行安装。
安装完成后还不能安装apk需要安装android-sdk这里通过brew命令安装首先安装brew在命令控制台输入命令
`/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" `
推荐使用2号安装
![image.png](https://cdn.nlark.com/yuque/0/2023/png/27683667/1678606318315-9c8c183e-99ce-4a74-92ef-79db890eecab.png#averageHue=%23fcfcfc&clientId=uee7de322-406c-4&from=paste&height=229&id=udbe94230&name=image.png&originHeight=458&originWidth=904&originalType=binary&ratio=2&rotation=0&showTitle=false&size=112543&status=done&style=shadow&taskId=u2f6906d8-144a-4976-ab69-3b0b9fb5708&title=&width=452)
> 如果没有安装git在提示框中选择安装即可。
![image.png](https://cdn.nlark.com/yuque/0/2023/png/27683667/1678606702403-2cd42a0c-d2ab-46ef-95e2-9bd832702733.png#averageHue=%23fefefd&clientId=uee7de322-406c-4&from=paste&height=166&id=udee1f244&name=image.png&originHeight=332&originWidth=1028&originalType=binary&ratio=2&rotation=0&showTitle=false&size=98099&status=done&style=shadow&taskId=ub7fa9242-6870-4cd4-8a61-a9ddace803a&title=&width=514)
执行命令立即生效:`source /Users/tianze/.zprofile`
接下来安装android-sdk
```shell
#先安装android-sdk再安装android-platform-tools
brew install --cask android-sdk
brew install android-platform-tools
#查看
brew list android-sdk
brew list android-platform-tools
```
可以看到在`/opt/homebrew/Caskroom`目录下有`android-platform-tools``android-sdk`两个文件夹:
![image.png](https://cdn.nlark.com/yuque/0/2023/png/27683667/1678606999353-59b261f0-1660-46f8-ad20-323bb76c2f0a.png#averageHue=%23f4f4f4&clientId=uee7de322-406c-4&from=paste&height=180&id=u0406da84&name=image.png&originHeight=360&originWidth=920&originalType=binary&ratio=2&rotation=0&showTitle=false&size=48731&status=done&style=shadow&taskId=ua2b7f445-6584-4960-93b8-c3c753acc63&title=&width=460)
在模拟器中设置adb路径`/opt/homebrew/Caskroom/android-platform-tools/34.0.1/platform-tools/adb`
![image.png](https://cdn.nlark.com/yuque/0/2023/png/27683667/1678607204992-61f21f8d-1f08-422c-a4bf-97640667aba7.png#averageHue=%23efebea&clientId=uee7de322-406c-4&from=paste&height=671&id=uf6dec2cc&name=image.png&originHeight=1342&originWidth=1958&originalType=binary&ratio=2&rotation=0&showTitle=false&size=514412&status=done&style=shadow&taskId=u3afb292d-42f3-4fcf-9deb-97bf38fe8aa&title=&width=979)
设置完成后即可拖入apk进行安装
![image.png](https://cdn.nlark.com/yuque/0/2023/png/27683667/1678607334882-e3288903-3956-4c65-a13d-9186d0d0a590.png#averageHue=%23fbf8f7&clientId=uee7de322-406c-4&from=paste&height=748&id=udfe1aac1&name=image.png&originHeight=1496&originWidth=810&originalType=binary&ratio=2&rotation=0&showTitle=false&size=173463&status=done&style=shadow&taskId=ucc08f3f9-05c9-48dd-9d8e-a93aacb0d79&title=&width=405)
## 3.2、启动服务
测试登录的话,需要确保如下的服务处于启动状态:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666094397961-e1141f78-8d06-417a-a81a-8ec672666f33.png#averageHue=%230f131e&clientId=u94370c3f-5450-4&errorMessage=unknown%20error&from=paste&height=279&id=u28832025&name=image.png&originHeight=461&originWidth=1673&originalType=binary&ratio=1&rotation=0&showTitle=false&size=78810&status=error&style=shadow&taskId=udde786d9-4bc2-43c5-bb82-4c686d411c9&title=&width=1013.9393353352787)
## 3.3、快递员端
在app中设置接口地址`http://192.168.150.101:9527/courier`
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666096686586-339fcd7b-cad6-49c4-992d-e93d4ca9c9a0.png#averageHue=%23fcf2f1&clientId=u94370c3f-5450-4&errorMessage=unknown%20error&from=paste&height=554&id=u160b9773&name=image.png&originHeight=914&originWidth=514&originalType=binary&ratio=1&rotation=0&showTitle=false&size=28124&status=error&style=shadow&taskId=uf35bdd8c-9041-4982-824c-cb0142703e6&title=&width=311.5151335100617)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666096747049-143afd57-3549-482d-856d-6a36af4a3727.png#averageHue=%23a4a3a3&clientId=u94370c3f-5450-4&errorMessage=unknown%20error&from=paste&height=554&id=u10a201b7&name=image.png&originHeight=914&originWidth=514&originalType=binary&ratio=1&rotation=0&showTitle=false&size=34785&status=error&style=shadow&taskId=u62990baa-8ffb-47f8-8149-779d9c631fa&title=&width=311.5151335100617)
使用正确的用户密码即可登录:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666096821007-90b5cfce-a6bd-4979-99aa-91aba65772c7.png#averageHue=%23f5d0cd&clientId=u94370c3f-5450-4&errorMessage=unknown%20error&from=paste&height=554&id=uf09ed66f&name=image.png&originHeight=914&originWidth=514&originalType=binary&ratio=1&rotation=0&showTitle=false&size=94992&status=error&style=shadow&taskId=u128fb41d-cf08-4cb3-944f-247dfe0cece&title=&width=311.5151335100617)
## 3.4、司机端
司机端与快递员端类似需要配置url为`http://192.168.150.101:9527/driver`
输入正确的用户名密码即可登录成功:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666097103984-ff98e9ab-d196-4c5e-9ca9-aad7d80405aa.png#averageHue=%23f5c5c1&clientId=u94370c3f-5450-4&errorMessage=unknown%20error&from=paste&height=554&id=u71d02a1d&name=image.png&originHeight=914&originWidth=514&originalType=binary&ratio=1&rotation=0&showTitle=false&size=59339&status=error&style=shadow&taskId=u6e224831-98bb-4006-8b40-66508737a64&title=&width=311.5151335100617)
# 4、pc管理端
pc管理端是需要将前端开发的vue进行编译发布成html然后通过nginx进行访问这个过程已经在Jenkins中配置执行点击发布即可。
地址:[http://jenkins.sl-express.com/view/%E5%89%8D%E7%AB%AF/job/project-slwl-admin-vue/](http://jenkins.sl-express.com/view/%E5%89%8D%E7%AB%AF/job/project-slwl-admin-vue/)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666098383387-549c2872-5327-4830-b8ff-a74456799ed6.png#averageHue=%23fefefe&clientId=u94370c3f-5450-4&errorMessage=unknown%20error&from=paste&height=398&id=ue44eaeb6&name=image.png&originHeight=657&originWidth=1392&originalType=binary&ratio=1&rotation=0&showTitle=false&size=116388&status=error&style=shadow&taskId=u63a23e7c-c86a-470a-b4cc-677aca5329b&title=&width=843.6363148754979)
vue打包命令
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666098487931-f57d9677-2de2-4647-bb42-4ff9fc755da0.png#averageHue=%23fefefe&clientId=u94370c3f-5450-4&errorMessage=unknown%20error&from=paste&height=393&id=u1d537ab7&name=image.png&originHeight=649&originWidth=1248&originalType=binary&ratio=1&rotation=0&showTitle=false&size=39931&status=error&style=shadow&taskId=u64c746d0-9da2-4317-a530-8c162cebcbf&title=&width=756.3635926469981)
将打包后的html等静态文件拷贝到指定目录下
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666098524587-05dbe2bf-ea7c-4195-bbcf-e21ec02688f9.png#averageHue=%23fefefe&clientId=u94370c3f-5450-4&errorMessage=unknown%20error&from=paste&height=370&id=u9927ec36&name=image.png&originHeight=610&originWidth=1248&originalType=binary&ratio=1&rotation=0&showTitle=false&size=41992&status=error&style=shadow&taskId=ub42930dd-39bc-4725-bb67-50dec7f0864&title=&width=756.3635926469981)
nginx中的配置
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666098569834-bdefa479-5906-4177-9301-949b2531e314.png#averageHue=%230e111a&clientId=u94370c3f-5450-4&errorMessage=unknown%20error&from=paste&height=299&id=u7896c96d&name=image.png&originHeight=493&originWidth=852&originalType=binary&ratio=1&rotation=0&showTitle=false&size=23532&status=error&style=shadow&taskId=u036a2f6e-de2d-43f3-9e67-151d2384f2a&title=&width=516.3636065186237)
nginx所在目录`/usr/local/src/nginx/conf`
输入地址进行测试:[http://admin.sl-express.com/#/login](http://admin.sl-express.com/#/login)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666098654094-6b100778-a834-4a2f-8915-9ea027d8cc01.png#averageHue=%23557765&clientId=u94370c3f-5450-4&errorMessage=unknown%20error&from=paste&height=554&id=u6a084306&name=image.png&originHeight=914&originWidth=1920&originalType=binary&ratio=1&rotation=0&showTitle=false&size=957720&status=error&style=shadow&taskId=uf5a6d82c-1dd5-49f2-b4ce-557220f77bc&title=&width=1163.636296379997)
确保如下服务是启动状态:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666099328254-3ef3aaea-3625-4746-9bce-4de51e18d11e.png#averageHue=%230f131d&clientId=u890b030f-c2af-4&errorMessage=unknown%20error&from=paste&height=303&id=u45b1cf52&name=image.png&originHeight=500&originWidth=1665&originalType=binary&ratio=1&rotation=0&showTitle=false&size=82531&status=error&style=shadow&taskId=ud297e4b3-9c00-4fe8-9619-401a13004b2&title=&width=1009.0908507670287)

View File

@@ -0,0 +1,84 @@
# day01
- 了解神领物流项目
- 了解物流行业
- 了解项目的技术架构
- 了解项目的业务功能
- 能够搭建出开发环境
- 能够完成鉴权的任务开发
# day02
- 理解单token存在的问题
- 理解双token三验证解决方案的设计思想
- 能够实现用户端token校验与鉴权
- 掌握支付宝平台的对接方法
- 掌握微信支付平台的对接方法
- 理解分布式锁的原理以及应用
# day03
- 了解支付微服务的需求
- 能够读懂渠道管理相关的代码
- 能够理解分布式锁的应用
- 能够读懂支付宝扫描支付的代码
- 掌握xxl-job的使用
- 能够读懂同步支付状态的两种方式
# day04
- 了解计算运费的业务需求
- 了解运费模板表的设计
- 了解项目中的代码规范
- 能够实现运费计算的业务逻辑
- 能够完成部署服务以及功能测试
# day05
- 了解路线规划需求
- 了解路线规划实现方案
- 掌握Neo4j的基本使用
- 掌握Cypher的编写
- 掌握Spring Data Neo4j使用
# day06
- 了解路线规划功能
- 理解实现机构数据同步
- 能够实现路线管理
- 能够完成综合功能测试
# day07
- 理解什么是智能调度
- 能够实现订单转运单
- 掌握美团Leaf的使用
- 能够完善运单服务
- 能够完成合并运单
# day08
- 理解智能调度生成运输任务
- 掌握运输任务相关业务的实现
- 掌握司机入库业务的实现
# day09
- 掌握MongoDB的基本使用
- 掌握Spring Data MongoDB的使用
- 理解作业范围功能需求
- 能够实现机构与快递员的作业范围
# day10
- 了解快递员取派件任务需求
- 理解递员取派件任务相关功能开发
- 能够实现调度中心的任务调度
- 能够完成整体业务功能的测试
# day11
- 了解物流信息的需求分析
- 理解物流信息的技术实现
- 掌握基于MongoDB的功能实现
- 掌握多级缓存的解决方案
- 掌握Redis缓存存在的问题分析并解决
# day12
- 了解什么是分布式日志
- 掌握Graylog的部署安装
- 掌握Graylog进行日志收集
- 掌握Graylog的搜索语法
- 了解什么是链路追踪
- 掌握Skywalking的基本使用
- 掌握整合微服务使用Skywalking
- 掌握将Skywalking整合到Docker中

View File

@@ -0,0 +1,108 @@
# 一、前端问题
## 1、用户端登录失败
#### 1.1 可能是网关配置不对
解决查看utils/evn.js 第2行,另外更改baseurl后需要重新编译
另外需要检查本地hosts文件中的api.sl-express.com域名配置是否指向到了192.168.150.101。
![](https://cdn.nlark.com/yuque/0/2023/png/28741927/1678173836880-cd76afc5-4e0d-4b50-b6d4-2f5eebbed2fd.png#averageHue=%235d4f26&clientId=uc1cdb907-7a69-4&from=paste&id=uc8a037d4&originHeight=942&originWidth=1527&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=shadow&taskId=u231057fa-3153-4cdf-9e55-af615c40ff7&title=)
#### 1.2 小程序获取不到手机号
如果出现获取手机号失败,需要进行真机调试,并在手机上打开开发者模式,然后获取手机验证码进行验证,之后既可以正常在电脑上使用微信小程序
**真机调试:**
![](https://cdn.nlark.com/yuque/0/2023/png/28741927/1678173838416-c1476b78-2abf-4435-abb8-68eb639a5206.png#averageHue=%23d1ad78&clientId=uc1cdb907-7a69-4&from=paste&id=ZYERB&originHeight=976&originWidth=1242&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=shadow&taskId=ue9550423-8f27-4f52-a12d-4a02d77d925&title=)
**打开开发者模式:**
![](https://cdn.nlark.com/yuque/0/2023/jpeg/28741927/1678173838543-2d49037d-b976-4fd0-a974-908947907329.jpeg#averageHue=%23b3afaf&clientId=uc1cdb907-7a69-4&from=paste&height=1169&id=dwAHe&originHeight=2337&originWidth=1080&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=shadow&taskId=u294a465a-8cff-4c30-b65c-b1bc7903ad2&title=&width=540)![](https://cdn.nlark.com/yuque/0/2023/jpeg/28741927/1678173838673-2e15d73b-a8e0-4f07-8c84-a74e8b7f845a.jpeg#averageHue=%23b0b3b1&clientId=uc1cdb907-7a69-4&from=paste&height=1169&id=Sf9Mp&originHeight=2337&originWidth=1080&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=shadow&taskId=uf18d9f8a-8bb3-495c-822e-1fe11c77e74&title=&width=540)
#### 1.3 修改前端代码后没有重新编译
#### ![](https://cdn.nlark.com/yuque/0/2023/png/28741927/1678173839153-21c4d30a-9b31-4e17-bb4c-e819d4d00144.png#averageHue=%23584f2c&clientId=uc1cdb907-7a69-4&from=paste&id=hZZjV&originHeight=557&originWidth=905&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=shadow&taskId=u5d872c23-df99-418a-a691-90132c161cf&title=)
## 2、前端代码Jenkins部署不成功
可能是以下情况,请详细检查
1. host配置是否正确
2. 虚拟机路径下(/itcast/admin-web是否有静态文件(index.html)
3. 可能为浏览器缓存
## 3、用户端网络异常且不提示登录
解决:需要清除当前小程序重新扫码使用
## 4、微信开发者工具 启动闪烁
解决:关闭开发者工具,再次导入项目。
# 二、虚拟机环境问题
## 1、虚拟机启动失败
虚拟机启动失败很可能是因为下载文件存在缺失。将原始文件做成种子,然后下发给学员下载,某些文件可能会丢失。
**解决方案:**
出现问题的话可通过硬盘或者U盘进行下载
## 2、虚拟机防火墙关闭命令
**systemctl-stop-firewalld**
# 三、idea环境问题
## 1、微服务pom文件中依赖报红
通过git拉下来代码之后发现微服务里面的pom文件报红
![](https://cdn.nlark.com/yuque/0/2023/png/28741927/1678173837296-c379dc34-2209-4bf4-99e3-c2b77e49a1c6.png#averageHue=%23faf9f9&clientId=uc1cdb907-7a69-4&from=paste&id=c7FwT&originHeight=847&originWidth=1221&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=shadow&taskId=u58c211d3-12b8-48fb-aafb-bcaf1c9473e&title=)
**解决方案:**
#### **1.1 能够成功编译**
通过maven进行编译项目如果能够成功编译说明是IDEA存在缓存未识别到已下载的依赖无需处理正常学习即可
![](https://cdn.nlark.com/yuque/0/2023/png/28741927/1678173836880-099d98c0-794f-4009-923c-4ec5888b30c2.png#averageHue=%23f7f6f4&clientId=uc1cdb907-7a69-4&from=paste&id=eoGat&originHeight=629&originWidth=1864&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=shadow&taskId=u80fa4fe2-41d5-4c0d-92d1-619a2746132&title=)
#### **1.2 不能成功编译**
##### 1.2.1 setting文件不正常
maven的配置文件settings.xml是否和讲义中一致并且本地仓库地址修改为自己的
![](https://cdn.nlark.com/yuque/0/2023/png/28741927/1678173837449-a46b88d3-1b49-44b4-90da-32ec1c7f59cd.png#averageHue=%23fcfbfa&clientId=uc1cdb907-7a69-4&from=paste&id=TLKBV&originHeight=403&originWidth=1242&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=shadow&taskId=uc3716d89-03dc-4faa-b30a-af6b2702168&title=)
![](https://cdn.nlark.com/yuque/0/2023/png/28741927/1678173837469-27b0166c-7056-4b5c-8463-3d740e769995.png#averageHue=%23f8f8f7&clientId=uc1cdb907-7a69-4&from=paste&id=jJDzL&originHeight=302&originWidth=1171&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=shadow&taskId=ud1ea86ba-2828-45b8-b095-7b41027af40&title=)
##### 1.2.2 使用的maven不正确
检查IDEA中使用的maven是否正确一定要是自己安装的不要使用默认的
![](https://cdn.nlark.com/yuque/0/2023/png/28741927/1678173837511-2f52bfed-1a4a-4f76-a856-6974b9585fca.png#averageHue=%23cb9d58&clientId=uc1cdb907-7a69-4&from=paste&id=xzPku&originHeight=869&originWidth=1215&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=shadow&taskId=ua3015dc5-f704-4583-86c1-25b92a3e81b&title=)
##### 1.2.3 使用的JDK不正确
检查maven编译使用的jdk是否为11
![](https://cdn.nlark.com/yuque/0/2023/png/28741927/1678173837553-39cb4598-b018-4d43-83a3-9e8af639facd.png#averageHue=%23d0aa6f&clientId=uc1cdb907-7a69-4&from=paste&id=jIC91&originHeight=866&originWidth=1209&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=shadow&taskId=u2f86fbb1-4a4f-46b0-aaf6-702dbac5089&title=)
## 2、使用IDEA输入错误git密码
部分学员输入使用IDEA开发项目进行提交时意外输错git密码由于IDEA本地记录有密码数据仅仅清除git配置是无法解决的最根本的是需要删除掉IDEA本地保存的git密码
**解决方案:**
1. 确定自己的IDEA版本号Help-->About
![](https://cdn.nlark.com/yuque/0/2023/png/28741927/1678173837879-5a1dc184-1121-4243-9cf0-110f8cdc56cd.png#averageHue=%23d3d3d2&clientId=uc1cdb907-7a69-4&from=paste&id=WEhfZ&originHeight=1023&originWidth=1911&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=shadow&taskId=ua92440c0-d698-442e-814c-a39ec1ea4f2&title=)
![](https://cdn.nlark.com/yuque/0/2023/png/28741927/1678173837926-0f7bd697-b9ca-4ef2-acbc-c941dca14909.png#averageHue=%23d4d3d3&clientId=uc1cdb907-7a69-4&from=paste&id=Ve7nv&originHeight=1021&originWidth=1903&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=shadow&taskId=uf4519830-41df-4371-8700-28a1d01edb2&title=)
2. 进入到文件夹C:\Users\Atom\AppData\Roaming\JetBrains中间的Atom为自定义的用户名如自己命名为zhangsan此处即为zhangsan实际路径自己修改找到对应版本的IDEA文件夹
![](https://cdn.nlark.com/yuque/0/2023/png/28741927/1678173838025-c74a97b5-8238-4eff-b63c-6e0637f02d25.png#averageHue=%23fdfcfc&clientId=uc1cdb907-7a69-4&from=paste&id=rLwQV&originHeight=719&originWidth=1094&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=shadow&taskId=u6fb501c8-e339-4991-bc99-7233216545c&title=)
3. 进入对应版本文件夹删除掉c.kdbx文件
![](https://cdn.nlark.com/yuque/0/2023/png/28741927/1678173838139-c5de760d-b82f-4227-9e3e-dab6508c11b8.png#averageHue=%23faf9f8&clientId=uc1cdb907-7a69-4&from=paste&id=NU2qG&originHeight=721&originWidth=1099&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=shadow&taskId=uc2959ee6-44a3-41e6-a287-e49dc70b184&title=)
4. 修改IDEA配置如下图勾选Protect master password
![](https://cdn.nlark.com/yuque/0/2023/png/28741927/1678173838427-0c3df80e-975f-4b78-8715-3e07572f2ea0.png#averageHue=%23cc9f5a&clientId=uc1cdb907-7a69-4&from=paste&id=YzUUy&originHeight=879&originWidth=1226&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=shadow&taskId=u4e92a083-9098-4aa9-b7de-9c2439d7c8d&title=)
5. 以上步骤全部完成重新提交代码IDEA即会提示重新输入密码
## 3、maven下载不到
#### 3.1可能是有idea 缓存
![](https://cdn.nlark.com/yuque/0/2023/png/28741927/1678173838828-bdde6e8c-f0cb-4253-9774-c197ee3c2c21.png#averageHue=%233e4349&clientId=uc1cdb907-7a69-4&from=paste&id=dBj7C&originHeight=628&originWidth=450&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=shadow&taskId=ubca93a51-2019-4b13-83f3-fd09a4cee28&title=)
#### 3.2 setting文件不正确
备份自己电脑原有的setting文件复制课程中的setting文件修改复制出的setting文件中本地仓库位置为自己电脑的位置。
#### 3.3 本地仓库依赖包不完整
需要手动删除该文件夹下全部文件执行maven编译命令再次下载。下图为正常情况。
![](https://cdn.nlark.com/yuque/0/2023/png/28741927/1678173838898-fb60888e-7efd-48a7-a6ab-b9d0208cda23.png#averageHue=%232d2726&clientId=uc1cdb907-7a69-4&from=paste&id=wtRay&originHeight=371&originWidth=949&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=shadow&taskId=u48c26266-11a7-4027-a7e4-c441d1f5808&title=)
## 4、Command line is too long
需要修改启动配置如下
![](https://cdn.nlark.com/yuque/0/2023/png/28741927/1678173839311-9aa94039-bb14-491d-8edb-17022e333fa5.png#averageHue=%23f7c6c5&clientId=uc1cdb907-7a69-4&from=paste&id=urrgs&originHeight=37&originWidth=533&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=shadow&taskId=u05535960-0ed2-41e1-999e-1242c400069&title=)
![](https://cdn.nlark.com/yuque/0/2023/png/28741927/1678173839650-b9143a2d-560a-4321-ab65-081901f70769.png#averageHue=%23f2f1f0&clientId=uc1cdb907-7a69-4&from=paste&id=hDKJA&originHeight=775&originWidth=1262&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=shadow&taskId=udaa48b96-f10f-4dfe-bec9-645d15cbfde&title=)
## 5、No appropriate protocol
![](https://cdn.nlark.com/yuque/0/2023/png/28741927/1678173839759-13c9f7fd-3303-491a-aa97-654376e93b52.png#averageHue=%2331302f&clientId=uc1cdb907-7a69-4&from=paste&id=YOPDv&originHeight=91&originWidth=1506&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=shadow&taskId=uf930fde5-725b-4bbb-996e-d8075f32ff7&title=)
![](https://cdn.nlark.com/yuque/0/2023/png/28741927/1678173839744-bbd00a0a-872e-4eeb-b710-e20e24343db3.png#averageHue=%23faf9f8&clientId=uc1cdb907-7a69-4&from=paste&id=FidBn&originHeight=753&originWidth=1656&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=shadow&taskId=ub7d5dc24-f065-4ac9-bd75-b382272c276&title=)
# 四、业务流程问题
## 1、如何查询Neo4j中线路ID
解决登录neo4j后台选择某条线路右侧属性区域中的ID即为线路ID
![](https://cdn.nlark.com/yuque/0/2023/png/28741927/1678173836869-4bfcb53d-a0fd-4493-8ee4-58c07c87160b.png#averageHue=%2369c5d9&clientId=uc1cdb907-7a69-4&from=paste&id=ud96b225a&originHeight=693&originWidth=1549&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=shadow&taskId=uf78a4fef-0d97-4ca2-b784-a6c86c7c3f9&title=)
## 2、如何临时发起一次车次计划调度
truck_plan车辆计划表中 status改为1schedule_status改为0确认plan_departure_time小于当前时间+ 2小时 即可重新调度一次。
![](https://cdn.nlark.com/yuque/0/2023/png/28741927/1678173836924-b3b18cdf-6557-459e-881b-8746a948eb4c.png#averageHue=%23f8f5f3&clientId=uc1cdb907-7a69-4&from=paste&id=u9f7d65c0&originHeight=713&originWidth=1775&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=shadow&taskId=ue9f95c49-d199-4258-b7c8-463042a20b4&title=)
## 3、nacos配置没生效
改完nacos配置需要重启生效改nacos配置有空格也会问题。
## 4、后台验证码不显示
idea服务运行了但前端登陆验证码一直出不来可能是本机防火墙没有关导致虚拟机无法向本机ip发送请求有类似情况的同学可以留意下把本机防火墙给关掉。
![](https://cdn.nlark.com/yuque/0/2023/png/28741927/1678173839205-79155281-1bc6-45f8-98db-c752b72def02.png#averageHue=%23848d5b&clientId=uc1cdb907-7a69-4&from=paste&id=u86e9f45d&originHeight=587&originWidth=871&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=shadow&taskId=u2ba86c2e-3411-4dbe-9720-c5261324c60&title=)
![](https://cdn.nlark.com/yuque/0/2023/png/28741927/1678173839309-acf4eb86-5cb2-4b12-bb16-affb8559731e.png#averageHue=%23f9f6f5&clientId=uc1cdb907-7a69-4&from=paste&id=u57b2028f&originHeight=900&originWidth=1200&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=shadow&taskId=ud0de2041-9196-4634-a44c-3aa9c4ea856&title=)
## 5、Mysql无法连接
版本太高 用idea插件可以课程提供的客户端也可以
## 6、扫码支付提示买家不匹配
![image.png](https://cdn.nlark.com/yuque/0/2023/png/28741927/1678185537298-35afd593-1490-4ce5-a9da-24280fd27def.png#averageHue=%23575978&clientId=u0baa45f0-0298-4&from=paste&height=708&id=u49175124&name=image.png&originHeight=708&originWidth=549&originalType=binary&ratio=1&rotation=0&showTitle=false&size=330329&status=done&style=shadow&taskId=u9ec1512f-4b0d-45ad-9950-7a4b9a4cfcb&title=&width=549)
解决:最常见的原因:第一买家扫码的时候是a用户然后不付钱b用户又扫码一次就会报这个错。支付宝二维码只能由第一次扫码的买家进行支付。

View File

@@ -0,0 +1,225 @@
# 1、了解权限管家
## 1.1、介绍
公司有多个业务系统,这些业务系统的公共部分包括组织、用户、权限等系统管理:
![image-20220228161416340.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1668006370555-99c927ff-03ba-4808-8a0e-444e5b65782e.png#averageHue=%23e5c29a&clientId=u7c53bb0f-967a-4&from=paste&height=245&id=u22cfb96b&name=image-20220228161416340.png&originHeight=367&originWidth=1323&originalType=binary&ratio=1&rotation=0&showTitle=false&size=72118&status=done&style=shadow&taskId=uc4634dd4-6bee-4295-b66b-f07a8958af2&title=&width=882)
这个公共的系统管理,可以剥离出一套基础组件服务,即权限管家。
传智权限管家是一个通用的权限管理中台服务,在神领物流项目中,我们使用权限系统管理企业内部员工,比如:快递员、司机、管理员等。
在权限管家中可以管理用户,管理后台系统的菜单,以及角色的管理。
## 1.2、逻辑模型
权限管家的接口根据管理范围分为公司级、应用级和系统接口,如下图:
![](https://cdn.nlark.com/yuque/0/2022/jpeg/27683667/1668007068077-d3adea97-3791-42b9-9916-3276bffe0ca8.jpeg)
# 2、部署安装
参考:[https://sl-express.itheima.net/#/zh-cn/base-service?id=权限管家](https://sl-express.itheima.net/#/zh-cn/base-service?id=%e6%9d%83%e9%99%90%e7%ae%a1%e5%ae%b6)
# 3、登录
登录地址:[http://auth.sl-express.com/api/authority/static/index.html#/login](http://auth.sl-express.com/api/authority/static/index.html#/login)
用户名密码admin/123456
![image-20220729150005960.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666078919892-238a8f5c-beea-4cef-8874-34c5dd431647.png#averageHue=%23abccb0&clientId=u0ceffba9-1bc4-4&errorMessage=unknown%20error&from=paste&height=585&id=u05fa830c&name=image-20220729150005960.png&originHeight=965&originWidth=1920&originalType=binary&ratio=1&rotation=0&showTitle=false&size=273747&status=error&style=shadow&taskId=u37269890-fedf-4d79-854e-19952a97f70&title=&width=1163.636296379997)
![image-20220729150028329.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666078939427-d67abbac-316e-4377-b92f-65ca682bcfbf.png#averageHue=%2388bbef&clientId=u0ceffba9-1bc4-4&errorMessage=unknown%20error&from=paste&height=554&id=u365afc6d&name=image-20220729150028329.png&originHeight=914&originWidth=1920&originalType=binary&ratio=1&rotation=0&showTitle=false&size=62032&status=error&style=shadow&taskId=ua33f3305-3b0f-4a5a-9956-2f6a0b3113e&title=&width=1163.636296379997)
# 4、应用管理
权限管家是一个多应用的管理系统,所以要接入权限管家首先需要创建应用。
【应用管理】 => 【添加应用】
![image-20220729150644377.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666078960233-b641c8ed-0e33-412d-98d0-817dc8fc25e8.png#averageHue=%23fefefe&clientId=u0ceffba9-1bc4-4&errorMessage=unknown%20error&from=paste&height=553&id=uc76758c7&name=image-20220729150644377.png&originHeight=912&originWidth=954&originalType=binary&ratio=1&rotation=0&showTitle=false&size=52040&status=error&style=shadow&taskId=ue85d466c-9714-41b5-993c-6d3701bac61&title=&width=578.181784763811)
创建成功:
![image-20220729151041632.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666078971344-eaa1b3e3-ccd0-45d8-97a7-987daa25ca81.png#averageHue=%23c4dbda&clientId=u0ceffba9-1bc4-4&errorMessage=unknown%20error&from=paste&height=374&id=u8bda7de2&name=image-20220729151041632.png&originHeight=617&originWidth=1109&originalType=binary&ratio=1&rotation=0&showTitle=false&size=24021&status=error&style=shadow&taskId=ufad6047c-c2b0-45b3-954a-43f3f323ee9&title=&width=672.1211732736546)
查看应用所对应的ID和CODE
![image-20220729151124872.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666078981288-87bb1cf8-e259-4516-91fd-4e0977f54fa3.png#averageHue=%23fdfdfd&clientId=u0ceffba9-1bc4-4&errorMessage=unknown%20error&from=paste&height=519&id=ue812691e&name=image-20220729151124872.png&originHeight=857&originWidth=962&originalType=binary&ratio=1&rotation=0&showTitle=false&size=37363&status=error&style=shadow&taskId=u839884cb-d2ad-41a8-b14d-4fbf9023e1c&title=&width=583.030269332061)
# 5、组织管理
一般公司会设置不同的组织结构用来管理人员,比如:总部、分公司、人事部、行政部、财务部、物流部、物流转运等。
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666079043594-6c550bb7-4297-4632-a51d-6138eb4f8833.png#averageHue=%23fefefe&clientId=u0ceffba9-1bc4-4&errorMessage=unknown%20error&from=paste&height=554&id=ua22a343d&name=image.png&originHeight=914&originWidth=294&originalType=binary&ratio=1&rotation=0&showTitle=false&size=28719&status=error&style=shadow&taskId=u39e3bad9-a818-4c5d-97f7-415bd37435e&title=&width=178.18180788318705)
添加组织,组织是一颗树,所以需要选择上级组织:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666079177817-0a44ba5f-06ad-41fe-b8df-e8535f11826a.png#averageHue=%23fefefe&clientId=u0ceffba9-1bc4-4&errorMessage=unknown%20error&from=paste&height=431&id=uc35f516d&name=image.png&originHeight=711&originWidth=856&originalType=binary&ratio=1&rotation=0&showTitle=false&size=26160&status=error&style=shadow&taskId=u6eeb468b-2fe7-4d57-a28b-097c55cb21a&title=&width=518.7878488027486)
添加完成:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666079456153-cc98deef-ecb1-4e35-81bf-d25588915f8b.png#averageHue=%23fefefe&clientId=u0ceffba9-1bc4-4&errorMessage=unknown%20error&from=paste&height=296&id=u96527c90&name=image.png&originHeight=488&originWidth=1567&originalType=binary&ratio=1&rotation=0&showTitle=false&size=21006&status=error&style=shadow&taskId=ud2f41814-56d9-4f50-ac5c-b3ba065ce03&title=&width=949.6969148059663)
# 6、进入应用
对于应用的操作需要进入到应用中才能操作:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666079551922-1b19d128-4816-400d-89db-2003acb77f6e.png#averageHue=%23d2b799&clientId=u0ceffba9-1bc4-4&errorMessage=unknown%20error&from=paste&height=159&id=uc14938b5&name=image.png&originHeight=262&originWidth=472&originalType=binary&ratio=1&rotation=0&showTitle=false&size=11941&status=error&style=shadow&taskId=uacd8a9ce-3b62-443c-8691-d0b27d1cb92&title=&width=286.06058952674925)
进入应用后可以看到左侧菜单有3项管理【用户管理】、【菜单管理】、【角色管理】
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666079574479-01b328bc-117b-4778-9558-beac57c274dd.png#averageHue=%2301162c&clientId=u0ceffba9-1bc4-4&errorMessage=unknown%20error&from=paste&height=554&id=ud17251bf&name=image.png&originHeight=914&originWidth=293&originalType=binary&ratio=1&rotation=0&showTitle=false&size=27129&status=error&style=shadow&taskId=u9895fe22-cdf3-41cc-8969-e7470a6f165&title=&width=177.57574731215578)
对应的后台系统的菜单列表:**(不要修改)**
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666079618461-a7b00305-9381-4684-95c4-99ddf733f7a7.png#averageHue=%23f0daad&clientId=u0ceffba9-1bc4-4&errorMessage=unknown%20error&from=paste&height=550&id=u675d70fa&name=image.png&originHeight=908&originWidth=1900&originalType=binary&ratio=1&rotation=0&showTitle=false&size=90783&status=error&style=shadow&taskId=u6f112e17-7cc0-4ceb-a1ed-f68b9a651e0&title=&width=1151.515084959372)
应用中的角色:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666079661077-b08e06e2-c4e7-4c07-864e-095f6a1aa9b5.png#averageHue=%23f4f7da&clientId=u0ceffba9-1bc4-4&errorMessage=unknown%20error&from=paste&height=554&id=u7dd6dbea&name=image.png&originHeight=914&originWidth=1903&originalType=binary&ratio=1&rotation=0&showTitle=false&size=96861&status=error&style=shadow&taskId=ua8469ba7-990b-4a99-85b5-5f556cdf19b&title=&width=1153.3332666724657)
# 7、新增用户
新增用户需要【返回权限管家】进行操作,在【用户管理】中【新增用户】:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666079718948-90c1faad-67e0-4e06-94fe-95ce2a8b9880.png#averageHue=%2301162c&clientId=u0ceffba9-1bc4-4&errorMessage=unknown%20error&from=paste&height=554&id=u9d88b308&name=image.png&originHeight=914&originWidth=275&originalType=binary&ratio=1&rotation=0&showTitle=false&size=27346&status=error&style=shadow&taskId=u72a2ac0e-1045-45fc-8c6b-2162551c896&title=&width=166.6666570335933)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666079772068-41f5c1b5-f7e2-496e-8491-af16ae8015ee.png#averageHue=%23e5be84&clientId=u0ceffba9-1bc4-4&errorMessage=unknown%20error&from=paste&height=481&id=uc30e77cf&name=image.png&originHeight=793&originWidth=1601&originalType=binary&ratio=1&rotation=0&showTitle=false&size=88014&status=error&style=shadow&taskId=u56dd4d91-1bc3-447e-9047-625b469ed4c&title=&width=970.3029742210288)
新增用户:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666079824788-f359f6e2-a0f3-471e-af4c-d3ce3cef73f1.png#averageHue=%23fefefe&clientId=u0ceffba9-1bc4-4&errorMessage=unknown%20error&from=paste&height=552&id=uf7965a03&name=image.png&originHeight=911&originWidth=856&originalType=binary&ratio=1&rotation=0&showTitle=false&size=33208&status=error&style=shadow&taskId=u60eb7193-d58d-4f2b-8412-39944dd9501&title=&width=518.7878488027486)
添加成功:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666079849250-fff9f6dc-bf7c-4382-bfb2-e927917f9ada.png#averageHue=%23e5be84&clientId=u0ceffba9-1bc4-4&errorMessage=unknown%20error&from=paste&height=481&id=ua656015e&name=image.png&originHeight=793&originWidth=1604&originalType=binary&ratio=1&rotation=0&showTitle=false&size=89802&status=error&style=shadow&taskId=u830b8bd8-3c51-4401-af8e-14eb2b510fa&title=&width=972.1211559341225)
# 8、分配角色
现在为【test01】分配快递员角色怎么操作呢
首先需要进入到【神领物流】应用,在【用户管理】中分配角色:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666080107818-b898b760-4a2c-431b-aea7-9f7d15517c4d.png#averageHue=%23f5e0c3&clientId=u0ceffba9-1bc4-4&errorMessage=unknown%20error&from=paste&height=312&id=uc0a5542f&name=image.png&originHeight=514&originWidth=1145&originalType=binary&ratio=1&rotation=0&showTitle=false&size=44890&status=error&style=shadow&taskId=ud75e5f10-7f6d-476f-bb8e-c74bb7383c5&title=&width=693.9393538307795)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666080330679-e452e29d-dfce-47d4-b285-1c52fc804501.png#averageHue=%23fefefe&clientId=u0ceffba9-1bc4-4&errorMessage=unknown%20error&from=paste&height=179&id=uca476230&name=image.png&originHeight=296&originWidth=856&originalType=binary&ratio=1&rotation=0&showTitle=false&size=11346&status=error&style=shadow&taskId=uc344ccb8-aac2-4781-9c87-86c0630d735&title=&width=518.7878488027486)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666080316709-f85ca464-7c8f-4720-a4f2-3983636f4323.png#averageHue=%23f5e0c3&clientId=u0ceffba9-1bc4-4&errorMessage=unknown%20error&from=paste&height=240&id=u5a5e0e8f&name=image.png&originHeight=396&originWidth=1143&originalType=binary&ratio=1&rotation=0&showTitle=false&size=34643&status=error&style=shadow&taskId=u55988f7a-5a06-4eee-a02a-16336e5b4df&title=&width=692.727232688717)
这样test01就拥有了【快递员】角色了。
同理,可以添加其他的用户了。
# 9、SDK使用说明
## 9.1、关于authority-sdk
authority-sdk是基于authority-sdk的restful接口实现的Java SDK的封装实现了token、组织、菜单、角色等功能。
## 9.2、快速集成使用
authority-sdk提供了两种方式与业务系统对接分别是
- java sdk方式
- Spring Boot集成方式
## 9.3、使用方法
### 9.3.1、java sdk方式
> **第一步导入maven依赖**
```xml
<dependency>
<groupId>com.itheima.em.auth</groupId>
<artifactId>authority-sdk</artifactId>
<version>{version}</version>
</dependency>
```
> **第二步实例化AuthTemplate对象**
```java
String host = "127.0.0.1"; //Authority服务地址
int port = 8764; //Authority服务端口
int timeout = 1000; //http请求的超时时间不传值默认为10S
//token非登录请求都需要带上,一般情况下登录成功后将该数据放入缓存中
String token = "eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIxIiwiYWNjb3VudCI6ImFkbWluIiwibmFtZSI6IuW5s-WPsOeuoeeQhuWRmCIsIm9yZ2lkIjo4NzQyMjc2MTUxNzM0NDk4MjUsInN0YXRpb25pZCI6ODU3OTQwMTU3NDYwOTU3NTM3LCJhZG1pbmlzdHJhdG9yIjp0cnVlLCJleHAiOjE2NTEyNTkyODB9.anqT0MD9zAr13KG9OE4mqHHK2UMCOXUjeMrEsN1wy9_a14zFbjPkiDZ8dM7JirsAgj61yvshoP6pqBImdmyilQN-iFSa_ci15Ii4HhfFE1mcaRon3ojX_T9ncjHKuF9Y9ZPKT68NOzOfCwvhDrG_sDiaI1C-TwEJmhLM78FhwAI";
//应用ID非登录请求都需要带上该参数表示你需要查询哪个应用相关数据,一般情况下置于配置文件中
Long applicationId = 1L;
//登录获取token
AuthTemplate authTemplate = new AuthTemplate(host,port,TIME_OUT);
Result<LoginDTO> result = authTemplate.opsForLogin().token("admin","123456");
//后续基于AuthTemplate可以调用各种服务
AuthTemplate authTemplate = new AuthTemplate(host,port,TIME_OUT,token,applicationId);
Result<List<MenuDTO>> result = authTemplate.opsForPermission().getMenu();
log.info("菜单:{}", JSONObject.toJSONString(result));
```
### 9.3.2、Spring Boot集成方式
> **第一步导入maven依赖**
```xml
<dependency>
<groupId>com.itheima.em.auth</groupId>
<artifactId>itcast-auth-spring-boot-starter</artifactId>
<version>1.0</version>
</dependency>
<!-- 如果是SNAPSHOT版本如要在项目的pom.xml文件中引入快照版源 -->
<repositories>
<repository>
<id>sonatypeSnapshots</id>
<name>Sonatype Snapshots</name>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
<url>https://s01.oss.sonatype.org/content/repositories/snapshots/</url>
</repository>
</repositories>
```
> **第二步配置application.yml文件**
```yaml
itcast:
authority:
host: 127.0.0.1 #authority服务地址,根据实际情况更改
port: 8764 #authority服务端口
timeout: 10000 #http请求的超时时间
```
**第三步,使用用例**
```java
package com.example.demo.service;
import com.alibaba.fastjson.JSONObject;
import com.itheima.auth.sdk.AuthTemplate;
import com.itheima.auth.sdk.common.Result;
import com.itheima.auth.sdk.dto.LoginDTO;
import com.itheima.auth.sdk.dto.MenuDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.List;
@Slf4j
@Service
public class AuthService {
@Value("${itcast.authority.host}")
private String host;
@Value("${itcast.authority.port}")
private int port;
private final static int TIME_OUT = 10000;
/**
* 登录获取token
* @param account
* @param password
*/
public void login(String account, String password) {
AuthTemplate authTemplate = new AuthTemplate(host,port);
Result<LoginDTO> loginDTO = authTemplate.opsForLogin().token(account, password);
log.info("登录结果:{}", JSONObject.toJSONString(loginDTO));
}
}
```

View File

@@ -0,0 +1,104 @@
# 1、方案说明
神领物流项目需要使用配套的虚拟机环境才能学习在虚拟机中提供了各种开发需要的环境比如git、maven私服、jenkins、mysql等具体[点击查看](https://sl-express.itheima.net/#/zh-cn/base-service)),由于学生的电脑品牌、配置存在较大的差异,所以在这里提供了三种使用虚拟机方案,如下:
**方案一:**windows电脑环境安装虚拟机此方案适用于大部分学生的环境在自己的win电脑安装安装Vmware软件导入虚拟机即可。
**方案二:**苹果电脑M1、M2芯片安装虚拟机此方案适用于部分学生使用新款苹果电脑的方案在电脑中安装Vmware Fusion导入虚拟机即可。
**方案三:**电脑配置低内存低于16GB或使用旧款苹果电脑配置低的Inter芯片此方案需要再借或买或租一台电脑建议win系统配合完成基本思路是在这台电脑中导入虚拟机通过网络连接到这台机器进行开发学习。
# 2、方案一windows环境
VMware安装过程省略建议版本使用15.5以上版本。
默认虚拟机设置的内存大小内8G虚拟内存为16GB建议保持此配置不建议进行调整。
## 2.1.配置VMware网络
因为虚拟机配置了静态IP地址为192.168.150.101因此需要VMware软件的虚拟网卡采用与虚拟机相同的网段。
### 2.1.1.配置VMware
首先在VMware中选择编辑虚拟网络编辑器
![image-20220608172555245.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666235195798-cd856d4c-117c-4874-9b92-a38eca29544f.png#averageHue=%23dcdcdb&clientId=u665e4097-b152-4&errorMessage=unknown%20error&from=paste&height=471&id=ub5b0959a&name=image-20220608172555245.png&originHeight=777&originWidth=1073&originalType=binary&ratio=1&rotation=0&showTitle=false&size=85080&status=error&style=none&taskId=ua63f9523-1f65-495a-a56e-8acbdae5e58&title=&width=650.3029927165296)
这里需要管理员权限,因此要点击更改设置:
![image-20220608172651574.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666235211676-2618f636-b274-4078-a33e-884bb159e4d9.png#averageHue=%23ebeae9&clientId=u665e4097-b152-4&errorMessage=unknown%20error&from=paste&height=441&id=uf737c4fc&name=image-20220608172651574.png&originHeight=728&originWidth=744&originalType=binary&ratio=1&rotation=0&showTitle=false&size=40602&status=error&style=none&taskId=u7865db6f-b76f-4266-82a2-3f2041ee481&title=&width=450.9090648472488)
接下来就可以修改虚拟网卡的IP地址了流程如图
![image-20220608173341689.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666235251416-aaa78dec-a6cd-44ba-bab6-4183c1660f1e.png#averageHue=%23dfbe7f&clientId=u665e4097-b152-4&errorMessage=unknown%20error&from=paste&height=423&id=u8b5d000f&name=image-20220608173341689.png&originHeight=698&originWidth=1291&originalType=binary&ratio=1&rotation=0&showTitle=false&size=230763&status=error&style=none&taskId=u82a26341-6129-4a37-8b67-be23749acec&title=&width=782.4241972013417)
注意一定要严格按照标号顺序修改并且IP地址也要保持一致
### 2.1.2.验证
点击确定后等待一段时间VMware会重置你的虚拟网卡。完成后可以在windows的网络控制面板看到
![image-20220608173701762.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666235277787-e522f1e4-ad51-429a-bb5d-8c5a3ae4ac9a.png#averageHue=%23f7f5f4&clientId=u665e4097-b152-4&errorMessage=unknown%20error&from=paste&height=227&id=ua815791f&name=image-20220608173701762.png&originHeight=374&originWidth=1434&originalType=binary&ratio=1&rotation=0&showTitle=false&size=65111&status=error&style=none&taskId=ub46c1124-8eb8-4460-92db-a33c408935a&title=&width=869.0908588588103)
选中该网卡,右键点击,在菜单中选择状态,并在弹出的状态窗口中选择详细信息:
![image-20220608173908027.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666235290976-80cd1dd1-8399-4663-860a-98ff7faaf9ee.png#averageHue=%23f7f5f4&clientId=u665e4097-b152-4&errorMessage=unknown%20error&from=paste&height=452&id=u7ff28cda&name=image-20220608173908027.png&originHeight=745&originWidth=1235&originalType=binary&ratio=1&rotation=0&showTitle=false&size=107933&status=error&style=none&taskId=u448fd017-41ba-4d06-8111-0cc1ef0d41d&title=&width=748.4848052235918)
在详细信息中查看IPv4地址是否是 `192.168.150.1`:
![image-20220608174026293.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666235345641-1c767dea-b6e4-4ef5-ae71-6ed97c9e0875.png#averageHue=%23f3f0ef&clientId=u665e4097-b152-4&errorMessage=unknown%20error&from=paste&height=423&id=u49ae6d83&name=image-20220608174026293.png&originHeight=698&originWidth=572&originalType=binary&ratio=1&rotation=0&showTitle=false&size=37258&status=error&style=none&taskId=u25bc0f3a-ad70-463a-9bd9-e9474189fdf&title=&width=346.6666466298741)
如果与我一致,则证明配置成功!
## 2.2.导入虚拟机
### 2.2.1.导入
资料中提供了一个虚拟机文件:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666236419143-71ae11d0-d852-4aa6-91ea-8e8edee964ca.png#averageHue=%23fdfdfc&clientId=u599b0a4a-2759-4&from=paste&height=51&id=u2655c599&name=image.png&originHeight=64&originWidth=336&originalType=binary&ratio=1&rotation=0&showTitle=false&size=1332&status=done&style=shadow&taskId=u135c8b8e-45f4-42ca-b104-46e90f87cf2&title=&width=268.8)
打开VMware选择文件然后打开找到之前提供的虚拟机文件夹进入文件夹后选中CentOS7.vmx文件然后点击打开
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666236669771-912b6998-3103-429d-a9d1-053086cb088e.png#averageHue=%23f7f7f6&clientId=u599b0a4a-2759-4&from=paste&height=442&id=u1331aff1&name=image.png&originHeight=553&originWidth=942&originalType=binary&ratio=1&rotation=0&showTitle=false&size=37520&status=done&style=shadow&taskId=u334333ff-3d12-4f04-8ba9-040d9d60885&title=&width=753.6)
导入成功:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666236902482-630da73c-1ada-4ea3-914f-ed64a5540f28.png#averageHue=%23e3e2e2&clientId=u599b0a4a-2759-4&from=paste&height=591&id=u17d7837c&name=image.png&originHeight=739&originWidth=1424&originalType=binary&ratio=1&rotation=0&showTitle=false&size=72849&status=done&style=shadow&taskId=uc3140c89-6bf8-4983-ad24-9237bebdd56&title=&width=1139.2)
启动虚拟机,选择【我已复制该虚拟机】:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/27683667/1666236950908-d39e2e98-8960-44c9-9d5d-ae2a82cd997e.png#averageHue=%23242424&clientId=u599b0a4a-2759-4&from=paste&height=470&id=u6f68943f&name=image.png&originHeight=587&originWidth=1220&originalType=binary&ratio=1&rotation=0&showTitle=false&size=20278&status=done&style=shadow&taskId=uff65f5d8-5e80-42e5-b326-bd6e965ab80&title=&width=976)
### 2.2.2.登入
虚拟机登入信息如下:
```shell
# 用户名
root
# 密码
123321
```
## 2.3.测试网络
最后,通过命令测试网络是否畅通:
```
ping baidu.com
```
# 3、方案二MacBook M1 M2
此方案适用于新款苹果MacBook的M系列芯片电脑需要在电脑中安装VMware Fusion建议版本为13.x以上。
默认虚拟机设置的内存大小内8G虚拟内存为16GB建议保持此配置不建议进行调整。
## 3.1、配置网络
在Mac系统中进行网络设置
![image.png](https://cdn.nlark.com/yuque/0/2023/png/27683667/1678433403592-6f713e10-de10-4d62-b4e0-e8a0f2b85b9c.png#averageHue=%23e6c7b2&clientId=u32427796-551b-4&from=paste&height=735&id=u3f16c3c9&name=image.png&originHeight=1470&originWidth=1622&originalType=binary&ratio=2&rotation=0&showTitle=false&size=1052438&status=done&style=shadow&taskId=ubb49ff78-497b-4171-b5f1-f44f778e9d0&title=&width=811)
修改网络配置文件,命令:`sudo vi /Library/Preferences/VMware\ Fusion/networking`
![image.png](https://cdn.nlark.com/yuque/0/2023/png/27683667/1678433576513-e1db5e4b-0686-4249-8850-eaf343e64bfc.png#averageHue=%23efeeee&clientId=u32427796-551b-4&from=paste&height=371&id=ud150c6a5&name=image.png&originHeight=742&originWidth=1170&originalType=binary&ratio=2&rotation=0&showTitle=false&size=250791&status=done&style=shadow&taskId=ud7391b03-8b73-4f52-b159-b15df1c5df8&title=&width=585)
主要是修改以上两处内容,需要注意两点:
- 对应你的网络名称进行修改我对应的是VNET_2
- ip地址**必须**为:`192.168.150.0`虚拟机的ip地址固定为`192.168.150.101`
修改完成后退出VMware Fusion然后重新打开VMware Fusion软件。
以上操作完成后,检查网关是否正确,如果显示`192.168.150.2`表示设置成功,查看命令(修改成自己的网络名称):
`sudo vi /Library/Preferences/VMware\ Fusion/vmnet2/nat.conf`
![image.png](https://cdn.nlark.com/yuque/0/2023/png/27683667/1678436388258-77b0a482-15ce-43e2-8df1-1ec8d3377bb2.png#averageHue=%23f5f4f4&clientId=u32427796-551b-4&from=paste&height=371&id=ue1e17e9b&name=image.png&originHeight=742&originWidth=1170&originalType=binary&ratio=2&rotation=0&showTitle=false&size=164928&status=done&style=shadow&taskId=u9e9fd0e4-ae1f-4106-b5e3-c15696ec5de&title=&width=585)
## 3.2、导入虚拟机
在VMware Fusion中选择文件 -> 打开找到资料中提供的【Centos7-sl-x】文件点击打开即可。
![image.png](https://cdn.nlark.com/yuque/0/2023/png/27683667/1678437930340-6291223d-930f-4ccc-ade3-3251856786dc.png#averageHue=%23e9c6ac&clientId=u32427796-551b-4&from=paste&height=620&id=u0b7a9aba&name=image.png&originHeight=1240&originWidth=2168&originalType=binary&ratio=2&rotation=0&showTitle=false&size=1324700&status=done&style=shadow&taskId=ue51f1b04-e43c-4f82-b725-15296f588e8&title=&width=1084)
设置虚拟机网络为自定义网络:
![image.png](https://cdn.nlark.com/yuque/0/2023/png/27683667/1678692225120-2053b4ae-8db3-4bd5-bb3f-f3b366774703.png#averageHue=%23eee9e8&clientId=u5a8c843e-4dce-4&from=paste&height=424&id=u39ea0b1c&name=image.png&originHeight=848&originWidth=1280&originalType=binary&ratio=2&rotation=0&showTitle=false&size=145696&status=done&style=shadow&taskId=u6f99de30-00c8-4dc4-a7bb-3f070561f57&title=&width=640)
启动虚拟机,通过 `root/123321 `登陆到虚拟机:
![image.png](https://cdn.nlark.com/yuque/0/2023/png/27683667/1678438078458-0c0ae69b-8aa8-4791-addf-ecceb9dea887.png#averageHue=%232d2c2b&clientId=u32427796-551b-4&from=paste&height=192&id=ubf25b5ca&name=image.png&originHeight=384&originWidth=910&originalType=binary&ratio=2&rotation=0&showTitle=false&size=19296&status=done&style=shadow&taskId=ufde09fd6-5916-4072-8c7a-8bd34a8336b&title=&width=455)
测试网络是否正常:
![image.png](https://cdn.nlark.com/yuque/0/2023/png/27683667/1678438116629-a14156b9-fd68-4a38-8b76-82c0bba49e01.png#averageHue=%232f2d2d&clientId=u32427796-551b-4&from=paste&height=246&id=uc88cc6cf&name=image.png&originHeight=492&originWidth=1280&originalType=binary&ratio=2&rotation=0&showTitle=false&size=36584&status=done&style=shadow&taskId=ub967bdc8-619b-4f4c-b95f-b03416af508&title=&width=640)
![image.png](https://cdn.nlark.com/yuque/0/2023/png/27683667/1678438157060-0994db55-6544-405b-b277-724b6818627f.png#averageHue=%230f0f0f&clientId=u32427796-551b-4&from=paste&height=162&id=u225e0f92&name=image.png&originHeight=324&originWidth=1086&originalType=binary&ratio=2&rotation=0&showTitle=false&size=20264&status=done&style=shadow&taskId=u931321ea-95df-45fe-9c78-9a4651a47ec&title=&width=543)
查看正在运行的服务:
![image.png](https://cdn.nlark.com/yuque/0/2023/png/27683667/1678438202710-353f7c2e-c5e2-4870-a546-604bcbd0673a.png#averageHue=%23101010&clientId=u32427796-551b-4&from=paste&height=400&id=u3f6dd14d&name=image.png&originHeight=800&originWidth=2026&originalType=binary&ratio=2&rotation=0&showTitle=false&size=77719&status=done&style=shadow&taskId=u212a3a11-3a3c-4ccc-baaf-4b919c68274&title=&width=1013)
如果你的测试结果与上述一致,说明虚拟机导入成功。
# 4、方案三双电脑方案
此方案需要借助于另外一台电脑安装虚拟机环境,自己的电脑做开发学习使用,其原理如图所示:
![](https://cdn.nlark.com/yuque/0/2023/jpeg/27683667/1678440686562-01e1ddc0-894c-4d4e-8384-b2dad5cc2c29.jpeg)
## 4.1、MacBook
按照官方文档进行设置网络共享:[https://support.apple.com/zh-cn/guide/mac-help/mchlp1540/mac](https://support.apple.com/zh-cn/guide/mac-help/mchlp1540/mac)
下面修改配置文件目的是修改为192.168.150.x网段
`/Library/Preferences/SystemConfiguration/com.apple.nat.plist`文件增加如下内容:
```xml
<key>SharingNetworkMask</key>
<string>255.255.255.0</string>
<key>SharingNetworkNumberEnd</key>
<string>192.168.150.254</string>
<key>SharingNetworkNumberStart</key>
<string>192.168.150.2</string>
```
修改示例:
![image.png](https://cdn.nlark.com/yuque/0/2023/png/27683667/1678609297413-05dfa008-357d-4502-9f45-c393d309a556.png#averageHue=%23fbf9f8&clientId=uc1ca3f91-92e6-4&from=paste&height=341&id=udae6cad1&name=image.png&originHeight=512&originWidth=1120&originalType=binary&ratio=1.5&rotation=0&showTitle=false&size=143453&status=done&style=shadow&taskId=u3099db1b-c104-4391-b5b4-ef38e7f4dcc&title=&width=746.6666666666666)
本地的ip地址为192.168.150.2所以在本地跑微服务时注册的ip地址为192.168.150.2。