计算机毕业设计之SpringBoot物流管理系统
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机毕业设计之SpringBoot物流管理系统相关的知识,希望对你有一定的参考价值。
参考技术A Java后端:SpringBoot MyBatis-Plus Shiro mysql前端:LayUI JQuery echarts
后台登录不同的账号拥有不同的角色,每个角色有不同的菜单权限,每个账号可以拥有一个或多个角色,登录时如果账号拥有多个角色需要选择一个角色登录如果只有一个角色则默认直接登录,登录时有账号和密码的验证以及验证码的验证。登录成功根据选择的角色相应的菜单权限进入首页会显示不同的菜单选项。
首先查出当前的所有菜单栏选项,可以在不同等级菜单栏下面增加新的菜单栏选项,增加的图标引用layui内置图标,url为增加的菜单要访问的路径,新增的菜单栏默认为不选中状态,若需要则要在角色管理里面设置该菜单栏选项,菜单栏可以修改和删除。
首先查出当所有的角色。增加:增加一个新角色,角色名称和备注,增加的新角色菜单权限默认为空,若不设置菜单权限则拥有该角色的账号登录则菜单栏下无东西,角色名称设置最少为三个字符。设置角色权限:选择要给该角色的菜单权限,增加,修改,删除都通过勾中和勾去相应的菜单权限设置。编辑:可以修改该角色的信息。删除:删除该角色,若以前用户只拥有该角色,再进行登录会默认无菜单权限,多个角色则无该角色。
首先查出所有的用户,用户为员工管理里面添加的可以为用户设置角色,可以设置一个或多
个,若不设置角色则登录不拥有所有菜单权限,设置一个则登录默认为该角色菜单权限若设置多个则登录选择一个角色登录。编辑:修改用户信息。删除:删除该用户。
首先获取修改密码的用户账号,为不可修改状态。旧密码和新密码还有确认新密码都是必填选项,旧密码有判断必须为当前用户的密码,新密码和确认新密码里面的值必须为一样,所有验证通过方为修改密码成功。修改成功后回到登录页面可以进行重新登录。
网点维护页面集下级网点信息显示和添加网点的功能,一级网点可以查看全部下级网点,在添加网点的时候也可以直接添加不用审批,可以给任何下级添加下级网点,而一级以下的网点只能显示自己的下级网点,在添加网点的时候不可以直接添加网点需得到一级网点的审批才可以,而且只能添加自己的下级
员工维护显示本网点的所有员工,网点负责人只能查看本网点的员工,老板可以查看所有员工的信息,并实现员工的添加和删除,网点负责人只能操作本网点的员工,老板可以操作所有网点的员工。
车辆维护主要实现网点车辆的添加和删除,网点负责人只能操作本网点的车辆,老板(管理员)可以操作所有网点的车辆,执行删除操作时,判断该车辆的运输状态,车辆处于运输中时不可以进行操作。
选择要操作的转出网点和转入的网点(转入转出网点不能一致),并选择要操作的员工进行操作。
网点审核功能只有一级网点才可以使用,主要是对下级添加添加的网点进行审核来决定通过或者驳回,网点申请满足一级的要求即可申请通过.
审核结果页面显示的只有本网点申请下级的记录 状态分为三种(未提交,已审核,待审核)状态,已审核和待审核不可以进行修改,只有状态为未提交的才可以进行修改操作
运单报价维护添加的数据就是 :省——省,省内——省内 之间的快递报价,这个权限也只有一级才可以设置,设置好之后下级直接就可以使用。
给不同等级的网点的(录单提成、收件提成、发件提成、到件提成、派件提成、牵手提成)设置不同的提成金额,理论上是级别越高每件的提成越低。
查询小程序端添加的所有问题件,根据客户提供的单号进行查询,查看问题所在网点和属于哪种问题类型并反馈给客户,如需赔偿可按保价金额进行赔偿,赔偿金额由问题所在的网点支付。
对问题件处理过后形成记录,方便客服核对信息。
客户对快递有疑问联系客服,客服根据客户提供的单号可以查询该快递的状态,并可以联系快递当前所在网点,确认是否出了问题,出了什么问题,即使反馈给客户,并做处理。
根据客户提供的信息,添加被投诉的员工,确认是何理由,对该网点进行处罚。(自动判断该员工是否操作过该快递)
对所添加的被投诉员工形成记录,方便网点负责人和管理员查看。
此功能每个等级的网点都可以使用,目的是在发件之后客户因突发情况需要修改信息而用的。其中分为四种状态(已签收、已处理、运输中、已抢单),已签收和已处理的不可以修改,而运输中和已抢单则可以修改信息。
查询已经签收的订单,并且显示详细信息。
所有等级都可使用,可以查询物流路线信息。
只有一级才可查看总公司的财务信息。
一级可以查看各个网点的财务信息,一级以下的网点只可以查看自己网点的财务信息。
一级可以查看各个网点的订单信息,一级以下的网点只可以查看自己网点的订单信息。
源码 lun文 sql脚本 安装 讲解 指导一步到位
B站
智慧物流|Springboot+Vue+Nodejs实现智慧物流系统
作者主页:编程指南针
作者简介:Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师
主要内容: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
@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);
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;
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();
五,项目总结
智能物流系统是对PC端用户使用的,所以用户基数大,需要合理划分后台资源,且现如今生活速度等越来越快,各种反应速度和分配速度应当简白明了。图4-1为系统部署图
以上是关于计算机毕业设计之SpringBoot物流管理系统的主要内容,如果未能解决你的问题,请参考以下文章
智慧物流|Springboot+Vue+Nodejs实现智慧物流系统