【开源】基于JAVA语言的实验室耗材管理系统

在这里插入图片描述


目录

  • 一、摘要
    • 1.1 项目介绍
    • 1.2 项目录屏
  • 二、功能模块
    • 2.1 耗材档案模块
    • 2.2 耗材入库模块
    • 2.3 耗材出库模块
    • 2.4 耗材申请模块
    • 2.5 耗材审核模块
  • 三、系统展示
  • 四、核心代码
    • 4.1 查询耗材品类
    • 4.2 查询资产出库清单
    • 4.3 资产出库
    • 4.4 查询入库单
    • 4.5 资产入库
  • 五、免责说明


一、摘要

1.1 项目介绍

基于JAVA+Vue+SpringBoot+MySQL的实验室耗材管理系统,包含了耗材档案模块、耗材入库模块、耗材出库模块、耗材申请模块、耗材审核模块和耗材图表模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,实验室耗材管理系统基于角色的访问控制,给管理员和耗材管理专员使用,可将权限精确到按钮级别,您可以自定义角色并分配权限,系统适合设计精确的权限约束需求。

1.2 项目录屏


二、功能模块

2.1 耗材档案模块

实验室耗材管理系统的耗材档案模块是用来管理和维护实验室中所有耗材的信息的模块。它可以帮助实验室管理人员有效地记录和跟踪实验室中的耗材信息,包括耗材的名称、规格、型号、供应商、采购日期、有效期、存放位置等。

实验室管理人员可以通过耗材档案模块将新购买的耗材信息录入系统中,包括耗材的基本信息和相关属性。实验室管理人员可以根据耗材的各种属性进行查询,快速定位和查找需要的耗材信息。耗材档案模块可以记录耗材的采购日期、供应商信息以及入库数量等,帮助管理人员对耗材进行合理的入库管理。当实验室需要使用某种耗材时,管理人员可以通过耗材档案模块进行出库操作,记录出库数量和使用目的等信息。

耗材档案模块可以实时统计和更新实验室中各种耗材的库存情况,提醒管理人员及时进行补充采购。当某种耗材过期或损坏无法使用时,可以通过耗材档案模块进行报废管理,记录报废原因和处理方式等信息。通过耗材档案模块,实验室管理人员可以更加方便地管理和控制实验室中的耗材,提高耗材的利用率和管理效率。

2.2 耗材入库模块

实验室耗材管理系统的耗材入库模块是用来记录和管理实验室中新购买的耗材入库信息的模块。实验室管理人员可以通过耗材入库模块将新购买的耗材信息录入系统中。包括耗材的名称、规格、型号、供应商、采购日期、有效期等基本信息。录入耗材信息时,还可以添加附加属性,如物料编号、批次号、条形码等。在录入耗材信息的同时,管理人员需要填写入库数量。系统会自动计算并更新库存数量,方便管理人员实时掌握实验室中各种耗材的库存情况。

耗材入库模块通常也包含供应商管理功能,可以记录供应商的联系信息、合作情况和评价等。在入库时,管理人员可以选择已经建立的供应商,并关联相应的耗材采购信息。耗材入库模块一般会生成入库单,用于记录每次耗材入库的详细信息,包括入库日期、供应商、采购单号、入库人等。管理人员可以根据入库单进行查询和统计,方便日后追溯和审核。有些实验室可能需要对入库的耗材进行质检。耗材入库模块可以提供相应的功能,管理人员可以记录质检结果、质检人员和质检日期等信息,确保入库的耗材符合实验室的质量要求。通过耗材入库模块,实验室管理人员可以方便地记录和管理实验室中新购买的耗材信息,及时更新库存数量,提高耗材管理的效率和准确性。

2.3 耗材出库模块

实验室耗材管理系统的耗材出库模块是用来记录和管理实验室中耗材的出库信息的模块。实验室管理人员可以通过耗材出库模块根据耗材的名称、规格、型号等信息进行查询,快速定位需要出库的耗材。管理人员可以通过耗材出库模块进行耗材的出库操作。在出库时,需要填写出库数量以及使用目的等相关信息。同时,系统会自动更新库存数量,确保库存信息的准确性。耗材出库模块一般会生成出库单,记录每次耗材出库的详细信息,包括出库日期、出库人、领用单位等。这些信息可以用于后续的追溯和审核。

