基于Springboot实现商品进销存管理系统
作者主页:编程千纸鹤
作者简介:Java、前端、Pythone开发多年,做过高程,项目经理,架构师
主要内容:Java项目开发、毕业设计开发、面试技术整理、最新技术分享
项目编号:BS-XX-127
一,项目简介
本项目实现了基于springboot的进销存管理系统,主要用户开设网店的相关商品的进货、销售、库存的管理,功能比较完整,有着完备的权限管理系统,可以自行根据需要来设计角色和分配权限,权限的粒度可以做到页面级的权限控制,整个项目来讲比较优秀。主要实现的功能有如下几个模块:
- 基础管理模块:包含客户管理、供应商管理、商品管理三个子模块
- 进货管理模块:包含商品进货、退货、商品退货查询几个子查块
- 销售管理:包含商品销售、退货、销售退货查询几个子查块
- 系统管理:包含部门管理、菜单管理、权限管理、角色管理、用户管理五个子模块
- 其它管理:包含登陆日志查询、系统公告管理、图标管理等几个子模块
- 个人中心:包含个人资料管理、密码修改等相关功能
二,环境介绍
语言环境:Java: jdk1.8
数据库:Mysql: mysql5.7 / Redis缓存数据库
应用服务器:Tomcat: tomcat8.5.31
开发工具:IDEA或eclipse
后台开发技术:Springboot+Mybatis-plus+Shiro
前端开发技术:Bootstrap+Layui+Freemarker模板
三,系统展示
超级管理员登陆系统:system/123456
基础管理—客户管理
基础管理—供应商管理
基础管理—商品管理
进货管理—商品进货 也可在此实现退货
进货管理—商品退货查询
销售管理—商品销售
销售管理—销售退货查询
系统管理---部门管理
系统管理---菜单管理
系统管理---权限管理
系统管理---角色管理
系统管理---用户管理
其它管理—登陆日志
其它管理—系统公告
四,核心代码展示
package com.dev.shop.bus.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
@RequestMapping("bus")
public class BusinessController {/*** 跳转到客户管理页面* @return*/@RequestMapping("toCustomerManager")public String toCustomerManager(){return "business/customer/customerManager";}/*** 跳转到供应商管理页面* @return*/@RequestMapping("toProviderManager")public String toProviderManager(){return "business/provider/providerManager";}/*** 跳转到商品管理页面* @return*/@RequestMapping("toGoodsManager")public String toGoodsManager(){return "business/goods/goodsManager";}/*** 跳转到进货管理页面* @return*/@RequestMapping("toInportManager")public String toInportManager(){return "business/inport/inportManager";}/*** 跳转到退货管理页面* @return*/@RequestMapping("toOutportManager")public String toOutportManager(){return "business/outport/outportManager";}/*** 跳转到商品销售管理页面* @return*/@RequestMapping("toSalesManager")public String toSalesManager(){return "business/sales/salesManager";}/*** 跳转到商品销售管理页面* @return*/@RequestMapping("toSalesbackManager")public String toSalesbackManager(){return "business/salesback/salesbackManager";}}
package com.dev.shop.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.dev.shop.bus.entity.Customer;
import com.dev.shop.bus.service.ICustomerService;
import com.dev.shop.bus.vo.CustomerVo;
import com.dev.shop.sys.common.Constast;
import com.dev.shop.sys.common.DataGridView;
import com.dev.shop.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.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;@RestController
@RequestMapping("/customer")
public class CustomerController {@Autowiredprivate ICustomerService customerService;/*** 查询所有的客户* @param customerVo* @return*/@RequestMapping("loadAllCustomer")public DataGridView loadAllCustomer(CustomerVo customerVo){//1.声明一个分页page对象IPage<Customer> page = new Page(customerVo.getPage(),customerVo.getLimit());//2.声明一个queryWrapperQueryWrapper<Customer> queryWrapper = new QueryWrapper();queryWrapper.like(StringUtils.isNotBlank(customerVo.getCustomername()),"customername",customerVo.getCustomername());queryWrapper.like(StringUtils.isNotBlank(customerVo.getConnectionpersion()),"connectionpersion",customerVo.getConnectionpersion());queryWrapper.like(StringUtils.isNotBlank(customerVo.getPhone()),"phone",customerVo.getPhone());customerService.page(page,queryWrapper);return new DataGridView(page.getTotal(),page.getRecords());}/*** 添加一个客户* @param customerVo* @return*/@RequestMapping("addCustomer")public ResultObj addCustomer(CustomerVo customerVo){try {customerService.save(customerVo);return ResultObj.ADD_SUCCESS;} catch (Exception e) {e.printStackTrace();return ResultObj.ADD_ERROR;}}/*** 修改一个客户* @param customerVo* @return*/@RequestMapping("updateCustomer")public ResultObj updateCustomer(CustomerVo customerVo){try {customerService.updateById(customerVo);return ResultObj.UPDATE_SUCCESS;} catch (Exception e) {e.printStackTrace();return ResultObj.UPDATE_ERROR;}}/*** 删除一个客户* @param id 客户的ID* @return*/@RequestMapping("deleteCustomer")public ResultObj deleteCustomer(Integer id){try {customerService.removeById(id);return ResultObj.DELETE_SUCCESS;} catch (Exception e) {e.printStackTrace();return ResultObj.DELETE_ERROR;}}/*** 批量删除客户* @param customerVo 选中的客户* @return*/@RequestMapping("batchDeleteCustomer")public ResultObj batchDeleteCustomer(CustomerVo customerVo){try {Collection<Serializable> idList = new ArrayList<Serializable>();for (Integer id : customerVo.getIds()) {idList.add(id);}customerService.removeByIds(idList);return ResultObj.DELETE_SUCCESS;} catch (Exception e) {e.printStackTrace();return ResultObj.DELETE_ERROR;}}/*** 加载所有客户的下拉列表* @return*/@RequestMapping("loadAllCustomerForSelect")public DataGridView loadAllCustomerForSelect(){QueryWrapper<Customer> queryWrapper = new QueryWrapper<Customer>();queryWrapper.eq("available", Constast.AVAILABLE_TRUE);List<Customer> list = customerService.list(queryWrapper);return new DataGridView(list);}}
package com.dev.shop.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.dev.shop.bus.entity.Goods;
import com.dev.shop.bus.entity.Provider;
import com.dev.shop.bus.service.IGoodsService;
import com.dev.shop.bus.service.IProviderService;
import com.dev.shop.bus.vo.GoodsVo;
import com.dev.shop.sys.common.AppFileUtils;
import com.dev.shop.sys.common.Constast;
import com.dev.shop.sys.common.DataGridView;
import com.dev.shop.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("/goods")
public class GoodsController {@Autowiredprivate IGoodsService goodsService;@Autowiredprivate IProviderService providerService;/*** 查询商品* @param goodsVo* @return*/@RequestMapping("loadAllGoods")public DataGridView loadAllGoods(GoodsVo goodsVo){IPage<Goods> page = new Page<>(goodsVo.getPage(),goodsVo.getLimit());QueryWrapper<Goods> queryWrapper = new QueryWrapper();queryWrapper.eq(goodsVo.getProviderid()!=null&&goodsVo.getProviderid()!=0,"providerid",goodsVo.getProviderid());queryWrapper.like(StringUtils.isNotBlank(goodsVo.getGoodsname()),"goodsname",goodsVo.getGoodsname());queryWrapper.like(StringUtils.isNotBlank(goodsVo.getProductcode()),"productcode",goodsVo.getProductcode());queryWrapper.like(StringUtils.isNotBlank(goodsVo.getPromitcode()),"promitcode",goodsVo.getPromitcode());queryWrapper.like(StringUtils.isNotBlank(goodsVo.getDescription()),"description",goodsVo.getDescription());queryWrapper.like(StringUtils.isNotBlank(goodsVo.getSize()),"size",goodsVo.getSize());queryWrapper.orderByDesc("id");goodsService.page(page,queryWrapper);List<Goods> records = page.getRecords();for (Goods goods : records) {Provider provider = providerService.getById(goods.getProviderid());if (null!=provider){goods.setProvidername(provider.getProvidername());}}return new DataGridView(page.getTotal(),page.getRecords());}/*** 添加商品* @param goodsVo* @return*/@RequestMapping("addGoods")public ResultObj addGoods(GoodsVo goodsVo){try {if (goodsVo.getGoodsimg()!=null&&goodsVo.getGoodsimg().endsWith("_temp")){String newName = AppFileUtils.renameFile(goodsVo.getGoodsimg());goodsVo.setGoodsimg(newName);}goodsService.save(goodsVo);return ResultObj.ADD_SUCCESS;} catch (Exception e) {e.printStackTrace();return ResultObj.ADD_ERROR;}}/*** 修改商品* @param goodsVo* @return*/@RequestMapping("updateGoods")public ResultObj updateGoods(GoodsVo goodsVo){try {//商品图片不是默认图片if (!(goodsVo.getGoodsimg()!=null&&goodsVo.getGoodsimg().equals(Constast.DEFAULT_IMG))){if (goodsVo.getGoodsimg().endsWith("_temp")){String newName = AppFileUtils.renameFile(goodsVo.getGoodsimg());goodsVo.setGoodsimg(newName);//删除原先的图片String oldPath = goodsService.getById(goodsVo.getId()).getGoodsimg();AppFileUtils.removeFileByPath(oldPath);}}goodsService.updateById(goodsVo);return ResultObj.UPDATE_SUCCESS;} catch (Exception e) {e.printStackTrace();return ResultObj.UPDATE_ERROR;}}/*** 删除商品* @param id* @return*/@RequestMapping("deleteGoods")public ResultObj deleteGoods(Integer id,String goodsimg){try {//删除商品的图片AppFileUtils.removeFileByPath(goodsimg);goodsService.removeById(id);return ResultObj.DELETE_SUCCESS;} catch (Exception e) {e.printStackTrace();return ResultObj.DELETE_ERROR;}}/*** 加载所有可用的商品* @return*/@RequestMapping("loadAllGoodsForSelect")public DataGridView loadAllGoodsForSelect(){QueryWrapper<Goods> queryWrapper = new QueryWrapper<Goods>();queryWrapper.eq("available",Constast.AVAILABLE_TRUE);List<Goods> list = goodsService.list(queryWrapper);for (Goods goods : list) {Provider provider = providerService.getById(goods.getProviderid());if (null!=provider){goods.setProvidername(provider.getProvidername());}}return new DataGridView(list);}/*** 根据供应商ID查询商品信息* @param providerid 供应商ID* @return*/@RequestMapping("loadGoodsByProviderId")public DataGridView loadGoodsByProviderId(Integer providerid){QueryWrapper<Goods> queryWrapper = new QueryWrapper<Goods>();queryWrapper.eq("available",Constast.AVAILABLE_TRUE);queryWrapper.eq(providerid!=null,"providerid",providerid);List<Goods> list = goodsService.list(queryWrapper);for (Goods goods : list) {Provider provider = providerService.getById(goods.getProviderid());if (null!=provider){goods.setProvidername(provider.getProvidername());}}return new DataGridView(list);}}
package com.dev.shop.bus.entity;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import lombok.experimental.Accessors;import java.io.Serializable;@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("bus_customer")
@ToString
public class Customer implements Serializable {private static final long serialVersionUID=1L;@TableId(value = "id", type = IdType.AUTO)private Integer id;private String customername;private String zip;private String address;private String telephone;private String connectionpersion;private String phone;private String bank;private String account;private String email;private String fax;private Integer available;}
五,项目总结
以上展示了基于Springboot实现商品进销存管理系统的功能模块、所用技术、界面展示以及部分代码,系统整体设计的结构比较清晰,功能 也相对完整,比较适合做毕业设计或课程设计使用。
基于Springboot实现商品进销存管理系统相关推荐
- 基于springboot的药店进销存管理系统#毕业设计
开发环境 项目编号: spring280基于springboot的药店进销存管理系统#毕业设计 开发语言:Java 开发工具:IDEA /Eclipse 数据库:MYSQL5.7 应用服务:Tomca ...
- 基于springboot的药店进销存管理系统
随着市场经济的发展,市场竞争压力加大,企业要生存发展,就必须在各个方面加强管理,并要求企业有更高的信息化集成,能够对企业的整体资源进行集成管理.已意识到,企业间的竞争是综合实力的竞争,要求企业有更强的 ...
- 基于javaweb的商品进销存系统(java+vue+springboot+mybatis+mysql)
基于javaweb的商品进销存系统(java+vue+springboot+mybatis+mysql) 运行环境 Java≥8.MySQL≥5.7.Node.js≥10 开发工具 后端:eclips ...
- java毕业设计介绍 基于SSM的仓库进销存管理系统
一.源码描述 这是新款的基于B/S和Web开发的JavaWeb的SSM(Spring+SpringMVC+MyBatis)源码,包含源码数据库论文答辩ppt等,开发工具dea支持eclipse,MyS ...
- 基于javaweb的超市进销存管理系统(java+ssm+jsp+bootstrap+jquery+mysql)
基于javaweb的超市进销存管理系统(java+ssm+jsp+bootstrap+jquery+mysql) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse ...
- 基于Java毕业设计仓库进销存管理系统源码+系统+mysql+lw文档+部署软件
基于Java毕业设计仓库进销存管理系统源码+系统+mysql+lw文档+部署软件 基于Java毕业设计仓库进销存管理系统源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S架构 ...
- 基于JAVA网上书店进销存管理系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
基于JAVA网上书店进销存管理系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署 基于JAVA网上书店进销存管理系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署 本源码技术栈 ...
- 基于JAVA珠宝首饰进销存管理系统计算机毕业设计源码+系统+lw文档+部署
基于JAVA珠宝首饰进销存管理系统计算机毕业设计源码+系统+lw文档+部署 基于JAVA珠宝首饰进销存管理系统计算机毕业设计源码+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语言: ...
- php 进销存 spd,商品进销存管理系统PB
商品进销存管理系统 商品进销存管理系统数据字典 系统运行环境: 操作系统: Windows 2000 SP2 数据库系统: Oracle 8.17 for NT 开发工具: ...
- python新手案例——商品进销存管理系统(pymysql+xlwt)(一)
一.pymysql和xlwt介绍 1.pymsq 此模块的作用是让python语言能够对数据库的表进行操作,在此,我们需要简单地了解以下pymysql最基础的操作. Python3 MySQL 数据库 ...
最新文章
- mysql 垂直拆分 原因_mysql的水平拆分和垂直拆分 (转)
- 【业务知识】档案工作流程
- FreeMarker快速上手
- 浅析多个单列索引和联合索引的区别
- python数据结构算法 北京大学_北京大学公开课《数据结构与算法Python版》
- 程序员,软件测试知多少?
- Linux Basics command
- 预装Win8笔记本改重装Win7的方法
- Google数据集搜索神器上线,和搜索论文一样简单 | 还不去训练网络?
- Android:手把手教你打造可缩放移动的ImageView(下)
- CentOS6.7系统优化加强牢固脚本
- Skype for Business Server 2015-01-基础环境-准备
- UDP实现简单的超时重传
- oracle连接plsqldev
- 矩阵快速幂codevs 3332 数列
- 彻底删除IE的缓存问题
- 上楼梯(df和dp解法)
- Zemax学习笔记(11) - 变焦镜头设计实例
- 灵遁者油画作品《认真——沉默》
- MATLAB text legend title 输入减号 minus 符号的做法
热门文章
- 数学建模入门-matlab实现偏微分方程数值解
- c++ primer plus第六版复习题及答案
- Java视频教程免费分享
- 【HTML+CSS】静态网页设计期末大作业——我的家乡无锡印象
- 使用 onpropertychange 和 oninput 检测 input、textarea输入改变
- 硕思闪客精灵怎么导出flash(gif)动画,flash游戏源文件疑难问题解答(注册码)
- Conficker蠕虫病毒专杀工具集锦
- java模拟器野人岛2,生存战争野人岛2最终版
- iNodeClient 校园网客户端在linux环境下的使用方法
- 【转】D3DXLoadSkinMeshFromXof函数及.x在不同dx版本中