当前位置: 首页 > news >正文

Java项目:109SpringBoot超市仓管系统

博主主页:Java旅途
简介:分享计算机知识、学习路线、系统源码及教程
文末获取源码

一、项目介绍

超市仓管系统基于SpringBoot+Mybatis开发,系统使用shiro框架做权限安全控制,超级管理员登录系统后可根据自己的实际需求配角色,然后新建用户选择角色即可。

超级管理员功能如下:

  • 客户管理
  • 供应商管理
  • 商品管理
  • 商品进货
  • 商品销售
  • 退货查询
  • 系统管理
    • 部门管理
    • 菜单管理
    • 用户管理
  • 公告管理
  • 系统日志

二、技术框架

  • 后端:SpringBoot,Mybatis
  • 前端:layui

三、安装教程

  1. 用idea打开项目
  2. 在idea中配置jdk环境
  3. 配置maven环境并下载依赖
  4. 新建数据库,导入数据库文件
  5. 在application.yml文件中将数据库账号密码改成自己本地的
  6. 系统的静态资源存储在F盘,如果你的电脑没有F盘,则需要改成其他盘,具体位置在file.properties和AppFileUtils.java两个文件,将文件里面的F:/upload 改成你本地的即可。
  7. 启动运行, 管理员账号密码 admin/123456

四、项目截图

image-20230711211925676

image-20230711212004916

image-20230711212017421

image-20230711212045585

五、相关代码

ProviderController

