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

news/2024/7/10 22:06:33 标签: 开源, java, vue.js, 前端

在这里插入图片描述
项目编号: 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 查询商品

java">@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 查询快递公司

java">@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 查询物流订单

java">@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 新增物流订单

java">@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 快递收揽派签

java">@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.niftyadmin.cn/n/5230651.html

相关文章

matlab 基于卡尔曼滤波的GPS-INS的数据融合的导航

1、内容简介 略 25-可以交流、咨询、答疑 2、内容说明 基于卡尔曼滤波的GPS-INS的数据融合的导航 "基于卡尔曼滤波的GPS-INS的数据融合的导航 基于卡尔曼滤波实现GPS-INS组合导航系统" 卡尔曼滤波、GPS、INS、数据融合、导航 3、仿真分析 4、参考论文 略 …

Windows核心编程 远程线程注入

目录 线程安全 C线程 C STL线程 远程线程注入概述 相关API CreateRemoteThread LoadLibrary VirtualAllocEx FreeLibrary GetProcAddress 远程线程注入 DLL卸载 调试DLL 线程安全 变量在单线程和在多线程都不会出问题 - 线程安全 变量在多线程出问题&#xff0c…

Linux学习第46天:Linux音频驱动试验:总有那么一首歌,会让你泪流满面。

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 大叔来之一个小村庄&#xff0c;上大学以后来到了省城济南。之前高中练习英语听力买过一个随声听&#xff0c;晚上练习听力&#xff0c;怕影响同学休息还买了一个…

Nginx漏洞修复

1、漏洞 去掉在请求响应头中存在的信息 Server: nginx X-Content-Type-Options: nosniff X-Frame-Options: SAMEORIGIN X-XSS-Protection: 1;modeblock 修复方法 在Nginx的配置文件中的 server 标签内增加一下配置 server_tokens off; add_header X-Frame-Options SAMEORIGIN; …

adb连接Android手机

文章目录 一、adb连接Android手机1.USB连接调试&#xff08;方法一&#xff09;2.Wifi连接调试&#xff08;方法二&#xff09; 一、adb连接Android手机 1.USB连接调试&#xff08;方法一&#xff09; 使用usb数据线连接好电脑手机打开调试模式&#xff0c;勾选usb调试模式&a…

安卓开发学习---kotlin版---笔记(一)

Hello word 前言&#xff1a;上次学习安卓&#xff0c;学了Java开发&#xff0c;简单的搭了几个安卓界面。这次要学习Kotlin语言&#xff0c;然后开发安卓&#xff0c;趁着还年轻&#xff0c;学点新东西&#xff0c;坚持~ 未来的你会感谢现在努力的你~ 主要学习资料&#xff1a…

Portraiture2024最新Photoshop磨皮插件更新啦

Portraiture是一款由Imagenomic公司研发的Photoshop磨皮插件。该插件以其优秀的磨皮效果&#xff0c;成为了众多摄影师和化妆师使用的首选插件。Portraiture主要用于影楼、婚纱、时尚摄影等各个领域。其主要特点是能够轻松地模拟人眼的视觉感受&#xff0c;自然地修饰人像照片。…

ESP32-Web-Server编程- 实现 Web 登录网页

ESP32-Web-Server编程- 实现 Web 登录网页 概述 是时候实现更加安全的网页了。登录机制是最简单的控制网页访问权限的方法。 需求及功能解析 本节演示如何在 ESP32 上部署一个 Web 服务器&#xff0c;并建立登录页面的机制&#xff0c;用户可以实现登录、登出的功能&#x…