Springboot基于Redisson实现Redis分布式可重入锁源码解析
360
2022-07-25
目录一,项目简介二,环境介绍三,系统展示3.1 系统功能模块设计3.1.1 登录模块3.1.2 客户管理模块3.1.3 供应商管理功能3.1.4 商品管理模块3.1.5 商品进货管理模块3.1.6 商品退货信息查询模块四,核心代码展示五,项目总结
一,项目简介
经过调查研究进行开发设计的这款仓库管理系统,主要是为商家提供商品货物进销存的信息化管理,以便让商家在竞争如此激烈的今天占据一定的优势和商机,通过信息化技术手段的应用来减少库存,提升周转率,降低成本,提高盈利。
仓库管理系统的设计与开发基于java语言开发设计,采用常用的Springboot框架技术整合第三方其它框架开发实现,前端页面使用Layui进行页面的开发布局,数据存储则使用mysql5.7数据库。整合这些技术和工具开发了一套完整的仓库管理系统。
这套系统的开发实现具体一定的普遍适用性,经过走访调查,得出大多数商家的基本功能需求进而进行抽取整合,开发实现了这套仓库管理系统,它具有一定的社会推广性,对整个社会的商业化进行有着广泛而积极的意义。
二,环境介绍
语言环境:Java: jdk1.8
数据库:Mysql: mysql5.7
应用服务器:Tomcat: tomcat8.5.31
开发工具:IDEA或eclipse
仓库管理系统采用Java编程语言。近年来,Java语言的使用率一直排在计算机语言的前三位;IntelliJ idea作为一种开发工具。基于springboot + Mybatis + MySQL + Shiro + HTML + layui的组合,开发了一套功能齐全、界面美观、使用方便的仓库管理系统,使仓库管理员对货物数据的管理更加简单、到位。技术能够满足仓库管理系统的开发、测试和部署。综上所述,这在技术层面是可行的。
三,系统展示
3.1 系统功能模块设计
3.1.1 登录模块
系统的操作员在此登陆页面中输入用户相关的账户信息提交给后台程序,后台程序接受到账户和密码后会进行验证操作,校验通过后跳转到系统后台管理界面,实现相应的管理操作。登陆界面如图5-1所示。
图5-1 登录页面UI界面
如果输入的账户信息校验失败,那么系统就会进行相应的信息提示操作,具体展示如下图5-2所示。
图5-2 登录失败提示UI界面
3.1.2 客户管理模块
操作员登陆后台选择左侧的客户管理,进行购物客户的相关管理操作。如图5-3、5-4、5-5、5-6、5-7所示。
图5-3 会员管理UI界面
图5-4 会员修改UI界面
图5-5 会员添加UI界面
3.1.3 供应商管理功能
操作员登陆后台选择左侧的供应商管理,进行商贸公司的供货商信息的的相关管理操作。如图5-6所示。
图5-6 供货商管理UI界面
3.1.4 商品管理模块
操作员登陆后台选择左侧的商品管理,进行商品信息的相关管理操作。如图5-7所示。
图5-7 商品管理UI界面
3.1.5 商品进货管理模块
操作员登陆后台选择左侧的商品管理,进行商品的相关管理操作。如图5-8所示。
图5-8 商品信息管理UI界面
3.1.6 商品退货信息查询模块
操作员登陆后台选择左侧的商品退货信息管理,进行退货的相关管理操作。如图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 {
/**
* 跳转到客户管理页面
* @return
*/
@RequestMapping("toCustomerManager")
public String toCustomerManager(){
return "business/customer/customerManager";
}
/**
* 跳转到供应商管理页面
* @return
*/
@RequestMapping("toProviderManager")
public String toProviderManager(){
return "business/provider/providerManager";
}
/**
* 跳转到商品管理页面
* @return
*/
@RequestMapping("toGoodsManager")
public String toGoodsManager(){
return "business/goods/goodsManager";
}
/**
* 跳转到进货管理页面
* @return
*/
@RequestMapping("toInportManager")
public String toInportManager(){
return "business/inport/inportManager";
}
/**
* 跳转到退货管理页面
* @return
*/
@RequestMapping("toOutportManager")
public String toOutportManager(){
return "business/outport/outportManager";
}
/**
* 跳转到商品销售管理页面
* @return
*/
@RequestMapping("toSalesManager")
public String toSalesManager(){
return "business/sales/salesManager";
}
/**
* 跳转到商品销售管理页面
* @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.声明一个分页page对象
IPage
//2.声明一个queryWrapper
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
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
queryWrapper.eq("available", Constast.AVAILABLE_TRUE);
List
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
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
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 {
//商品图片不是默认图片
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
queryWrapper.eq("available",Constast.AVAILABLE_TRUE);
List
for (Goods goods : list) {
Provider provider = providerService.getById(goods.getProviderid());
if (null!=provider){
goods.setProvidername(provider.getProvidername());
}
}
return new DataGridView(list);
}
/**
* 根据供应商ID查询商品信息
* @param providerid 供应商ID
* @return
*/
@RequestMapping("loadGoodsByProviderId")
public DataGridView loadGoodsByProviderId(Integer providerid){
QueryWrapper
queryWrapper.eq("available",Constast.AVAILABLE_TRUE);
queryWrapper.eq(providerid!=null,"providerid",providerid);
List
for (Goods goods : list) {
Provider provider = providerService.getById(goods.getProviderid());
if (null!=provider){
goods.setProvidername(provider.getProvidername());
}
}
return new DataGridView(list);
}
}
五,项目总结
经过对一些食品工厂和超市的调研和客户走访,了解了一些经营食品的商户对仓库信息化管理的基本需求,设计了这款基于Spring的食品仓库管理系统。主要以Java 为开发语言,以MySQL为数据库服务器,完成一个基于Windows平台以B/S为体系结构的食品仓库管理系统的分析、设计与实现,系统界面友好、使用方便、可靠性高。该系统具有如下功能:
(1)登录模块:各角色能够通过管理员所创建的用户的用户名和密码进行登录操作;
(2)供销管理模块:该模块包括客户管理、供应商管理、商品管理。管理员通过该模块进行对客户、供应商和商品数据的增删改查。
(3)进退货管理模块:该模块包括进货管理和退货管理。进货功能主要是为了实现登记进货货物记录的功能。这些信息应该包括进货的信息、进货的数量以及进货时间信息加上执行进货的操作的信息以及货物存放仓库的信息等等。退货的功能主要是为了实现登记退货的货物信息的功能。这些退货的记录包括退货的申请信息以及退货数量和退货时间信息,还有执行退货操作的管理员以及货物剩余信息等等。
(4)系统管理模块:该模块是本系统中管理员的核心功能,也是一道难关,包括部门管理、菜单管理、权限管理、角色管理、用户管理。部门管理、权限管理和角色管理是由管理员对用户分配角色,让这些角色分权管理供销、进退货以及销售的模块。菜单管理则是管理员对系统菜单进行管理,按需要关闭和打开菜单功能。用户管理则是管理员对用户信息进行管理,包括修改用户名、密码等等。
(5)销售管理模块:该模块分为商品销售和商品退货,管理员通过这个模块对商品的销售进行管理,其中商品销售包括商品销售的信息、数量、销售时间、销售去向等等。商品退货包括商品的退货信息、退货时间、退货来源等等。
(6)业务管理模块:该模块包括登录日志和系统公告。登录日志对系统中的所有用户都具有实时查看访问日志权限,管理员则是可以对日志进行删除操作。系统公告由管理员发布和修改,用于对用户的通知。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~