当前位置:   article > 正文

基于Springboot实现商品进销存管理系统_进销存系统spring

进销存系统spring

作者主页:编程千纸鹤

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

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

项目编号:BS-XX-127

一,项目简介

本项目实现了基于springboot的进销存管理系统,主要用户开设网店的相关商品的进货、销售、库存的管理,功能比较完整,有着完备的权限管理系统,可以自行根据需要来设计角色和分配权限,权限的粒度可以做到页面级的权限控制,整个项目来讲比较优秀。主要实现的功能有如下几个模块:

  1. 基础管理模块:包含客户管理、供应商管理、商品管理三个子模块
  2. 进货管理模块:包含商品进货、退货、商品退货查询几个子查块
  3. 销售管理:包含商品销售、退货、销售退货查询几个子查块
  4. 系统管理:包含部门管理、菜单管理、权限管理、角色管理、用户管理五个子模块
  5. 其它管理:包含登陆日志查询、系统公告管理、图标管理等几个子模块
  6. 个人中心:包含个人资料管理、密码修改等相关功能

二,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7  /  Redis缓存数据库

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

后台开发技术:Springboot+Mybatis-plus+Shiro

前端开发技术:Bootstrap+Layui+Freemarker模板

三,系统展示

超级管理员登陆系统:system/123456

基础管理—客户管理

基础管理—供应商管理

 

基础管理—商品管理

进货管理—商品进货   也可在此实现退货

进货管理—商品退货查询

销售管理—商品销售

销售管理—销售退货查询

系统管理---部门管理

系统管理---菜单管理

系统管理---权限管理

系统管理---角色管理

系统管理---用户管理

其它管理—登陆日志

其它管理—系统公告

