Springboot詳解實(shí)現(xiàn)食品倉(cāng)庫(kù)管理系統(tǒng)流程
一,項(xiàng)目簡(jiǎn)介
經(jīng)過(guò)調(diào)查研究進(jìn)行開(kāi)發(fā)設(shè)計(jì)的這款倉(cāng)庫(kù)管理系統(tǒng),主要是為商家提供商品貨物進(jìn)銷存的信息化管理,以便讓商家在競(jìng)爭(zhēng)如此激烈的今天占據(jù)一定的優(yōu)勢(shì)和商機(jī),通過(guò)信息化技術(shù)手段的應(yīng)用來(lái)減少庫(kù)存,提升周轉(zhuǎn)率,降低成本,提高盈利。
倉(cāng)庫(kù)管理系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā)基于Java語(yǔ)言開(kāi)發(fā)設(shè)計(jì),采用常用的Springboot框架技術(shù)整合第三方其它框架開(kāi)發(fā)實(shí)現(xiàn),前端頁(yè)面使用Layui進(jìn)行頁(yè)面的開(kāi)發(fā)布局,數(shù)據(jù)存儲(chǔ)則使用MySQL5.7數(shù)據(jù)庫(kù)。整合這些技術(shù)和工具開(kāi)發(fā)了一套完整的倉(cāng)庫(kù)管理系統(tǒng)。
這套系統(tǒng)的開(kāi)發(fā)實(shí)現(xiàn)具體一定的普遍適用性,經(jīng)過(guò)走訪調(diào)查,得出大多數(shù)商家的基本功能需求進(jìn)而進(jìn)行抽取整合,開(kāi)發(fā)實(shí)現(xiàn)了這套倉(cāng)庫(kù)管理系統(tǒng),它具有一定的社會(huì)推廣性,對(duì)整個(gè)社會(huì)的商業(yè)化進(jìn)行有著廣泛而積極的意義。
二,環(huán)境介紹
語(yǔ)言環(huán)境:Java: jdk1.8
數(shù)據(jù)庫(kù):Mysql: mysql5.7
應(yīng)用服務(wù)器:Tomcat: tomcat8.5.31
開(kāi)發(fā)工具:IDEA或eclipse
倉(cāng)庫(kù)管理系統(tǒng)采用Java編程語(yǔ)言。近年來(lái),Java語(yǔ)言的使用率一直排在計(jì)算機(jī)語(yǔ)言的前三位;IntelliJ idea作為一種開(kāi)發(fā)工具?;趕pringboot + Mybatis + MySQL + Shiro + HTML + layui的組合,開(kāi)發(fā)了一套功能齊全、界面美觀、使用方便的倉(cāng)庫(kù)管理系統(tǒng),使倉(cāng)庫(kù)管理員對(duì)貨物數(shù)據(jù)的管理更加簡(jiǎn)單、到位。技術(shù)能夠滿足倉(cāng)庫(kù)管理系統(tǒng)的開(kāi)發(fā)、測(cè)試和部署。綜上所述,這在技術(shù)層面是可行的。
三,系統(tǒng)展示
3.1 系統(tǒng)功能模塊設(shè)計(jì)
3.1.1 登錄模塊
系統(tǒng)的操作員在此登陸頁(yè)面中輸入用戶相關(guān)的賬戶信息提交給后臺(tái)程序,后臺(tái)程序接受到賬戶和密碼后會(huì)進(jìn)行驗(yàn)證操作,校驗(yàn)通過(guò)后跳轉(zhuǎn)到系統(tǒng)后臺(tái)管理界面,實(shí)現(xiàn)相應(yīng)的管理操作。登陸界面如圖5-1所示。
圖5-1 登錄頁(yè)面UI界面
如果輸入的賬戶信息校驗(yàn)失敗,那么系統(tǒng)就會(huì)進(jìn)行相應(yīng)的信息提示操作,具體展示如下圖5-2所示。
圖5-2 登錄失敗提示UI界面
3.1.2 客戶管理模塊
操作員登陸后臺(tái)選擇左側(cè)的客戶管理,進(jìn)行購(gòu)物客戶的相關(guān)管理操作。如圖5-3、5-4、5-5、5-6、5-7所示。
圖5-3 會(huì)員管理UI界面
圖5-4 會(huì)員修改UI界面
圖5-5 會(huì)員添加UI界面
3.1.3 供應(yīng)商管理功能
操作員登陸后臺(tái)選擇左側(cè)的供應(yīng)商管理,進(jìn)行商貿(mào)公司的供貨商信息的的相關(guān)管理操作。如圖5-6所示。
圖5-6 供貨商管理UI界面
3.1.4 商品管理模塊
操作員登陸后臺(tái)選擇左側(cè)的商品管理,進(jìn)行商品信息的相關(guān)管理操作。如圖5-7所示。
圖5-7 商品管理UI界面
3.1.5 商品進(jìn)貨管理模塊
操作員登陸后臺(tái)選擇左側(cè)的商品管理,進(jìn)行商品的相關(guān)管理操作。如圖5-8所示。
圖5-8 商品信息管理UI界面
3.1.6 商品退貨信息查詢模塊
操作員登陸后臺(tái)選擇左側(cè)的商品退貨信息管理,進(jìn)行退貨的相關(guān)管理操作。如圖5-9所示。
圖5-9 商品退貨管理UI界面
四,核心代碼展示
package com.company.stock.bus.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping("bus") public class BusinessController { /** * 跳轉(zhuǎn)到客戶管理頁(yè)面 * @return */ @RequestMapping("toCustomerManager") public String toCustomerManager(){ return "business/customer/customerManager"; } /** * 跳轉(zhuǎn)到供應(yīng)商管理頁(yè)面 * @return */ @RequestMapping("toProviderManager") public String toProviderManager(){ return "business/provider/providerManager"; } /** * 跳轉(zhuǎn)到商品管理頁(yè)面 * @return */ @RequestMapping("toGoodsManager") public String toGoodsManager(){ return "business/goods/goodsManager"; } /** * 跳轉(zhuǎn)到進(jìn)貨管理頁(yè)面 * @return */ @RequestMapping("toInportManager") public String toInportManager(){ return "business/inport/inportManager"; } /** * 跳轉(zhuǎn)到退貨管理頁(yè)面 * @return */ @RequestMapping("toOutportManager") public String toOutportManager(){ return "business/outport/outportManager"; } /** * 跳轉(zhuǎn)到商品銷售管理頁(yè)面 * @return */ @RequestMapping("toSalesManager") public String toSalesManager(){ return "business/sales/salesManager"; } /** * 跳轉(zhuǎn)到商品銷售管理頁(yè)面 * @return */ @RequestMapping("toSalesbackManager") public String toSalesbackManager(){ return "business/salesback/salesbackManager"; } }
package com.company.stock.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.company.stock.bus.service.ICustomerService; import com.company.stock.sys.common.Constast; import com.company.stock.sys.common.DataGridView; import com.company.stock.sys.common.ResultObj; import com.company.stock.bus.entity.Customer; import com.company.stock.bus.vo.CustomerVo; 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.聲明一個(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è)客戶 * @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; } } /** * 修改一個(gè)客戶 * @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; } } /** * 刪除一個(gè)客戶 * @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.company.stock.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.company.stock.bus.service.IGoodsService; import com.company.stock.bus.service.IProviderService; import com.company.stock.sys.common.AppFileUtils; import com.company.stock.sys.common.Constast; import com.company.stock.sys.common.DataGridView; import com.company.stock.sys.common.ResultObj; import com.company.stock.bus.entity.Goods; import com.company.stock.bus.entity.Provider; import com.company.stock.bus.vo.GoodsVo; 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); } }
五,項(xiàng)目總結(jié)
經(jīng)過(guò)對(duì)一些食品工廠和超市的調(diào)研和客戶走訪,了解了一些經(jīng)營(yíng)食品的商戶對(duì)倉(cāng)庫(kù)信息化管理的基本需求,設(shè)計(jì)了這款基于Spring的食品倉(cāng)庫(kù)管理系統(tǒng)。主要以Java 為開(kāi)發(fā)語(yǔ)言,以MySQL為數(shù)據(jù)庫(kù)服務(wù)器,完成一個(gè)基于Windows平臺(tái)以B/S為體系結(jié)構(gòu)的食品倉(cāng)庫(kù)管理系統(tǒng)的分析、設(shè)計(jì)與實(shí)現(xiàn),系統(tǒng)界面友好、使用方便、可靠性高。該系統(tǒng)具有如下功能:
(1)登錄模塊:各角色能夠通過(guò)管理員所創(chuàng)建的用戶的用戶名和密碼進(jìn)行登錄操作;
(2)供銷管理模塊:該模塊包括客戶管理、供應(yīng)商管理、商品管理。管理員通過(guò)該模塊進(jìn)行對(duì)客戶、供應(yīng)商和商品數(shù)據(jù)的增刪改查。
(3)進(jìn)退貨管理模塊:該模塊包括進(jìn)貨管理和退貨管理。進(jìn)貨功能主要是為了實(shí)現(xiàn)登記進(jìn)貨貨物記錄的功能。這些信息應(yīng)該包括進(jìn)貨的信息、進(jìn)貨的數(shù)量以及進(jìn)貨時(shí)間信息加上執(zhí)行進(jìn)貨的操作的信息以及貨物存放倉(cāng)庫(kù)的信息等等。退貨的功能主要是為了實(shí)現(xiàn)登記退貨的貨物信息的功能。這些退貨的記錄包括退貨的申請(qǐng)信息以及退貨數(shù)量和退貨時(shí)間信息,還有執(zhí)行退貨操作的管理員以及貨物剩余信息等等。
(4)系統(tǒng)管理模塊:該模塊是本系統(tǒng)中管理員的核心功能,也是一道難關(guān),包括部門管理、菜單管理、權(quán)限管理、角色管理、用戶管理。部門管理、權(quán)限管理和角色管理是由管理員對(duì)用戶分配角色,讓這些角色分權(quán)管理供銷、進(jìn)退貨以及銷售的模塊。菜單管理則是管理員對(duì)系統(tǒng)菜單進(jìn)行管理,按需要關(guān)閉和打開(kāi)菜單功能。用戶管理則是管理員對(duì)用戶信息進(jìn)行管理,包括修改用戶名、密碼等等。
(5)銷售管理模塊:該模塊分為商品銷售和商品退貨,管理員通過(guò)這個(gè)模塊對(duì)商品的銷售進(jìn)行管理,其中商品銷售包括商品銷售的信息、數(shù)量、銷售時(shí)間、銷售去向等等。商品退貨包括商品的退貨信息、退貨時(shí)間、退貨來(lái)源等等。
(6)業(yè)務(wù)管理模塊:該模塊包括登錄日志和系統(tǒng)公告。登錄日志對(duì)系統(tǒng)中的所有用戶都具有實(shí)時(shí)查看訪問(wèn)日志權(quán)限,管理員則是可以對(duì)日志進(jìn)行刪除操作。系統(tǒng)公告由管理員發(fā)布和修改,用于對(duì)用戶的通知。
到此這篇關(guān)于Springboot詳解實(shí)現(xiàn)食品倉(cāng)庫(kù)管理系統(tǒng)流程的文章就介紹到這了,更多相關(guān)Springboot倉(cāng)庫(kù)管理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)項(xiàng)目之倉(cāng)庫(kù)管理系統(tǒng)的實(shí)現(xiàn)流程
- Java 實(shí)戰(zhàn)項(xiàng)目之倉(cāng)庫(kù)管理系統(tǒng)的實(shí)現(xiàn)流程
- Java maven三種倉(cāng)庫(kù),本地倉(cāng)庫(kù),私服,中央倉(cāng)庫(kù)的配置
- JavaWeb倉(cāng)庫(kù)管理系統(tǒng)詳解
- 如何通過(guò)Maven倉(cāng)庫(kù)安裝Spire系列的Java產(chǎn)品
- java如何使用自己的maven本地倉(cāng)庫(kù)詳解
相關(guān)文章
詳解基于spring多數(shù)據(jù)源動(dòng)態(tài)調(diào)用及其事務(wù)處理
本篇文章主要介紹了基于spring多數(shù)據(jù)源動(dòng)態(tài)調(diào)用及其事務(wù)處理 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06windows下使用 intellij idea 編譯 kafka 源碼環(huán)境
這篇文章主要介紹了使用 intellij idea 編譯 kafka 源碼的環(huán)境,本文是基于windows下做的項(xiàng)目演示,需要的朋友可以參考下2021-10-10springboot集成nacos報(bào)錯(cuò):get data from Nacos
這篇文章給大家介紹了springboot集成nacos報(bào)錯(cuò):get data from Nacos error,dataId:null.yaml的原因及解決方法,如果又遇到相同問(wèn)題的朋友可以參考閱讀本文2023-10-10Spring Boot中@ConditionalOnProperty的使用方法
這篇文章主要給大家介紹了關(guān)于Spring Boot中@ConditionalOnProperty的使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12spring-AOP 及 AOP獲取request各項(xiàng)參數(shù)操作
這篇文章主要介紹了spring-AOP 及 AOP獲取request各項(xiàng)參數(shù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07IDEA編譯時(shí)報(bào)常量字符串過(guò)長(zhǎng)的解決辦法
本文主要介紹了IDEA編譯時(shí)報(bào)常量字符串過(guò)長(zhǎng)的解決辦法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07Java中Map轉(zhuǎn)List及List轉(zhuǎn)Map的方法(簡(jiǎn)單好用!)
這篇文章主要給大家介紹了關(guān)于Java中Map轉(zhuǎn)List及List轉(zhuǎn)Map的相關(guān)資料,可以使用Java 8的Stream API將Java Map轉(zhuǎn)換為L(zhǎng)ist,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07Spring Boot 定義系統(tǒng)啟動(dòng)任務(wù)的多種方式
這篇文章主要介紹了Spring Boot 定義系統(tǒng)啟動(dòng)任務(wù)的多種方式,看看你都會(huì)哪幾種 ,感興趣的朋友跟隨小編一起看看吧2019-04-04