智慧物流|Springboot+Vue+Nodejs实现智慧物流系统

简介: 本项目存在三个角色:顾客、员工、管理员,顾客对应使用的是前台管理系统,而员工和管理员对应使用后台管理系统。前台管理系统包括首页、用户订单、用户信息、关于我们等,后台管理系统包括用户管理、货物流程管理、轨迹管理、财务管理、运营数据等

收藏点赞不迷路  关注作者有好处

文末获取源码

项目编号:BS-XX-162        

前言:

随着全球经济的快速发展,以及信息化步伐的加快,物流公司对行业信息的需求越来越大,这就促使物流信息网迅速发展,以适应物流行业的市场变化。而经济全球化进程的加快,使现代企业的专业分工和协作对现代物流提出了越来越高的要求,物流行业的人工管理早已不再适应企业发展的要求,信息化、自动化、网络化、智能化、柔性化已成为现代物流的鲜明特征。物流行业的发展,使物流的信息化日益被广大从业者和信息系统提供商所重视。 物流信息网信息的及时性、准确性完全符合国内物流企业对行业信息的要求。同时,现代企业的供应链时刻在提醒我们,物流要在激烈的竞争中占据绝对的优势,必须要求企业及时准确的掌握客户信息,同时对客户的需求做出快速的反应,在最短的时间内以最大限度挖掘和优化物流资源来满足客户需求,从而建立高效的物流经济。

一,项目简介

本项目存在三个角色:顾客、员工、管理员,顾客对应使用的是前台管理系统,而员工和管理员对应使用后台管理系统。前台管理系统包括首页、用户订单、用户信息、关于我们等,后台管理系统包括用户管理、货物流程管理、轨迹管理、财务管理、运营数据等。其主要功能模块图如图1-1所示:

image.gif编辑

图3-1功能模块图

前台管理系统

客户对象:

(1)客户可以查看个人信息,针对个人信息内容进行修改,但是不能进行删除。

(2)客户进入用户订单页面可以查看自己的所有物流订单信息,还可以在此页面进行下单操作。

(3)客户可以通过首页和关于我们了解公司的基本信息

(4)客户可以在前台页面进行登录账户以及注册账号的操作。

image.gif编辑

图3-2前台管理系统功能模块图

后台管理系统:

员工对象:

(1)员工可以对员工个人信息进行修改。

(2)员工可以进行货物流程的操作,包括:收件、发件、派件、到件、签收五种操作。

(3)员工可以查看自己的定位,员工可以看到货物运输的轨迹,还可以对运输路线进行规划。

(4)员工可以看到网点财务的数据,以及员工财务数据。

管理员对象:

(1)管理员可以对自己的个人信息进行修改操作。

(2)管理员同样可以进行货物流程的操作,包括:收件、发件、派件、到件、签收五种操作。

(3)管理员可以对该系统内所有用户的个人信息进行增加、查找、修改以及删除操作,管理员还可以给不同的用户设置不同的权限。

(4)管理员可以查看司机位置,查看货物运输的轨迹,以及规划货运运输路线。

(5)管理员可以查看财务管理的所有数据,包括:中心财务数据,网点财务数据以及员工财务数据。

(6)管理员可以看到公司的总体运营数据,以便掌握公司的经营状况,对公司的未来进行规划。

image.gif编辑

图3-3后台管理系统功能模块图

二,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

后台开发:Springboot+mybatis

前台开发:Vue+ElementUI+Nodejs

三,系统展示

6.1 登录界面原型

image.gif编辑

6.2 注册界面原型

image.gif编辑

6.3 首页界面原型

image.gif编辑

6.4 订单中心界面原型

image.gif编辑

6.5 个人信息界面原型

image.gif编辑

6.6 用户管理界面原型

image.gif编辑

6.7 货物流程管理界面原型

image.gif编辑

6.8 轨迹管理界面原型

image.gif编辑

6.9 财务界面原型