耗材出库模块可以记录每次耗材的使用记录,包括使用人、使用日期、使用目的等。这样可以方便实验室管理人员对耗材的使用情况进行统计和分析。在耗材出库模块中,可以设置库存预警功能。当某种耗材的库存数量低于预设阈值时,系统会自动生成提醒通知,以便管理人员及时进行补充采购。通过耗材出库模块,实验室管理人员可以方便地记录和管理实验室中耗材的出库信息,及时更新库存数量,提高耗材管理的效率和准确性。

2.4 耗材申请模块

实验室耗材管理系统的耗材申请模块是用来方便实验室人员提交耗材申请并进行审批流程的模块。实验室内的人员可以通过耗材申请模块提交耗材的申请。在申请时,需要填写所需耗材的名称、数量、用途等相关信息。耗材申请模块一般会设计审批流程,包括申请人、审批人、审批顺序等。申请人提交耗材申请后,相应的审批人会收到通知,进行审批操作。系统会记录每个审批环节的处理情况,以便后续查询和追溯。耗材申请模块会根据用户的权限设置不同的审批权限。只有具有相应权限的人员才能进行审批操作,确保审批过程的安全性和准确性。

耗材申请模块会记录每次耗材申请的详细信息,包括申请日期、申请人、审批状态等。管理人员可以通过查询功能查看和统计申请记录,方便管理和掌握实验室内的耗材使用情况。耗材申请模块会通过系统消息或邮件等方式通知相关人员的申请状态和审批结果,提高沟通效率和及时性。通过耗材申请模块,实验室内的人员可以方便地提交耗材申请并进行审批流程,提高申请的准确性和效率。同时,管理人员可以更好地掌握和管理实验室的耗材使用情况。

2.5 耗材审核模块

实验室耗材管理系统的耗材审核模块是该系统中的一个重要部分,用于对实验室耗材的采购申请进行审核和管理。实验室成员可以通过系统向耗材审核模块提交耗材采购申请,包括所需耗材的名称、规格、数量、用途等信息。申请提交后,会自动生成一个申请单。申请单会经过一定的审核流程,根据实验室的设定,可以包括多级审核。审核人员可以对申请单进行审核、审批以及驳回操作。审核人员可以查看申请单的详细信息,包括耗材的具体需求和用途。

系统会记录每一次审核的结果和审核人的意见,以便后续查询和审计。审核记录可在系统中进行查看和导出,方便实验室管理人员进行数据分析和监控。系统可以通过邮件、短信等方式向相关人员发送审核结果的通知,提醒实验室成员耗材采购申请的进展情况。审核通过的耗材采购申请可以自动更新实验室的耗材库存信息,方便实验室管理人员进行库存管理和统计。

通过耗材审核模块,实验室可以实现对耗材采购申请的规范化、集中化管理,提高审核效率,减少人工操作和错误,确保实验室耗材的合理使用和供应链管理的准确性。


三、系统展示

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


四、核心代码

4.1 查询耗材品类

@ApiOperation(value = "查询耗材品类")
@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
public Result<IPage<AssetsType>> getByPage(@ModelAttribute AssetsType assetsType, @ModelAttribute PageVo page, @RequestParam(required = false) String natureType) {QueryWrapper<AssetsType> qw = new QueryWrapper<AssetsType>();if(StrUtil.isNotBlank(natureType)) {if(natureType.equals("1")){qw.eq("nature", "固定资产");}else{qw.eq("nature", "耗材");}}if(!ZwzNullUtils.isNull(assetsType.getNature())) {qw.eq("nature", assetsType.getNature());}if(!ZwzNullUtils.isNull(assetsType.getAssetName())) {qw.like("asset_name", assetsType.getAssetName());}return new ResultUtil<IPage<AssetsType>>().setData(iAssetsTypeService.page(PageUtil.initMpPage(page),qw));
}

4.2 查询资产出库清单

@ApiOperation(value = "查询资产出库清单")
@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
public Result<IPage<WarehouseOut>> getByPage(@ModelAttribute WarehouseOut warehouseOut, @ModelAttribute PageVo page){QueryWrapper<WarehouseOut> qw = new QueryWrapper<WarehouseOut>();if(!ZwzNullUtils.isNull(warehouseOut.getNature())) {qw.eq("nature", warehouseOut.getNature());}if(!ZwzNullUtils.isNull(warehouseOut.getAssetName())) {qw.like("asset_name", warehouseOut.getAssetName());}if(!ZwzNullUtils.isNull(warehouseOut.getRecipients())) {qw.like("recipients", warehouseOut.getRecipients());}IPage<WarehouseOut> data = iWarehouseOutService.page(PageUtil.initMpPage(page),qw);for (WarehouseOut wh : data.getRecords()) {AssetsType assetsType = iAssetsTypeService.getById(wh.getAssetId());double existnumber = Double.parseDouble(assetsType.getExistingNumber()) + Double.parseDouble(wh.getNumber());wh.setExistNumber("" + existnumber);}return new ResultUtil<IPage<WarehouseOut>>().setData(data);
}

