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

news/2024/11/15 2:30:18/

作者主页:编程千纸鹤

作者简介:Java、前端、Pythone开发多年,做过高程,项目经理,架构师

主要内容:Java项目开发、毕业设计开发、面试技术整理、最新技术分享

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

文末获得源码

项目编号:BS-XX-162

前言:

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

 

一,项目简介

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

图3-1功能模块图

前台管理系统

客户对象:

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

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

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

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

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

后台管理系统:

员工对象:

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

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

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

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

管理员对象:

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

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

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

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

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

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

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

二,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

后台开发:Springboot+mybatis

前台开发:Vue+ElementUI+Nodejs

三,系统展示

6.1 登录界面原型

6.2 注册界面原型

6.3 首页界面原型

6.4 订单中心界面原型

6.5 个人信息界面原型

6.6 用户管理界面原型

6.7 货物流程管理界面原型

6.8 轨迹管理界面原型

6.9 财务界面原型

6.10 运营数据界面原型

四,核心代码展示

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 {@Autowiredprivate GoodsService goodsService;@Autowiredprivate 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);}
}
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 {@Resourceprivate RoleMapper roleMapper;@Resourceprivate RoleService roleService;//修改@PostMappingpublic Integer save(@RequestBody Role role) {return roleService.savee(role);}//查询所有@GetMappingpublic 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;}
}

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 {@Autowiredprivate 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();}}

五,项目总结

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

图4-1 系统部署图


http://www.ppmy.cn/news/4145.html

相关文章

【链表面试题】——剑指 Offer : 复杂链表(带随机指针)的复制

文章目录前言1.题目介绍2. 题目分析3. 思路讲解思路1思路24. 分析图及源码展示前言 这篇文章&#xff0c;我们一起来解决一道与链表相关的经典面试题&#xff1a;复杂链表&#xff08;带随机指针&#xff09;的复制。 1.题目介绍 我们先来一起了解一下这道题&#xff1a; 这道…

【算法】【字符串模块】添加最少字符使得当前字符变成回文字符串

目录前言问题介绍解决方案代码编写java语言版本c语言版本c语言版本思考感悟写在最后前言 当前所有算法都使用测试用例运行过&#xff0c;但是不保证100%的测试用例&#xff0c;如果存在问题务必联系批评指正~ 在此感谢左大神让我对算法有了新的感悟认识&#xff01; 问题介绍 …

Vue3+Element-ul学生管理系统(项目实战)

Vue3Element-ul学生管理系统(项目实战) 要发奋做一个可爱的人。不埋怨谁&#xff0c;不嘲笑谁&#xff0c;也不羡慕谁&#xff0c;阳光下灿烂&#xff0c;风雨中奔跑&#xff0c;做自我的梦&#xff0c;走自我的路&#xff01; 看本项目的前提自己学过Vue2Vue3Elementui组件库 …

八大排序--思路与代码

各项对比&#xff1a; 排序法平均时间最差情形稳定度额外空间备注冒泡O(n2)O(n2)稳定O(1)n小时较好选择O(n2)O(n2)不稳定O(1)n小时较好插入O(n2)O(n2)稳定O(1)大部分已排序时较好基数O(nk)稳定O(n)希尔O(nlogn)O(ns) 1<s<2不稳定O(1)s是所选分组快速O(nlogn)O(n2)不稳定…

蓝桥杯入门即劝退(十六)查找元素范围(双解法)

欢迎关注点赞评论&#xff0c;共同学习&#xff0c;共同进步&#xff01; ------持续更新蓝桥杯入门系列算法实例-------- 如果你也喜欢Java和算法&#xff0c;欢迎订阅专栏共同学习交流&#xff01; 你的点赞、关注、评论、是我创作的动力&#xff01; -------希望我的文章…

【记录】U盘安装Ubuntu20.04系统

之前电脑安装的Centos7系统&#xff0c;但是在启动过程中遇到了文件异常&#xff0c;就开不了机了&#xff0c;另外貌似Centos7已经停止维护了&#xff0c;想了下&#xff0c;果断不要数据了&#xff0c;直接重装系统吧&#xff0c;这次选用的是Ubuntu 20.04【ps: 没有选择最新…

.NET Framework杂记

这篇博客主要记录在用C#编写上位机时&#xff0c;不会的知识点&#xff0c;随时更新&#xff0c;方便查阅。 C#语法操作杂记c#中让textbox选中不选中C#无法使用实例引用来访问成员解决方法针对不同定义情况的引用解释C# 字符串分割用字符串分割用多个字符串分割用单字符分割C#中…

环形链表问题

文章目录环形链表问题1.环形链表题干思路延申问题总结2. 环形链表 II题干思路环形链表问题 环形链表就是一个链表没有结束的位置&#xff0c;链表的最后一个节点它会指向链表中的某一个节点形成一个环。 拿力扣的两到题目来看 1.环形链表 题干 给你一个链表的头节点 head …