基于springboot+vue物流项目

✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌

🍅文末获取项目下载方式🍅


一、项目背景介绍:

当今物流行业是全球最大的产业之一,以其对全球贸易和商业活动的支持而受到广泛关注。物流公司通过为客户提供物流方案来提高供应链的效率和可靠性。为了实现这一目标,物流公司需要使用先进的技术,以优化运输、仓储和分销等过程。随着信息技术的迅猛发展,物流业也开始利用新技术来提高运作效率和准确性。

为了满足物流公司的需求,开发了一个基于Spring Boot和Vue.js的物流管理系统。该系统可以帮助物流公司管理其整个供应链,从接收订单到交付货物。系统使用Spring Boot框架来构建后端,并提供RESTful API以便前端调用。Vue.js框架则用于构建前端,并提供友好的用户界面。

二、项目技术简介:

  1. JAVA:Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
  2. Element-UI:Element,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库。
  3. 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。
  4. SpringBoot:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
  5. Mybatis-Plus:MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为 简化开发、提高效率而生。
  6. Spring-Mvc:Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框。
  7. Html:HTML的全称为超文本标记语言,是一种标记语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字,图形、动画、声音、表格、链接等。

超文本是一种组织信息的方式,它通过超级链接方法将文本中的文字、图表与其他信息媒体相关联。这些相互关联的信息媒体可能在同一文本中,也可能是其他文件,或是地理位置相距遥远的某台计算机上的文件。这种组织信息方式将分布在不同位置的信息资源用随机方式进行连接,为人们查找,检索信息提供方便。

三、系统功能模块介绍:

功能模块图

四、数据库设计:

1:car(car)

字段名类型默认值列注释
idint(11)NULL
licensevarchar(15)NULL车牌号
typevarchar(50)NULL车辆类型
weightVARCHAR(255)NULL

2:deliver_storage(deliver_storage)

字段名类型默认值列注释
idint(11)NULL
plan_idint(4)NULL计划id
plan_typeint(11)NULL计划类型(区分计划1、2、3、4表)
material_idint(11)NULL物料id
warehouse_idint(11)NULL仓库id
storage_location_idint(11)NULL库位id
accomplish_numVARCHAR(255)NULL

3:demo(demo)

字段名类型默认值列注释
idvarchar(50)NULL主键ID
namevarchar(30)NULL姓名
key_wordvarchar(255)NULL关键词
punch_timedatetime(0)NULL打卡时间
salary_moneyVARCHAR(255)NULL

4:demo_field_def_val_main(demo_field_def_val_main)

字段名类型默认值列注释
idvarchar(36)NULL
codevarchar(200)NULL编码
namevarchar(200)NULL姓名
sexvarchar(200)NULL性别
addressvarchar(200)NULL地址
address_paramvarchar(32)NULL地址(传参)
create_byvarchar(50)NULL创建人
create_timedatetime(0)NULL创建日期
update_byvarchar(50)NULL更新人
update_timedatetime(0)NULL更新日期
sys_org_codevarchar(64)NULL所属部门

5:demo_field_def_val_sub(demo_field_def_val_sub)

字段名类型默认值列注释
idvarchar(36)NULL
codevarchar(200)NULL编码
namevarchar(200)NULL名称
datevarchar(200)NULL日期
main_idvarchar(200)NULL主表ID
create_byvarchar(50)NULL创建人
create_timedatetime(0)NULL创建日期
update_byvarchar(50)NULL更新人
update_timedatetime(0)NULL更新日期
sys_org_codevarchar(64)NULL所属部门

6:insurance(insurance)

字段名类型默认值列注释
idint(11)NULL车保险表id
licensevarchar(50)NULL车牌号码
insura_namevarchar(50)NULL保险公司
insurance_policyvarchar(50)NULL商业险保单号
strong_date_begindatetime(0)NULL交强险开始日期
strong_date_enddatetime(0)NULL交强险结束日期
insurance_date_begindatetime(0)NULL商业险开始日期
insurance_date_enddatetime(0)NULL商业险结束日期
strong_policyvarchar(50)NULL交强险保单号
create_timedatetime(0)NULL创建时间
update_timedatetime(0)NULL更新时间
create_byvarchar(32)NULL创建人
update_byvarchar(32)NULL更新人
backup1varchar(50)NULL
backup2varchar(50)NULL
backup3varchar(50)NULL
backup4varchar(50)NULL
backup5varchar(50)NULL

7:inventory(inventory)