image.gif编辑

6.10 运营数据界面原型

image.gif编辑

四,核心代码展示

package com.zh.log.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.zh.log.common.Result;
import com.zh.log.entity.Goods;
import com.zh.log.mapper.GoodsMapper;
import com.zh.log.service.GoodsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
@RestController
@RequestMapping("/finForm")
public class FinFormController {
    @Autowired
    private GoodsService goodsService;
    @Autowired
    private GoodsMapper goodsMapper;
    //各网点每月营业总额
    @GetMapping("/month")
    public Result bj(){
        AtomicInteger m1 = new AtomicInteger();
        AtomicInteger m2 = new AtomicInteger();
        AtomicInteger m3 = new AtomicInteger();
        AtomicInteger m4 = new AtomicInteger();
        AtomicInteger m5 = new AtomicInteger();
        AtomicInteger m6 = new AtomicInteger();
        AtomicInteger m7 = new AtomicInteger();
        AtomicInteger m8 = new AtomicInteger();
        AtomicInteger m9 = new AtomicInteger();
        AtomicInteger m10 = new AtomicInteger();
        AtomicInteger m11 = new AtomicInteger();
        AtomicInteger m12 = new AtomicInteger();
        List<Goods> goodsList = goodsService.list();
        QueryWrapper<Goods> wrapper1 =new QueryWrapper<>();
        wrapper1.select("goodsPayway").groupBy("goodsPayway");
        List<Goods> goods1 = goodsService.list(wrapper1);
        String[] strname=new String[goods1.size()];
        int[][] price = new int[goods1.size()][12];
        for (int i=0;i<goods1.size();i++){
            strname[i]=goods1.get(i).getGoodsPayway();
        }
        Map<String, Object> map = new HashMap<>();
        goodsList.stream().forEach(item->{
            String date = item.getGoodsDate();
            String[] strNow1 =date.split("-");
            int month = Integer.parseInt(strNow1[1]);
            if(month==1){
                int i=0;
                m1.addAndGet(Integer.parseInt(item.getGoodsPrice()));
                while (true){
                    if(i>=goods1.size()){
                        break;
                    }
                    String s = item.getGoodsPayway();
                    String s1 =strname[i];
                    if (s.equals(s1)){
                        price[i][0]=price[i][0]+Integer.parseInt(item.getGoodsPrice());
                        break;
                    }
                    i++;
                }
            }
            if(month==2){
                int i=0;
                m2.addAndGet(Integer.parseInt(item.getGoodsPrice()));
                while (true){
                    if(i>=goods1.size()){
                        break;
                    }
                    if (item.getGoodsPayway().equals(strname[i])){
                        price[i][1]=price[i][1]+Integer.parseInt(item.getGoodsPrice());
                        break;
                    }
                    i++;
                }
            }
            if(month==3){
                int i=0;
                m3.addAndGet(Integer.parseInt(item.getGoodsPrice()));
                while (true){
                    if(i>=goods1.size()){
                        break;
                    }
                    if (item.getGoodsPayway().equals(strname[i])){
                        price[i][2]=price[i][2]+Integer.parseInt(item.getGoodsPrice());
                        break;
                    }
                    i++;
                }
            }
            if(month==4){
                int i=0;
                m4.addAndGet(Integer.parseInt(item.getGoodsPrice()));
                while (true){
                    if(i>=goods1.size()){
                        break;
                    }
                    if (item.getGoodsPayway().equals(strname[i])){
                        price[i][3]=price[i][3]+Integer.parseInt(item.getGoodsPrice());
                        break;
                    }
                    i++;
                }
            }
            if(month==5){
                int i=0;
                m5.addAndGet(Integer.parseInt(item.getGoodsPrice()));
                while (true){
                    if(i>=goods1.size()){
                        break;
                    }
                    if (item.getGoodsPayway().equals(strname[i])){
                        price[i][4]=price[i][4]+Integer.parseInt(item.getGoodsPrice());
                        break;
                    }
                    i++;
                }
            }
            if(month==6){
                int i=0;
                m6.addAndGet(Integer.parseInt(item.getGoodsPrice()));
                while (true){
                    if(i>=goods1.size()){
                        break;
                    }
                    if (item.getGoodsPayway().equals(strname[i])){
                        price[i][5]=price[i][5]+Integer.parseInt(item.getGoodsPrice());
                        break;
                    }
                    i++;
                }
            }
            if(month==7){
                int i=0;
                m7.addAndGet(Integer.parseInt(item.getGoodsPrice()));
                while (true){
                    if(i>=goods1.size()){
                        break;
                    }
                    if (item.getGoodsPayway().equals(strname[i])){
                        price[i][6]=price[i][6]+Integer.parseInt(item.getGoodsPrice());
                        break;
                    }
                    i++;
                }
            }
            if(month==8){
                int i=0;
                m8.addAndGet(Integer.parseInt(item.getGoodsPrice()));
                while (true){
                    if(i>=goods1.size()){
                        break;
                    }
                    if (item.getGoodsPayway().equals(strname[i])){
                        price[i][7]=price[i][7]+Integer.parseInt(item.getGoodsPrice());
                        break;
                    }
                    i++;
                }
            }
            if(month==9){
                int i=0;
                m9.addAndGet(Integer.parseInt(item.getGoodsPrice()));
                while (true){
                    if(i>=goods1.size()){
                        break;
                    }
                    if (item.getGoodsPayway().equals(strname[i])){
                        price[i][8]=price[i][8]+Integer.parseInt(item.getGoodsPrice());
                        break;
                    }
                    i++;
                }
            }
            if(month==10){
                int i=0;
                m10.addAndGet(Integer.parseInt(item.getGoodsPrice()));
                while (true){
                    if(i>=goods1.size()){
                        break;
                    }
                    if (item.getGoodsPayway().equals(strname[i])){
                        price[i][9]=price[i][9]+Integer.parseInt(item.getGoodsPrice());
                        break;
                    }
                    i++;
                }
            }
            if(month==11){
                int i=0;
                m11.addAndGet(Integer.parseInt(item.getGoodsPrice()));
                while (true){
                    if(i>=goods1.size()){
                        break;
                    }
                    if (item.getGoodsPayway().equals(strname[i])){
                        price[i][10]=price[i][10]+Integer.parseInt(item.getGoodsPrice());
                        break;
                    }
                    i++;
                }
            }
            if(month==12){
                int i=0;
                m12.addAndGet(Integer.parseInt(item.getGoodsPrice()));
                while (true){
                    if(i>=goods1.size()){
                        break;
                    }
                    if (item.getGoodsPayway().equals(strname[i])){
                        price[i][11]=price[i][11]+Integer.parseInt(item.getGoodsPrice());
                        break;
                    }
                    i++;
                }
            }
        });
        for (int i=0;i<goods1.size();i++){
            ArrayList<Object> list = new ArrayList<>();
            for (int j=0;j<12;j++){
                list.add(price[i][j]);
            }
            String payway = goods1.get(i).getGoodsPayway();
            map.put(payway,list);
        }
        return Result.success(map);
    }
}

