• 【开源】基于SpringBoot的农村物流配送系统的设计和实现


    在这里插入图片描述



    一、摘要

    1.1 项目介绍

    基于Vue+SpringBoot+MySQL的农村物流配送系统,包含快递客户管理模块、配送位置管理模块、配送人员模块、路线规划模块、商家管理模块、商品退换模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,农村物流配送系统基于角色的访问控制,给物流管理员、配送人员使用,可将权限精确到按钮级别,您可以自定义角色并分配权限,系统适合设计精确的权限约束需求。

    项目编号: S 024 ,源码已在 B i l i b i l i 中上架,需要的朋友请自行下载。 \color{red}{项目编号:S024,源码已在 Bilibili 中上架,需要的朋友请自行下载。} 项目编号:S024,源码已在Bilibili中上架,需要的朋友请自行下载。

    https://gf.bilibili.com/item/detail/1104040029
    
    • 1

    为了帮助小白入门 Java,博主录制了本项目配套的《项目手把手启动教程》,希望能给同学们带来帮助。

    1.2 项目录屏


    二、功能模块

    2.1 系统登录、注册界面

    1、快递员注册、登录此系统。
    2、建立员工数据库,管理员工信息。

    2.2 系统功能

    2.2.1 快递信息管理:

    (1)添加客户信息:输入收货人,取件码,快递单号。
    (2)查询客户信息:输入收货人,ID。
    (3)删除客户信息:
    (4)修改客户信息;

    2.2.2 位置信息管理:

    (1)添加位置信息:输入起始地点,输入终点
    (2)删除位置信息:
    (3)修改位置信息:
    (4)定位信息:请输入地点信息

    2.2.3 配送人员分配:

    (1)添加配送人员:输入性别,输入姓名,输入年龄
    (2)删除配送人员信息:
    (3)修改配送人员信息:

    2.2.4 路线规划:

    (1)划分路线图:输入乡镇名,村名,
    (2)为每个配送人员添加自己的路线:
    (3)删除路线:
    (4)修改路线:

    2.2.5 个人中心:

    (1)员工个人信息管理:添加员工信息,输入姓名,性别,年龄;删除员工信息;查询员工信息;修改员工信息
    (2)关于系统:系统版本
    (3)退出系统:

    2.2.6 退换快递处理:

    (1)输入退换产品理由;
    (2)输入商家信息:输入商家姓名,位置信息,联系方式
    (3)输入客户信息:输入客户姓名,联系方式:
    (4)删除商家信息:
    (5)删除客户信息:
    (6)修改商家信息:
    (7)修改客户信息:

    2.2.7 客户评价:

    (1)非常满意,满意,一般,差评。


    三、系统展示

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述


    四、核心代码

    4.1 查询商家

    @RequestMapping(value = "/getByPage", method = RequestMethod.GET)
    @ApiOperation(value = "查询商家")
    public Result<IPage<Business>> getByPage(@ModelAttribute Business business ,@ModelAttribute PageVo page){
        QueryWrapper<Business> qw = new QueryWrapper<>();
        if(!ZwzNullUtils.isNull(business.getUserName())) {
            qw.like("user_name",business.getUserName());
        }
        if(!ZwzNullUtils.isNull(business.getAddress())) {
            qw.like("address",business.getAddress());
        }
        IPage<Business> data = iBusinessService.page(PageUtil.initMpPage(page),qw);
        return new ResultUtil<IPage<Business>>().setData(data);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    4.2 退换快递

    @RequestMapping(value = "/insert", method = RequestMethod.POST)
    @ApiOperation(value = "新增退换快递")
    public Result<Exchange> insert(Exchange exchange){
        Business b = iBusinessService.getById(exchange.getBusinessId());
        if(b == null) {
            return ResultUtil.error("商家不存在");
        }
        exchange.setBusinessName(b.getUserName() + "-" + b.getAddress());
        Express e = iExpressService.getById(exchange.getExpressId());
        if(e == null) {
            return ResultUtil.error("快递客户不存在");
        }
        exchange.setExpressName(e.getUserName() + "-" + e.getAddress());
        iExchangeService.saveOrUpdate(exchange);
        return new ResultUtil<Exchange>().setData(exchange);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    4.3 新增路线规划

    @RequestMapping(value = "/insert", method = RequestMethod.POST)
    @ApiOperation(value = "新增路线规划")
    public Result<Route> insert(Route route){
        Department d1 = iDepartmentService.getById(route.getTownshipId());
        if(d1 == null) {
            return ResultUtil.error("乡镇不存在");
        }
        route.setTownshipName(d1.getTitle());
        Department d2 = iDepartmentService.getById(route.getVillageId());
        if(d2 == null) {
            return ResultUtil.error("村社不存在");
        }
        route.setVillageName(d2.getTitle());
        User user = iUserService.getById(route.getDispatcherId());
        if(user == null) {
            return ResultUtil.error("配送员不存在");
        }
        route.setDispatcherName(user.getNickname());
        iRouteService.saveOrUpdate(route);
        return new ResultUtil<Route>().setData(route);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    4.4 查询乡镇村社

    @RequestMapping(value = "/getTopDepartment", method = RequestMethod.GET)
    @ApiOperation(value = "查询乡镇")
    public Result<List<Department>> getTopDepartment(){
        QueryWrapper<Department> qw = new QueryWrapper<>();
        qw.eq("parent_id",0);
        return new ResultUtil<List<Department>>().setData(iDepartmentService.list(qw));
    }
    
    @RequestMapping(value = "/getSonDepartment", method = RequestMethod.GET)
    @ApiOperation(value = "查询村社")
    public Result<List<Department>> getSonDepartment(@RequestParam String parentId){
        QueryWrapper<Department> qw = new QueryWrapper<>();
        if(!ZwzNullUtils.isNull(parentId)) {
            qw.eq("parent_id",parentId);
        } else {
            qw.ne("parent_id",0);
        }
        return new ResultUtil<List<Department>>().setData(iDepartmentService.list(qw));
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    4.5 查询配送位置

    @RequestMapping(value = "/getByPage", method = RequestMethod.GET)
    @ApiOperation(value = "查询位置")
    public Result<IPage<Position>> getByPage(@ModelAttribute Position position ,@ModelAttribute PageVo page){
        QueryWrapper<Position> qw = new QueryWrapper<>();
        if(!ZwzNullUtils.isNull(position.getTitle())) {
            qw.like("title",position.getTitle());
        }
        if(!ZwzNullUtils.isNull(position.getStartAddress())) {
            qw.like("start_address",position.getStartAddress());
        }
        if(!ZwzNullUtils.isNull(position.getEndAddress())) {
            qw.like("end_address",position.getEndAddress());
        }
        IPage<Position> data = iPositionService.page(PageUtil.initMpPage(page),qw);
        return new ResultUtil<IPage<Position>>().setData(data);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    五、免责说明

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

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

    1. 出于自愿而使用/开发本软件,了解使用本软件的风险,且同意自己承担使用本软件的风险。
    2. 利用本软件构建的网站的任何信息内容以及导致的任何版权纠纷和法律争议及后果和博主无关,博主对此不承担任何责任。
    3. 在任何情况下,对于因使用或无法使用本软件而导致的任何难以合理预估的损失(包括但不仅限于商业利润损失、业务中断与业务信息丢失),博主概不承担任何责任。
    4. 必须了解使用本软件的风险,博主不承诺提供一对一的技术支持、使用担保,也不承担任何因本软件而产生的难以预料的问题的相关责任。
  • 相关阅读:
    ROS相机内参标定详细步骤指南
    发票查验、发票识别API
    Hadoop面试题(HDFS篇)
    汇编语言访问寄存器和内存篇---02
    查询或解析solidity智能合约事件event或logs日志
    Apache 窗口闪退 端口占用 服务启动不了
    网络安全(黑客技术)—小白自学
    python脚本容器化运行
    easy-rules规则引擎最佳落地实践
    LOOK!菊风可视化回溯解决方案,快速上线全面保障业务合规
  • 原文地址:https://blog.csdn.net/customer08/article/details/134070241