4.3 资产出库

@ApiOperation(value = "资产出库")
@RequestMapping(value = "/insertOrUpdate", method = RequestMethod.POST)
public Result<WarehouseOut> saveOrUpdate(WarehouseOut warehouseOut){WarehouseOut oldWarehouseOut = iWarehouseOutService.getById(warehouseOut.getId());double oldNumber = 0.0;if(oldWarehouseOut != null){oldNumber = Double.parseDouble(oldWarehouseOut.getNumber());}// outNumber 要出库的数量double outNumber = Double.parseDouble(warehouseOut.getNumber());AssetsType oldAssetsType = iAssetsTypeService.getById(warehouseOut.getAssetId());if(oldAssetsType != null){// newNumber 出库后还有的数量 = 仓库原本还有的数量 - 出库单的出库数量 + 原有出库单的出库数量Double newNumber = Double.parseDouble(oldAssetsType.getExistingNumber()) - outNumber + oldNumber;if(newNumber >= 0){oldAssetsType.setExistingNumber(newNumber + "");iAssetsTypeService.saveOrUpdate(oldAssetsType);}else{return ResultUtil.error("手慢啦!库存不足!");}}if(ZwzNullUtils.isNull(warehouseOut.getId())) {warehouseOut.setAuditStatus(0);warehouseOut.setAuditTime("");}if(iWarehouseOutService.saveOrUpdate(warehouseOut)){return new ResultUtil<WarehouseOut>().setData(warehouseOut);}return ResultUtil.error();
}

4.4 查询入库单

@ApiOperation(value = "查询资产入库清单")
@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
public Result<IPage<Warehousing>> getByPage(@ModelAttribute Warehousing warehousing, @ModelAttribute PageVo page){QueryWrapper<Warehousing> qw = new QueryWrapper<Warehousing>();if(!ZwzNullUtils.isNull(warehousing.getNature())) {qw.eq("nature", warehousing.getNature());}if(!ZwzNullUtils.isNull(warehousing.getAssetName())) {qw.like("asset_name", warehousing.getAssetName());}if(!ZwzNullUtils.isNull(warehousing.getInvoice())) {qw.like("invoice", warehousing.getInvoice());}return new ResultUtil<IPage<Warehousing>>().setData(iWarehousingService.page(PageUtil.initMpPage(page),qw));
}

4.5 资产入库

@ApiOperation(value = "资产入库")
@RequestMapping(value = "/insertOrUpdate", method = RequestMethod.POST)
public Result<Warehousing> insertOrUpdate(Warehousing warehousing){Warehousing oldWarehousing = iWarehousingService.getById(warehousing.getId());double oldNumber = 0.0;if(oldWarehousing != null){oldNumber = oldWarehousing.getNumber() == null ? 0.0 : Double.parseDouble(oldWarehousing.getNumber());}// 入库,更新库存AssetsType assetsType = iAssetsTypeServicel.getById(warehousing.getAssetId());if(assetsType != null){// number = 现在仓库总数量 + 该入库单现增加数量 - 该入库单原有增加数量double number = Double.parseDouble(assetsType.getNumber()) + Double.parseDouble(warehousing.getNumber()) - oldNumber;assetsType.setNumber(number + "");assetsType.setTotalPrice((Double.parseDouble(assetsType.getUnitPrice()) * number) + "");// existNumber = 现在仓库存在数量 + 该入库单现增加数量 - 该入库单原有增加数量double existNumber = Double.parseDouble(assetsType.getExistingNumber()) + Double.parseDouble(warehousing.getNumber()) - oldNumber;if(existNumber < 0)  {return ResultUtil.error("入库数量大于已出库数量!");}assetsType.setExistingNumber(existNumber + "");iAssetsTypeServicel.saveOrUpdate(assetsType);}if(iWarehousingService.saveOrUpdate(warehousing)){return new ResultUtil<Warehousing>().setData(warehousing);}return ResultUtil.error();
}

五、免责说明

  • 本项目仅供个人学习使用,商用授权请联系博主,否则后果自负。
  • 博主拥有本软件构建后的应用系统全部内容所有权及独立的知识产权,拥有最终解释权。
  • 如有问题,欢迎在仓库 Issue 留言,看到后会第一时间回复,相关意见会酌情考虑,但没有一定被采纳的承诺或保证。

