【开源】基于JAVA语言的校园电商物流云平台

news2024/11/17 5:39:59

在这里插入图片描述
项目编号: 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 留言,看到后会第一时间回复,相关意见会酌情考虑,但没有一定被采纳的承诺或保证。

下载本系统代码或使用本系统的用户,必须同意以下内容,否则请勿下载!

  1. 出于自愿而使用/开发本软件,了解使用本软件的风险,且同意自己承担使用本软件的风险。
  2. 利用本软件构建的网站的任何信息内容以及导致的任何版权纠纷和法律争议及后果和博主无关,博主对此不承担任何责任。
  3. 在任何情况下,对于因使用或无法使用本软件而导致的任何难以合理预估的损失(包括但不仅限于商业利润损失、业务中断与业务信息丢失),博主概不承担任何责任。
  4. 必须了解使用本软件的风险,博主不承诺提供一对一的技术支持、使用担保,也不承担任何因本软件而产生的难以预料的问题的相关责任。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1276785.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

重要通知丨 JumpServer 开源堡垒机 V2 社区版即将停止维护

尊敬的 JumpServer 开源堡垒机用户&#xff0c;您好&#xff01; 根据《关于 JumpServer 开源堡垒机 V2 版本产品生命周期的相关说明》&#xff0c;JumpServer 开源堡垒机 V2 版本&#xff08;社区版&#xff09;将于 2023 年 12 月 31 日停止维护支持。 在过去的两年多时间里…

JVM 类的加载

面试题&#xff1a; 简述 Java 类加载机制?&#xff08;百度&#xff09; JVM类加载机制 &#xff08;滴滴&#xff09; JVM中类加载机制&#xff0c;类加载过程&#xff0c;什么是双亲委派模型&#xff1f; &#xff08;腾讯&#xff09; JVM的类加…

导游服务职业技能竞赛常用赛制和流程

近年来&#xff0c;全国各地很多职校和文旅部门举办了各类导游服务职业技能竞赛&#xff0c;我公司为其中的知识竞答、评委评分提供软件和硬件支持。下面&#xff0c;用一场导游服务职业技能竞赛赛制流程来看这类竞赛的特点。 赛制安排 赛项内容由导游知识测试、景点讲解&…

11.30BST理解,AVL树操作,定义;快速幂,二分求矩阵幂(未完)

完全二叉树结点的度可能有1&#xff0c;满二叉树的度只能为0或2 BST构建 BST是左孩子都比根节点小&#xff0c;右孩子都比根节点大 二叉搜索树的插入&#xff0c;删除&#xff0c;调整 平衡树理解 任何一个平衡二叉树&#xff0c;它的中序遍历都是一样的&#xff0c;都是有…

0基础自学编程,中文编程工具下载,中文编程工具构件之扩展系统菜单构件教程

一、前言&#xff1a; 零基础自学编程&#xff0c;中文编程工具下载&#xff0c;中文编程工具构件之扩展系统菜单构件教程 编程系统化教程链接 https://jywxz.blog.csdn.net/article/details/134073098?spm1001.2014.3001.5502 给大家分享一款中文编程工具&#xff0c;零基…

三、Zookeeper数据模型

目录 1、Znode兼具文件和目录两种特点 2、Znode具有原子性操作

GPT实战系列-大模型训练和预测,如何加速、降低显存

GPT实战系列-大模型训练和预测&#xff0c;如何加速、降低显存 不做特别处理&#xff0c;深度学习默认参数精度为浮点32位精度&#xff08;FP32&#xff09;。大模型参数庞大&#xff0c;10-1000B级别&#xff0c;如果不注意优化&#xff0c;既耗费大量的显卡资源&#xff0c;…

办公软件PDF转换工具 - Bruce的PDF工具pdftool

Bruce的PDF工具 - 办公软件PDF转换工具 - pdftool&#xff0c;支持&#xff1a; 1、图片转PDF&#xff0c;支持图片自动压缩&#xff0c;可预览图片 2、合并PDF&#xff0c;支持多个PDF合并成一个PDF 3、PDF转图片&#xff0c;PDF的每页转成一张图片 4、OFD转PDF&#xff0c;O…

