基于Java实现的商品出入库管理系统

news2025/2/27 4:34:24

基于Java实现的商品出入库管理系统(文末附源码)

前言

一、出入库管理系统含义介绍:

出入库管理系统是一套利用一物一码技术对仓库货物各环节实施全过程控制管理的系统,可对仓库货物进行入库、出库、货位、批次、保质期等实现一物一码标签序列号管理,对整个收货、发货、补货、集货、送货等每个环节的规范化作业 , 还可以根据用户诉求制作多种合理的统计报表。

二、出入库管理系统有哪些功能模块?

1、基本信息管理:系统不仅支持对包括品名、规格、生产厂家、产品批号、生产日期、有效期和箱包装等商品基本信息进行设置,而且货位管理功能对所有货位进行编码并存储在系统的数据库中,使系统能有效的追踪商品所处位置,也便于操作人员根据货位号迅速定位到目标货位在仓库中的物理位置;

2、上架管理:系统在自动计算最佳上架货位的基础上,支持人工干预,提供已存放同品种的货位、剩余空间,并根据避免存储空间浪费的原则给出建议的上架货位并按优先度排序,操作人员可以直接确认或人工调整;

3、拣选管理:拣选指令中包含位置信息和最优路径,根据货位布局和确定拣选指导顺序,系统自动在RF终端的界面等相关设备中根据任务所涉及的货位给出指导性路径,避免无效穿梭和商品找寻,提高了单位时间内的拣选量;

4、库存管理:系统支持自动补货,通过自动补货算法,不仅确保了拣选面存货量,也能提高仓储空间利用率,降低货位蜂窝化现象出现的概率;出入库管理系统能够对货位通过深度信息进行逻辑细分和动态设置,在不影响自动补货算法的同时,有效的提高了空间利用率和对控制精度。

三、企业使用出入库管理系统有什么优点?

1、灵活对仓库立体划分库区库位;

2、支持多级仓库的统一管理;

3、支持公司组织架构下对仓库的分级管理控制;4、提供自定义库存报警(包括库存量,库存产品过期等属性的报警);

5、二维码/条形码化仓库管理、实现采用数据采集终端进行数据作业处理;

6、发货单自动获取;

7、支持全自动化、半自动化、手工的入库作业。

出入库管理系统搭建费用,出入库管理系统功能介绍。今后,企业将不断提高自身科技创新服务于与时俱进的新水平,注重业务,注重实效,努力开创与时俱进的新局面,注重协调与进步,尽快展现与时俱进的新业绩。

功能

  • 登录
  • 用户管理
  • 权限管理
  • 商品管理
  • 商品出入库
  • 商品出入库记录
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

技术栈

基于SSM框架开发。

  • Spring
  • SpringMVC
  • MyBatis
  • MySQL
  • Jquery
  • html
  • Layui

代码

Service
public class GoodsManageService {

	@Resource
	private TypeMapper typeMapper;
	@Resource
	private GoodsinfoMapper goodsinfoMapper;
	@Resource
	private GoodsInfo_stockMapper goodsInfo_stockMapper;
	@Resource
	private StockMapper stockMapper;

	/**
	 * 查询所有商品类别的操作方法
	 */
	public List<Type> findType() {
		return typeMapper.selectByExample(null);
	}

	/**
	 * 添加商品类别的操作方法
	 */
	public int insertGoodsType(Type type) {
		return typeMapper.insert(type);
	}

	/**
	 * 查询商品名称是否存在的操作方法
	 */
	public List<Goodsinfo> findGoodsName(Goodsinfo goodsinfo) {
		GoodsinfoExample goodsinfoExample = new GoodsinfoExample();
		goodsinfoExample.createCriteria().andGnameEqualTo(goodsinfo.getGname());
		return goodsinfoMapper.selectByExample(goodsinfoExample);
	}

	/**
	 * 添加商品的操作方法
	 */
	public int insertGoods(Goodsinfo goodsinfo) {
		return goodsinfoMapper.insert(goodsinfo);
	}

	/**
	 * 添加商品时也默认添加商品库存为0的操作方法
	 */
	public int insertAndStock(Stock stock) {
		StockExample stockExample = new StockExample();
		stockExample.createCriteria().andGidEqualTo(stock.getGid());
		return stockMapper.insert(stock);
	}

	/**
	 * 查询商品详细信息的操作方法
	 */
	public List<Goodsinfo_stock> findGoodsAll() {
		return goodsInfo_stockMapper.findGoodsAll();
	}

	/**
	 * 修改商品信息的操作方法
	 */
	public int updateGoods(Goodsinfo goodsinfo) {
		GoodsinfoExample goodsinfoExample = new GoodsinfoExample();
		goodsinfoExample.createCriteria().andGidEqualTo(goodsinfo.getGid());
		return goodsinfoMapper.updateByExampleSelective(goodsinfo, goodsinfoExample);
	}

}
@Service
public class StockInAndOutService {

