基于Springboot商品進(jìn)銷存管理系統(tǒng)的設(shè)計與實(shí)現(xiàn)
一、項目簡介
本項目實(shí)現(xiàn)了基于springboot的進(jìn)銷存管理系統(tǒng),主要用戶開設(shè)網(wǎng)店的相關(guān)商品的進(jìn)貨、銷售、庫存的管理,功能比較完整,有著完備的權(quán)限管理系統(tǒng),可以自行根據(jù)需要來設(shè)計角色和分配權(quán)限,權(quán)限的粒度可以做到頁面級的權(quán)限控制,整個項目來講比較優(yōu)秀。主要實(shí)現(xiàn)的功能有如下幾個模塊:
基礎(chǔ)管理模塊:包含客戶管理、供應(yīng)商管理、商品管理三個子模塊
進(jìn)貨管理模塊:包含商品進(jìn)貨、退貨、商品退貨查詢幾個子查塊
銷售管理:包含商品銷售、退貨、銷售退貨查詢幾個子查塊
系統(tǒng)管理:包含部門管理、菜單管理、權(quán)限管理、角色管理、用戶管理五個子模塊
其它管理:包含登陸日志查詢、系統(tǒng)公告管理、圖標(biāo)管理等幾個子模塊
個人中心:包含個人資料管理、密碼修改等相關(guān)功能
二、環(huán)境介紹
語言環(huán)境:Java: jdk1.8
數(shù)據(jù)庫:Mysql: mysql5.7 / Redis緩存數(shù)據(jù)庫
應(yīng)用服務(wù)器:Tomcat: tomcat8.5.31
開發(fā)工具:IDEA或eclipse
后臺開發(fā)技術(shù):Springboot+Mybatis-plus+Shiro
前端開發(fā)技術(shù):Bootstrap+Layui+Freemarker模板
三、系統(tǒng)展示
超級管理員登陸系統(tǒng):system/123456

基礎(chǔ)管理—客戶管理

基礎(chǔ)管理—供應(yīng)商管理

基礎(chǔ)管理—商品管理

進(jìn)貨管理—商品進(jìn)貨 也可在此實(shí)現(xiàn)退貨

進(jìn)貨管理—商品退貨查詢

銷售管理—商品銷售

銷售管理—銷售退貨查詢

系統(tǒng)管理---部門管理

系統(tǒng)管理---菜單管理

系統(tǒng)管理---權(quán)限管理

系統(tǒng)管理---角色管理

系統(tǒng)管理---用戶管理

其它管理—登陸日志

其它管理—系統(tǒng)公告

四、核心代碼展示
package com.dev.shop.bus.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("bus")
public class BusinessController {
/**
* 跳轉(zhuǎn)到客戶管理頁面
* @return
*/
@RequestMapping("toCustomerManager")
public String toCustomerManager(){
return "business/customer/customerManager";
}
/**
* 跳轉(zhuǎn)到供應(yīng)商管理頁面
* @return
*/
@RequestMapping("toProviderManager")
public String toProviderManager(){
return "business/provider/providerManager";
}
/**
* 跳轉(zhuǎn)到商品管理頁面
* @return
*/
@RequestMapping("toGoodsManager")
public String toGoodsManager(){
return "business/goods/goodsManager";
}
/**
* 跳轉(zhuǎn)到進(jìn)貨管理頁面
* @return
*/
@RequestMapping("toInportManager")
public String toInportManager(){
return "business/inport/inportManager";
}
/**
* 跳轉(zhuǎn)到退貨管理頁面
* @return
*/
@RequestMapping("toOutportManager")
public String toOutportManager(){
return "business/outport/outportManager";
}
/**
* 跳轉(zhuǎn)到商品銷售管理頁面
* @return
*/
@RequestMapping("toSalesManager")
public String toSalesManager(){
return "business/sales/salesManager";
}
/**
* 跳轉(zhuǎn)到商品銷售管理頁面
* @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 {
@Autowired
private ICustomerService customerService;
/**
* 查詢所有的客戶
* @param customerVo
* @return
*/
@RequestMapping("loadAllCustomer")
public DataGridView loadAllCustomer(CustomerVo customerVo){
//1.聲明一個分頁page對象
IPage<Customer> page = new Page(customerVo.getPage(),customerVo.getLimit());
//2.聲明一個queryWrapper
QueryWrapper<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 {
@Autowired
private IGoodsService goodsService;
@Autowired
private 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 {
//商品圖片不是默認(rèn)圖片
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);
}
/**
* 根據(jù)供應(yīng)商ID查詢商品信息
* @param providerid 供應(yīng)商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;
}五、項目總結(jié)
上文展示了基于Springboot實(shí)現(xiàn)商品進(jìn)銷存管理系統(tǒng)的功能模塊、所用技術(shù)、界面展示以及部分代碼,系統(tǒng)整體設(shè)計的結(jié)構(gòu)比較清晰,功能 也相對完整,比較適合做畢業(yè)設(shè)計或課程設(shè)計使用。
到此這篇關(guān)于基于Springboot商品進(jìn)銷存管理系統(tǒng)的設(shè)計與實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Springboot商品進(jìn)銷存管理系統(tǒng)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 基于Springboot的高校社團(tuán)管理系統(tǒng)的設(shè)計與實(shí)現(xiàn)
- springboot實(shí)現(xiàn)學(xué)生管理系統(tǒng)
- Springboot與vue實(shí)例講解實(shí)現(xiàn)前后端分離的人事管理系統(tǒng)
- Springboot實(shí)例講解實(shí)現(xiàn)專業(yè)材料認(rèn)證管理系統(tǒng)流程
- 基于Springboot疫苗接種行程管理系統(tǒng)的設(shè)計與實(shí)現(xiàn)
- 基于Springboot實(shí)現(xiàn)送水公司信息管理系統(tǒng)
- java?Springboot實(shí)現(xiàn)教務(wù)管理系統(tǒng)
- 基于java SSM springboot實(shí)現(xiàn)抗疫物質(zhì)信息管理系統(tǒng)
相關(guān)文章
SpringMVC攔截器實(shí)現(xiàn)單點(diǎn)登錄
這篇文章主要介紹了SpringMVC攔截器實(shí)現(xiàn)單點(diǎn)登錄,簡單介紹了springmvc攔截器,單點(diǎn)登錄實(shí)現(xiàn)原理等相關(guān)內(nèi)容,具有一定參考價值,需要的朋友可以了解下。2017-11-11
淺析Java類和數(shù)據(jù)結(jié)構(gòu)中常用的方法
下面小編就為大家?guī)硪黄獪\析Java類和數(shù)據(jù)結(jié)構(gòu)中常用的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-09-09
Apache Commons Math3探索之快速傅立葉變換代碼示例
這篇文章主要介紹了Apache Commons Math3探索之快速傅立葉變換代碼示例,具有一定參考價值,需要的朋友可以了解下。2017-10-10
java中ArrayList和LinkedList的區(qū)別詳解
這篇文章主要介紹了java中ArrayList和LinkedList的區(qū)別詳解,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2021-01-01
Springcloud hystrix服務(wù)熔斷和dashboard如何實(shí)現(xiàn)
這篇文章主要介紹了Springcloud hystrix服務(wù)熔斷和dashboard如何實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-12-12

