• 基于Vue+SpringBoot的校园电商物流云平台开源项目


    在这里插入图片描述
    项目编号: S 034 ,文末获取源码。 \color{red}{项目编号:S034,文末获取源码。} 项目编号:S034,文末获取源码。



    一、摘要

    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);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    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);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    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);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    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);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    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();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68

    六、免责说明

    • 本项目仅供个人学习使用,商用授权请联系博主,否则后果自负。
    • 博主拥有本软件构建后的应用系统全部内容所有权及独立的知识产权,拥有最终解释权。
    • 如有问题,欢迎在仓库 Issue 留言,看到后会第一时间回复,相关意见会酌情考虑,但没有一定被采纳的承诺或保证。

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

    1. 出于自愿而使用/开发本软件,了解使用本软件的风险,且同意自己承担使用本软件的风险。
    2. 利用本软件构建的网站的任何信息内容以及导致的任何版权纠纷和法律争议及后果和博主无关,博主对此不承担任何责任。
    3. 在任何情况下,对于因使用或无法使用本软件而导致的任何难以合理预估的损失(包括但不仅限于商业利润损失、业务中断与业务信息丢失),博主概不承担任何责任。
    4. 必须了解使用本软件的风险,博主不承诺提供一对一的技术支持、使用担保,也不承担任何因本软件而产生的难以预料的问题的相关责任。
  • 相关阅读:
    C语言从入门到入土——操作符超详细总结
    加权循环仲裁WRR特性对NVME SSD性能有什么影响?
    springboot基于JAVA的电影推荐系统的开发与实现毕业设计源码112306
    接口测试--知识问答
    Ansible 常用命令50条
    资源 地理 历史
    C/C++面试高频知识点八股文
    花了一周时间,总算把mysql的加锁搞清楚了,再也不怕间隙锁和next-key了
    【python后端】- 初识Django框架
    vue 模板、组件
  • 原文地址:https://blog.csdn.net/javamyfriend/article/details/134519260