Vue+SpringBoot打造校园电商物流云平台


目录

  • 一、摘要
    • [1.1 项目介绍](#1.1 项目介绍)
    • [1.2 项目录屏](#1.2 项目录屏)
  • 二、功能模块
    • [2.1 数据中心模块](#2.1 数据中心模块)
    • [2.2 商品数据模块](#2.2 商品数据模块)
    • [2.3 快递公司模块](#2.3 快递公司模块)
    • [2.4 物流订单模块](#2.4 物流订单模块)
  • 三、系统设计
    • [3.1 用例设计](#3.1 用例设计)
    • [3.2 数据库设计](#3.2 数据库设计)
      • [3.2.1 商品表](#3.2.1 商品表)
      • [3.2.2 快递公司表](#3.2.2 快递公司表)
      • [3.2.3 物流订单表](#3.2.3 物流订单表)
  • 四、系统展示
  • 五、核心代码
    • [5.1 查询商品](#5.1 查询商品)
    • [5.2 查询快递公司](#5.2 查询快递公司)
    • [5.3 查询物流订单](#5.3 查询物流订单)
    • [5.4 新增物流订单](#5.4 新增物流订单)
    • [5.5 快递收揽派签](#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. 必须了解使用本软件的风险,博主不承诺提供一对一的技术支持、使用担保,也不承担任何因本软件而产生的难以预料的问题的相关责任。
相关推荐
ha_lydms11 分钟前
5、Spark函数_s/t
java·大数据·python·spark·数据处理·maxcompute·spark 函数
纸上的彩虹13 分钟前
半年一百个页面,重构系统也重构了我对前端工作的理解
前端·程序员·架构
be or not to be40 分钟前
深入理解 CSS 浮动布局(float)
前端·css
黄河滴滴1 小时前
java系统变卡变慢的原因是什么?从oom的角度分析
java·开发语言
侠客行03171 小时前
Mybatis二级缓存实现详解
java·mybatis·源码阅读
LYFlied1 小时前
【每日算法】LeetCode 1143. 最长公共子序列
前端·算法·leetcode·职场和发展·动态规划
老华带你飞1 小时前
农产品销售管理|基于java + vue农产品销售管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
小徐_23331 小时前
2025 前端开源三年,npm 发包卡我半天
前端·npm·github
C_心欲无痕1 小时前
vue3 - 类与样式的绑定
javascript·vue.js·vue3
Edward111111112 小时前
tomcat_servlet
java·servlet·tomcat