课程安排
- 了解神领物流
- 了解物流行业
- 了解项目的技术架构
- 了解项目的业务功能
- 项目功能演示
- 搭建开发环境
- 基于现有代码进行bug修复
- 阅读已有的代码
1、场景说明
现在的你,已经学习了目前最主流的系统架构技术《微服务技术栈》,并且呢也拿到了满意的offer,入职了一家物流公司,公司名叫:神领物流公司。
现在你的心情还是比较复杂的,既开心又担心,开心是这个offer你很满意,担心的是,听朋友说物流行业的项目业务非常复杂,技术涉及的也比较多,而自己从来没有接触过物流项目,就担心自己能不能Hold得住?万一……
不用过于担心,本套课程就是带着你一点点的了解项目,站到一个新人的角度来看待这个项目,代码从哪里拉取?开发规范是什么?有哪些环境?项目业务是什么样的? ……

2、神领物流是什么?
神领物流是一个基于微服务架构体系的**【生产级】**物流项目系统,这可能是目前你能学习到的最接近企业真实场景的项目课程,其业务完整度、真实度、复杂度会让你感到惊讶,在这里你会学习到最核心的物流调度系统,也可以学习到在复杂的微服务架构体系下开发以及相关问题的解决。学完后你的收获会很“哇塞”。
2.1、公司介绍
公司从2019年开始业务快速扩张,网点数量从138家扩展至540家,车辆从170台增长到800台。同时,原有的系统非常简单,比如车辆的调度靠人工操作、所有的货物分拣依靠人员,核心订单数据手动录入,人效非常低。
随着业务不断演进,技术的不断提升,原有运输管理系统已无法满足现有快速扩展下的业务需求,但针对现有系统评估后发现,系统升级成本远高于重新研发。
因此,公司决定基于现有业务体系进行重新构建,打造一套新的TMS运输系统,直接更替原有系统。业务侧重于展示车辆调研、线路规划等核心业务流程,操作智能化,大幅度提升人效及管控效率。
2.2、组织架构

Java开发人员所在的一级部门为信息中心,主要负责集团新系统的研发、维护、更新迭代。信息中心下设3个2级部门,产品部、运维部以及开发部门,开发部门总计42人,按照以业务线划分为4个组、TMS项目组之外、WMS项目组、OMS项目、CRM组。
TMS(Transportation Management System 运输管理系统) 项目组目前共8人,其中前端3人,后端5人。后端人员根据以下功能模块拆分进行任务分配,实际业务中也不可能是一人包打天下,分工合作才是常态化操作。
2.3、产品说明
神领物流系统类似顺丰速运,是向C端用户提供快递服务的系统。竞品有:顺丰、中通、圆通、京东快递等。
项目产品主要有4端产品:
- 用户端:基于微信小程序开发,外部客户使用,可以寄件、查询物流信息等。
- 快递员端:基于安卓开发的手机APP,公司内部的快递员使用,可以接收取派件任务等。
- 司机端:基于安卓开发的手机APP,公司内部的司机使用,可以接收运输任务、上报位置信息等。
- 后台系统管理:基于vue开发,PC端使用,公司内部管理员用户使用,可以进行基础数据维护、订单管理、运单管理等。
3、物流行业系统
从广度上来说,物流系统可以理解为由多个子系统组成,这里我们以一般综合型物流系统举例,在整体框架上可以分为仓储系统WMS、运配系统TMS、单据系统OMS和计费系统BMS。
这四大系统本质上解决了物流行业的四大核心问题:怎么存放、怎么运送、怎么跟进、怎么结算。
神领物流系统,是TMS运配系统,本质上解决的是怎样运送的问题。

4、系统架构和技术架构
4.1、系统架构

4.2、技术架构
下图展现了神领物流项目使用的主要的技术:

5、功能演示
5.1、需求文档
下面将演示四端的主要功能,更多的功能具体查看各端的需求文档。
| 用户端 | https://share.lanhuapp.com/#/invite?sid=qx01hbI7 密码: UxGE |
|---|---|
| 快递员端 | https://share.lanhuapp.com/#/invite?sid=qxe42Dya 密码: Nomz |
| 司机端 | https://share.lanhuapp.com/#/invite?sid=qX0NEmro 密码: yrzZ |
| 管理端 | https://share.lanhuapp.com/#/invite?sid=qX0axVem 密码: fh3i |
5.2、功能架构