四,核心代码展示

  1. package com.dev.shop.bus.controller;
  2. import org.springframework.stereotype.Controller;
  3. import org.springframework.web.bind.annotation.RequestMapping;
  4. @Controller
  5. @RequestMapping("bus")
  6. public class BusinessController {
  7. /**
  8. * 跳转到客户管理页面
  9. * @return
  10. */
  11. @RequestMapping("toCustomerManager")
  12. public String toCustomerManager(){
  13. return "business/customer/customerManager";
  14. }
  15. /**
  16. * 跳转到供应商管理页面
  17. * @return
  18. */
  19. @RequestMapping("toProviderManager")
  20. public String toProviderManager(){
  21. return "business/provider/providerManager";
  22. }
  23. /**
  24. * 跳转到商品管理页面
  25. * @return
  26. */
  27. @RequestMapping("toGoodsManager")
  28. public String toGoodsManager(){
  29. return "business/goods/goodsManager";
  30. }
  31. /**
  32. * 跳转到进货管理页面
  33. * @return
  34. */
  35. @RequestMapping("toInportManager")
  36. public String toInportManager(){
  37. return "business/inport/inportManager";
  38. }
  39. /**
  40. * 跳转到退货管理页面
  41. * @return
  42. */
  43. @RequestMapping("toOutportManager")
  44. public String toOutportManager(){
  45. return "business/outport/outportManager";
  46. }
  47. /**
  48. * 跳转到商品销售管理页面
  49. * @return
  50. */
  51. @RequestMapping("toSalesManager")
  52. public String toSalesManager(){
  53. return "business/sales/salesManager";
  54. }
  55. /**
  56. * 跳转到商品销售管理页面
  57. * @return
  58. */
  59. @RequestMapping("toSalesbackManager")
  60. public String toSalesbackManager(){
  61. return "business/salesback/salesbackManager";
  62. }
  63. }
  1. package com.dev.shop.bus.controller;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.baomidou.mybatisplus.core.metadata.IPage;
  4. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  5. import com.dev.shop.bus.entity.Customer;
  6. import com.dev.shop.bus.service.ICustomerService;
  7. import com.dev.shop.bus.vo.CustomerVo;
  8. import com.dev.shop.sys.common.Constast;
  9. import com.dev.shop.sys.common.DataGridView;
  10. import com.dev.shop.sys.common.ResultObj;
  11. import org.apache.commons.lang3.StringUtils;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.web.bind.annotation.RequestMapping;
  14. import org.springframework.web.bind.annotation.RestController;
  15. import java.io.Serializable;
  16. import java.util.ArrayList;
  17. import java.util.Collection;
  18. import java.util.List;
  19. @RestController
  20. @RequestMapping("/customer")
  21. public class CustomerController {
  22. @Autowired
  23. private ICustomerService customerService;
  24. /**
  25. * 查询所有的客户
  26. * @param customerVo
  27. * @return
  28. */
  29. @RequestMapping("loadAllCustomer")
  30. public DataGridView loadAllCustomer(CustomerVo customerVo){
  31. //1.声明一个分页page对象
  32. IPage<Customer> page = new Page(customerVo.getPage(),customerVo.getLimit());
  33. //2.声明一个queryWrapper
  34. QueryWrapper<Customer> queryWrapper = new QueryWrapper();
  35. queryWrapper.like(StringUtils.isNotBlank(customerVo.getCustomername()),"customername",customerVo.getCustomername());
  36. queryWrapper.like(StringUtils.isNotBlank(customerVo.getConnectionpersion()),"connectionpersion",customerVo.getConnectionpersion());
  37. queryWrapper.like(StringUtils.isNotBlank(customerVo.getPhone()),"phone",customerVo.getPhone());
  38. customerService.page(page,queryWrapper);
  39. return new DataGridView(page.getTotal(),page.getRecords());
  40. }
  41. /**
  42. * 添加一个客户
  43. * @param customerVo
  44. * @return
  45. */
  46. @RequestMapping("addCustomer")
  47. public ResultObj addCustomer(CustomerVo customerVo){
  48. try {
  49. customerService.save(customerVo);
  50. return ResultObj.ADD_SUCCESS;
  51. } catch (Exception e) {
  52. e.printStackTrace();
  53. return ResultObj.ADD_ERROR;
  54. }
  55. }
  56. /**
  57. * 修改一个客户
  58. * @param customerVo
  59. * @return
  60. */
  61. @RequestMapping("updateCustomer")
  62. public ResultObj updateCustomer(CustomerVo customerVo){
  63. try {
  64. customerService.updateById(customerVo);
  65. return ResultObj.UPDATE_SUCCESS;
  66. } catch (Exception e) {
  67. e.printStackTrace();
  68. return ResultObj.UPDATE_ERROR;
  69. }
  70. }
  71. /**
  72. * 删除一个客户
  73. * @param id 客户的ID
  74. * @return
  75. */
  76. @RequestMapping("deleteCustomer")
  77. public ResultObj deleteCustomer(Integer id){
  78. try {
  79. customerService.removeById(id);
  80. return ResultObj.DELETE_SUCCESS;
  81. } catch (Exception e) {
  82. e.printStackTrace();
  83. return ResultObj.DELETE_ERROR;
  84. }
  85. }
  86. /**
  87. * 批量删除客户
  88. * @param customerVo 选中的客户
  89. * @return
  90. */
  91. @RequestMapping("batchDeleteCustomer")
  92. public ResultObj batchDeleteCustomer(CustomerVo customerVo){
  93. try {
  94. Collection<Serializable> idList = new ArrayList<Serializable>();
  95. for (Integer id : customerVo.getIds()) {
  96. idList.add(id);
  97. }
  98. customerService.removeByIds(idList);
  99. return ResultObj.DELETE_SUCCESS;
  100. } catch (Exception e) {
  101. e.printStackTrace();
  102. return ResultObj.DELETE_ERROR;
  103. }
  104. }
  105. /**
  106. * 加载所有客户的下拉列表
  107. * @return
  108. */
  109. @RequestMapping("loadAllCustomerForSelect")
  110. public DataGridView loadAllCustomerForSelect(){
  111. QueryWrapper<Customer> queryWrapper = new QueryWrapper<Customer>();
  112. queryWrapper.eq("available", Constast.AVAILABLE_TRUE);
  113. List<Customer> list = customerService.list(queryWrapper);
  114. return new DataGridView(list);
  115. }
  116. }

  1. package com.dev.shop.bus.controller;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.baomidou.mybatisplus.core.metadata.IPage;
  4. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  5. import com.dev.shop.bus.entity.Goods;
  6. import com.dev.shop.bus.entity.Provider;
  7. import com.dev.shop.bus.service.IGoodsService;
  8. import com.dev.shop.bus.service.IProviderService;
  9. import com.dev.shop.bus.vo.GoodsVo;
  10. import com.dev.shop.sys.common.AppFileUtils;
  11. import com.dev.shop.sys.common.Constast;
  12. import com.dev.shop.sys.common.DataGridView;
  13. import com.dev.shop.sys.common.ResultObj;
  14. import org.apache.commons.lang3.StringUtils;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.web.bind.annotation.RequestMapping;
  17. import org.springframework.web.bind.annotation.RestController;
  18. import java.util.List;
  19. @RestController
  20. @RequestMapping("/goods")
  21. public class GoodsController {
  22. @Autowired
  23. private IGoodsService goodsService;
  24. @Autowired
  25. private IProviderService providerService;
  26. /**
  27. * 查询商品
  28. * @param goodsVo
  29. * @return
  30. */
  31. @RequestMapping("loadAllGoods")
  32. public DataGridView loadAllGoods(GoodsVo goodsVo){
  33. IPage<Goods> page = new Page<>(goodsVo.getPage(),goodsVo.getLimit());
  34. QueryWrapper<Goods> queryWrapper = new QueryWrapper();
  35. queryWrapper.eq(goodsVo.getProviderid()!=null&&goodsVo.getProviderid()!=0,"providerid",goodsVo.getProviderid());
  36. queryWrapper.like(StringUtils.isNotBlank(goodsVo.getGoodsname()),"goodsname",goodsVo.getGoodsname());
  37. queryWrapper.like(StringUtils.isNotBlank(goodsVo.getProductcode()),"productcode",goodsVo.getProductcode());
  38. queryWrapper.like(StringUtils.isNotBlank(goodsVo.getPromitcode()),"promitcode",goodsVo.getPromitcode());
  39. queryWrapper.like(StringUtils.isNotBlank(goodsVo.getDescription()),"description",goodsVo.getDescription());
  40. queryWrapper.like(StringUtils.isNotBlank(goodsVo.getSize()),"size",goodsVo.getSize());
  41. queryWrapper.orderByDesc("id");
  42. goodsService.page(page,queryWrapper);
  43. List<Goods> records = page.getRecords();
  44. for (Goods goods : records) {
  45. Provider provider = providerService.getById(goods.getProviderid());
  46. if (null!=provider){
  47. goods.setProvidername(provider.getProvidername());
  48. }
  49. }
  50. return new DataGridView(page.getTotal(),page.getRecords());
  51. }
  52. /**
  53. * 添加商品
  54. * @param goodsVo
  55. * @return
  56. */
  57. @RequestMapping("addGoods")
  58. public ResultObj addGoods(GoodsVo goodsVo){
  59. try {
  60. if (goodsVo.getGoodsimg()!=null&&goodsVo.getGoodsimg().endsWith("_temp")){
  61. String newName = AppFileUtils.renameFile(goodsVo.getGoodsimg());
  62. goodsVo.setGoodsimg(newName);
  63. }
  64. goodsService.save(goodsVo);
  65. return ResultObj.ADD_SUCCESS;
  66. } catch (Exception e) {
  67. e.printStackTrace();
  68. return ResultObj.ADD_ERROR;
  69. }
  70. }
  71. /**
  72. * 修改商品
  73. * @param goodsVo
  74. * @return
  75. */
  76. @RequestMapping("updateGoods")
  77. public ResultObj updateGoods(GoodsVo goodsVo){
  78. try {
  79. //商品图片不是默认图片
  80. if (!(goodsVo.getGoodsimg()!=null&&goodsVo.getGoodsimg().equals(Constast.DEFAULT_IMG))){
  81. if (goodsVo.getGoodsimg().endsWith("_temp")){
  82. String newName = AppFileUtils.renameFile(goodsVo.getGoodsimg());
  83. goodsVo.setGoodsimg(newName);
  84. //删除原先的图片
  85. String oldPath = goodsService.getById(goodsVo.getId()).getGoodsimg();
  86. AppFileUtils.removeFileByPath(oldPath);
  87. }
  88. }
  89. goodsService.updateById(goodsVo);
  90. return ResultObj.UPDATE_SUCCESS;
  91. } catch (Exception e) {
  92. e.printStackTrace();
  93. return ResultObj.UPDATE_ERROR;
  94. }
  95. }
  96. /**
  97. * 删除商品
  98. * @param id
  99. * @return
  100. */
  101. @RequestMapping("deleteGoods")
  102. public ResultObj deleteGoods(Integer id,String goodsimg){
  103. try {
  104. //删除商品的图片
  105. AppFileUtils.removeFileByPath(goodsimg);
  106. goodsService.removeById(id);
  107. return ResultObj.DELETE_SUCCESS;
  108. } catch (Exception e) {
  109. e.printStackTrace();
  110. return ResultObj.DELETE_ERROR;
  111. }
  112. }
  113. /**
  114. * 加载所有可用的商品
  115. * @return
  116. */
  117. @RequestMapping("loadAllGoodsForSelect")
  118. public DataGridView loadAllGoodsForSelect(){
  119. QueryWrapper<Goods> queryWrapper = new QueryWrapper<Goods>();
  120. queryWrapper.eq("available",Constast.AVAILABLE_TRUE);
  121. List<Goods> list = goodsService.list(queryWrapper);
  122. for (Goods goods : list) {
  123. Provider provider = providerService.getById(goods.getProviderid());
  124. if (null!=provider){
  125. goods.setProvidername(provider.getProvidername());
  126. }
  127. }
  128. return new DataGridView(list);
  129. }
  130. /**
  131. * 根据供应商ID查询商品信息
  132. * @param providerid 供应商ID
  133. * @return
  134. */
  135. @RequestMapping("loadGoodsByProviderId")
  136. public DataGridView loadGoodsByProviderId(Integer providerid){
  137. QueryWrapper<Goods> queryWrapper = new QueryWrapper<Goods>();
  138. queryWrapper.eq("available",Constast.AVAILABLE_TRUE);
  139. queryWrapper.eq(providerid!=null,"providerid",providerid);
  140. List<Goods> list = goodsService.list(queryWrapper);
  141. for (Goods goods : list) {
  142. Provider provider = providerService.getById(goods.getProviderid());
  143. if (null!=provider){
  144. goods.setProvidername(provider.getProvidername());
  145. }
  146. }
  147. return new DataGridView(list);
  148. }
  149. }

  1. package com.dev.shop.bus.entity;
  2. import com.baomidou.mybatisplus.annotation.IdType;
  3. import com.baomidou.mybatisplus.annotation.TableId;
  4. import com.baomidou.mybatisplus.annotation.TableName;
  5. import lombok.Data;
  6. import lombok.EqualsAndHashCode;
  7. import lombok.ToString;
  8. import lombok.experimental.Accessors;
  9. import java.io.Serializable;
  10. @Data
  11. @EqualsAndHashCode(callSuper = false)
  12. @Accessors(chain = true)
  13. @TableName("bus_customer")
  14. @ToString
  15. public class Customer implements Serializable {
  16. private static final long serialVersionUID=1L;
  17. @TableId(value = "id", type = IdType.AUTO)
  18. private Integer id;
  19. private String customername;
  20. private String zip;
  21. private String address;
  22. private String telephone;
  23. private String connectionpersion;
  24. private String phone;
  25. private String bank;
  26. private String account;
  27. private String email;
  28. private String fax;
  29. private Integer available;
  30. }

五,项目总结

     以上展示了基于Springboot实现商品进销存管理系统的功能模块、所用技术、界面展示以及部分代码,系统整体设计的结构比较清晰,功能 也相对完整,比较适合做毕业设计或课程设计使用。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/316935
推荐阅读
相关标签
  

闽ICP备14008679号