缺物流管理系统项目经验的,推荐看看这个项目。


# 项目需求说明

首先,发货客户与快递公司签订货运合同(货运单),把货物交给快递公司来托运,并按照货运合同的付款方式付款。快递公司根据货物运输线路,为货物配车,找到合适的车辆后,与司机签订运输合同(回执单),并按照运输合同的运费结算方式结算。司机对货物检查无误后,装车,然后发车,发车后,货物的任何损失由司机承担。

司机到达目的地后,需要经过货物验收,验收通过,填写一份司机回执单,快递公司这时同时通知发货客户和收货客户,货物已到达。如果货物没有通过验收,则填写差错记录。如果该货物不需要中转,通知收货客户来提货,客户验收通过后,填写客户回执单,快递公司这时通知发货客户,所发货物已被提走。

如果该货物需要中转,则填写一份中转信息单,快递公司这时同时通知发货客户和收货客户,货物已被中转。中转成功后,收货客户来提货,并通知发货客户,货物已被提,然后进行转货结算。

# 项目技术选型

编写环境

  • 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)

特色

  1. Hibernate 采用 SpringBoot-data-jpa 进行封装,简化数据库操作,采用命名规范进行数据库的增删改查,去除了接口的实现

  2. 使用 Springboot 进行快速开发,简化了配置文件的编写

  3. 项目中采用了 Swagger2.0,自动扫描 Controller 中的 RequestMapping,形成接口文档

接口截图文档如下:
df0de1edcc18883306d46c81e14d3fbc.png

# 功能模块介绍

票据管理

票据管理主要是对票据信息进行分发和历史票据的查询

票据分发

票据分发主要是对货运单进行司机分配,分发后,该货运单以及相应的货运回执单的状态会被更新为未到运单和未到车辆,同时更新发货时间

a733e73bb20a32a37f1e7415ca102b78.png628ba8ae9eda0afe5ee072bf19324b69.png

票据查询

票据查询主要是查询所有的历史票据

677c362dca6fd31bc8ac3a9482726c38.png

主要进行货运单的分发(分发到司机)及历史单据的查询


# 接货管理

接货管理主要由工作人员负责填写一份货运单合同。合同中发货客户和收货客户信息都是下拉选择后自动查找数据库返回前台,职员编号通过获取当前登录用户的编号自动填写。实际交货日期、是否有效、是否审核都是禁止填写,后续事件触发后自动补充填写。提交合同后,货运单事件表修改该合同状态为待运,票据状态为已填。填完货运单后,自动跳转添加货物信息

填写接货单

接货单中,部分信息由数据库读取自动生成
接货单中的发货和收货客户由数据库返回前端显示
中转地及中转费在填写完发货地和收货地后,根据路线情况动态生成
添加货运单的同时自动生成货运单号,以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("审核");123456789
查询接货单

查询页面可以查看不同状态的货运单:待发运单、未到运单、未结运单、所有运单。页面以分页形式展示货运单编号、事件名称、备注、发生时间等简略信息。只有在待运状态的货运单,才有修改和删除功能,其他状态不能对其数据操作。所有页面都可以通过货运单编号查看详情。

刚填写好后的接货单将会以待发的状态保存在待发运单中

5b385ccb7d699b187ebdfdea40c8d942.png

可以查看运单的详细内容

4c1da9f4e12c4fc56341c101a4b79204.png

对待发运单可以进行修改或删除
删除货运单时只能修改货运单及票据状态,不能真正删除

GoodsBillEvent goodsBillEvent = new GoodsBillEvent();
goodsBillEvent.setGoodsBillId(goodsBillCode);
goodsBillEvent.setEventName("删除货运单");
goodsBillEvent.setRemark("顾客不想发货");
goodsBillEvent.setOccurTime(new Date());


BillInfo billInfo = billInfoDao.findByBillCode(goodsBillCode);
billInfo.setBillState("作废");

4ead465cacd120e054192d8ee3435195.png

# 配车管理

**主要进行货运回执单的填写。下拉选择未填写的货运回执单,选择后数据库查询联系人、地址等信息直接填写到页面。货运单状态自动填写为未出合同。