	// 获取注入容器的对象
	@Resource
	private GoodsinfoMapper goodsinfoMapper;
	@Resource
	private StockinMapper stockinMapper;
	@Resource
	private Stockin_detailMapper stockin_detailMapper;;
	@Resource
	private StockMapper stockMapper;
	@Resource
	private StockOutMapper stockOutMapper;
	@Resource
	private StockOut_detailMapper stockOut_detailMapper;

	/**
	 * 查询指定类别商品的操作方法
	 */
	public List<Goodsinfo> findGoodsByTid(String tid) {

		if (!tid.isEmpty() && !tid.equals("0")) {
			GoodsinfoExample goodsinfoExample = new GoodsinfoExample();
			goodsinfoExample.createCriteria().andTidEqualTo(Integer.parseInt(tid));
			return goodsinfoMapper.selectByExample(goodsinfoExample);
		} else {
			return goodsinfoMapper.selectByExample(null);
		}
	}

	/**
	 * 添加出入库单号的操作方法
	 */
	public int insertStockInAndOut(Stockin stockin) {
		return stockinMapper.insert(stockin);
	}

	/**
	 * 添加出入库详情的操作方法
	 */
	public int insertStockInAndOut_dateil(Stockin_detail stockin_detail) {
		return stockin_detailMapper.insert(stockin_detail);
	}

	/**
	 * 查询出指定商品详情信息的操作方法
	 */
	public List<Goodsinfo> findGoodsById(String gname) {
		GoodsinfoExample goodsinfoExample = new GoodsinfoExample();
		goodsinfoExample.createCriteria().andGnameEqualTo(gname);
		return goodsinfoMapper.selectByExample(goodsinfoExample);
	}

	/**
	 * 添加商品库存的操作方法
	 */
	public int inserStock(Stock stock) {
		// 先判断是否有已经存在库存id
		StockExample stockExample = new StockExample();
		stockExample.createCriteria().andGidEqualTo(stock.getGid());
		List<Stock> selectByExample = stockMapper.selectByExample(stockExample);
		if (selectByExample.size() != 0) {
			// 如果已经存在了就把原来的库存和新的入库数量相加
			int s = stock.getStock() + selectByExample.get(0).getStock();
			stock.setStock(s);
			return stockMapper.updateByExampleSelective(stock, stockExample);
		} else {
			return stockMapper.insert(stock);
		}
	}

	/**
	 * 查询商品库存的操作方法
	 */
	public List<Stock> findStockByid(int gid) {
		StockExample stockExample = new StockExample();
		stockExample.createCriteria().andGidEqualTo(gid);
		return stockMapper.selectByExample(stockExample);
	}

	/**
	 * 添加出库单号的操作方法
	 */
	public int insertStockOut(StockOut stockOut) {
		return stockOutMapper.insert(stockOut);
	}

	/**
	 * 添加出库详情的操作方法
	 */
	public int insertStockOut_dateil(StockOut_detail stockOut_detail) {
		return stockOut_detailMapper.insert(stockOut_detail);
	}