image.gif

package com.zh.log.controller;
import com.zh.log.common.Result;
import com.zh.log.entity.Client;
import com.zh.log.entity.Role;
import com.zh.log.entity.User;
import com.zh.log.mapper.RoleMapper;
import com.zh.log.service.RoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/role")
public class RoleController {
    @Resource
    private RoleMapper roleMapper;
    @Resource
    private RoleService roleService;
    //修改
    @PostMapping
    public Integer save(@RequestBody Role role) {
        return roleService.savee(role);
    }
    //查询所有
    @GetMapping
    public Result index(){
        List<Role> all = roleMapper.findAll();
        return Result.success(all);
    }
    //删除
    @DeleteMapping("/{userid}")
    public Integer delete(@PathVariable Integer userid){
        return roleMapper.deleteById(userid);
    }
    //分页查询
    @GetMapping("/page")
    public Map<String, Object> findPage(@RequestParam Integer pageNum,
                                        @RequestParam Integer pageSize,
                                        @RequestParam String username
    ){
        pageNum = (pageNum - 1) * pageSize;
        username = "%" + username + "%";
        List<Role> data = roleMapper.selectPage(pageNum,pageSize,username);
        Integer total = roleMapper.selectTotal(username);
        Map<String,Object> res = new HashMap<>();
        res.put("total",total);
        res.put("data",data);
        return res;
    }
}

