基于springboot+vue物流项目
✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌
🍅文末获取项目下载方式🍅
一、项目背景介绍:
当今物流行业是全球最大的产业之一,以其对全球贸易和商业活动的支持而受到广泛关注。物流公司通过为客户提供物流方案来提高供应链的效率和可靠性。为了实现这一目标,物流公司需要使用先进的技术,以优化运输、仓储和分销等过程。随着信息技术的迅猛发展,物流业也开始利用新技术来提高运作效率和准确性。
为了满足物流公司的需求,开发了一个基于Spring Boot和Vue.js的物流管理系统。该系统可以帮助物流公司管理其整个供应链,从接收订单到交付货物。系统使用Spring Boot框架来构建后端,并提供RESTful API以便前端调用。Vue.js框架则用于构建前端,并提供友好的用户界面。
二、项目技术简介:
- JAVA:Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
- Element-UI:Element,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库。
- Spring:Spring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。 Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与 Swing等桌面应用程序AP组合。因此, Spring不仅仅能应用于J2EE应用程序之中,也可以应用于桌面应用程序以及小应用程序之中。Spring框架主要由七部分组成,分别是 Spring Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring Web和 Spring Web MVC。
- SpringBoot:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
- Mybatis-Plus:MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为 简化开发、提高效率而生。
- Spring-Mvc:Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框。
- Html:HTML的全称为超文本标记语言,是一种标记语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字,图形、动画、声音、表格、链接等。
超文本是一种组织信息的方式,它通过超级链接方法将文本中的文字、图表与其他信息媒体相关联。这些相互关联的信息媒体可能在同一文本中,也可能是其他文件,或是地理位置相距遥远的某台计算机上的文件。这种组织信息方式将分布在不同位置的信息资源用随机方式进行连接,为人们查找,检索信息提供方便。
三、系统功能模块介绍:
四、数据库设计:
1:car(car)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | |
license | varchar(15) | NULL | 车牌号 |
type | varchar(50) | NULL | 车辆类型 |
weight | VARCHAR(255) | NULL |
2:deliver_storage(deliver_storage)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | |
plan_id | int(4) | NULL | 计划id |
plan_type | int(11) | NULL | 计划类型(区分计划1、2、3、4表) |
material_id | int(11) | NULL | 物料id |
warehouse_id | int(11) | NULL | 仓库id |
storage_location_id | int(11) | NULL | 库位id |
accomplish_num | VARCHAR(255) | NULL |
3:demo(demo)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | varchar(50) | NULL | 主键ID |
name | varchar(30) | NULL | 姓名 |
key_word | varchar(255) | NULL | 关键词 |
punch_time | datetime(0) | NULL | 打卡时间 |
salary_money | VARCHAR(255) | NULL |
4:demo_field_def_val_main(demo_field_def_val_main)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | varchar(36) | NULL | |
code | varchar(200) | NULL | 编码 |
name | varchar(200) | NULL | 姓名 |
sex | varchar(200) | NULL | 性别 |
address | varchar(200) | NULL | 地址 |
address_param | varchar(32) | NULL | 地址(传参) |
create_by | varchar(50) | NULL | 创建人 |
create_time | datetime(0) | NULL | 创建日期 |
update_by | varchar(50) | NULL | 更新人 |
update_time | datetime(0) | NULL | 更新日期 |
sys_org_code | varchar(64) | NULL | 所属部门 |
5:demo_field_def_val_sub(demo_field_def_val_sub)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | varchar(36) | NULL | |
code | varchar(200) | NULL | 编码 |
name | varchar(200) | NULL | 名称 |
date | varchar(200) | NULL | 日期 |
main_id | varchar(200) | NULL | 主表ID |
create_by | varchar(50) | NULL | 创建人 |
create_time | datetime(0) | NULL | 创建日期 |
update_by | varchar(50) | NULL | 更新人 |
update_time | datetime(0) | NULL | 更新日期 |
sys_org_code | varchar(64) | NULL | 所属部门 |
6:insurance(insurance)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | 车保险表id |
license | varchar(50) | NULL | 车牌号码 |
insura_name | varchar(50) | NULL | 保险公司 |
insurance_policy | varchar(50) | NULL | 商业险保单号 |
strong_date_begin | datetime(0) | NULL | 交强险开始日期 |
strong_date_end | datetime(0) | NULL | 交强险结束日期 |
insurance_date_begin | datetime(0) | NULL | 商业险开始日期 |
insurance_date_end | datetime(0) | NULL | 商业险结束日期 |
strong_policy | varchar(50) | NULL | 交强险保单号 |
create_time | datetime(0) | NULL | 创建时间 |
update_time | datetime(0) | NULL | 更新时间 |
create_by | varchar(32) | NULL | 创建人 |
update_by | varchar(32) | NULL | 更新人 |
backup1 | varchar(50) | NULL | |
backup2 | varchar(50) | NULL | |
backup3 | varchar(50) | NULL | |
backup4 | varchar(50) | NULL | |
backup5 | varchar(50) | NULL |
7:inventory(inventory)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | 库存表id |
backup1 | varchar(50) | NULL | 计划id |
backup2 | varchar(50) | NULL | (1:plan1表;2:plan2表···) |
warehouse_id | int(11) | NULL | 仓库id |
storage_location_id | int(11) | NULL | 库位id |
project_no | varchar(32) | NULL | 项目编号 |
project_name | varchar(50) | NULL | 项目名称暂时不用 |
inventory_quantity | VARCHAR(255) | NULL |
8:jeecg_monthly_growth_analysis(jeecg_monthly_growth_analysis)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | |
year | varchar(50) | NULL | |
month | varchar(50) | NULL | 月份 |
main_income | VARCHAR(255) | NULL |
9:jeecg_order_customer(jeecg_order_customer)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | varchar(32) | NULL | 主键 |
name | varchar(100) | NULL | 客户名 |
sex | varchar(4) | NULL | 性别 |
idcard | varchar(18) | NULL | 身份证号码 |
idcard_pic | varchar(500) | NULL | 身份证扫描件 |
telphone | varchar(32) | NULL | 电话1 |
order_id | varchar(32) | NULL | 外键 |
create_by | varchar(32) | NULL | 创建人 |
create_time | datetime(0) | NULL | 创建时间 |
update_by | varchar(32) | NULL | 修改人 |
update_time | datetime(0) | NULL | 修改时间 |
10:jeecg_order_main(jeecg_order_main)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | varchar(32) | NULL | 主键 |
order_code | varchar(50) | NULL | 订单号 |
ctype | varchar(500) | NULL | 订单类型 |
order_date | datetime(0) | NULL | 订单日期 |
order_money | VARCHAR(255) | NULL |
11:jeecg_order_ticket(jeecg_order_ticket)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | varchar(32) | NULL | 主键 |
ticket_code | varchar(100) | NULL | 航班号 |
tickect_date | datetime(0) | NULL | 航班时间 |
order_id | varchar(32) | NULL | 外键 |
create_by | varchar(32) | NULL | 创建人 |
create_time | datetime(0) | NULL | 创建时间 |
update_by | varchar(32) | NULL | 修改人 |
update_time | datetime(0) | NULL | 修改时间 |
12:jeecg_project_nature_income(jeecg_project_nature_income)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | |
nature | varchar(50) | NULL | 项目性质 |
insurance_fee | VARCHAR(255) | NULL |
13:material(material)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | int(11) | NULL | 物料表id |
serial | varchar(50) | NULL | 物料编号(唯一) |
name | varchar(50) | NULL | 物料名称 |
ations | varchar(50) | NULL | 规格型号 |
supplier | varchar(50) | NULL | 供应商 |
unit | int(11) | NULL | 单位(字典米,吨,卷,台,箱) |
material_volume | VARCHAR(255) | NULL |
14:onl_cgform_button(onl_cgform_button)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
ID | varchar(32) | NULL | 主键ID |
BUTTON_CODE | varchar(50) | NULL | 按钮编码 |
BUTTON_ICON | varchar(20) | NULL | 按钮图标 |
BUTTON_NAME | varchar(50) | NULL | 按钮名称 |
BUTTON_STATUS | varchar(2) | NULL | 按钮状态 |
BUTTON_STYLE | varchar(20) | NULL | 按钮样式 |
EXP | varchar(255) | NULL | 表达式 |
CGFORM_HEAD_ID | varchar(32) | NULL | 表单ID |
OPT_TYPE | varchar(20) | NULL | 按钮类型 |
ORDER_NUM | int(11) | NULL | 排序 |
OPT_POSITION | varchar(3) | NULL | 按钮位置1侧面2底部 |
15:onl_cgform_enhance_java(onl_cgform_enhance_java)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
ID | varchar(36) | NULL | |
BUTTON_CODE | varchar(32) | NULL | 按钮编码 |
CG_JAVA_TYPE | varchar(32) | NULL | 类型 |
CG_JAVA_VALUE | varchar(200) | NULL | 数值 |
CGFORM_HEAD_ID | varchar(32) | NULL | 表单ID |
ACTIVE_STATUS | varchar(2) | NULL | 生效状态 |
EVENT | varchar(10) | NULL | 事件状态(end:结束,start:开始) |
16:onl_cgform_enhance_js(onl_cgform_enhance_js)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
ID | varchar(32) | NULL | 主键ID |
CG_JS | longtext | NULL | JS增强内容 |
CG_JS_TYPE | varchar(20) | NULL | 类型 |
CONTENT | varchar(1000) | NULL | 备注 |
CGFORM_HEAD_ID | varchar(32) | NULL | 表单ID |
17:sys_depart(sys_depart)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | varchar(32) | NULL | ID |
parent_id | varchar(32) | NULL | 父机构ID |
depart_name | varchar(100) | NULL | 机构/部门名称 |
depart_name_en | varchar(500) | NULL | 英文名 |
depart_name_abbr | varchar(500) | NULL | 缩写 |
depart_order | int(11) | NULL | 排序 |
description | varchar(500) | NULL | 描述 |
org_category | varchar(10) | NULL | 机构类别1组织机构,2岗位 |
org_type | varchar(10) | NULL | 机构类型1一级部门2子部门 |
org_code | varchar(64) | NULL | 机构编码 |
mobile | varchar(32) | NULL | 手机号 |
fax | varchar(32) | NULL | 传真 |
address | varchar(100) | NULL | 地址 |
memo | varchar(500) | NULL | 备注 |
status | varchar(1) | NULL | 状态(1启用,0不启用) |
del_flag | varchar(1) | NULL | 删除状态(0,正常,1已删除) |
create_by | varchar(32) | NULL | 创建人 |
create_time | datetime(0) | NULL | 创建日期 |
update_by | varchar(32) | NULL | 更新人 |
update_time | datetime(0) | NULL | 更新日期 |
18:sys_depart_role(sys_depart_role)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | varchar(32) | NULL | |
depart_id | varchar(32) | NULL | 部门id |
role_name | varchar(200) | NULL | 部门角色名称 |
role_code | varchar(100) | NULL | 部门角色编码 |
description | varchar(255) | NULL | 描述 |
create_by | varchar(32) | NULL | 创建人 |
create_time | datetime(0) | NULL | 创建时间 |
update_by | varchar(32) | NULL | 更新人 |
update_time | datetime(0) | NULL | 更新时间 |
19:sys_dict(sys_dict)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | varchar(32) | NULL | |
dict_name | varchar(100) | NULL | 字典名称 |
dict_code | varchar(100) | NULL | 字典编码 |
description | varchar(255) | NULL | 描述 |
del_flag | int(1) | NULL | 删除状态 |
create_by | varchar(32) | NULL | 创建人 |
create_time | datetime(0) | NULL | 创建时间 |
update_by | varchar(32) | NULL | 更新人 |
update_time | datetime(0) | NULL | 更新时间 |
type | int(1) | NULL | 字典类型0为string |
五、功能模块:
-
登录页面:输入账号,密码,验证码即可进入系统,默认账号密码为 admin 123
-
首页:首页展示一些计划,物品,仓库容积等一些直观的数据,通过echars 来动态渲染数据样式。
-
员工管理:管理公司中的员工,有员工的个人信息,账号密码等等,可以新增用户,修改用户,删除用户,禁用用户等操作。
被禁用的用户无法登录此系统。 -
部门设置:管理公司中所有的部门,可以对部门进行增删改查等操作。
然后在新建用户的同时,可以为用户分配其部门。 -
角色权限:角色授权功能
在角色权限页面右侧的操作栏中点击授权功能后打开此页面
通过勾选指定的菜单分配给角色,这个角色就能访问哪些页面。
还可以通过左下方的树操作,选择合适的功能方便进行分配。
例如:选择了父子关联,当你选择了父菜单,那么子菜单也会自动勾选
也可以选择取消关联,效果与之相反。 -
计划列表:管理普通的计划,通过 excel 导入要执行的任务计划,表明计划类型是什么,一些基本的信息编号,项目名称等等,表示这是什么计划,什么信息,计划完成那些事情,计划完成时间是什么等。
除了对其进行基本的增删改查功能等,还可以进行导入,导出功能,导入功能要按照固定的excel 表头格式进行导入,还可以查看当前派单信息。
合并派单:必须选择一样的工程账号进行批量派单操作
合并完单:同上,工程账号一致的情况下才能进行批量派单操作
派单记录:查看派单记录。
完单记录:查看完单记录。 -
仓库管理:可以管理仓库的信息,对仓库进行增删改查等操作。
管理指定仓库中的库位,库位会根据入库货物所占用的面积进行相应的颜色变化,提示容积不足等情况。
库位二维码:点击库位二维码会生成此库位的二维码图片,手机扫描就能查看到此库位上存放的货物信息。
查看存储物料:可以查看库位上存的物料信息。 -
数据字典:此页面管理系统中常用的数据字典,例如状态,性别等等,进行统一管理,可以对齐进行增增删改查操作。还可以导入导出。对字典进行配置等操作。
六、代码示例:
登录页面
public static void main(String[] args) throws UnknownHostException {
ConfigurableApplicationContext application = SpringApplication.run(JeecgApplication.class, args);
Environment env = application.getEnvironment();
String ip = InetAddress.getLocalHost().getHostAddress();
String port = env.getProperty("server.port");
String path = env.getProperty("server.servlet.context-path");
log.info("\n----------------------------------------------------------\n\t" +
"Application Jeecg-Boot is running! Access URLs:\n\t" +
"Local: \t\thttp://localhost:" + port + path + "/\n\t" +
"External: \thttp://" + ip + ":" + port + path + "/\n\t" +
"Swagger-UI: \t\thttp://" + ip + ":" + port + path + "/doc.html\n" +
"----------------------------------------------------------");
}
首页
public static void main(String[] args) {
new CodeWindow().pack();
}
员工管理
/**
* 获取浏览器类型
*
* @param request
* @return
*/
public static BrowserType getBrowserType(HttpServletRequest request) {
BrowserType browserType = null;
if (getBrowserType(request, IE11)) {
browserType = BrowserType.IE11;
}
if (getBrowserType(request, IE10)) {
browserType = BrowserType.IE10;
}
if (getBrowserType(request, IE9)) {
browserType = BrowserType.IE9;
}
if (getBrowserType(request, IE8)) {
browserType = BrowserType.IE8;
}
if (getBrowserType(request, IE7)) {
browserType = BrowserType.IE7;
}
if (getBrowserType(request, IE6)) {
browserType = BrowserType.IE6;
}
if (getBrowserType(request, FIREFOX)) {
browserType = BrowserType.Firefox;
}
if (getBrowserType(request, SAFARI)) {
browserType = BrowserType.Safari;
}
if (getBrowserType(request, CHROME)) {
browserType = BrowserType.Chrome;
}
if (getBrowserType(request, OPERA)) {
browserType = BrowserType.Opera;
}
if (getBrowserType(request, "Camino")) {
browserType = BrowserType.Camino;
}
return browserType;
}
部门设置
public static String getIpAddr(HttpServletRequest request) {
String ip = null;
try {
ip = request.getHeader("x-forwarded-for");
if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (StringUtils.isEmpty(ip) || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
} catch (Exception e) {
logger.error("IPUtils ERROR ", e);
}
return ip;
}
角色权限
public static boolean isEmpty(Object object) {
if (object == null) {
return (true);
}
if ("".equals(object)) {
return (true);
}
return "null".equals(object);
}
public static boolean isNotEmpty(Object object) {
return object != null && !object.equals("") && !object.equals("null");
}
public static String decode(String strIn, String sourceCode, String targetCode) {
return code2code(strIn, sourceCode, targetCode);
}
public static String StrToUTF(String strIn, String sourceCode, String targetCode) {
strIn = "";
try {
strIn = new String(strIn.getBytes(StandardCharsets.ISO_8859_1), "GBK");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return strIn;
}
计划列表
private static Result<?> addOrEditOne(String desformCode, JSONObject formData, String token, HttpMethod method) {
String url = getBaseUrl(desformCode).toString();
HttpHeaders headers = getHeaders(token);
ResponseEntity<JSONObject> result = RestUtil.request(url, method, headers, null, formData, JSONObject.class);
return packageReturn(result);
}
仓库管理
public static String encrypt(String plaintext, String password, String salt) {
Key key = getPBEKey(password);
byte[] encipheredData = null;
PBEParameterSpec parameterSpec = new PBEParameterSpec(salt.getBytes(), ITERATIONCOUNT);
try {
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, key, parameterSpec);
encipheredData = cipher.doFinal(plaintext.getBytes(StandardCharsets.UTF_8));
} catch (Exception ignored) {
}
return bytesToHexString(encipheredData);
}
数据字典
/*
* 针对表字典进行额外的sign签名校验(增加安全机制)
* @param dictCode:
* @param sign:
* @param request:
* @Return: void
*/
public static void checkDictTableSign(String dictCode, String sign, HttpServletRequest request) {
//表字典SQL注入漏洞,签名校验
String accessToken = request.getHeader("X-Access-Token");
String signStr = dictCode + SqlInjectionUtil.TABLE_DICT_SIGN_SALT + accessToken;
String javaSign = SecureUtil.md5(signStr);
if (!javaSign.equals(sign)) {
log.error("表字典,SQL注入漏洞签名校验失败 :" + sign + "!=" + javaSign + ",dictCode=" + dictCode);
throw new JeecgBootException("无权限访问!");
}
log.info(" 表字典,SQL注入漏洞签名校验成功!sign=" + sign + ",dictCode=" + dictCode);
}
/**
* sql注入过滤处理,遇到注入关键字抛异常
*
* @param value
* @return
*/
public static void filterContent(String value) {
if (value == null || "".equals(value)) {
return;
}
// 统一转为小写
value = value.toLowerCase();
String[] xssArr = xssStr.split("\\|");
for (String s : xssArr) {
if (value.contains(s)) {
log.error("请注意,存在SQL注入关键词---> {}", s);
log.error("请注意,值可能存在SQL注入风险!---> {}", value);
throw new RuntimeException("请注意,值可能存在SQL注入风险!--->" + value);
}
}
}
七、论文参考:
论文参考···
八、项目总结:
一个完整的电子商务系统,包括前端和后端两个部分。前端使用了Vue.js框架进行开发,提供了友好的用户界面和良好的交互体验。后端使用Spring Boot框架构建,提供了各种RESTful API接口,支持前端与后端之间的数据交换和通信。该项目可以提供一个完整的电子商务解决方案,为用户提供一个安全、可靠和方便的购物体验。同时,该项目的后端使用Spring Boot框架,具有高度的可扩展性和稳定性,可以支持更多的业务需求和更高的并发访问量。
九、源码获取:
大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻获取联系方式👇🏻👇🏻👇🏻
链接点击直达:下载链接