	/**
	 * 出库成功修改商品库存
	 */
	public int updateStock(Stock stock) {
		// 先查询出原有的库存
		StockExample stockExample = new StockExample();
		stockExample.createCriteria().andGidEqualTo(stock.getGid());
		List<Stock> selectByExample = stockMapper.selectByExample(stockExample);
		int s = selectByExample.get(0).getStock() - stock.getStock();// 原有库存减去出库数量
		stock.setStock(s);// 修改库存
		return stockMapper.updateByExampleSelective(stock, stockExample);
	}

数据库

-- ----------------------------
-- Table structure for permission
-- ----------------------------
DROP TABLE IF EXISTS `permission`;
CREATE TABLE `permission`  (
  `pid` int(2) NOT NULL COMMENT '权限id',
  `pname` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '权限名称',
  `premark` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`pid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '权限表' ROW_FORMAT = Compact;

-- ----------------------------
-- Records of permission
-- ----------------------------
INSERT INTO `permission` VALUES (1, 'user:add', '添加用户权限');
INSERT INTO `permission` VALUES (2, 'goods:add', '商品添加权限');
INSERT INTO `permission` VALUES (3, 'stockin', '商品入库权限');
INSERT INTO `permission` VALUES (4, 'stockout', '商品出库权限');
-- ----------------------------
-- Table structure for role
-- ----------------------------
DROP TABLE IF EXISTS `role`;
CREATE TABLE `role`  (
  `rid` int(2) NOT NULL COMMENT '角色id0管理员1普通员工',
  `iname` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '角色名称',
  PRIMARY KEY (`rid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '角色表' ROW_FORMAT = Compact;

-- ----------------------------
-- Records of role
-- ----------------------------
INSERT INTO `role` VALUES (0, '管理员');
INSERT INTO `role` VALUES (1, '普通员工');

-- ----------------------------
-- Table structure for role_permission
-- ----------------------------
DROP TABLE IF EXISTS `role_permission`;
CREATE TABLE `role_permission`  (
  `rid` int(2) NOT NULL COMMENT '角色id',
  `pid` int(2) NOT NULL COMMENT '权限id',
  INDEX `fk_rid2`(`rid`) USING BTREE,
  INDEX `fk_pid`(`pid`) USING BTREE,
  CONSTRAINT `fk_pid` FOREIGN KEY (`pid`) REFERENCES `permission` (`pid`) ON DELETE NO ACTION ON UPDATE CASCADE,
  CONSTRAINT `fk_rid2` FOREIGN KEY (`rid`) REFERENCES `role` (`rid`) ON DELETE NO ACTION ON UPDATE CASCADE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '角色权限表' ROW_FORMAT = Compact;

-- ----------------------------
-- Records of role_permission
-- ----------------------------
INSERT INTO `role_permission` VALUES (0, 1);
INSERT INTO `role_permission` VALUES (0, 2);
INSERT INTO `role_permission` VALUES (0, 3);
INSERT INTO `role_permission` VALUES (0, 4);

源码

点击免费获取源码&数据库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/347399.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DDL 数据定义语言

DDL 数据定义语言 目录概述一、库的管理1、库的创建2、库的修改【一般不修改&#xff0c;容易出现错误】3、库的删除二、表的管理【重要】1、表的创建2、表的修改3、表的删除4、表的复制 【可以跨库复制】练习题概述 数据定义语言 库和表的管理 一、库的管理 创建、修改、删除…

分享116个HTML电子商务模板,总有一款适合您

分享116个HTML电子商务模板&#xff0c;总有一款适合您 116个HTML电子商务模板下载链接&#xff1a;https://pan.baidu.com/s/1gaff8RsoYUD_ep0ejhGkMw?pwdzby2 提取码&#xff1a;zby2 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 建筑行业电子商务模板 建…

2.1单区域集成IS-IS

2.2.1 实验一:单区域集成IS-IS 实验目的实现IS-IS协议基本配置实验拓扑配置单区域集成IS-IS的拓扑图如图2-4所示: 图2-4:配置单区域集成IS-IS 实验步骤配置IP地址R1的配置 <Huawei>system-view

MySQL必会四大函数-窗口函数

在了解窗口函数之前&#xff0c;我们必须了解聚合函数。常见的聚合函数&#xff0c;包括 AVG、COUNT、MAX、MIN、SUM 以及 GROUP_CONCAT&#xff0c;常和GROUP BY 函数一起使用。聚合函数的作用就是对一组数据行进行汇总计算&#xff0c;并且返回单个分析结果。 窗口函数和聚合…

用最新版 VoxEdit 来提升你们的创造力!

众所周知&#xff0c;VoxEdit 可以为你们提供 Voxel 资产建模、装配和制作动画并与全世界分享的一站式服务&#xff0c;而这些全都是免费的。我们一直倾听社区意见并希望让所有人都能更容易进入 The Sandbox 元宇宙。VoxEdit 最新更新版本已经推出&#xff01;为了软体更本土化…

MySQL的触发器

目录 一.概述 介绍 触发器的特性 操作—创建触发器 操作—new和old 操作—查看触发器 操作—删除触发器 注意事项 一.概述 介绍 触发器&#xff0c;就是一种特殊的存储过程。触发器和存储过程一样是一个能够完成特定功能、存储在数据库服务器上的SQL片段&#xff0c;但是…

MACD红二波选股公式,选出MACD二次翻红的标的

经过一段上涨行情之后&#xff0c;市场出现了时间稍长或者幅度稍大的调整&#xff0c;MACD指标的DIF、DEA会出现死叉&#xff0c;柱线由红色转变为绿色。 而调整时间较短或者幅度较小&#xff0c;MACD红柱会缩短&#xff0c;但不出现绿柱&#xff0c;之后红柱开始变长&#xff…

Python-第六天 Python数据容器

Python-第六天 Python数据容器一、数据容器入门1.数据容器二、数据容器&#xff1a;list(列表)1.列表的定义2.列表的下标&#xff08;索引&#xff09;3.列表的常用操作&#xff08;方法&#xff09;4.练习案例:常用功能练习5.list&#xff08;列表&#xff09;的遍历5.1 列表的…

RabbitMQ 入门到应用 ( 三 ) 交换机分类

4.交换机 Exchange 分类 4.0.创建队列Queue 在 操作界面 分别 添加 fivemall.goods fivemall.order fivemall.admin yuan.admin 四个队列 4.1.Direct Exchange(直接交换机) 该类型的交换器将所有发送到该交换器的消息被转发到RoutingKey指定的队列中&#xff0c;也就是说路由…

JavaScript JSON

文章目录JavaScript JSON什么是 JSON?JSON 实例JSON 格式化后为 JavaScript 对象JSON 语法规则JSON 数据 - 一个名称对应一个值JSON 对象JSON 数组JSON 数组JSON 字符串转换为 JavaScript 对象相关函数JavaScript JSON JSON 是用于存储和传输数据的格式。 JSON 通常用于服务端…

简单实用的CSS属性(滑轮滚动保持头部不动、暂无数据显示、元素隔开距离、带背景的文字效果、网页上禁止选中文字、校验值有效为绿色无效为红色、)

简单实用的CSS属性&#xff08;滑轮滚动保持头部不动、暂无数据显示、元素隔开距离、带背景的文字效果、网页上禁止选中文字、校验值有效为绿色无效为红色、&#xff09; 目录 一、滑轮滚动保持头部不动 二、暂无数据显示 三、元素隔开距离 四、带背景的文字效果 backgro…

9个相见恨晚的提升办公效率的网站!

推荐9个完全免费的神器网站&#xff0c;每一个都是功能强大&#xff0c;完全免费&#xff0c;良心好用&#xff0c;让你相见恨晚。 1&#xff1a;知犀思维导图 https://www.zhixi.com/ 知犀思维导图是一个完全免费的宝藏在线思维导图工具。它完全免费&#xff0c;界面简洁唯美…

二【单表的增删改查】(只演示增 )

目录1.1 前述1.2 结果映射resultMap1.2.1 字段名和属性名不匹配情况1.2.2 解决方法1.3 使用Insert 方法添加数据&#xff08;涉及主键 问题&#xff09;1.1 前述 MyBatis可以方便的对数据库进行操作&#xff0c;而数据库表可能是一个相对独立的表&#xff08;这里谓之单表&…

2023年1月手机热门品牌型号排行榜(手机行业趋势分析)

近期苹果降价引起人们的关注&#xff0c;并且优惠较大&#xff0c;iPhone 14 Pro系列在苹果官方授权渠道均降价&#xff0c;线下授权门店普遍降价700元左右。iPhone Pro与Pro Max作为苹果的旗舰产品&#xff0c;通常被认为是更为保值的机型&#xff0c;一般来说&#xff0c;不会…

分布式数据库(DorisDB、Clickhouse、TiDB)调研

1. 性能功能特点 B站视频&#xff1a;DorisDB VS ClickHouse OLAP PK 1.1 DorisDB 场量&#xff1a;线上数据应用 访问官方网站DorisDB企业版文档 DorisDB是鼎石科技由Apache Doris核心研发团队打造的新一代企业级MPP数据库。它继承了Apache Doris项目十多年研发成果&…

vr汽修仿真实训教学整体方案软件专业定制

随着网络、多媒体、人机交互等技术的发展,传统的教学模式受到越来越大的挑战.其中,汽车专业教学矛盾较为突出。 传统的汽车专业教学通常采用以PPT、视频、音频等传统视听教学系统的理论教学和实训车间实际操作的实训教学.这种教学模式不仅不能引起学生的学习兴趣,同时需要大量实…

MybatisPlus使用聚合函数

前言 今天遇到了一个求总数返回的情况&#xff0c;我一想这不是用sum就完事了吗。 但是仔细想想&#xff0c;MybatisPlus好像没有直接使用sum的api。 虽然没有直接提供&#xff0c;但是办法还是有的&#xff0c;下面就分享下如何实现的&#xff1a; 首先如果使用sql是这么写…

【计算机网络期末复习】重点知识总复习

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4e3;专栏定位&#xff1a;为想复习学校计算机网络课程的同学提供重点大纲&#xff0c;帮助大家渡过期末考~ &#x1f4da;专栏地址&#xff1a;https://blog.csdn.net/newin2020/cate…

tiktok达人带货,快码住!别错过高ROI达人!【超店有数】

众所周知&#xff0c;tiktok的快速发展带火了一大批的达人。这些达人在有了一定的粉丝基础后&#xff0c;通过营销&#xff0c;实现更多的变现。tiktok达人营销符合当下电商市场的发展需求&#xff0c;能够给电商市场带来积极的经济推动。小编建议商家们要善于利用tiktok达人带…

数据库迁移同步工具你选对了吗?

文章目录前言一、Navicat二、DataX二、TurboDX总结前言 之前在项目中&#xff0c;收到一个紧急需求&#xff0c;要把数据从 PostgreSQL 迁移到 TiDB 中。由于时间紧任务重&#xff0c;来不及调研高效的方式&#xff0c;直接使用了 Navicat 内置的功能&#xff0c;把数据从 Pos…