字段名类型默认值列注释
idint(11)NULL库存表id
backup1varchar(50)NULL计划id
backup2varchar(50)NULL(1:plan1表;2:plan2表···)
warehouse_idint(11)NULL仓库id
storage_location_idint(11)NULL库位id
project_novarchar(32)NULL项目编号
project_namevarchar(50)NULL项目名称暂时不用
inventory_quantityVARCHAR(255)NULL

8:jeecg_monthly_growth_analysis(jeecg_monthly_growth_analysis)

字段名类型默认值列注释
idint(11)NULL
yearvarchar(50)NULL
monthvarchar(50)NULL月份
main_incomeVARCHAR(255)NULL

9:jeecg_order_customer(jeecg_order_customer)

字段名类型默认值列注释
idvarchar(32)NULL主键
namevarchar(100)NULL客户名
sexvarchar(4)NULL性别
idcardvarchar(18)NULL身份证号码
idcard_picvarchar(500)NULL身份证扫描件
telphonevarchar(32)NULL电话1
order_idvarchar(32)NULL外键
create_byvarchar(32)NULL创建人
create_timedatetime(0)NULL创建时间
update_byvarchar(32)NULL修改人
update_timedatetime(0)NULL修改时间

10:jeecg_order_main(jeecg_order_main)

字段名类型默认值列注释
idvarchar(32)NULL主键
order_codevarchar(50)NULL订单号
ctypevarchar(500)NULL订单类型
order_datedatetime(0)NULL订单日期
order_moneyVARCHAR(255)NULL

11:jeecg_order_ticket(jeecg_order_ticket)

字段名类型默认值列注释
idvarchar(32)NULL主键
ticket_codevarchar(100)NULL航班号
tickect_datedatetime(0)NULL航班时间
order_idvarchar(32)NULL外键
create_byvarchar(32)NULL创建人
create_timedatetime(0)NULL创建时间
update_byvarchar(32)NULL修改人
update_timedatetime(0)NULL修改时间

12:jeecg_project_nature_income(jeecg_project_nature_income)

字段名类型默认值列注释
idint(11)NULL
naturevarchar(50)NULL项目性质
insurance_feeVARCHAR(255)NULL

13:material(material)

字段名类型默认值列注释
idint(11)NULL物料表id
serialvarchar(50)NULL物料编号(唯一)
namevarchar(50)NULL物料名称
ationsvarchar(50)NULL规格型号
suppliervarchar(50)NULL供应商
unitint(11)NULL单位(字典米,吨,卷,台,箱)
material_volumeVARCHAR(255)NULL

14:onl_cgform_button(onl_cgform_button)

字段名类型默认值列注释
IDvarchar(32)NULL主键ID
BUTTON_CODEvarchar(50)NULL按钮编码
BUTTON_ICONvarchar(20)NULL按钮图标
BUTTON_NAMEvarchar(50)NULL按钮名称
BUTTON_STATUSvarchar(2)NULL按钮状态
BUTTON_STYLEvarchar(20)NULL按钮样式
EXPvarchar(255)NULL表达式
CGFORM_HEAD_IDvarchar(32)NULL表单ID
OPT_TYPEvarchar(20)NULL按钮类型
ORDER_NUMint(11)NULL排序
OPT_POSITIONvarchar(3)NULL按钮位置1侧面2底部

15:onl_cgform_enhance_java(onl_cgform_enhance_java)

字段名类型默认值列注释
IDvarchar(36)NULL
BUTTON_CODEvarchar(32)NULL按钮编码
CG_JAVA_TYPEvarchar(32)NULL类型
CG_JAVA_VALUEvarchar(200)NULL数值
CGFORM_HEAD_IDvarchar(32)NULL表单ID
ACTIVE_STATUSvarchar(2)NULL生效状态
EVENTvarchar(10)NULL事件状态(end:结束,start:开始)

16:onl_cgform_enhance_js(onl_cgform_enhance_js)

字段名类型默认值列注释
IDvarchar(32)NULL主键ID
CG_JSlongtextNULLJS增强内容
CG_JS_TYPEvarchar(20)NULL类型
CONTENTvarchar(1000)NULL备注
CGFORM_HEAD_IDvarchar(32)NULL表单ID

17:sys_depart(sys_depart)

