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

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

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

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

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

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

銷(xiāo)售管理—商品銷(xiāo)售

銷(xiāo)售管理—銷(xiāo)售退貨查詢(xún)

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

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

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

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

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

其它管理—登陸日志

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

四,核心代碼展示
package com.dev.shop.bus.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;public class BusinessController { ? ?/**
? ? * 跳轉(zhuǎn)到客戶(hù)管理頁(yè)面
? ? * @return
? ? */
? ?
? ?public String toCustomerManager(){ ? ? ? ?return "business/customer/customerManager";
? ?} ? ?/**
? ? * 跳轉(zhuǎn)到供應(yīng)商管理頁(yè)面
? ? * @return
? ? */
? ?
? ?public String toProviderManager(){ ? ? ? ?return "business/provider/providerManager";
? ?} ? ?/**
? ? * 跳轉(zhuǎn)到商品管理頁(yè)面
? ? * @return
? ? */
? ?
? ?public String toGoodsManager(){ ? ? ? ?return "business/goods/goodsManager";
? ?} ? ?/**
? ? * 跳轉(zhuǎn)到進(jìn)貨管理頁(yè)面
? ? * @return
? ? */
? ?
? ?public String toInportManager(){ ? ? ? ?return "business/inport/inportManager";
? ?} ? ?/**
? ? * 跳轉(zhuǎn)到退貨管理頁(yè)面
? ? * @return
? ? */
? ?
? ?public String toOutportManager(){ ? ? ? ?return "business/outport/outportManager";
? ?} ? ?/**
? ? * 跳轉(zhuǎn)到商品銷(xiāo)售管理頁(yè)面
? ? * @return
? ? */
? ?
? ?public String toSalesManager(){ ? ? ? ?return "business/sales/salesManager";
? ?} ? ?/**
? ? * 跳轉(zhuǎn)到商品銷(xiāo)售管理頁(yè)面
? ? * @return
? ? */
? ?
? ?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;public class CustomerController { ? ?
? ?private ICustomerService customerService; ? ?/**
? ? * 查詢(xún)所有的客戶(hù)
? ? * @param customerVo
? ? * @return
? ? */
? ?
? ?public DataGridView loadAllCustomer(CustomerVo customerVo){ ? ? ? ?//1.聲明一個(gè)分頁(yè)page對(duì)象
? ? ? ?IPage<Customer> page = new Page(customerVo.getPage(),customerVo.getLimit()); ? ? ? ?//2.聲明一個(gè)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());
? ?} ? ?/**
? ? * 添加一個(gè)客戶(hù)
? ? * @param customerVo
? ? * @return
? ? */
? ?
? ?public ResultObj addCustomer(CustomerVo customerVo){ ? ? ? ?try {
? ? ? ? ? ?customerService.save(customerVo); ? ? ? ? ? ?return ResultObj.ADD_SUCCESS;
? ? ? ?} catch (Exception e) {
? ? ? ? ? ?e.printStackTrace(); ? ? ? ? ? ?return ResultObj.ADD_ERROR;
? ? ? ?}
? ?} ? ?/**
? ? * 修改一個(gè)客戶(hù)
? ? * @param customerVo
? ? * @return
? ? */
? ?
? ?public ResultObj updateCustomer(CustomerVo customerVo){ ? ? ? ?try {
? ? ? ? ? ?customerService.updateById(customerVo); ? ? ? ? ? ?return ResultObj.UPDATE_SUCCESS;
? ? ? ?} catch (Exception e) {
? ? ? ? ? ?e.printStackTrace(); ? ? ? ? ? ?return ResultObj.UPDATE_ERROR;
? ? ? ?}
? ?} ? ?/**
? ? * 刪除一個(gè)客戶(hù)
? ? * @param id 客戶(hù)的ID
? ? * @return
? ? */
? ?
? ?public ResultObj deleteCustomer(Integer id){ ? ? ? ?try {
? ? ? ? ? ?customerService.removeById(id); ? ? ? ? ? ?return ResultObj.DELETE_SUCCESS;
? ? ? ?} catch (Exception e) {
? ? ? ? ? ?e.printStackTrace(); ? ? ? ? ? ?return ResultObj.DELETE_ERROR;
? ? ? ?}
? ?} ? ?/**
? ? * 批量刪除客戶(hù)
? ? * @param customerVo 選中的客戶(hù)
? ? * @return
? ? */
? ?
? ?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;
? ? ? ?}
? ?} ? ?/**
? ? * 加載所有客戶(hù)的下拉列表
? ? * @return
? ? */
? ?
? ?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;public class GoodsController { ? ?
? ?private IGoodsService goodsService; ? ?
? ?private IProviderService providerService; ? ?/**
? ? * 查詢(xún)商品
? ? * @param goodsVo
? ? * @return
? ? */
? ?
? ?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
? ? */
? ?
? ?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
? ? */
? ?
? ?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
? ? */
? ?
? ?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
? ? */
? ?
? ?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查詢(xún)商品信息
? ? * @param providerid ? ?供應(yīng)商ID
? ? * @return
? ? */
? ?
? ?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;public class Customer implements Serializable { ? ?private static final long serialVersionUID=1L; ? ?
? ?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;
}
五,項(xiàng)目總結(jié)
???? 以上展示了基于Springboot實(shí)現(xiàn)商品進(jìn)銷(xiāo)存管理系統(tǒng)的功能模塊、所用技術(shù)、界面展示以及部分代碼,系統(tǒng)整體設(shè)計(jì)的結(jié)構(gòu)比較清晰,功能 也相對(duì)完整,比較適合做畢業(yè)設(shè)計(jì)或課程設(shè)計(jì)使用。