这是别人的项目,我是拿来学习的
首先,发货客户与快递公司签订货运合同(货运单),把货物交给快递公司来托运,并按照货运合同的付款方式付款。快递公司根据货物运输线路,为货物配车,找到合适的车辆后,与司机签订运输合同(回执单),并按照运输合同的运费结算方式结算。司机对货物检查无误后,装车,然后发车,发车后,货物的任何损失由司机承担。
司机到达目的地后,需要经过货物验收,验收通过,填写一份司机回执单,快递公司这时同时通知发货客户和收货客户,货物已到达。如果货物没有通过验收,则填写差错记录。如果该货物不需要中转,通知收货客户来提货,客户验收通过后,填写客户回执单,快递公司这时通知发货客户,所发货物已被提走。
如果该货物需要中转,则填写一份中转信息单,快递公司这时同时通知发货客户和收货客户,货物已被中转。中转成功后,收货客户来提货,并通知发货客户,货物已被提,然后进行转货结算。
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,形成接口文档
接口截图文档如下:
必备技能!单点登录系统原理与实现!
票据管理主要是对票据信息进行分发和历史票据的查询
票据分发
票据分发主要是对货运单进行司机分配,分发后,该货运单以及相应的货运回执单的状态会被更新为未到运单和未到车辆,同时更新发货时间
票据查询
票据查询主要是查询所有的历史票据
主要进行货运单的分发(分发到司机)及历史单据的查询
接货管理
接货管理主要由工作人员负责填写一份货运单合同。合同中发货客户和收货客户信息都是下拉选择后自动查找数据库返回前台,职员编号通过获取当前登录用户的编号自动填写。实际交货日期、是否有效、是否审核都是禁止填写,后续事件触发后自动补充填写。提交合同后,货运单事件表修改该合同状态为待运,票据状态为已填。填完货运单后,自动跳转添加货物信息
填写接货单
接货单中,部分信息由数据库读取自动生成 接货单中的发货和收货客户由数据库返回前端显示 中转地及中转费在填写完发货地和收货地后,根据路线情况动态生成 添加货运单的同时自动生成货运单号,以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
死磕18个Java 8的日期处理,工作必用!
查询接货单
查询页面可以查看不同状态的货运单:待发运单、未到运单、未结运单、所有运单。页面以分页形式展示货运单编号、事件名称、备注、发生时间等简略信息。只有在待运状态的货运单,才有修改和删除功能,其他状态不能对其数据操作。所有页面都可以通过货运单编号查看详情。
刚填写好后的接货单将会以待发的状态保存在待发运单中
可以查看运单的详细内容
对待发运单可以进行修改或删除 删除货运单时只能修改货运单及票据状态,不能真正删除
GoodsBillEvent goodsBillEvent = new GoodsBillEvent();
goodsBillEvent.setGoodsBillId(goodsBillCode);
goodsBillEvent.setEventName("删除货运单");
goodsBillEvent.setRemark("顾客不想发货");
goodsBillEvent.setOccurTime(new Date());
BillInfo billInfo = billInfoDao.findByBillCode(goodsBillCode);
billInfo.setBillState("作废");
配车管理
主要进行货运回执单的填写。下拉选择未填写的货运回执单,选择后数据库查询联系人、地址等信息直接填写到页面。货运单状态自动填写为未出合同。
装货地点下拉选择,能找到所有路线的出发地,交货地点后台根据装货地点查询能到达的相应目的地供工作人员选择。起运时间和司机编号在分发票据的时候自动补充填写。是否结算在结算页面事件触发更改。
查询页面可以查看运输合同在不同阶段的状态:未出合同、未到合同、未结车辆、所有合同。页面以分页形式展示货运回执单编号、回执单状态、收货联系人等大致信息。只有运输合同状态为未出合同时,才有修改和删除功能,其他状态不能对其进行数据操作。所有页面都可以通过货运单编号查看详情
填写运输合同
填写主要是填写货运回执单主表,后端会检索数据库中没有运输合同的信息,从而显示在下拉框中,填票人选择相应的货运单后,会返显部分信息 填写后运输合同将处于未出合同状态 添加货运回执单的同时添加票据,类型为货运回执单,状态为已填,修改货运单事件表状态为待发。
BillInfo billInfo = new BillInfo();
billInfo.setBillType("货运回执单");
billInfo.setBillCode(cargoReceipt.getGoodsRevertBillCode());
billInfo.setBillState("已填");
billInfo.setWriteDate(new Date());
billInfoDao.save(billInfo);
查询运输合同
可以查询未出合同、未到车辆、未结合同、所有合同4个状态的货运回执单
可以查看未出合同的详细信息并进行修改、删除操作 删除货运回执单时只能修改货运单及票据状态,不能真正删除
BillInfo billInfo = billInfoDao.findByBillCode(goodsRevertBillCode);
billInfo.setBillState("作废");
billInfo.setWriteDate(new Date());
操作同接货类似,在此不重复展示
到货管理
司机可以在此进行到货回执的填写、用户可以填写顾客回执,并进行历史货物的查询
到货主要分两个部分:1. 司机填写到货回执,确认货物到货;2. 客户填写收货回执,确认收货
司机到货回执
司机填写到货回执,同时后端更新货运单和货运回执为未结;同时客服可以进行提货回告和到货回告并进行填写
面试:数据量很大,分页查询很慢,有什么优化方案?
客户到货回执
客户填写到货回执后,同时客服可以进行收货回告
客户可以查询自己的收货历史
中转管理
中转管理主要是进行中转公司信息的填写、查询以及对货物中转信息的录入和历史查询
中转公司
选择某一个城市,并对该城市的中转公司信息进行录入
可以在中转公司信息查询中查询所有的中转公司信息
使用 Redis 实现一个轻量级的搜索引擎,牛逼啊 !
中转信息
中转信息主要是填写中转货物的中转信息
可以在中转历史中查询所有的中转信息
前端项目地址:https://github.com/anselleeyy/logistics-front
后端项目地址:https://github.com/anselleeyy/logistics-back