下载本系统代码或使用本系统的用户,必须同意以下内容,否则请勿下载!

  1. 出于自愿而使用/开发本软件,了解使用本软件的风险,且同意自己承担使用本软件的风险。
  2. 利用本软件构建的网站的任何信息内容以及导致的任何版权纠纷和法律争议及后果和博主无关,博主对此不承担任何责任。
  3. 在任何情况下,对于因使用或无法使用本软件而导致的任何难以合理预估的损失(包括但不仅限于商业利润损失、业务中断与业务信息丢失),博主概不承担任何责任。
  4. 必须了解使用本软件的风险,博主不承诺提供一对一的技术支持、使用担保,也不承担任何因本软件而产生的难以预料的问题的相关责任。

在这里插入图片描述

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

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

相关文章

【现代控制系统】从状态方程导出微分方程

从状态方程导出微分方程 2023年6月20日 1. 基本方法 状态空间表达式&#xff1a; x ˙ ( t ) A x ( t ) B u ( t ) y ( t ) C x ( t ) D u ( t ) \begin{aligned} &\dot{ x}(t){ A }{ x }(t){ B }{ u } (t) \\ &{ y }(t){ C } { x }(t){ D } { u }(t) \end{alig…

基于Javaweb开发的二手图书零售系统详细设计【附源码】

基于Javaweb开发的二手图书零售系统详细设计【附源码】 &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定制系统…

java的==运算符和equals详解

①chatgpt的解释 在Java中&#xff0c;和equals都是用于比较两个对象的操作符&#xff0c;但它们的行为和用途有所不同。 操作符&#xff1a; 对于基本数据类型&#xff0c;比较的是它们的值是否相等。例如&#xff0c;int a 5; int b 5; System.out.println(a b); // 输出t…

内网穿透natapp使用教程(Linux)

我的使用场景&#xff1a;在家访问学校服务器&#xff0c;由于不在一个局域网&#xff0c;所以需要使用内网穿透&#xff0c;我使用的是natapp。需要在有局域网的时候做好以下步骤。 &#xff08;natapp官网&#xff1a;https://natapp.cn/&#xff09; 1. 下载客户端 &#x…

springboot入门2

学习目标&#xff1a; 了解数据库配置加密方法&#xff0c;数据库连接池&#xff0c;mybatis-paginationInterceptor分页&#xff0c;pagehelper分页常用功能 学习内容&#xff1a; 1、mybatis plus配置加密 1.1、生成加密配置 package sccba.example;import com.baomidou…

盲盒App小程序开发:引领未来购物新潮流

随着科技的不断发展&#xff0c;我们的购物方式也在不断改变。近年来&#xff0c;盲盒购物逐渐成为了一种新型的消费模式&#xff0c;受到了广大消费者的热烈欢迎。为了满足消费者的需求&#xff0c;越来越多的企业开始涉足盲盒App的开发。本文将探讨盲盒App开发的意义、前景以…

[嵌入式软件][启蒙篇][仿真平台] STM32F103实现IIC控制OLED屏幕

上一篇&#xff1a;[嵌入式软件][启蒙篇][仿真平台] STM32F103实现LED、按键 [嵌入式软件][启蒙篇][仿真平台] STM32F103实现串口输出输入、ADC采集 [嵌入式软件][启蒙篇][仿真平台]STM32F103实现定时器 [嵌入式软件][启蒙篇][仿真平台] STM32F103实现IIC控制OLED屏幕 文章目…

【GitHub项目推荐--国外名校AI教程】【转载】

这个开源项目搜集了 YouTube 上优质的机器学习教程&#xff0c;方向包括机器学习、深度学习、计算机视觉、自然语言处理、无监督学习等等。 开源地址&#xff1a;https://github.com/dair-ai/ML-YouTube-Courses

[260. 只出现一次的数字 III](C语言题解)(位运算)(力扣)