装货地点下拉选择,能找到所有路线的出发地,交货地点后台根据装货地点查询能到达的相应目的地供工作人员选择。起运时间和司机编号在分发票据的时候自动补充填写。是否结算在结算页面事件触发更改。

查询页面可以查看运输合同在不同阶段的状态:未出合同、未到合同、未结车辆、所有合同。页面以分页形式展示货运回执单编号、回执单状态、收货联系人等大致信息。只有运输合同状态为未出合同时,才有修改和删除功能,其他状态不能对其进行数据操作。所有页面都可以通过货运单编号查看详情**

填写运输合同

填写主要是填写货运回执单主表,后端会检索数据库中没有运输合同的信息,从而显示在下拉框中,填票人选择相应的货运单后,会返显部分信息
填写后运输合同将处于未出合同状态
添加货运回执单的同时添加票据,类型为货运回执单,状态为已填,修改货运单事件表状态为待发。

BillInfo billInfo = new BillInfo();
billInfo.setBillType("货运回执单");
billInfo.setBillCode(cargoReceipt.getGoodsRevertBillCode());
billInfo.setBillState("已填");
billInfo.setWriteDate(new Date());
billInfoDao.save(billInfo);

d34aca5cca9a9eff6cc81f339523600e.png

查询运输合同

可以查询未出合同、未到车辆、未结合同、所有合同4个状态的货运回执单

6dcba45f651c7fd22dd26cb13803c55e.png

可以查看未出合同的详细信息并进行修改、删除操作
删除货运回执单时只能修改货运单及票据状态,不能真正删除

BillInfo billInfo = billInfoDao.findByBillCode(goodsRevertBillCode);
billInfo.setBillState("作废");
billInfo.setWriteDate(new Date());

操作同接货类似,在此不重复展示

# 到货管理

司机可以在此进行到货回执的填写、用户可以填写顾客回执,并进行历史货物的查询


到货主要分两个部分:1. 司机填写到货回执,确认货物到货;2. 客户填写收货回执,确认收货

司机到货回执

司机填写到货回执,同时后端更新货运单和货运回执为未结;同时客服可以进行提货回告和到货回告并进行填写

120080e4ed6ac4bf1e8cd113a693c5c1.png
631dab85375b0fc6c5964ae81f9741da.png

客户到货回执

客户填写到货回执后,同时客服可以进行收货回告

7253189b9914948fa898bcdce7ef1480.png
f25a4699a7a819ef74efd75105272f5f.png

客户可以查询自己的收货历史

e6ab4ee6a67294e991482aac8ec442b2.png

# 中转管理

中转管理主要是进行中转公司信息的填写、查询以及对货物中转信息的录入和历史查询

中转公司

选择某一个城市,并对该城市的中转公司信息进行录入

3b0c14c5eb4e5430c229da382296008b.png

可以在中转公司信息查询中查询所有的中转公司信息

5c27ce60b53b0176ce1b7c49b45599ed.png

中转信息

中转信息主要是填写中转货物的中转信息

a48b2f49cb58eabfeefdbaa9fa7f5b6f.jpega3b8b5c980e0c9d08f657876d048b4d4.png

可以在中转历史中查询所有的中转信息

f5e5d4a1612c4b2ce97527cdf0f9b62d.png

源码地址获取 
扫描下方二维码,回复关键字【 4025】


往期推荐


源码中常见的 where 1=1 是一种高级优化技巧?
SpringBoot 对接外部接口,一步一步性能调实战篇
Kafka数据高可靠ACK/ISR/HW你都会了吗?
面试官:MySQL 中 InnoDB 的索引结构以及使用 B+ 树实现索引的原因
纯干货 | 从淘宝到云端的高可用架构演进
到底什么是"超融合"呢?
这款 MySQL、Oracle、HDFS 数据同步工具,有点牛逼!
松耦合式的权限控制设计,自定义权限表达式
网关技术详解及常见网关对比
【图解】用户登录验证流程,这下彻底搞懂了!


回复【干货】获取精选干货视频教程

回复【加群】加入疑难问题攻坚交流群
回复【mat】获取内存溢出问题分析详细文档教程
回复【赚钱】获取用java写一个能赚钱的微信机器人
回复【副业】获取程序员副业攻略一份




好文请点赞+分享
Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