YOLOv8 第Y7周 水果识别

1.创建文件夹&#xff1a; YOLOv8开源地址 -- ultralytics-main文件下载链接&#xff1a;GitHub - ultralytics/ultralytics: NEW - YOLOv8 &#x1f680; in PyTorch > ONNX > OpenVINO > CoreML > TFLite 其余文件由代码生成。 数据集下载地址&#xff1a;Frui…

解决VSCode按住Ctrl(or Command) 点击鼠标左键不跳转的问题(不能Go to Definition)

问题出现 往往在升级了VSCode以后&#xff0c;就会出现按住Ctrl&#xff08;or Command&#xff09; 点击鼠标左键不跳转的问题&#xff0c;这个问题很常见。 解决办法 1 进入VScode的首选项&#xff0c;选择设置 2 输入Go to definition&#xff0c;找到如下两个设置&#…

【高效开发工具系列】Hutool Http工具类

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

医院智能导诊小程序源码 智能导诊源码

医院智能导诊系统、AI智能导诊、现有的ai模型做医院智能导诊、智能就医引导系统、人工智能挂号、医院AI全流程智能导诊系统。 智能导诊 可以根据用户症状描述精准推荐科室及医生智能学习医院历史数据及自动进行科室对照,与医院的系统连接后,患者可直接完成预约。 一、系统概述…

springboot集成邮箱验证功能

准备工作 开启SMTP服务 前往你的邮箱网站&#xff0c;以网易邮箱为例&#xff0c;打开网易邮箱地址&#xff0c;登录你的邮箱&#xff0c;进入邮箱管理后台界面。点击“设置”》》“POP3/SMTP/IMAP”后&#xff0c;点击开启SMTP服务即可。 技术实现 Spring Boot 发送邮件验证…

2022年4月19日 Go生态洞察:Go开发者调查2021结果分析

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

Hdoop学习笔记(HDP)-Part.20 安装Flume

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

抑郁症中西医治疗对比?

抑郁症是一种常见的心理障碍&#xff0c;治疗方法包括中医和西医两种。下面就抑郁症中西医治疗进行对比&#xff1a; 治疗方法&#xff1a;中医治疗抑郁症强调整体观念和辨证论治&#xff0c;通过调理身体各部分的功能&#xff0c;达到治疗抑郁症的目的。中医治疗抑郁症多采用天…

自然语言处理 (NLP) 中的组合语义分析

埃弗顿戈梅德&#xff08;Everton Gomede&#xff09; 一、介绍 自然语言处理 &#xff08;NLP&#xff09; 中的组合语义分析是一个引人入胜且复杂的话题。为了充分理解它&#xff0c;将这个概念分解成它的基本组成部分是至关重要的&#xff1a;组合语义及其在NLP中的应用。组…

xilinx系列FPGA基于VIVADO的pin delay列表生成说明

目录 1 概述2 示例平台3 操作说明4 注意事项 xilinx系列FPGA基于VIVADO的pin delay列表生成说明 1 概述 本文用于讲诉xilinx系列FPGA基于VIVADO的pin delay列表生成说明&#xff0c;以及一些注意事项&#xff0c;为FPGA设计人员探明道路。 Pin delay 即FPGA内部die到pin的延时…

mysql数据库的字符集和字符校对规则

所谓字符集就是字符的编码&#xff0c;是怎么保存的&#xff0c;例如UTF-8。 所谓字符校对规则是指按照什么规则来比较字符&#xff0c;打个简单的比方&#xff0c;比较字符A和a的时候&#xff0c;忽略大小写&#xff0c;这就是一条规则。 详情可以查询mysql官网&#xff1a;h…

停止在 TypeScript 中使用 any 类型

停止在 TypeScript 中使用 any 类型 TypeScript 是 Web 开发人员中最常用的编程语言之一。它具有出色的语言功能&#xff0c;允许我们轻松设计可扩展的应用程序。因此&#xff0c;开发人员倾向于在项目中选择 TypeScript 而不是 JavaScript。 然而&#xff0c;在使用 TypeScr…