基于 Springboot 2.0 + LayUI 开发的物流管理系统
借助Redis锁,完美解决高并发秒杀问题 还在直接用JWT做鉴权?JJWT真香 Spring Boot 操作 Redis 的各种实现 Fluent Mybatis 牛逼! Nginx 常用配置清单 这玩意比ThreadLocal叼多了,吓得我赶紧分享出来。
项目技术选型
编写环境
Windows10 专业版 - 1803
Spring Tool Suite 3.9.4.RELEASE
Spring5 + SpringMvc5 + Spring-Data-Jpa
Mysql 8.0.11
架构选型
项目前后端分离,降低耦合度
前端
前端选用 layui 2.3.0,以 html 的形式保存,通过 js 向后端请求数据
后端
后端选用 SpringBoot 2.0.2 进行快速的原型开发,内部采用SSH(Spring + SpringMVC + Hibernate)
Hibernate 采用 SpringBoot-data-jpa 进行封装,简化数据库操作,采用命名规范进行数据库的增删改查,去除了接口的实现
使用 Springboot 进行快速开发,简化了配置文件的编写
项目中采用了 Swagger2.0,自动扫描 Controller 中的 RequestMapping,形成接口文档
![](https://filescdn.proginn.com/b35f180f5e9ca14b3465b14c70212135/dd9a57a349f7cb5f849f57f1dd7595f6.webp)
功能模块介绍
票据管理
票据分发
票据分发主要是对货运单进行司机分配,分发后,该货运单以及相应的货运回执单的状态会被更新为未到运单和未到车辆,同时更新发货时间
![](https://filescdn.proginn.com/49982de623915cd47ddcc608c43ad890/58e7ae1cb0d25e14d22efce15972045d.webp)
![](https://filescdn.proginn.com/3660682d4af8e226ed07f9911a9601f7/28be837dbfac17cc480c10834efee728.webp)
票据查询
票据查询主要是查询所有的历史票据
![](https://filescdn.proginn.com/0ec65c302509fd3272ea1dbe7d865541/14e3557e24eef97161aa6bbe49363931.webp)
接货管理
填写接货单
接货单中,部分信息由数据库读取自动生成
接货单中的发货和收货客户由数据库返回前端显示
中转地及中转费在填写完发货地和收货地后,根据路线情况动态生成
添加货运单的同时自动生成货运单号,以HY开头,提交合同后,添加票据,类型为货运单,状态为已填,修改货运单事件表状态为待发
String goodsBillCode = "HY";
while (true) {
goodsBillCode += randomCode();
if (goodsBillDao.findByGoodsBillCode(goodsBillCode) == null) {
break;
}
}
goodsBill.setGoodsBillCode(goodsBillCode);
goodsBill.setValidity("无效");
goodsBill.setIfAudit("未审核");
goodsBill.setIfSettleAccounts("未结账");
goodsBillDao.save(goodsBill);
BillInfo billInfo = new BillInfo();
billInfo.setBillType("货运单");
billInfo.setBillCode(goodsBillCode);
billInfo.setBillState("已填");
billInfo.setWriteDate(new Date());
billInfoDao.save(billInfo);
GoodsBillEvent goodsBillEvent = new GoodsBillEvent();
goodsBillEvent.setGoodsBillId(goodsBillCode);
goodsBillEvent.setEventName("待发");
goodsBillEvent.setRemark("单据已填");
goodsBillEvent.setOccurTime(new Date());
goodsBillEventDao.save(goodsBillEvent);
添加货物后,给回执单一个编号,以HZ开头,并且修改货运单状态为有效和已填
String goodsRevertBillId = "HZ";
while (true) {
goodsRevertBillId += randomCode();
if (cargoReceiptDetailDao.findByGoodsRevertBillId(goodsRevertBillId) == null) {
break;
}
}
goodsBill.setValidity("有效");
goodsBill.setIfAudit("审核");
![](https://filescdn.proginn.com/472e5a03898b282857cf5ae1322489a6/9198758a3fa4b6d81ac83719bd492bfe.webp)
![](https://filescdn.proginn.com/c9c73705c6af4fb5b577842bf48175e3/12de3123e673130f6c0a3990962e4515.webp)
查询接货单
刚填写好后的接货单将会以待发的状态保存在待发运单中
![](https://filescdn.proginn.com/b66d75f2d5d54ee45f61bc85648e3886/7978cc1197e909bf26ae35c6751f976c.webp)
可以查看运单的详细内容
![](https://filescdn.proginn.com/b93705a091c1bc01c58b01a8b0ae9da0/e180e191b06a2dc0f2b836595c9de09b.webp)
对待发运单可以进行修改或删除
删除货运单时只能修改货运单及票据状态,不能真正删除
GoodsBillEvent goodsBillEvent = new GoodsBillEvent();
goodsBillEvent.setGoodsBillId(goodsBillCode);
goodsBillEvent.setEventName("删除货运单");
goodsBillEvent.setRemark("顾客不想发货");
goodsBillEvent.setOccurTime(new Date());
BillInfo billInfo = billInfoDao.findByBillCode(goodsBillCode);
billInfo.setBillState("作废");
![](https://filescdn.proginn.com/43b00aebb16164454601b195ad30d209/540fd3d5269121cd8d30a7620525502f.webp)
配车管理
装货地点下拉选择,能找到所有路线的出发地,交货地点后台根据装货地点查询能到达的相应目的地供工作人员选择。起运时间和司机编号在分发票据的时候自动补充填写。是否结算在结算页面事件触发更改。关注公众号 Java项目分享 回复2020 获取Java最新面试宝典
填写运输合同
填写主要是填写货运回执单主表,后端会检索数据库中没有运输合同的信息,从而显示在下拉框中,填票人选择相应的货运单后,会返显部分信息
填写后运输合同将处于未出合同状态
添加货运回执单的同时添加票据,类型为货运回执单,状态为已填,修改货运单事件表状态为待发。
BillInfo billInfo = new BillInfo();
billInfo.setBillType("货运回执单");
billInfo.setBillCode(cargoReceipt.getGoodsRevertBillCode());
billInfo.setBillState("已填");
billInfo.setWriteDate(new Date());
billInfoDao.save(billInfo);
![](https://filescdn.proginn.com/1835d1f398355107d9159e9611230c18/ff3a91ccffedeb5c1b4604af8c2fbd74.webp)
查询运输合同
可以查询未出合同、未到车辆、未结合同、所有合同4个状态的货运回执单
![](https://filescdn.proginn.com/17f7578fb546ed9ea003105787a3993e/dcaf0e15a84a4b45c24167a3f5f3adb5.webp)
可以查看未出合同的详细信息并进行修改、删除操作
删除货运回执单时只能修改货运单及票据状态,不能真正删除
BillInfo billInfo = billInfoDao.findByBillCode(goodsRevertBillCode);
billInfo.setBillState("作废");
billInfo.setWriteDate(new Date());
到货管理
到货主要分两个部分:1. 司机填写到货回执,确认货物到货;2. 客户填写收货回执,确认收货
司机到货回执
司机填写到货回执,同时后端更新货运单和货运回执为未结;同时客服可以进行提货回告和到货回告并进行填写
![](https://filescdn.proginn.com/30a02f9586f82f8be3b275502aa6881f/0c1229f2723613800c811e129b02d56d.webp)
![](https://filescdn.proginn.com/139904a105f35eff8b84f244ac25bebc/5cf804b66e5fe25ab45afdbca4e6f992.webp)
客户到货回执
客户填写到货回执后,同时客服可以进行收货回告
![](https://filescdn.proginn.com/ca10be82b939e433ee890a30b9b889c9/4e2462186e97ea02001fa7544f32c90d.webp)
![](https://filescdn.proginn.com/474fc2c9255df38d51b31536f3803394/824fdce78529c382f53c80e895af3263.webp)
客户可以查询自己的收货历史
![](https://filescdn.proginn.com/f535be47b32fd3b75b4d72519057b574/43f6a043ef351a8f0afe10ac3ce751bb.webp)
中转管理
中转公司
选择某一个城市,并对该城市的中转公司信息进行录入
![](https://filescdn.proginn.com/11e02b9d79cef65083535a8cdcc3f29a/47f0616294966d2cf5078accebab8748.webp)
可以在中转公司信息查询中查询所有的中转公司信息
![](https://filescdn.proginn.com/6af4342ac753ee0de8db7cbf5554e6cf/44ba150a14ca3ac8465a086d0d20aa59.webp)
中转信息
中转信息主要是填写中转货物的中转信息
![](https://filescdn.proginn.com/9d7f22b2774ae8495c6e0b7cb2b0b372/494c47cb684b57899901cdd1fdbb5cd0.webp)
![](https://filescdn.proginn.com/cf8ae1bcc7a1dc1f3c2d94ed35be49ed/90d9a90602e79620cac73311b66f34e0.webp)
可以在中转历史中查询所有的中转信息
![](https://filescdn.proginn.com/9d5e1a188aa0a84f9af00a2e77b281ca/42800677ccf1070f999b7bf9ce8b54e8.webp)
获取方式
更多项目源码
评论