> Problem: [260. 只出现一次的数字 III](260. 只出现一次的数字 III - 力扣&#xff08;LeetCode&#xff09;) # 思路 > 想到数组中只有一个数只出现了一次的解法&#xff1a;**所有数异或&#xff0c;最后答案就是那个只出现一次的数**&#xff0c;该题只需将两个不…

Kubernetes成本优化

云原生可以帮助团队更精细化利用资源&#xff0c;但如果缺乏工具的帮助&#xff0c;很难采取适当的措施优化资源的使用。本文介绍了若干用于可视化Kubernetes资源使用情况的工具&#xff0c;并且可以自定义策略优化资源使用&#xff0c;实现更好的成本优化。原文: Kubernetes C…

《WebKit 技术内幕》学习之十五(5):Web前端的未来

5 Crosswalk项目 Crosswalk项目是由英特尔公司发起的一个开源项目&#xff0c;该项目基于WebKit&#xff08;Blink&#xff09;和Chromium等开源项目打造&#xff0c;其目的是提供一个跨不同操作系统的Web运行环境&#xff0c;包括Android、Tizen、Linux、Windows、MacOS等众多…

python使用PaddleOCR实现《命名实体识别项目》OCR(已实现)(ai领域必看,简单易用)

1.简介&#xff1a; PaddleOCR是飞桨&#xff08;PaddlePaddle&#xff09;推出的一个端到端的光学字符识别开源工具集&#xff0c;支持中文、英文、数字以及特殊符号等各种类型的文字检测、识别和词语整体识别。该工具集使用PaddlePaddle深度学习框架技术&#xff0c;提供了多…

Likeshop多商户商城源码系统,支持二开

在电商行业高速发展的当下&#xff0c;拥有一套功能强大、易于操作的开源商城系统至关重要。Likeshop多商户商城系统正是这样一款集H5、小程序、独立APP于一体的开源电商解决方案&#xff0c;助力商家实现智能营销。 一、产品简介 Likeshop多商户商城系统为商家提供了丰富的营…

Spring Boot 中 Service 层依赖注入问题

目录 问题描述 产生错误 问题原因 解决方法 手动注入方法 1、使用工具集 hutool&#xff0c;引入 Maven 依赖 2、编写 SpringUtil 工具类 问题描述 Controller 层方法为 static 静态&#xff0c;引入 Service 层时使用 Autowired 注解自动装配&#xff0c;Controller层方…

C#用 DateAndTime.DateAdd方法和DateTime.Add(TimeSpan) 方法分别添加一段时间间隔

目录 一、基本方法 1.用 DateAndTime.DateAdd方法添加一段时间间隔 2.用DateTime.Add方法添加一段时间间隔 二、实例 1.实例1&#xff1a;用 DateAndTime.DateAdd方法 2.实例2&#xff1a;用DateTime.Add方法 一、基本方法 1.用 DateAndTime.DateAdd方法添加一段时间间隔…

Android发展历程及安装

目录 发展历程 下载网址 安装过程 发展历程 安卓基于Linux内核&#xff0c;Linux内核相当于房屋的地基 开源不等于免费&#xff0c;不能商用 安卓一般每半年小更新&#xff0c;一年大更新 对应API相当于别名 现在安卓安全性越来越高&#xff0c;性能越来越快&#xff0c…

2024年预制菜行业市场发展趋势分析(2021-2023年预制菜行业数据分析)

近期&#xff0c;老干妈被称为预制菜、预制菜国标报送稿出炉等事件再次引起大众对于预制菜市场的讨论。随着国家对预制菜审核标准的严格化&#xff0c;预制菜市场未来走向将会如何&#xff1f;鲸参谋带大家从数据角度来了解。 首先来看下预制菜市场的行业发展情况。 根据鲸参…

蓝桥杯备赛 week 4 —— DP 背包问题

目录 &#x1f308;前言&#x1f308;&#xff1a; &#x1f4c1; 01背包问题 分析&#xff1a; dp数组求解&#xff1a; 优化&#xff1a;滚动数组&#xff1a; &#x1f4c1; 完全背包问题 &#x1f4c1; 总结 &#x1f308;前言&#x1f308;&#xff1a; 这篇文章主…

大数据就业方向-(工作)ETL开发

上一篇文章&#xff1a; 大数据 - 大数据入门第一篇 | 关于大数据你了解多少&#xff1f;-CSDN博客 目录 &#x1f436;1.ETL概念 &#x1f436;2. ETL的用处 &#x1f436;3.ETL实现方式 &#x1f436;4. ETL体系结构 &#x1f436;5. 什么是ETL技术&#xff1f; &…

MySQL JSON数据类型全解析(JSON datatype and functions)

JSON&#xff08;JavaScript Object Notation&#xff09;是一种常见的信息交换格式&#xff0c;其简单易读且非常适合程序处理。MySQL从5.7版本开始支持JSON数据类型&#xff0c;本文对MySQL中JSON数据类型的使用进行一个总结。 目录 一、MySQL中的JSON 1.1 JSON数据格式 1.2 …