基于Vue+SpringBoot的校园电商物流云平台开源项目
项目编号: S 034 ,文末获取源码。 \color{red}{项目编号:S034,文末获取源码。} 项目编号:S034,文末获取源码。
目录
- 一、摘要
- 1.1 项目介绍
- 1.2 项目录屏
- 二、功能模块
- 2.1 数据中心模块
- 2.2 商品数据模块
- 2.3 快递公司模块
- 2.4 物流订单模块
- 三、系统设计
- 3.1 用例设计
- 3.2 数据库设计
- 3.2.1 商品表
- 3.2.2 快递公司表
- 3.2.3 物流订单表
- 四、系统展示
- 五、核心代码
- 5.1 查询商品
- 5.2 查询快递公司
- 5.3 查询物流订单
- 5.4 新增物流订单
- 5.5 快递收揽派签
- 六、免责说明
一、摘要
1.1 项目介绍
基于JAVA+Vue+SpringBoot+MySQL 的校园电商物流云平台,包含了商品管理模块、快递公司模块、物流订单模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,校园电商物流云平台基于角色的访问控制,给商家、物流公司、物流管理员使用,可将权限精确到按钮级别,您可以自定义角色并分配权限,系统适合设计精确的权限约束需求。
1.2 项目录屏
源码下载
二、功能模块
互联网和电子商务行业已成为各产业升级创新的“发动机”,也是大众创业的肥沃土壤。各大院校纷纷在基于互联网或电子商务平台的大学生创业教育方面进行了探索和尝试。依托电子商务专业教育体系,立足于高校市场资源,利用新型的社群移动电商平台开展电子商务创业教育创新实践,取得了较好效果。本文旨在建立一个面向校园电商创业的物流云平台,采用Vue、SpringBoot、MySQL技术,包含数据中心模块、商品档案模块、快递公司模块、物流订单管理模块,对物流配送实现云平台管理。
本文设计的面向校园电商创业的物流云平台的包括了系统数据中心模块,用来存放管理系统通用的模块,另外分别设计了商品档案模块、快递公司模块、物流订单模块这三大模块,用于存放系统的核心业务逻辑。
2.1 数据中心模块
数据中心模块包含了对面向校园电商创业的物流云平台的基础模块,比如管理谁可以登录这套系统,记录这些人登录系统做了什么,不同的人拥有不同权限的管理。
2.2 商品数据模块
商品数据模块用于对商品的数据进行管理,其中包括商品ID、商品名称、商品规格、商品图片、商品备注、归属人ID、归属人、创建人等,可以通过此模块对商品数据进行添加、编辑更新、删除、查询操作。
2.3 快递公司模块
快递公司模块是对快递公司的档案信息进行管理,快递公司是快递运输的主要参与者,快递公司字段包括公司简称、公司全名、LOGO、营业执照、地址、经营范围、备注、创建人等,管理员可以新增快递公司的数据,用户可以查询管理员发布的快递公司信息。
2.4 物流订单模块
物流订单模块是对商品数据的实例化,有了商品后,用户就可以对商品进行创建物流订单,这就产生了物流订单模块,其中包括物流单号、下单人ID、下单人、收件人、收件电话、收件地址、下单日期、订单状态、发货物流等,用户可以进行物流下单,快递公司可以操作发货,管理员可以删除物流订单。
三、系统设计
3.1 用例设计
3.2 数据库设计
3.2.1 商品表
3.2.2 快递公司表
3.2.3 物流订单表
四、系统展示
五、核心代码
5.1 查询商品
@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询商品")
public Result<IPage<Commodity>> getByPage(@ModelAttribute Commodity commodity ,@ModelAttribute PageVo page){QueryWrapper<Commodity> qw = new QueryWrapper<>();User currUser = securityUtil.getCurrUser();qw.eq("user_id",currUser.getId());if(!ZwzNullUtils.isNull(commodity.getTitle())) {qw.like("title",commodity.getTitle());}if(!ZwzNullUtils.isNull(commodity.getSpecs())) {qw.like("specs",commodity.getSpecs());}IPage<Commodity> data = iCommodityService.page(PageUtil.initMpPage(page),qw);return new ResultUtil<IPage<Commodity>>().setData(data);
}
5.2 查询快递公司
@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询快递公司")
public Result<IPage<CourierCompany>> getByPage(@ModelAttribute CourierCompany courierCompany ,@ModelAttribute PageVo page){QueryWrapper<CourierCompany> qw = new QueryWrapper<>();if(!ZwzNullUtils.isNull(courierCompany.getTitle())) {qw.like("title",courierCompany.getTitle());}if(!ZwzNullUtils.isNull(courierCompany.getCompanyName())) {qw.like("company_name",courierCompany.getCompanyName());}IPage<CourierCompany> data = iCourierCompanyService.page(PageUtil.initMpPage(page),qw);return new ResultUtil<IPage<CourierCompany>>().setData(data);
}
5.3 查询物流订单
@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询物流单")
public Result<IPage<LogisticsOrder>> getByPage(@ModelAttribute LogisticsOrder logisticsOrder ,@ModelAttribute PageVo page){QueryWrapper<LogisticsOrder> qw = new QueryWrapper<>();User currUser = securityUtil.getCurrUser();QueryWrapper<User> userQw = new QueryWrapper<>();userQw.eq("id",currUser.getId());userQw.inSql("id","SELECT user_id FROM a_user_role WHERE del_flag = 0 AND role_id = '1536606659751841799'");if(iUserService.count(userQw) < 1L) {// 判断物流QueryWrapper<User> userQw2 = new QueryWrapper<>();userQw2.eq("id",currUser.getId());userQw2.inSql("id","SELECT user_id FROM a_user_role WHERE del_flag = 0 AND role_id = '1703243045803266048'");if(iUserService.count(userQw2) > 0L) {// 物流qw.eq("company_id",currUser.getCompanyId());} else {// 商家qw.eq("user_id",currUser.getId());}}if(!ZwzNullUtils.isNull(logisticsOrder.getCollectUser())) {qw.like("collect_user",logisticsOrder.getCollectUser());}if(!ZwzNullUtils.isNull(logisticsOrder.getCollectAddress())) {qw.like("collect_address",logisticsOrder.getCollectAddress());}if(!ZwzNullUtils.isNull(logisticsOrder.getStatus())) {qw.eq("status",logisticsOrder.getStatus());}IPage<LogisticsOrder> data = iLogisticsOrderService.page(PageUtil.initMpPage(page),qw);return new ResultUtil<IPage<LogisticsOrder>>().setData(data);
}
5.4 新增物流订单
@RequestMapping(value = "/insert", method = RequestMethod.POST)
@ApiOperation(value = "新增物流单")
public Result<LogisticsOrder> insert(LogisticsOrder logisticsOrder){User currUser = securityUtil.getCurrUser();logisticsOrder.setUserId(currUser.getId());logisticsOrder.setUserName(currUser.getNickname());logisticsOrder.setDate(DateUtil.today());logisticsOrder.setStatus("待发货");logisticsOrder.setTime1("");logisticsOrder.setTime2("");logisticsOrder.setTime3("");String itemString = logisticsOrder.getItemString();List<LogisticsOrderItem> itemList = JSON.parseArray(itemString, LogisticsOrderItem.class);for (LogisticsOrderItem item : itemList) {Commodity commodity = iCommodityService.getById(item.getCommodityId());if(commodity == null) {return ResultUtil.error("商品不存在");}item.setCommodityName(commodity.getTitle() + " " + commodity.getSpecs());}iLogisticsOrderService.saveOrUpdate(logisticsOrder);for (LogisticsOrderItem item : itemList) {item.setOrderId(logisticsOrder.getId());iLogisticsOrderItemService.saveOrUpdate(item);}return new ResultUtil<LogisticsOrder>().setData(logisticsOrder);
}
5.5 快递收揽派签
@RequestMapping(value = "/changeStatus1", method = RequestMethod.POST)
@ApiOperation(value = "揽件")
public Result<Object> changeStatus1(@RequestParam String id){LogisticsOrder order = iLogisticsOrderService.getById(id);if(order == null) {return ResultUtil.error("物流单不存在");}order.setStatus("已揽件");order.setTime1(DateUtil.now());iLogisticsOrderService.saveOrUpdate(order);return ResultUtil.success();
}@RequestMapping(value = "/changeStatus2", method = RequestMethod.POST)
@ApiOperation(value = "派送")
public Result<Object> changeStatus2(@RequestParam String id){LogisticsOrder order = iLogisticsOrderService.getById(id);if(order == null) {return ResultUtil.error("物流单不存在");}order.setStatus("已派送");order.setTime2(DateUtil.now());iLogisticsOrderService.saveOrUpdate(order);return ResultUtil.success();
}@RequestMapping(value = "/changeStatus3", method = RequestMethod.POST)
@ApiOperation(value = "签收")
public Result<Object> changeStatus3(@RequestParam String id){LogisticsOrder order = iLogisticsOrderService.getById(id);if(order == null) {return ResultUtil.error("物流单不存在");}order.setStatus("已签收");order.setTime3(DateUtil.now());iLogisticsOrderService.saveOrUpdate(order);return ResultUtil.success();
}@RequestMapping(value = "/fa", method = RequestMethod.POST)
@ApiOperation(value = "发货")
public Result<Object> fa(@RequestParam String id,@RequestParam String com){LogisticsOrder order = iLogisticsOrderService.getById(id);if(order == null) {return ResultUtil.error("物流单不存在");}if(!ZwzNullUtils.isNull(com)) {CourierCompany cc = iCourierCompanyService.getById(com);if(cc == null) {return ResultUtil.error("快递公司不存在");}order.setCompanyId(cc.getId());order.setCompanyName(cc.getTitle());} else {QueryWrapper<CourierCompany> ccQw = new QueryWrapper<>();ccQw.orderByAsc("order_number");ccQw.last("limit 1");CourierCompany cc = iCourierCompanyService.getOne(ccQw);if(cc == null) {return ResultUtil.error("系统没有注册快递公司");}order.setCompanyId(cc.getId());order.setCompanyName(cc.getTitle());}order.setStatus("待揽收");iLogisticsOrderService.saveOrUpdate(order);return ResultUtil.success();
}
六、免责说明
- 本项目仅供个人学习使用,商用授权请联系博主,否则后果自负。
- 博主拥有本软件构建后的应用系统全部内容所有权及独立的知识产权,拥有最终解释权。
- 如有问题,欢迎在仓库 Issue 留言,看到后会第一时间回复,相关意见会酌情考虑,但没有一定被采纳的承诺或保证。
下载本系统代码或使用本系统的用户,必须同意以下内容,否则请勿下载!
- 出于自愿而使用/开发本软件,了解使用本软件的风险,且同意自己承担使用本软件的风险。
- 利用本软件构建的网站的任何信息内容以及导致的任何版权纠纷和法律争议及后果和博主无关,博主对此不承担任何责任。
- 在任何情况下,对于因使用或无法使用本软件而导致的任何难以合理预估的损失(包括但不仅限于商业利润损失、业务中断与业务信息丢失),博主概不承担任何责任。
- 必须了解使用本软件的风险,博主不承诺提供一对一的技术支持、使用担保,也不承担任何因本软件而产生的难以预料的问题的相关责任。
相关文章:

基于Vue+SpringBoot的校园电商物流云平台开源项目
项目编号: S 034 ,文末获取源码。 \color{red}{项目编号:S034,文末获取源码。} 项目编号:S034,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 商品数据模块2.3 快…...

庖丁解牛:NIO核心概念与机制详解 03 _ 缓冲区分配、包装和分片
文章目录 Pre概述缓冲区分配和包装 (allocate 、 wrap)缓冲区分片 (slice)缓冲区份片和数据共享只读缓冲区 (asReadOnlyBuffer)直接和间接缓冲区 (allocateDirect)内存映射文件 I/O将文件映射到内存(map) Pre 庖丁解牛࿱…...

002 OpenCV dft 傅里叶变换
目录 一、傅里叶变换 1.1 傅里叶变换概念 1.2 opencv中傅里叶变换 二、实验代码 一、环境 本文使用环境为: Windows10Python 3.9.17opencv-python 4.8.0.74 二、傅里叶变换 2.1 傅里叶变换概念 傅里叶变换(Fourier Transform)是一种…...
力扣:171. Excel 表列序号(Python3)
题目: 给你一个字符串 columnTitle ,表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。 例如: A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 ... 来源:力扣(LeetCode) …...
C++中结构体的初始化
C中结构体的初始化 结构体是一个由程序员定义的数据类型,可以容纳许多不同的数据值。在过去,面向对象编程的应用尚未普及之前,程序员通常使用这些从逻辑上连接在一起的数据组合到一个单元中。一旦结构体类型被声明并且其数据成员被标识&…...

vue3+vite+ts 发布自定义组件到npm
vue3vite 发布自定义组件到npm 初始化项目编写组件配置打包组件上传到npm测试组件库 初始化项目 // 创建项目 pnpm create vite vue-test-app --template vue-ts// 运行项目 cd vite vue-test-app pnpm install pnpm run dev编写组件 1、根目录下创建packages目录作为组件的开…...

mybatis使用xml形式配置
以这个注解形式的查询代码为例 Select("select * from emp where name like concat(%,#{name},%) and gender #{gender} and entrydate between #{begin} and #{end} order by update_time desc ")public List<Emp> list(String name, Short gender, LocalDat…...

开源简历生成器OpenResume
什么是 OpenResume ? OpenResume 是一个功能强大的开源简历生成器和简历解析器。OpenResume 的目标是为每个人提供免费的现代专业简历设计,让任何人都能充满信心地申请工作。 OpenResume 有 5 个核心特点: 特征描述1. 实时UI更新当您输入简历…...
AI变现之Gpts搞流量+赚钱
文章目录 Gpts | 搞流量 + 赚钱1.项目介绍2.项目分析3.项目实操4.变现路径Gpts | 搞流量 + 赚钱 1.项目介绍 这两天 AI 圈最火的莫过于 OpenAI 开发者大会公布的一个爆炸产品 Gpts 了,大家都知道这个肯定是一个划时代的产品,也绝对是一个风口,虽然官方还没有公布到底怎么通…...
音视频项目—基于FFmpeg和SDL的音视频播放器解析(十六)
介绍 在本系列,我打算花大篇幅讲解我的 gitee 项目音视频播放器,在这个项目,您可以学到音视频解封装,解码,SDL渲染相关的知识。您对源代码感兴趣的话,请查看基于FFmpeg和SDL的音视频播放器 如果您不理解本…...
Elasticsearch文档操作
一、Elasticsearch的CURD 1、CURD之Create PUT lqz/doc/1 {"name":"顾老二","age":30,"from": "gu","desc": "皮肤黑、武器长、性格直","tags": ["黑", "长", "直…...

聊一聊go的单元测试(goconvey、gomonkey、gomock)
文章目录 概要一、测试框架1.1、testing1.2、stretchr/testify1.3、smartystreets/goconvey1.4、cweill/gotests 二、打桩和mock2.1、打桩2.2、mock2.2.1、mockgen2.2.1、示例 三、基准测试和模糊测试3.1、基准测试3.2、模糊测试 四、总结4.1、小结4.2、其他4.3、参考资料 概要…...

Positive Technologies 利用 PT Cloud Application Firewall 保护中小型企业的网络资源
云产品按月订购,无需购买硬件资源 PT Cloud Application Firewall 是 Positive Technologies 推出的首个用于保护网络应用程序的商用云产品。Web 应用层防火墙 (web application firewall, WAF) 现在可以通过 技术合作伙伴——授权服务商和云提供商以订购方式提供1…...

深入解析序列模型:全面阐释 RNN、LSTM 与 Seq2Seq 的秘密
探索序列建模的基础知识和应用。 简介 序列建模是许多领域的一个重要问题,包括自然语言处理 (NLP)、语音识别和语音合成、时间序列预测、音乐生成和「生物信息学」。所有这些任务的共同点是它们需要坚持。接下来的事情的预测是基于历史的。例如,在“哈桑…...
vue项目本地开发构建速度优化 hard-source-webpack-plugin
1、为啥要优化本地构建速度 有些项目因为项目需求点多、功能复杂、管理混乱、引入第三方插件/样式库过多、本身项目页面较多、文件较多等等原因,会导致项目体积变大、本地构建速度明显变慢,这时就需要对项目webpack进行一些设置来提高打包效率、加快打包…...
燕之屋通过港交所聆讯:苦战IPO十余年,黄健等人提前精准套现
撰稿|行星 来源|贝多财经 11月19日,厦门燕之屋生物工程股份有限公司(下称“燕之屋”)通过港交所聆讯,并披露了聆讯后资料集(即招股书),中金公司和广发证券为其联席保荐人。 据贝多财经了解&a…...
【51单片机系列】C51基础
本文内容是关于C51语言的基础内容的,包括C51的数据类型、变量、运算符、函数以及reg52.h文件中的内容,有些与C中相同的内容没有记录在此,比如常量、某些变量、表达式、程序结构、数组等没有涉及。 文章目录 C51的数据类型1. C51中的基本数据类…...

openssl1.0.2版本Windows安装问题
之前安装过1.1版本,Windows环境下C 安装OpenSSL库 源码编译及使用(VS2019)_vs2019安装openssl_肥宝Fable的博客-CSDN博客 后来发现linux编译不过,以为是版本问题,相差太大,所以降一下版本,以免…...

【Java 进阶篇】Ajax 实现——原生JS方式
大家好,欢迎来到这篇关于原生 JavaScript 中使用 Ajax 实现的博客!在前端开发中,我们经常需要与服务器进行数据交互,而 Ajax(Asynchronous JavaScript and XML)是一种用于创建异步请求的技术,它…...

Spring Cloud Stream实践
概述 不同中间件,有各自的使用方法,代码也不一样。 可以使用Spring Cloud Stream解耦,切换中间件时,不需要修改代码。实现方式为使用绑定层,绑定层对生产者和消费者提供统一的编码方式,需要连接不同的中间…...

智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
tomcat指定使用的jdk版本
说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...