package com.yeqifu.bus.controller;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeqifu.bus.entity.Provider;
import com.yeqifu.bus.service.IProviderService;
import com.yeqifu.bus.vo.ProviderVo;
import com.yeqifu.sys.common.Constast;
import com.yeqifu.sys.common.DataGridView;
import com.yeqifu.sys.common.ResultObj;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;/***/
@RestController
@RequestMapping("/provider")
public class ProviderController {@Autowiredprivate IProviderService providerService;/*** 查询所有的供应商* @param providerVo* @return*/@RequestMapping("loadAllProvider")public DataGridView loadAllProvider(ProviderVo providerVo){//1.声明一个分页page对象IPage<Provider> page = new Page(providerVo.getPage(),providerVo.getLimit());//2.声明一个queryWrapperQueryWrapper<Provider> queryWrapper = new QueryWrapper();queryWrapper.like(StringUtils.isNotBlank(providerVo.getProvidername()),"providername",providerVo.getProvidername());queryWrapper.like(StringUtils.isNotBlank(providerVo.getConnectionperson()),"connectionperson",providerVo.getConnectionperson());queryWrapper.like(StringUtils.isNotBlank(providerVo.getPhone()),"phone",providerVo.getPhone());providerService.page(page,queryWrapper);return new DataGridView(page.getTotal(),page.getRecords());}/*** 添加一个供应商* @param providerVo* @return*/@RequestMapping("addProvider")public ResultObj addProvider(ProviderVo providerVo){try {providerService.save(providerVo);return ResultObj.ADD_SUCCESS;} catch (Exception e) {e.printStackTrace();return ResultObj.ADD_ERROR;}}/*** 修改一个供应商* @param providerVo* @return*/@RequestMapping("updateProvider")public ResultObj updateProvider(ProviderVo providerVo){try {providerService.updateById(providerVo);return ResultObj.UPDATE_SUCCESS;} catch (Exception e) {e.printStackTrace();return ResultObj.UPDATE_ERROR;}}/*** 删除一个供应商* @param id* @return*/@RequestMapping("deleteProvider")public ResultObj deleteProvider(Integer id){try {providerService.deleteProviderById(id);return ResultObj.DELETE_SUCCESS;} catch (Exception e) {e.printStackTrace();return ResultObj.DELETE_ERROR;}}/*** 加载所有可用的供应商* @return*/@RequestMapping("loadAllProviderForSelect")public DataGridView loadAllProviderForSelect(){QueryWrapper<Provider> queryWrapper = new QueryWrapper<Provider>();queryWrapper.eq("available", Constast.AVAILABLE_TRUE);List<Provider> list = providerService.list(queryWrapper);return new DataGridView(list);}}

SalesController

package com.yeqifu.bus.controller;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeqifu.bus.entity.Customer;
import com.yeqifu.bus.entity.Goods;
import com.yeqifu.bus.entity.Sales;
import com.yeqifu.bus.service.ICustomerService;
import com.yeqifu.bus.service.IGoodsService;
import com.yeqifu.bus.service.ISalesService;
import com.yeqifu.bus.vo.SalesVo;
import com.yeqifu.sys.common.DataGridView;
import com.yeqifu.sys.common.ResultObj;
import com.yeqifu.sys.common.WebUtils;
import com.yeqifu.sys.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.Date;
import java.util.List;/***/
@RestController
@RequestMapping("/sales")
public class SalesController {@Autowiredprivate ISalesService salesService;@Autowiredprivate ICustomerService customerService;@Autowiredprivate IGoodsService goodsService;/*** 查询所有商品销售信息* @param salesVo* @return*/@RequestMapping("loadAllSales")public DataGridView loadAllSales(SalesVo salesVo){IPage<Sales> page = new Page<>(salesVo.getPage(),salesVo.getLimit());QueryWrapper<Sales> queryWrapper = new QueryWrapper<Sales>();//根据客户进行模糊查询queryWrapper.eq(salesVo.getCustomerid()!=null&&salesVo.getCustomerid()!=0,"customerid",salesVo.getCustomerid());//根据商品模糊查询queryWrapper.eq(salesVo.getGoodsid()!=null&&salesVo.getGoodsid()!=0,"goodsid",salesVo.getGoodsid());//根据时间进行模糊查询queryWrapper.ge(salesVo.getStartTime()!=null,"salestime",salesVo.getStartTime());queryWrapper.le(salesVo.getEndTime()!=null,"salestime",salesVo.getEndTime());IPage<Sales> page1 = salesService.page(page, queryWrapper);List<Sales> records = page1.getRecords();for (Sales sales : records) {//设置客户姓名Customer customer = customerService.getById(sales.getCustomerid());if(null!=customer){sales.setCustomername(customer.getCustomername());}//设置商品名称Goods goods = goodsService.getById(sales.getGoodsid());if (null!=goods){//设置商品名称sales.setGoodsname(goods.getGoodsname());//设置商品规格sales.setSize(goods.getSize());}}return new DataGridView(page1.getTotal(),page1.getRecords());}/*** 添加商品销售信息* @param salesVo* @return*/@RequestMapping("addSales")public ResultObj addSales(SalesVo salesVo){try {//获得当前系统用户User user = (User) WebUtils.getSession().getAttribute("user");//设置操作人salesVo.setOperateperson(user.getName());//设置销售时间salesVo.setSalestime(new Date());QueryWrapper<Goods> wrapper = new QueryWrapper();wrapper.eq("id",salesVo.getGoodsid());Goods one = goodsService.getOne(wrapper);if(one.getNumber() < salesVo.getNumber()){return ResultObj.KUCUN_ERROR;}salesService.save(salesVo);return ResultObj.ADD_SUCCESS;}catch (Exception e) {e.printStackTrace();return ResultObj.ADD_ERROR;}}/*** 更新商品销售信息* @param salesVo* @return*/@RequestMapping("updateSales")public ResultObj updateSales(SalesVo salesVo){try {salesService.updateById(salesVo);return ResultObj.UPDATE_SUCCESS;} catch (Exception e) {e.printStackTrace();return ResultObj.UPDATE_ERROR;}}/*** 删除商品销售信息* @param id* @return*/@RequestMapping("deleteSales")public ResultObj deleteSales(Integer id){try {salesService.removeById(id);return ResultObj.DELETE_SUCCESS;} catch (Exception e) {e.printStackTrace();return ResultObj.DELETE_ERROR;}}}

大家点赞、收藏、关注、评论啦 、👇🏻点开下方卡片👇🏻关注后回复 102

相关文章:

Java项目:109SpringBoot超市仓管系统

博主主页&#xff1a;Java旅途 简介&#xff1a;分享计算机知识、学习路线、系统源码及教程 文末获取源码 一、项目介绍 超市仓管系统基于SpringBootMybatis开发&#xff0c;系统使用shiro框架做权限安全控制&#xff0c;超级管理员登录系统后可根据自己的实际需求配角色&…...

【React系列】Redux(三) state如何管理

本文来自#React系列教程&#xff1a;https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. reducer拆分 1.1. reducer代码拆分 我们来看一下目前我们的reducer&#xff1a; function reducer(state ini…...

3D 纹理的综合指南

在线工具推荐&#xff1a;3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 我们经常看到超现实主义的视频游戏和动画电影角色出现在屏幕上。他们皮肤上的…...

LLM之RAG实战(十一)| 使用Mistral-7B和Langchain搭建基于PDF文件的聊天机器人

在本文中&#xff0c;使用LangChain、HuggingFaceEmbeddings和HuggingFace的Mistral-7B LLM创建一个简单的Python程序&#xff0c;可以从任何pdf文件中回答问题。 一、LangChain简介 LangChain是一个在语言模型之上开发上下文感知应用程序的框架。LangChain使用带prompt和few-…...

VLOOKUP的使用方法

VLOOKUP是Excel中一个非常有用的函数&#xff0c;用于在一个表格或范围中查找某个值&#xff0c;并返回该值所在行或列的相应数据。 VLOOKUP函数的基本语法如下&#xff1a; VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])lookup_value&#xff1a;要查…...

数据加密、端口管控、行为审计、终端安全、整体方案解决提供商

PC端访问地址&#xff1a; https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 以下是关于这几个概念的解释&#xff1a; 数据加密&#xff1a;这是一种通过加密算法和密钥将明文转换为密文&#xff0c;以及通过解密算法和解密密钥将密文恢复为明文…...

编码器原理详解

编码器 什么是编码器 编码器可以用来将信息编码成为二进制代码&#xff0c;有点类似于取代号&#xff0c;人为的将二进制代码与对应的信息联系起来。 如下图所示&#xff1a; 假设有这三种情况会发生&#xff0c;且每次只发生一种情况 为了给这三种情况做一个区分&#xff…...

linux下docker搭建mysql8

1&#xff1a;环境信息 centos 7,mysql8 安装docker环境 2.创建mysql容器 2.1 拉取镜像 docker pull mysql:8.0.23 2.2 查询镜像拉取成功 docker images 2.3 创建挂载的目录文件 mkdir /usr/mysql8/conf mkdir /usr/mysql8/data ##给data文件赋予操作权限 chmod 777 /…...

书生·浦语大模型实战1

书生浦语大模型全链路开源体系 视频链接&#xff1a;书生浦语大模型全链路开源体系_哔哩哔哩_bilibili 大模型之所以能收到这么高的关注度&#xff0c;一个重要原因是大模型是发展通用人工智能的重要途径 深度信念网络&#xff1a; &#xff08;1&#xff09;又被称为贝叶斯网…...

前端JS加密对抗由浅入深-1

前言&#xff1a; 本文主要讲解&#xff0c;针对前端加密数据传输站点&#xff0c;如何进行动态调试以获取加密算法、秘钥&#xff0c;本次实验不涉及漏洞挖掘&#xff0c;仅为学习演示&#xff0c;环境为本地搭建环境 此次站点加密方式为AES加密方式&#xff0c;现如今越来越…...

八股文打卡day17——计算机网络(17)

面试题&#xff1a;拥塞控制是怎么实现的&#xff1f; 我的回答&#xff1a; 1.慢启动 在连接刚建立的时候&#xff0c;会缓慢调大滑动窗口的大小&#xff0c;从而加大网络传输速率&#xff0c;避免速率太快&#xff0c;造成拥塞。 2.拥塞避免 慢启动之后&#xff0c;会进入拥…...

Java-经典算法-logcat获取数据

1 需求 2 语法 3.1 示例&#xff1a;打印本次查询数据 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader;/*** 功能&#xff1a;adb logcat -b main -s PRIVA_LOG -d*/ public class Test {public …...

APache 网页优化

技能目标&#xff1a; 掌握 Apache 网页压缩 掌握 Apache 网页缓存 掌握 Apache 网页防盗链 掌握 Apache 隐藏版本信息 4.1 网页压缩与缓存 在使用 Apache 作为 Web 服务器的过程中&#xff0c;只有对 Apache 服务器进行适当的优化配 置&…...

C语言实现关键字匹配算法(复制即用)

文章目录 前言功能要求运行截图全部代码 前言 无套路&#xff0c;均已上机通过&#xff0c;求个关注求个赞&#xff0c;提供答疑解惑服务。 功能要求 一份C源代码存储在一个文本文件中&#xff0c;请统计该文件中关键字出现的频度&#xff0c;并按此频度对关键字进行排序。要…...

【大数据】安装 Zookeeper 单机版

安装 Zookeeper 单机版 下面安装 Zookeeper&#xff0c;由于它是 Apache 的一个顶级项目&#xff0c;所以域名是 zookeeper.apache.org&#xff0c;所有 Apache 的顶级项目的官网都是以项目名 .apache.org 来命名的。 点击 Download 即可下载&#xff0c;这里我们选择的版本是 …...

Django 快速整合 Swagger:实用步骤和最佳实践

Django &#xff0c;作为 Python 编写的一个优秀的开源 Web 应用框架&#xff0c;特别适用于快速开发的团队。对于很多场景来说&#xff0c;我们需要一份 API 文档&#xff0c;好处实在太多了&#xff1a; 提高开发效率&#xff1a;开发者可以基于 API 文档 快速学习和尝试 AP…...

C++ cstdio

头文件 <cstdio> 是 C 中的标准输入输出库&#xff08;C Standard Input and Output Library&#xff09;头文件&#xff0c;它提供了一系列的输入输出函数。以下是其中一些主要的函数&#xff1a; 输入函数&#xff1a; scanf: 格式化输入函数&#xff0c;用于从标准输入…...

昇腾多卡通信教程【配置网络检测对象IP】

无法通信会出现的错误如下 一、网络健康状态报错 命令原型 hccn_tool [-i %d] -netdetect -s [address %s]命令功能 本功能支持用户执行命令获取网络健康状态&#xff08;本端与所配置的检测IP之间的连通状态&#xff09;&#xff0c;用户可指定上报的状态信息名称。 状态信…...

PKI 公钥基础设施,公钥私钥,信息摘要,数字签名,数字证书

PKI 公钥基础设施 https 基于 PKI 技术。PKI&#xff08;Public Key Infrastructure&#xff0c;公钥基础设施&#xff09;是一种安全体系结构&#xff0c;用于管理数字证书和密钥对&#xff0c;以确保安全的数据传输和身份验证。PKI 采用了公钥加密技术&#xff0c;其中每个实…...

企业Aspera替代方案有哪些推荐

随着企业数据量的不断增加&#xff0c;数据传输和共享成为了一个重要的问题。Aspera是一款高性能、低延迟的数据传输工具&#xff0c;但是它并不是万能的&#xff0c;随着数据量的不断增大&#xff0c;也有一些企业需要寻找Aspera的替代方案。本文将介绍三种常用的企业Aspera替…...

vue3 vuedraggable draggable element must have an item slot

vue3vite 看官网使用这种<template #item“{ element }”> <draggablev-model"myArray"start"onStart"end"onEnd":sort"false"item-key"id"draggable".item"handle".mover" ><template…...

如何缓解BOT攻击?分享灵活准确的防御之道

BOT流量在所有互联网流量中的占比过半&#xff0c;而且存在好坏之分。其中“好”的BOT&#xff0c;比如在互联网上搜索和查找内容的BOT&#xff0c;它们是我们不可或缺的帮手。恶意的BOT进行信息数据爬取、薅羊毛等攻击行为&#xff0c;正损害着企业和用户的利益。专业数据统计…...

了解JavaScript的执行环境及作用域

一、执行环境 执行环境定义了变量或函数有权访问的其他数据&#xff0c;决定了它们的各自行为。每个执行环境都有一个与之关联的变量对象&#xff0c;环境中定义的所有变量和函数都保存在这个对象中。虽然我们无法访问这个对象&#xff0c;但是解析器在处理数据时会在后台使用它…...

嵌套调用和链式访问

嵌套调用 嵌套调用就是函数之间的互相调用&#xff0c;每个函数就是⼀个乐高零件&#xff0c;正是因为多个乐高的零件互相无缝的配合才能搭建出精美的乐高玩具&#xff0c;也正是因为函数之间有效的互相调用&#xff0c;最后写出来了相对大型的程序。 假设我们计算某年…...

DBA技术栈(二):MySQL 存储引擎

2.1 MySQL存储引擎概述 上个业余的图&#xff1a; MyISAM 存储引擎是 MySQL 默认的存储引擎&#xff0c;也是目前 MySQL 使用最为广泛的存储引擎之一。他的前身就是我们在 MySQL 发展历程中所提到的 ISAM&#xff0c;是 ISAM 的升级版本。在 MySQL最开始发行的时候是 ISAM 存…...

java发送邮件到qq邮箱

自己的授权码自己记好 引入依赖 <dependency><groupId>com.sun.mail</groupId><artifactId>javax.mail</artifactId><version>1.6.2</version> </dependency> <dependency><groupId>javax.mail</groupId>&…...

MySQL中的JSON数据类型计数及多张表COUNT的数据相加

1.使用场景&#xff1a;在MySQL中&#xff0c;JSON作为一种数据类型存储在表的列中。需计算键值对的数量。 2.方法&#xff1a;SELECT COUNT(chief>$.number) FROM t_projectapplication where id #{id};&#xff08;t_projectapplication&#xff1a;表&#xff1b;chief&…...

XDOJ78.机器人

标题 机器人 类别 综合 时间限制 1S 内存限制 256Kb 问题描述 机器人按照给定的指令在网格中移动&#xff0c;指令有以下四种&#xff1a; N 向北&#xff08;上&#xff09;移动 S 向南&#xff08;下&#xff09;移动 E 向东&#xff08;右&#xff09;移动 W 向西&…...

分布式系统架构设计之分布式事务的概述和面临的挑战

在当今大规模应用和服务的背景下&#xff0c;分布式系统的广泛应用已经成为了一种必然的主流趋势。然后&#xff0c;伴随着分布式系统的应用范围的增长&#xff0c;分布式事务处理成为了一个至关重要的关键话题。在传统的单体系统中&#xff0c;事务处理通常相对简单&#xff0…...

私有化部署你的甘特图协作工具

安装 首先去官网 https://zz-plan.com/deploy 下载对应的版本 arm是对应m1 m2 m3的mac amd是老的intel处理器 准备工作 安装mysql zz-plan需要依赖mysql 生成token 解压下载的压缩包 创建token./zz-plan -c 复制创建的token去获取授权码&#xff0c;点击获取免费授权码 …...

建设银行兴安支行网站/江苏seo哪家好

基于对话框的程序中&#xff0c;每次按下回车键时&#xff0c;程序都退出。去掉按钮的 BS_DEFPUSHBUTTON 属性并重写OnOK函数也没用。那么如何定制回车键的行为呢&#xff1f;这个问题很easy&#xff0c;但是要说明白&#xff0c;却要费点时间。 这个问题在Windows的开发中由…...

国外云服务器哪个好/深圳seo优化推广公司

【前言】树的遍历&#xff0c;根据访问自身和其子节点之间的顺序关系&#xff0c;分为前序&#xff0c;后序遍历。对于二叉树&#xff0c;每个节点至多有两个子节点&#xff08;特别的称为左&#xff0c;右子节点&#xff09;&#xff0c;又有中序遍历。由于树自身具有的递归性…...

建网站 企汇网/怎样做搜索引擎推广

PopupWindow就是弹出窗口的意思&#xff0c;类似windows下面的开始按钮。PopupWindow可以实现浮层效果&#xff0c;而且可以自定义显示位置&#xff0c;出现和退出时的动画.今天写了一个效果&#xff0c;希望可以帮助到大家. 下面我们来看看效果图吧&#xff1a; 1.因为我的项目…...

wordpress 图片菜单/什么软件可以找客户资源

今天看了七月在线算法课。再一次认识了LCS&#xff0c;现在整理记录&#xff1a; LCS&#xff08;Longest Common Subsequence&#xff09;最长公共子序列。 一个序列S任意删除若干个字符得到新序列T&#xff0c;那么T叫做S的子序列。 两个序列X和Y的公共子序列中&#xff0…...

合肥网站建设制作价格/端口扫描站长工具

进程创建 fork vfork 进程等待 wait方法 waitpid方法 获取子进程status wait方式获取子进程status waitpid方式获取status 进程等待 waitpid进程的阻塞方式等待 waitpid进程的非阻塞等待方式 进程替换 Shell进程替换 Shell进程替换的本质 进程替换原理 实现一个minishell 进程创…...

什么是移动网站开发/做推广网络

前言 更换ip地址麻烦 所以做个脚本吧 操作界面 脚本内容 #!/bin/bash # ****************************************************** # 作用&#xff1a;根据主机目前IP地址更换为静态IP&#xff0c;或者手动输入IP地址用于跟换(手动更换要提供网卡名哦)。 # 时间&#xff1a;2…...