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


    作者主页:编程指南针

    作者简介:Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师

    主要内容: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 page = new Page(customerVo.getPage(),customerVo.getLimit());
    33. //2.声明一个queryWrapper
    34. QueryWrapper 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 idList = new ArrayList();
    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 queryWrapper = new QueryWrapper();
    112. queryWrapper.eq("available", Constast.AVAILABLE_TRUE);
    113. List 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 page = new Page<>(goodsVo.getPage(),goodsVo.getLimit());
    34. QueryWrapper 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 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 queryWrapper = new QueryWrapper();
    120. queryWrapper.eq("available",Constast.AVAILABLE_TRUE);
    121. List 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 queryWrapper = new QueryWrapper();
    138. queryWrapper.eq("available",Constast.AVAILABLE_TRUE);
    139. queryWrapper.eq(providerid!=null,"providerid",providerid);
    140. List 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实现商品进销存管理系统的功能模块、所用技术、界面展示以及部分代码,系统整体设计的结构比较清晰,功能 也相对完整,比较适合做毕业设计或课程设计使用。

  • 相关阅读:
    golang常用库包:Go依赖注入(DI)工具-wire使用
    软件测试行业能干多久?“35岁焦虑“成了多少IT人的梦魇。
    R2 MSE Linear Regression
    Unity3D 连接 SQLite 作为数据库基础功能【详细图文教程】
    SQLite 3.44.0 发布!
    ClickHouse(07)ClickHouse数据库引擎解析
    数字藏品平台常见的活动玩法
    MFC_常见的消息,宏替换分析MFC消息映射
    备战蓝桥杯之并查集刷题之删除
    猿创征文|手把手玩转docker,从入门到精通
  • 原文地址:https://blog.csdn.net/whirlwind526/article/details/126125677