5.3、业务功能流程

:::info
流程说明:
- 用户在**【用户端】**下单后,生成订单
- 系统会根据订单生成**【取件任务】,快递员上门取件后成功后生成【运单】**
- 用户对订单进行支付,会产生**【交易单】**
- 快件开始运输,会经历起始营业部、分拣中心、转运中心、分拣中心、终点营业部之间的转运运输,在此期间会有多个**【运输任务】**
- 到达终点网点后,系统会生成**【派件任务】**,快递员进行派件作业
- 最后,用户将进行签收或拒收操作
:::
5.4、用户端
功能演示操作视频列表:
| 下单操作 | 点击查看 |
|---|---|
| 取消订单 | 点击查看 |
| 地址簿 | 点击查看 |



5.5、快递员端
功能演示操作视频列表:
| 派件操作流程 | 点击查看 |
|---|---|
| 取件操作流程 | 点击查看 |
| 全部取派操作流程 | 点击查看 |
| 搜索操作流程 | 点击查看 |
| 消息操作流程 | 点击查看 |




5.6、司机端
5.7、后台管理系统
功能演示操作视频列表:
| 建立机构 | 点击查看 |
|---|---|
| 新建员工 | 点击查看 |
| 绘制作业范围 | 点击查看 |
| 新建线路 | 点击查看 |
| 启用车辆 | 点击查看 |










6、开发环境
6.1、开发模式
在神领物流开发团队中,采用了分组协作开发的模式,整个开发团队分为5个小组,每个小组4~5人,不同的分组负责不同的微服务。
开发环境分为本地开发环境、测试环境、生成环境:
- **本地开发环境:**自己的电脑环境
- **测试环境:**在内网中搭建的一套大家都可以访问使用的环境
- **生成环境:**最终给用户使用的环境
6.2、团队分工
目前神领物流项目拥有19个微服务,1个网关,1个parent工程,2个公共依赖工程,这些工程由上述的5个小组共同维护开发。
新入职的你,加入到了开发一组。
| 开发组/负责模块 | 开发一组 | 开发二组 | 开发三组 | 开发四组 | 开发五组 | 说明 |
|---|---|---|---|---|---|---|
| sl-express-parent | ● | 父工程 | ||||
| sl-express-common | ● | 通用工程 | ||||
| sl-express-mq | ● | 统一消息代码 | ||||
| sl-express-gateway | ● | 网关 | ||||
| sl-express-ms-base | ● | 基础微服务 | ||||
| sl-express-ms-carriage | ● | 运费微服务 | ||||
| sl-express-ms-courier | ● | 快递员微服务 | ||||
| sl-express-ms-dispatch | ● | 调度微服务 | ||||
| sl-express-ms-driver | ● | 司机微服务 | ||||
| sl-express-ms-oms | ● | 订单微服务 | ||||
| sl-express-ms-service-scope | ● | 服务范围微服务 | ||||
| sl-express-ms-sms | ● | 短信微服务 | ||||
| sl-express-ms-track | ● | 轨迹微服务 | ||||
| sl-express-ms-trade | ● | 支付微服务 | ||||
| sl-express-ms-transport | ● | 路线微服务 | ||||
| sl-express-ms-transport-info | ● | 物流信息微服务 | ||||
| sl-express-ms-user | ● | 用户微服务 | ||||
| sl-express-ms-web-courier | ● | 快递员web服务 | ||||
| sl-express-ms-web-customer | ● | 用户web服务 | ||||
| sl-express-ms-web-driver | ● | 司机web服务 | ||||
| sl-express-ms-web-manager | ● | 后台web服务 | ||||
| sl-express-ms-work | ● | 运单微服务 | ||||
| sl-express-ms-search | ● | 搜索微服务 |
:::info
**思考:**是否需要把所有的工程代码都拉取到本地进行编译运行?
不需要的。你只需要将自己将要负责的开发任务相关的代码拉取到本地进行开发即可,其他的服务都可以调用测试环境正在运行的服务。
另外,你有可能是没有权限拉取到其他开发组的代码的。
:::
微服务间调用关系如下:

