仓库管理系统带万字文档基于spingboot vue的前后端分离仓库管理系统java项目java课程设计java毕业设计

文章目录

  • 仓库管理系统
    • 一、项目演示
    • 二、项目介绍
    • 三、万字项目文档
    • 四、部分功能截图
    • 五、部分代码展示
    • 六、底部获取项目源码带万字文档(9.9¥带走)

仓库管理系统

一、项目演示

仓库管理系统

二、项目介绍

基于spingboot和vue的前后端分离仓库管理系统

语言: Java 数据库:MySQL 前后端分离
前端技术 : Vue2 + ElementUl
后端技术 : SpringBoot2 + MyBatisPlus

系统角色:系统管理员、仓库管理员、员工

1.系统管理员:登录,个人中心、管理员信息管理、用户信息管理、仓库信息管理、物品分类管理、物品信息管理、操作日志

2.仓库管理员:登录、个人中心、用户信息管理、仓库信息管理、物品分类管理、物品信息管理、操作日志

3.员工:首页、个人中心、物品信息管理、操作日志

三、万字项目文档

在这里插入图片描述

在这里插入图片描述

四、部分功能截图

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

五、部分代码展示

package com.rabbiter.entity;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import java.util.Objects;import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;/*** <p>* * </p>** @author rabbiter* @since 2023-01-06*/
@ApiModel(value="Goods对象", description="")
public class Goods implements Serializable {private static final long serialVersionUID = 1L;@ApiModelProperty(value = "主键")@TableId(value = "id", type = IdType.AUTO)private Integer id;@ApiModelProperty(value = "货名")private String name;@ApiModelProperty(value = "仓库")private Integer storage;@ApiModelProperty(value = "分类")@TableField("goodsType")private Integer goodstype;@ApiModelProperty(value = "数量")private Integer count;@ApiModelProperty(value = "备注")private String remark;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getStorage() {return storage;}public void setStorage(Integer storage) {this.storage = storage;}public Integer getGoodstype() {return goodstype;}public void setGoodstype(Integer goodstype) {this.goodstype = goodstype;}public Integer getCount() {return count;}public void setCount(Integer count) {this.count = count;}public String getRemark() {return remark;}public void setRemark(String remark) {this.remark = remark;}@Overridepublic String toString() {return "Goods{" +"id=" + id +", name='" + name + '\'' +", storage=" + storage +", goodstype=" + goodstype +", count=" + count +", remark='" + remark + '\'' +'}';}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Goods goods = (Goods) o;return Objects.equals(id, goods.id) && Objects.equals(name, goods.name) && Objects.equals(storage, goods.storage) && Objects.equals(goodstype, goods.goodstype) && Objects.equals(count, goods.count) && Objects.equals(remark, goods.remark);}@Overridepublic int hashCode() {return Objects.hash(id, name, storage, goodstype, count, remark);}
}
package com.rabbiter.entity;import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import java.util.Objects;import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;/*** <p>* * </p>** @author rabbiter* @since 2023-01-03*/
@ApiModel(value="Menu对象", description="")
public class Menu implements Serializable {private static final long serialVersionUID = 1L;private Integer id;@ApiModelProperty(value = "菜单编码")@TableField("menuCode")private String menucode;@ApiModelProperty(value = "菜单名字")@TableField("menuName")private String menuname;@ApiModelProperty(value = "菜单级别")@TableField("menuLevel")private String menulevel;@ApiModelProperty(value = "菜单的父code")@TableField("menuParentCode")private String menuparentcode;@ApiModelProperty(value = "点击触发的函数")@TableField("menuClick")private String menuclick;@ApiModelProperty(value = "权限 0超级管理员,1表示管理员,2表示普通用户,可以用逗号组合使用")@TableField("menuRight")private String menuright;@TableField("menuComponent")private String menucomponent;@TableField("menuIcon")private String menuicon;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getMenucode() {return menucode;}public void setMenucode(String menucode) {this.menucode = menucode;}public String getMenuname() {return menuname;}public void setMenuname(String menuname) {this.menuname = menuname;}public String getMenulevel() {return menulevel;}public void setMenulevel(String menulevel) {this.menulevel = menulevel;}public String getMenuparentcode() {return menuparentcode;}public void setMenuparentcode(String menuparentcode) {this.menuparentcode = menuparentcode;}public String getMenuclick() {return menuclick;}public void setMenuclick(String menuclick) {this.menuclick = menuclick;}public String getMenuright() {return menuright;}public void setMenuright(String menuright) {this.menuright = menuright;}public String getMenucomponent() {return menucomponent;}public void setMenucomponent(String menucomponent) {this.menucomponent = menucomponent;}public String getMenuicon() {return menuicon;}public void setMenuicon(String menuicon) {this.menuicon = menuicon;}@Overridepublic String toString() {return "Menu{" +"id=" + id +", menucode='" + menucode + '\'' +", menuname='" + menuname + '\'' +", menulevel='" + menulevel + '\'' +", menuparentcode='" + menuparentcode + '\'' +", menuclick='" + menuclick + '\'' +", menuright='" + menuright + '\'' +", menucomponent='" + menucomponent + '\'' +", menuicon='" + menuicon + '\'' +'}';}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Menu menu = (Menu) o;return Objects.equals(id, menu.id) && Objects.equals(menucode, menu.menucode) && Objects.equals(menuname, menu.menuname) && Objects.equals(menulevel, menu.menulevel) && Objects.equals(menuparentcode, menu.menuparentcode) && Objects.equals(menuclick, menu.menuclick) && Objects.equals(menuright, menu.menuright) && Objects.equals(menucomponent, menu.menucomponent) && Objects.equals(menuicon, menu.menuicon);}@Overridepublic int hashCode() {return Objects.hash(id, menucode, menuname, menulevel, menuparentcode, menuclick, menuright, menucomponent, menuicon);}
}
package com.rabbiter.controller;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.rabbiter.common.QueryPageParam;
import com.rabbiter.common.Result;
import com.rabbiter.entity.Menu;
import com.rabbiter.entity.User;
import com.rabbiter.service.MenuService;
import com.rabbiter.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.HashMap;
import java.util.List;/*** <p>*  前端控制器:用户管理和管理员管理模块* </p>** @author rabbiter* @since 2023-01-02*/
@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@Autowiredprivate MenuService menuService;/** 查询全部用户* @author rabbiter* @date 2023/1/2 19:26*/@GetMapping("/list")public List<User> list(){return userService.list();}/** 根据账号查找用户* @author rabbiter* @date 2023/1/4 14:53*/@GetMapping("/findByNo")public Result findByNo(@RequestParam String no){List list = userService.lambdaQuery().eq(User::getNo,no).list();return list.size()>0?Result.success(list):Result.fail();}/** 新增用户* @author rabbiter* @date 2023/1/2 19:11*/@PostMapping("/save")public Result save(@RequestBody User user){return userService.save(user)?Result.success():Result.fail();}/** 更新用户* @author rabbiter* @date 2023/1/2 19:11*/@PostMapping("/update")public Result update(@RequestBody User user){return userService.updateById(user)?Result.success():Result.fail();}/** 用户登录:登录的时候一并将菜单信息也查询出来* @author rabbiter* @date 2023/1/3 14:08*/@PostMapping("/login")public Result login(@RequestBody User user){//匹配账号和密码List list = userService.lambdaQuery().eq(User::getNo,user.getNo()).eq(User::getPassword,user.getPassword()).list();if(list.size()>0){User user1 = (User)list.get(0);List<Menu> menuList = menuService.lambdaQuery().like(Menu::getMenuright,user1.getRoleId()).list();HashMap res = new HashMap();res.put("user",user1);res.put("menu",menuList);return Result.success(res);}return Result.fail();}/** 修改用户* @author rabbiter* @date 2023/1/4 15:02*/@PostMapping("/mod")public boolean mod(@RequestBody User user){return userService.updateById(user);}/** 新增或修改:存在用户则修改,否则新增用户* @author rabbiter* @date 2023/1/2 19:12*/@PostMapping("/saveOrUpdate")public Result saveOrUpdate(@RequestBody User user){return userService.saveOrUpdate(user)?Result.success():Result.fail();}/** 删除用户* @author rabbiter* @date 2023/1/2 19:15*/@GetMapping("/del")public Result delete(Integer id){return userService.removeById(id)?Result.success():Result.fail();}/** 模糊查询* @author rabbiter* @date 2023/1/2 19:36*/@PostMapping("/listP")public Result query(@RequestBody User user){LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();if(StringUtils.isNotBlank(user.getName())){wrapper.like(User::getName,user.getName());}return Result.success(userService.list(wrapper));}/** 分页查询* @author rabbiter* @date 2023/1/2 19:48*/
//    @PostMapping("/listPage")
//    public Result page(@RequestBody QueryPageParam query){
//        HashMap param = query.getParam();
//        String name = (String)param.get("name");
//
//        Page<User> page = new Page();
//        page.setCurrent(query.getPageNum());
//        page.setSize(query.getPageSize());
//
//        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
//        wrapper.like(User::getName,name);
//
//        IPage result = userService.page(page,wrapper);
//        return Result.success(result.getRecords(),result.getTotal());
//    }@PostMapping("/listPage")public List<User> listPage(@RequestBody QueryPageParam query){HashMap param = query.getParam();String name = (String)param.get("name");System.out.println("name=>"+(String)param.get("name"));Page<User> page = new Page();page.setCurrent(query.getPageNum());page.setSize(query.getPageSize());LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper();lambdaQueryWrapper.like(User::getName,name);IPage result = userService.page(page,lambdaQueryWrapper);System.out.println("total=>"+result.getTotal());return result.getRecords();}/** 查询功能:根据前端表单输入的信息或者下拉框选择查询用户,并以分页的形式返回前端* @author rabbiter* @date 2023/1/4 20:28*/@PostMapping("/listPageC1")public Result listPageC1(@RequestBody QueryPageParam query){HashMap param = query.getParam();String name = (String)param.get("name");String sex = (String)param.get("sex");String roleId = (String)param.get("roleId");Page<User> page = new Page();page.setCurrent(query.getPageNum());page.setSize(query.getPageSize());LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper();if(StringUtils.isNotBlank(name) && !"null".equals(name)){lambdaQueryWrapper.like(User::getName,name);}if(StringUtils.isNotBlank(sex)){lambdaQueryWrapper.eq(User::getSex,sex);}if(StringUtils.isNotBlank(roleId)){lambdaQueryWrapper.eq(User::getRoleId,roleId);}IPage result = userService.pageCC(page,lambdaQueryWrapper);System.out.println("total=>"+result.getTotal());return Result.success(result.getRecords(),result.getTotal());}}

六、底部获取项目源码带万字文档(9.9¥带走)

有问题,或者需要协助调试运行项目的也可以

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/38056.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华测视频RTK,AR实景导航

华测导航视频测量RTK技术,通过融合卫星导航、惯导与视频摄影测量算法,让“所见即所测”成为现实,让测量工作变得更加智能、高效。 视频测量RTK:智能测绘的新里程碑 华测RTK的性能和广泛应用,在市场中获得了用户的认可,平均每10位用户中即有6位推荐。其视频测量功能通过引入自动…

如何用GPT开发一个基于 GPT 的应用?

原文发自博客&#xff1a;GPT应用开发小记 如何开发一个基于 GPT 的应用&#xff1f;答案就在问题里&#xff0c;那就是用 GPT 来开发基于 GPT 的应用。本文以笔者的一个开源项目 myGPTReader 为例&#xff0c;分享我是如何基于 GPT 去开发这个系统的&#xff0c;这个系统的功能…

【Django】网上蛋糕项目商城-关键字搜索,商品详情功能

概念 上文中已经实现热销和新品的商品列表功能&#xff0c;本文篇幅中实现关键字搜索商品&#xff0c;将商品加入购物车&#xff0c;以及查看商品的详情信息等功能 关键字搜索实现步骤 在head.html头部页面中&#xff0c;鼠标移动至搜索图标会显示隐藏的搜索框进行输入关键信…

吉利银河L6(官方小订送的3M) 对比 威固vk70+ks15

吉利送的号称价值2000的3M效果 撕膜重贴 威固vk70ks15 之后的效果 // 忘记测反射的热量了 可以验证金属膜是反射热而不是吸热 金属膜 手机GPS还能用吗 亲测 能用 太阳能总阻隔率 3M貌似20%出头 威固前档55% 侧后挡高一点不超过60% 夏天真实太阳发热能量 即阻隔率55%到60% …

使用Visual Studio Code记笔记

因为学习需要&#xff0c;记笔记是很有必要的&#xff0c;平常发CSDN&#xff08;都让CSDN是很棒的哈&#xff09;&#xff0c;后来使用VS Code的时候发现了很多插件&#xff0c;觉得做笔记还是相对不错的&#xff0c;主要用到的还是Markdown 主要设计的插件包括&#xff1a; …

PL/SQL入门到实践

一、什么是PL/SQL PL/SQL是Procedural Language/Structured Query Language的缩写。PL/SQL是一种过程化编程语言&#xff0c;运行于服务器端的编程语言。PL/SQL是对SQL语言的扩展。PL/SQL结合了SQL语句和过程性编程语言的特性&#xff0c;可以用于编写存储过程、触发器、函数等…

Hallo:分级音频驱动视觉合成肖像动画

团队&#xff1a;百度&#xff08;王井东大佬&#xff09;&#xff0c;复旦&#xff0c;瑞士ETH&#xff0c;南大 文章目录 概要介绍相关工作整体架构流程技术名词解释层次音频驱动的视觉合成训练和推理训练实验设置讨论社会风险和缓解措施小结 概要 肖像图像动画领域&#x…

如何修改PDF文档的作者名称?

要修改一个 PDF 文档的作者名称&#xff0c;你可以按照以下步骤进行操作&#xff1a; 1. **使用 Adobe Acrobat**&#xff08;如果有&#xff09;&#xff1a; - Adobe Acrobat 是一个功能强大的 PDF 编辑工具&#xff0c;支持修改文档属性信息&#xff0c;包括作者名称。打开…

一个用于自动复制文本的小工具:Auto_Copy

自动复制工具 这是一个在 Windows 上用于自动复制选中文本到剪贴板的小工具。该工具还允许通过右键单击粘贴剪贴板内容。 灵感来源: 在使用Mobaxterm时,我注意到其软件中具备选中即自动复制和右键直接粘贴的功能。但是,这种选中自动复制的功能仅在软件内部有效。由于这一功能…

什么是无头浏览器?

简而言之&#xff0c;无头浏览器是没有图形用户界面 &#xff08;GUI&#xff09; 的 Web 浏览器。GUI 包括用户与之交互的数字元素&#xff0c;例如按钮、图标和窗口。但是&#xff0c;关于无头浏览器&#xff0c;您需要了解的还有很多。 在本文中&#xff0c;您将了解什么是…

Go语言环境安装 第一个Go程序

Go下载地址 哪个能用用哪个。 https://go.dev/ https://golang.google.cn/&#xff08;Golang官网的官方镜像&#xff09; Windows 使用.msi安装包安装 下载msi文件 安装 双击运行go1.22.4.windows-amd64.msi Next 勾选I accept the terms in the License Agreement&…

Webpack: 持久化缓存大幅提升构建性能

概述 缓存是一种应用非常广泛性能优化技术&#xff0c;在计算机领域几乎无处不在&#xff0c;例如&#xff1a;操作系统层面 CPU 高速缓存、磁盘缓存&#xff0c;网路世界中的 DNS 缓存、HTTP 缓存&#xff0c;以及业务应用中的数据库缓存、分布式缓存等等。 那自然而然的&am…

路径规划 | 基于蜣螂优化算法的栅格地图机器人路径规划(Matlab)

目录 效果一览基本介绍程序设计参考文献 效果一览 基本介绍 路径规划 | 基于蜣螂优化算法的栅格地图机器人路径规划&#xff08;Matlab&#xff09; 1.利用蜣螂算法DBO优化栅格地图机器人路径规划&#xff0c;效果如图所示&#xff0c;包括迭代曲线图、栅格地图等等&#xff5e…

VScode配置

1.设置鼠标悬停提示 1.1 问题描述 打开vscode&#xff0c;按住ctrl鼠标左键不能跳转定义&#xff08;右键没有go to definition&#xff09; 1.2 解决办法 打开设置界面&#xff1a;文件->首选项->设置在搜索框中搜索intelli Sense Engine &#xff08;需要先安装C/C…

【Python】已解决:ModuleNotFoundError: No module named ‘sklearn‘

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;ModuleNotFoundError: No module named ‘sklearn‘ 一、分析问题背景 在进行机器学习项目时&#xff0c;Scikit-Learn&#xff08;简称sklearn&#xff09;是一…

Linux多进程和多线程(二)-进程间通信-管道用法

进程间通信 关于多进程的通信管道无名管道(匿名管道)创建无名管道示例:创建子进程,父进程通过管道向子进程发送消息无名管道(匿名管道) 的特点 有名管道(命名管道) 创建有名管道需要调⽤ mkfifo() 函数示例:创建两个没有关联关系的进程,通过有名管道通信 注意: 缺点优点 关于判…

Linux多进程和多线程(一)-进程的概念和创建

进程 进程的概念进程的特点如下进程和程序的区别LINUX进程管理 getpid()getppid() 进程的地址空间虚拟地址和物理地址进程状态管理进程相关命令 ps toppstreekill 进程的创建 并发和并行fork() 父子进程执行不同的任务创建多个进程 进程的退出 exit()和_exit() exit()函数让当…

七日世界Once Human跳ping、延迟高、丢包怎么办?

七日世界是一款开放世界为轴点的生存射击游戏&#xff0c;玩家将进入一个荒诞、荒芜的末日世界&#xff0c;在这里与好友一起对抗可怖的怪物和神秘物质星尘的入侵&#xff0c;给这个星球留下最后的希望&#xff0c;共筑一片安全的领地。不过有部分玩家在游玩七日世界的时候&…

昇思MindSpore学习笔记7--函数式自动微分

摘要&#xff1a; 介绍了昇思MindSpore神经网络训练反向传播算法中函数式自动微分的使用方法和步骤。包括构造计算函数和神经网络、grad获得微分函数&#xff0c;以及如何处理停止渐变、获取辅助数据等内容。 一、概念要点 神经网络训练主要使用反向传播算法&#xff1a; 准备…

从AICore到TensorCore:华为910B与NVIDIA A100全面分析

华为NPU 910B与NVIDIA GPU A100性能对比&#xff0c;从AICore到TensorCore&#xff0c;展现各自计算核心优势。 AI 2.0浪潮汹涌而来&#xff0c;若仍将其与区块链等量齐观&#xff0c;视作炒作泡沫&#xff0c;则将错失新时代的巨大机遇。现在&#xff0c;就是把握AI时代的关键…