字段名类型默认值列注释
idvarchar(32)NULLID
parent_idvarchar(32)NULL父机构ID
depart_namevarchar(100)NULL机构/部门名称
depart_name_envarchar(500)NULL英文名
depart_name_abbrvarchar(500)NULL缩写
depart_orderint(11)NULL排序
descriptionvarchar(500)NULL描述
org_categoryvarchar(10)NULL机构类别1组织机构,2岗位
org_typevarchar(10)NULL机构类型1一级部门2子部门
org_codevarchar(64)NULL机构编码
mobilevarchar(32)NULL手机号
faxvarchar(32)NULL传真
addressvarchar(100)NULL地址
memovarchar(500)NULL备注
statusvarchar(1)NULL状态(1启用,0不启用)
del_flagvarchar(1)NULL删除状态(0,正常,1已删除)
create_byvarchar(32)NULL创建人
create_timedatetime(0)NULL创建日期
update_byvarchar(32)NULL更新人
update_timedatetime(0)NULL更新日期

18:sys_depart_role(sys_depart_role)

字段名类型默认值列注释
idvarchar(32)NULL
depart_idvarchar(32)NULL部门id
role_namevarchar(200)NULL部门角色名称
role_codevarchar(100)NULL部门角色编码
descriptionvarchar(255)NULL描述
create_byvarchar(32)NULL创建人
create_timedatetime(0)NULL创建时间
update_byvarchar(32)NULL更新人
update_timedatetime(0)NULL更新时间

19:sys_dict(sys_dict)

字段名类型默认值列注释
idvarchar(32)NULL
dict_namevarchar(100)NULL字典名称
dict_codevarchar(100)NULL字典编码
descriptionvarchar(255)NULL描述
del_flagint(1)NULL删除状态
create_byvarchar(32)NULL创建人
create_timedatetime(0)NULL创建时间
update_byvarchar(32)NULL更新人
update_timedatetime(0)NULL更新时间
typeint(1)NULL字典类型0为string

五、功能模块:

  1. 登录页面:输入账号,密码,验证码即可进入系统,默认账号密码为 admin 123

    登录页面

  2. 首页:首页展示一些计划,物品,仓库容积等一些直观的数据,通过echars 来动态渲染数据样式。

    首页

  3. 员工管理:管理公司中的员工,有员工的个人信息,账号密码等等,可以新增用户,修改用户,删除用户,禁用用户等操作。
    被禁用的用户无法登录此系统。

    员工管理

  4. 部门设置:管理公司中所有的部门,可以对部门进行增删改查等操作。
    然后在新建用户的同时,可以为用户分配其部门。

    部门设置

  5. 角色权限:角色授权功能
    在角色权限页面右侧的操作栏中点击授权功能后打开此页面
    通过勾选指定的菜单分配给角色,这个角色就能访问哪些页面。
    还可以通过左下方的树操作,选择合适的功能方便进行分配。
    例如:选择了父子关联,当你选择了父菜单,那么子菜单也会自动勾选
    也可以选择取消关联,效果与之相反。

    角色权限

  6. 计划列表:管理普通的计划,通过 excel 导入要执行的任务计划,表明计划类型是什么,一些基本的信息编号,项目名称等等,表示这是什么计划,什么信息,计划完成那些事情,计划完成时间是什么等。
    除了对其进行基本的增删改查功能等,还可以进行导入,导出功能,导入功能要按照固定的excel 表头格式进行导入,还可以查看当前派单信息。
    合并派单:必须选择一样的工程账号进行批量派单操作
    合并完单:同上,工程账号一致的情况下才能进行批量派单操作
    派单记录:查看派单记录。
    完单记录:查看完单记录。

    计划列表

  7. 仓库管理:可以管理仓库的信息,对仓库进行增删改查等操作。
    管理指定仓库中的库位,库位会根据入库货物所占用的面积进行相应的颜色变化,提示容积不足等情况。
    库位二维码:点击库位二维码会生成此库位的二维码图片,手机扫描就能查看到此库位上存放的货物信息。
    查看存储物料:可以查看库位上存的物料信息。

    仓库管理

  8. 数据字典:此页面管理系统中常用的数据字典,例如状态,性别等等,进行统一管理,可以对齐进行增增删改查操作。还可以导入导出。对字典进行配置等操作。

    数据字典

六、代码示例:

登录页面
    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框架,具有高度的可扩展性和稳定性,可以支持更多的业务需求和更高的并发访问量。

九、源码获取:

大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻获取联系方式👇🏻👇🏻👇🏻

链接点击直达:下载链接

Logo

前往低代码交流专区

更多推荐