可以看到,四个端的请求都会统一进入网关,再分发到对应的四个web微服务,再由web微服务请求其他微服务完成业务。
6.3、软件环境
为了模拟企业中的开发环境,所以我们需要通过VMware导入linux虚拟机,该虚拟机中已经安装了课程中所需要的各种环境,包括,git、maven私服、Jenkins、MySQL、RabbitMQ等。
:::info
关于JDK版本的说明:神领物流项目使用的JDK版本为11,需要同学们统一下环境,JDK11的安装包在资料中有提供。
目录:资料\软件包\jdk-11.0.15.1_windows-x64_bin.exe
:::
🔔关闭本地开发环境的防火墙(很重要!)
6.3.1、导入虚拟机
具体参考文档:虚拟机导入手册
:::danger
注意:只要按照文档导入虚拟机即可,其他软件无需自己安装,都已经安装了,并且开机自启。
:::

:::info
通过dps命令可以查询上述列表,dps是自定义命令。
自定义命令方法如下:
:::
vim ~/.bashrc
#增加如下内容
alias dps='docker ps --format "table{
{.ID}}\t{
{.Names}}\t{
{.Status}}\t{
{.Ports}}"'
#保存退出
#生效
source ~/.bashrc
6.3.2、配置本机hosts
在本机hosts文件中设置如下配置:
192.168.150.101 git.sl-express.com
192.168.150.101 maven.sl-express.com
192.168.150.101 jenkins.sl-express.com
192.168.150.101 auth.sl-express.com
192.168.150.101 rabbitmq.sl-express.com
192.168.150.101 nacos.sl-express.com
192.168.150.101 neo4j.sl-express.com
192.168.150.101 xxl-job.sl-express.com
192.168.150.101 eaglemap.sl-express.com
192.168.150.101 seata.sl-express.com
192.168.150.101 skywalking.sl-express.com
192.168.150.101 api.sl-express.com
192.168.150.101 admin.sl-express.com
打开浏览器测试:http://git.sl-express.com/

看到这个页面就说明hosts已经生效。(也可以再试试其他的,比如:maven私服、jenkins等)
6.3.3、服务列表
:::danger
说明:如果通过域名访问,无需设置端口。
:::
| 名称 | 地址 | 用户名/密码 | 端口 |
|---|---|---|---|
| git | http://git.sl-express.com/ | sl/sl123 | 10880 |
| maven | http://maven.sl-express.com/nexus/ | admin/admin123 | 8081 |
| jenkins | http://jenkins.sl-express.com/ | root/123 | 8090 |
| 权限管家 | http://auth.sl-express.com/api/authority/static/index.html | admin/123456 | 8764 |
| RabbitMQ | http://rabbitmq.sl-express.com/ | sl/sl321 | 15672 |
| MySQL | - | root/123 | 3306 |
| nacos | http://nacos.sl-express.com/nacos/ | nacos/nacos | 8848 |
| neo4j | http://neo4j.sl-express.com/browser/ | neo4j/neo4j123 | 7474 |
| xxl-job | http://xxl-job.sl-express.com/xxl-job-admin | admin/123456 | 28080 |
| EagleMap | http://eaglemap.sl-express.com/ | eagle/eagle | 8484 |
| seata | http://seata.sl-express.com/ | seata/seata | 7091 |
| Gateway | http://api.sl-express.com/ | - | 9527 |
| admin | http://admin.sl-express.com/ | - | 80 |
| skywalking | http://skywalking.sl-express.com/ | - | 48080 |
| Redis | - | 123321 | 6379 |
| MongoDB | - | sl/123321 | 27017 |
6.3.4、配置Maven私服
在本地的maven(建议版本为3.6.x)配置中配置上述的私服,配置文件参考如下:
settings.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>F:\maven\repository</localRepository>







1874

被折叠的 条评论
为什么被折叠?