image.gif

package com.zh.log.controller;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.http.server.HttpServerRequest;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.zh.log.common.Constants;
import com.zh.log.common.Result;
import com.zh.log.controller.dto.UserPasswordDTO;
import com.zh.log.entity.User;
import com.zh.log.service.UserService;
import com.zh.log.utils.TokenUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import sun.security.util.Password;
import java.io.File;
import java.io.IOException;
@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;
    @PostMapping("/login")
    public Result login(@RequestBody User user) {
        String username = user.getUsername();
        String password = user.getPassword();
        if (StrUtil.isBlank(username) || StrUtil.isBlank(password)) {
           return Result.error(Constants.CODE_400,"参数错误");
        }
        User dto = userService.login(user);
         return Result.success(dto);
    }
    @GetMapping("/gettoken")
    public Result token(HttpServerRequest request){
        User user = TokenUtils.getCurrentUser();
        String role = user.getRole();
        return Result.success(role);
    }
    @PostMapping("/register")
    public Result register(@RequestBody User user) {
        String username = user.getUsername();
        String password = user.getPassword();
        if (StrUtil.isBlank(username) || StrUtil.isBlank(password)) {
            return Result.error(Constants.CODE_400, "参数错误");
        }
        return Result.success(userService.register(user));
    }
    @GetMapping("/username/{username}")
    public Result findByUsername(@PathVariable String username) {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("username", username);
        return Result.success(userService.getOne(queryWrapper));
    }
    //修改用户信息
    @PostMapping("/save")
    public Result save(@RequestBody User user) {
        return Result.success(userService.saveOrUpdate(user));
    }
    /**
     * 修改密码
     * @param userPasswordDTO
     * @return
     */
    @PostMapping("/password")
    public Result password(@RequestBody UserPasswordDTO userPasswordDTO) {
        userPasswordDTO.setPassword(SecureUtil.md5(userPasswordDTO.getPassword()));
        userPasswordDTO.setNewPassword(SecureUtil.md5(userPasswordDTO.getNewPassword()));
        userService.updatePassword(userPasswordDTO);
        return Result.success();
    }
    }

image.gif

五,项目总结

智能物流系统是对PC端用户使用的,所以用户基数大,需要合理划分后台资源,且现如今生活速度等越来越快,各种反应速度和分配速度应当简白明了。图4-1为系统部署图

image.gif编辑

图4-1 系统部署图


相关文章
|
前端开发 Java 关系型数据库
基于Java+Springboot+Vue开发的鲜花商城管理系统源码+运行
基于Java+Springboot+Vue开发的鲜花商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的鲜花商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。技术学习共同进步
916 7
|
JavaScript 前端开发 Java
制造业ERP源码,工厂ERP管理系统,前端框架:Vue,后端框架:SpringBoot
这是一套基于SpringBoot+Vue技术栈开发的ERP企业管理系统,采用Java语言与vscode工具。系统涵盖采购/销售、出入库、生产、品质管理等功能,整合客户与供应商数据,支持在线协同和业务全流程管控。同时提供主数据管理、权限控制、工作流审批、报表自定义及打印、在线报表开发和自定义表单功能,助力企业实现高效自动化管理,并通过UniAPP实现移动端支持,满足多场景应用需求。
1340 1
|
JavaScript Linux 内存技术
Debian 11系统下Node.js版本更新方法详解
本指南详细介绍在Linux系统中安装和管理Node.js的步骤。首先检查现有环境,包括查看当前版本和清除旧版本;接着通过NodeSource仓库安装最新版Node.js并验证安装结果。推荐使用nvm(Node Version Manager)进行多版本管理,便于切换和设置默认版本。同时,提供常见问题解决方法,如权限错误处理和全局模块迁移方案,以及版本回滚操作,确保用户能够灵活应对不同需求。
1743 0
|
12月前
|
前端开发 安全 Java
基于springboot+vue开发的会议预约管理系统
一个完整的会议预约管理系统,包含前端用户界面、管理后台和后端API服务。 ### 后端 - **框架**: Spring Boot 2.7.18 - **数据库**: MySQL 5.6+ - **ORM**: MyBatis Plus 3.5.3.1 - **安全**: Spring Security + JWT - **Java版本**: Java 11 ### 前端 - **框架**: Vue 3.3.4 - **UI组件**: Element Plus 2.3.8 - **构建工具**: Vite 4.4.5 - **状态管理**: Pinia 2.1.6 - **HTTP客户端
1543 4
基于springboot+vue开发的会议预约管理系统
|
JavaScript Linux 内存技术
Debian 11系统下Node.js版本更新方法
Debian 11更新Node.js主要就是这三种方式,无论你是初涉其中的新手还是找寻挑战的专家,总有一种方式能满足你的需求。现在,你已经是这个
1721 80
|
前端开发 JavaScript Java
基于springboot+vue开发的校园食堂评价系统【源码+sql+可运行】【50809】
本系统基于SpringBoot与Vue3开发,实现校园食堂评价功能。前台支持用户注册登录、食堂浏览、菜品查看及评价发布;后台提供食堂、菜品与评价管理模块,支持权限控制与数据维护。技术栈涵盖SpringBoot、MyBatisPlus、Vue3、ElementUI等,适配响应式布局,提供完整源码与数据库脚本,可直接运行部署。
654 6
基于springboot+vue开发的校园食堂评价系统【源码+sql+可运行】【50809】
|
供应链 JavaScript BI
ERP系统源码,基于SpringBoot+Vue+ElementUI+UniAPP开发
这是一款专为小微企业打造的 SaaS ERP 管理系统,基于 SpringBoot+Vue+ElementUI+UniAPP 技术栈开发,帮助企业轻松上云。系统覆盖进销存、采购、销售、生产、财务、品质、OA 办公及 CRM 等核心功能,业务流程清晰且操作简便。支持二次开发与商用,提供自定义界面、审批流配置及灵活报表设计,助力企业高效管理与数字化转型。
1020 2
ERP系统源码,基于SpringBoot+Vue+ElementUI+UniAPP开发
|
JavaScript 前端开发 数据可视化
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
1161 2
【01】Cocos游戏开发引擎从0开发一款游戏-cocos环境搭建以及配置-Cocos Creator软件系统下载安装-node环境-优雅草卓伊凡
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
781 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
JavaScript Java 测试技术
基于SpringBoot+Vue实现的留守儿童爱心网站设计与实现(计算机毕设项目实战+源码+文档)
博主是一位全网粉丝超过100万的CSDN特邀作者、博客专家,专注于Java、Python、PHP等技术领域。提供SpringBoot、Vue、HTML、Uniapp、PHP、Python、NodeJS、爬虫、数据可视化等技术服务,涵盖免费选题、功能设计、开题报告、论文辅导、答辩PPT等。系统采用SpringBoot后端框架和Vue前端框架,确保高效开发与良好用户体验。所有代码由博主亲自开发,并提供全程录音录屏讲解服务,保障学习效果。欢迎点赞、收藏、关注、评论,获取更多精品案例源码。