尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Spring Boot诊所药品库存管理系统:从零部署到核心功能实战

Spring Boot诊所药品库存管理系统:从零部署到核心功能实战 这次我们来看一个专门解决诊所药品库存管理痛点的完整项目基于 Spring Boot 的诊所药物库管理系统。对于诊所、药房或小型医疗机构来说药品的进销存管理是核心业务也是最容易出乱子的地方。药品档案混乱、采购入库与销售出库记录不清、过期药品无法预警、库存数据不透明任何一个环节的疏漏都可能导致经济损失甚至医疗风险。这个项目提供了一个前后端分离的完整解决方案覆盖了从药品档案、供应商管理到采购入库、销售出库、库存盘点、过期预警和可视化统计的全流程。它不是一个简单的增删改查 Demo而是包含了实际业务逻辑、数据校验和统计分析的实战型系统。对于 Java 开发者尤其是正在学习或使用 Spring Boot 进行企业级应用开发的同学来说这是一个非常好的练手和参考项目能让你理解一个完整业务系统是如何从数据库设计到前端展示一步步构建起来的。本文将带你快速了解这个系统的核心功能、技术栈构成并重点演示如何从零开始部署和运行这个项目。我们会从环境准备、数据库初始化、项目启动到关键业务功能如采购入库、销售出库、库存统计的操作验证一步步走通整个流程。无论你是想学习 Spring Boot 项目实战还是为诊所、药店寻找一个可用的管理工具原型这篇文章都能提供直接的参考。1. 核心能力速览在深入代码之前我们先通过一个表格快速了解这个诊所药物库管理系统的核心特性和技术门槛让你判断它是否适合你的需求或学习计划。能力项说明项目类型企业级 Web 应用诊所/药店药品库存管理系统技术栈后端Spring Boot, MyBatis/MyBatis-Plus, Spring Security前端Vue.js, Element-UI (根据常见模式推断)数据库MySQL核心功能药品档案管理、供应商管理、采购入库、销售出库、库存盘点、过期预警、多维度可视化统计部署方式标准 Spring Boot Jar 包部署支持命令行或脚本启动硬件门槛极低。普通开发机或云服务器即可运行无需 GPU。主要依赖 JVM 和 MySQL 服务。是否支持 API是。基于 Spring Boot 构建天然提供 RESTful API 接口便于二次集成。是否支持批量任务通常支持。采购单、销售单的批量录入以及库存盘点、过期预警等后台任务。适合场景1.学习场景Spring Boot 全栈项目实战学习。2.原型验证为小型诊所、药店快速搭建药品管理系统的原型。3.二次开发基于此项目进行定制化开发满足特定业务需求。从表格可以看出这是一个典型的 Java EE 全栈项目技术选型成熟稳定学习资源和社区支持都非常丰富。它的重点不在于高并发或算法创新而在于业务逻辑的完整性和数据管理的规范性这正是很多业务系统的核心。2. 适用场景与使用边界在决定使用或学习这个项目之前明确它的适用场景和边界非常重要。这个系统最适合谁Java/Spring Boot 学习者如果你已经掌握了 Spring Boot 基础想找一个包含完整业务逻辑非 CRUD的项目来提升实战能力这个项目非常合适。你能学到权限管理、复杂业务事务、报表统计等实战技能。小型医疗机构管理者或开发者对于个体诊所、社区医院、小型药房需要一套轻量、易用、成本可控的药品管理工具。此项目可以作为原型经过必要的测试和定制后投入试用。毕业设计或课程项目需求者项目主题明确药品管理功能模块清晰业务逻辑具有代表性且技术栈符合主流企业要求是完成学业项目的优秀选题。它能解决什么问题库存混乱通过严格的药品档案编号、名称、规格、厂家管理和唯一的库存记录确保账实相符。流程不清规范采购入库和销售出库流程每一笔药品流动都有单据可查责任到人。效期风险系统自动监控药品有效期提供过期预警和近效期药品报表避免使用过期药品。决策缺乏数据通过可视化图表展示库存量、畅销药品、采购/销售趋势为管理者提供数据支持。它不适合什么场景大型医院或连锁药房这类场景对并发性能、分布式架构、多机构协同、与 HIS医院信息系统对接等有更高要求本项目作为单体应用可能无法满足。即开即用的 SaaS 服务本项目需要自行部署和维护服务器、数据库适合有一定技术能力的团队或个人。它不是开箱即用的云服务。复杂的药品 GSP 认证需求如果业务需要符合严格的《药品经营质量管理规范》GSP本系统可能需要深度定制增加大量流程控制和记录追踪功能。合规与安全边界提醒数据安全系统涉及药品信息、供应商信息、销售记录等敏感数据。部署时必须确保数据库访问安全强密码、非默认端口、限制 IP 访问并定期备份。业务合规系统本身是工具实际使用中必须确保所有药品的采购、销售符合国家相关法律法规。特别是处方药的管理必须结合线下严格的审核流程。授权与隐私如果用于真实业务需确保对操作人员进行严格的权限划分和操作培训防止数据误操作或泄露。3. 环境准备与前置条件要成功运行这个 Spring Boot 项目你需要准备好以下基础环境。请确保你的开发机或服务器满足这些要求。操作系统支持 Windows 10/11, macOS, Linux (如 Ubuntu 20.04, CentOS 7)。本文演示以 Windows 为例Linux/macOS 命令略有不同。Java 开发环境JDK版本 1.8 或更高推荐 JDK 8, JDK 11 或 JDK 17。这是 Spring Boot 运行的基础。验证命令打开终端或命令提示符输入java -version和javac -version确认版本号正确。项目管理与构建工具Maven版本 3.6。用于管理项目依赖和打包。如果你使用 IDEA 或 Eclipse它们通常内置了 Maven。验证命令mvn -v数据库MySQL版本 5.7 或 8.0。这是项目持久化数据的核心。你需要安装 MySQL 服务记住 root 密码并创建一个用于本项目的专用数据库如clinic_drug_db。代码编辑器/IDE用于查看和修改代码非必须但强烈推荐IntelliJ IDEA(社区版或旗舰版)Eclipse(需安装 Spring Tools 插件)VS Code(需安装 Java 扩展包)Node.js 与 npm如果前端代码需要独立运行或构建本项目通常是前后端分离的。后端提供 API前端是独立的 Vue 项目。如果你拿到的是前后端代码可能需要 Node.js 环境来运行前端。版本Node.js 14 npm 6。验证命令node -v,npm -v环境检查清单[ ] JDK 已安装且版本正确[ ] Maven 已安装且能正常执行mvn命令[ ] MySQL 服务已启动并能用 root 账号登录[ ] 已准备好一个空的数据库如clinic_drug_db[ ] 网络通畅能访问 Maven 中央仓库以下载依赖4. 安装部署与启动方式假设你已经从开源仓库如 GitHub、Gitee或其它渠道获取到了项目的完整源代码。项目结构通常如下clinic-drug-management/ ├── backend/ # Spring Boot 后端项目 │ ├── src/ │ ├── pom.xml │ └── ... ├── frontend/ # Vue 前端项目 │ ├── src/ │ ├── package.json │ └── ... └── sql/ # 数据库初始化脚本 └── init.sql我们按照标准流程进行部署。4.1 数据库初始化这是第一步也是关键一步。系统运行依赖正确的表结构和初始数据。登录 MySQL使用你的 MySQL 客户端如命令行、Navicat、MySQL Workbench。创建数据库CREATE DATABASE IF NOT EXISTS clinic_drug_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE clinic_drug_db;执行 SQL 脚本找到项目中的sql/init.sql文件或类似命名的文件将其中的 SQL 语句在你的clinic_drug_db数据库中执行。这个脚本会创建所有必要的表如drug、supplier、purchase_order、sale_order、inventory等并可能插入一些测试数据。命令行方式mysql -u root -p clinic_drug_db /path/to/init.sql图形化工具直接打开 SQL 文件并执行。4.2 后端项目配置与启动后端是系统的核心负责业务逻辑和 API。修改数据库配置进入backend目录找到配置文件通常是src/main/resources/application.yml或application.properties。# application.yml 示例 spring: datasource: url: jdbc:mysql://localhost:3306/clinic_drug_db?useUnicodetruecharacterEncodingutf-8useSSLfalseserverTimezoneAsia/Shanghai username: root # 替换为你的数据库用户名 password: your_password # 替换为你的数据库密码 driver-class-name: com.mysql.cj.jdbc.Driver jpa: hibernate: ddl-auto: update # 如果已用SQL初始化这里可以设为 validate 或 none show-sql: true # 开发环境可开启查看SQL日志重点将username、password和url中的数据库连接信息修改为你自己的。如果数据库不在本机localhost需改为服务器 IP。编译打包在backend目录下打开终端执行 Maven 打包命令。# 清理并打包跳过测试 mvn clean package -DskipTests执行成功后会在target目录下生成一个backend-0.0.1-SNAPSHOT.jar名称可能不同的文件。启动后端服务# 进入 target 目录 cd target # 启动 Spring Boot 应用 java -jar backend-0.0.1-SNAPSHOT.jar如果看到类似以下的日志说明启动成功Started Application in 5.567 seconds (JVM running for 6.112) Tomcat started on port(s): 8080 (http) with context path 默认服务运行在http://localhost:8080。你可以通过访问http://localhost:8080/api/health或http://localhost:8080/swagger-ui.html如果集成了 Swagger来测试 API 是否可用。4.3 前端项目配置与启动如果前后端分离如果前端是独立的 Vue 项目需要单独启动。安装依赖进入frontend目录执行以下命令安装项目所需的 npm 包。npm install # 如果网络慢可以使用淘宝镜像npm install --registryhttps://registry.npmmirror.com配置后端 API 地址前端需要知道后端服务的地址。通常配置文件在src/config/index.js或vue.config.js中或者通过环境变量.env设置。找到并修改 API 基础 URL指向你后端服务的地址如http://localhost:8080。// 例如在 vue.config.js 中配置代理 module.exports { devServer: { proxy: { /api: { target: http://localhost:8080, // 后端地址 changeOrigin: true } } } }启动前端开发服务器npm run serve启动成功后终端会提示访问地址通常是http://localhost:8081。此时前端页面会通过代理将/api的请求转发到后端。一键启动方案如果项目提供 有些开源项目会提供docker-compose.yml或一键启动脚本。如果有部署会更简单。Docker Compose在项目根目录执行docker-compose up -d它会自动拉取 MySQL 镜像、构建后端和前端镜像并启动所有服务。启动脚本查看项目根目录是否有start.sh(Linux/macOS) 或start.bat(Windows) 脚本按照说明执行即可。5. 功能测试与效果验证系统启动后我们通过浏览器访问前端页面如http://localhost:8081进行功能测试。默认登录账号密码通常在项目的 README 或init.sql脚本中注明常见如admin/admin或admin/123456。登录后我们针对核心业务模块进行逐一验证。5.1 药品档案管理测试这是所有业务的基础测试药品信息的增删改查。测试目的验证药品基础信息管理的完整性和准确性。操作步骤进入“药品管理”或“药品档案”菜单。点击“新增”填写药品信息药品编号唯一、通用名、商品名、规格、剂型、生产厂家、批准文号、库存上下限、有效期月等。保存后在列表页查看新增的记录。尝试编辑某条药品信息修改后保存。尝试删除一条测试数据注意如果该药品已有库存或业务记录系统应提示无法删除这是业务逻辑严谨性的体现。预期结果新增、编辑、删除操作成功页面有相应提示。列表支持按药品名、编号、厂家等条件查询。药品编号重复时应提示错误。判断成功药品信息能正确持久化到数据库drug表中且前端展示一致。5.2 供应商管理测试测试供应商信息的维护。操作步骤类似药品管理新增一个供应商填写名称、联系人、电话、地址等信息。预期结果供应商信息可被成功引用到后续的采购单中。5.3 采购入库流程测试这是库存增加的核心流程测试从创建采购单到库存增加的全过程。测试目的验证采购业务闭环确保库存数据准确更新。操作步骤进入“采购管理” - “采购入库”。点击“新建采购单”。选择上一步创建的供应商。添加采购明细选择药品、输入采购单价、采购数量、生产批号、生产日期、有效期至。保存采购单此时状态可能是“待审核”或“已提交”。执行“审核通过”操作模拟库管或负责人审批。执行“入库”操作。这是关键一步操作后对应药品的库存数量应增加。预期结果采购单状态流转正确新建 - 审核 - 入库。入库后该药品的库存数量立即增加。可以在“库存查询”页面查看到更新后的库存数量、批次和效期信息。判断成功数据库inventory表或stock表中对应药品的quantity字段增加了采购的数量并且batch_number和expiry_date信息被记录。5.4 销售出库流程测试这是库存减少的核心流程测试从创建销售单到库存扣减的全过程。测试目的验证销售业务闭环确保库存扣减准确并防止超卖。操作步骤进入“销售管理” - “销售出库”。点击“新建销售单”。可能需要选择客户或直接零售。添加销售明细选择药品、输入销售单价、销售数量。关键点系统应自动校验当前库存是否充足。保存销售单。执行“出库”操作。操作后对应药品的库存数量应减少。预期结果如果销售数量大于库存系统应提示“库存不足”并禁止保存。出库后库存数量准确减少。销售记录可查并与库存变动关联。判断成功库存数量准确扣减销售记录与库存流水对应。5.5 库存盘点与过期预警测试测试库存校对和效期监控功能。库存盘点进入“库存管理” - “库存盘点”。系统列出所有药品的理论库存。可以输入实际盘点数量生成盘点单盘盈或盘亏。审核盘点单后系统应自动调整库存数量至实际数。过期预警进入“报表统计”或“预警中心”。查看“近效期药品”或“过期药品”报表。系统应能根据药品的有效期至字段自动筛选出即将过期如30天内或已过期的药品并醒目提示。判断成功盘点功能能生成差异记录并调整库存。预警功能能基于有效期数据正确筛选和报警。5.6 可视化统计测试测试数据报表和图表功能这是管理者最关心的部分。操作步骤查看“数据统计”、“报表中心”或仪表盘页面。预期内容库存总量与金额当前总库存药品数及总价值。库存预警库存低于安全下限或高于上限的药品列表。畅销药品排行按销售数量或金额排序的药品 Top 10。采购/销售趋势图按日、周、月展示的采购入库和销售出库趋势折线图。效期分布图药品有效期分布的饼图或柱状图。判断成功图表能正常加载数据与业务记录吻合图表交互如切换时间范围正常。6. 接口 API 与批量任务作为一个 Spring Boot 后端它提供了完整的 RESTful API这意味着你可以不通过前端页面直接调用接口来集成或自动化任务。6.1 API 接口概览与调用启动服务后如果项目集成了Swagger或Knife4j访问http://localhost:8080/doc.html或http://localhost:8080/swagger-ui.html即可看到所有 API 文档并在线测试。如果没有文档通常 API 遵循 RESTful 风格你可以通过浏览器开发者工具的“网络”选项卡观察前端操作时发出的请求来了解接口格式。通用 API 调用示例Python 假设我们要通过 API 查询药品列表。import requests import json # 1. 登录获取 Token (如果系统使用JWT等认证方式) login_url http://localhost:8080/api/auth/login login_data { username: admin, password: admin123 } login_resp requests.post(login_url, jsonlogin_data) token login_resp.json().get(data).get(token) # 根据实际返回结构调整 headers {Authorization: fBearer {token}} # 2. 调用查询药品列表的接口 drug_list_url http://localhost:8080/api/drug/list params { pageNum: 1, pageSize: 10, drugName: 阿莫西林 # 可选查询条件 } list_resp requests.get(drug_list_url, paramsparams, headersheaders) print(json.dumps(list_resp.json(), indent2, ensure_asciiFalse))通用 API 调用示例使用 curl# 登录 curl -X POST http://localhost:8080/api/auth/login \ -H Content-Type: application/json \ -d {username:admin, password:admin123} # 使用返回的token查询假设token在响应体的data.token字段 TOKENcurl -s -X POST ... | jq -r .data.token # 需要安装jq解析JSON curl -X GET http://localhost:8080/api/drug/list?pageNum1pageSize10 \ -H Authorization: Bearer $TOKEN6.2 批量任务处理药品管理系统中的批量任务很常见例如批量导入药品档案通过 Excel 或 CSV 文件导入。批量盘点上传盘点表格系统批量更新库存。批量设置预警为一批药品统一设置库存上下限。实现方式前端上传 后端解析前端提供文件上传组件后端使用 Apache POI处理 Excel或 OpenCSV 解析文件并循环调用单条新增/更新逻辑在一个事务中完成。异步任务对于非常耗时的批量操作如导入数万条记录后端可以将其提交到线程池或消息队列如 RabbitMQ异步执行并通过任务ID反馈进度。接口批量调用通过编写脚本循环调用单个新增接口。不推荐因为效率低且事务难以控制。后端批量插入示例MyBatis-Plus// Service 层方法 Transactional(rollbackFor Exception.class) // 开启事务任何失败则全部回滚 public boolean batchImportDrugs(ListDrug drugList) { if (CollectionUtils.isEmpty(drugList)) { return false; } // 这里可以加入业务校验如重复编号检查 for (Drug drug : drugList) { // ... 校验逻辑 } // 使用 MyBatis-Plus 的 saveBatch 方法 return drugService.saveBatch(drugList); }7. 资源占用与性能观察对于 Spring Boot MySQL 的 Web 应用性能瓶颈通常出现在数据库和业务逻辑复杂度上而非内存或 CPU。内存占用一个刚启动的 Spring Boot 应用JVM 堆内存占用通常在 200MB - 500MB 之间随着业务运行会有所增长。你可以使用jconsole、jvisualvm或arthas等工具监控。CPU 占用在无并发请求时CPU 占用率很低。性能测试时应关注高并发下的 CPU 使用率和数据库连接池。数据库连接确保application.yml中配置的数据库连接池如 HikariCP参数合理特别是最大连接数 (maximum-pool-size)避免连接耗尽。spring: datasource: hikari: maximum-pool-size: 10 # 根据实际并发调整 connection-timeout: 30000响应时间观察使用浏览器开发者工具“网络”选项卡或使用 API 测试工具如 Postman观察关键接口的响应时间。药品列表查询、复杂报表生成等操作应是关注重点。优化建议数据库索引为经常用于查询条件的字段如drug_name,batch_number,expiry_date添加索引能极大提升查询性能。SQL 优化避免在循环中查询数据库使用JOIN或批量查询。缓存对于不经常变动的数据如药品分类、供应商列表可以考虑使用 Redis 或 Spring Cache 进行缓存。报表异步生成复杂的统计报表可以改为异步生成生成完成后通知用户下载。8. 常见问题与排查方法在部署和运行过程中你可能会遇到以下问题。这里提供通用的排查思路。问题现象可能原因排查方式解决方案应用启动失败端口冲突8080 端口被其他程序占用1. 查看启动日志是否有Port 8080 was already in use错误。2. 使用命令netstat -ano | findstr :8080(Win) 或lsof -i:8080(Linux/macOS) 查看占用进程。1. 终止占用端口的进程。2. 在application.yml中修改服务端口server.port: 8081。启动时报数据库连接错误1. MySQL 服务未启动。2. 数据库配置错误IP、端口、库名、用户名、密码。3. 数据库驱动版本不匹配。1. 检查 MySQL 服务状态。2. 核对application.yml中的spring.datasource配置。3. 检查pom.xml中的mysql-connector-java版本。1. 启动 MySQL 服务。2. 修正配置信息。3. 尝试使用与 MySQL 版本匹配的驱动。前端页面能打开但列表无数据或操作报错1. 前端配置的后端 API 地址错误。2. 后端服务未启动或异常。3. 数据库无数据或表不存在。1. 打开浏览器开发者工具“网络”选项卡查看 API 请求是否返回 404 或 500。2. 查看后端控制台日志是否有异常。3. 直接访问后端 API 地址如http://localhost:8080/api/drug/list测试。1. 修正前端配置的proxy或baseURL。2. 根据后端日志解决异常。3. 检查数据库连接并执行初始化 SQL。新增或修改数据后页面不刷新或数据不对1. 前端未成功发送请求或处理响应。2. 后端业务逻辑有误数据未真正写入数据库。3. 浏览器缓存。1. 查看“网络”选项卡确认请求状态码为 200并检查响应内容。2. 查看后端日志确认 SQL 是否执行。3. 直接查询数据库确认数据是否存在。1. 修复前端请求逻辑。2. 调试后端 Service 层代码。3. 禁用浏览器缓存或强制刷新。销售出库时库存充足却提示不足1. 业务逻辑 Bug查询库存的条件有误。2. 数据库事务隔离级别问题导致“幻读”。3. 库存字段未及时更新。1. 查看销售出库对应的 Service 方法打印或调试库存查询的 SQL 和结果。2. 检查是否在同一个事务中先查询后更新。1. 修正业务逻辑代码。2. 使用SELECT ... FOR UPDATE进行悲观锁或使用版本号乐观锁控制并发。可视化图表加载慢或空白1. 统计 SQL 查询复杂未优化。2. 数据量太大前端渲染卡顿。3. 图表组件资源加载失败。1. 查看后端生成图表数据的接口响应时间。2. 浏览器控制台查看是否有 JS 错误。3. 简化查询或对统计数据进行分页、缓存。1. 优化统计 SQL添加索引考虑预聚合。2. 对于大数据量提供分页查询或按需加载。3. 检查前端图表库如 ECharts是否正常引入。9. 最佳实践与使用建议基于此类项目的通用经验给出以下建议帮助你更好地使用或基于此项目进行二次开发。首次部署先做功能验证不要一上来就导入大量真实数据。先用测试账号走通“新增药品 - 采购入库 - 销售出库 - 查看报表”这个核心业务流程确保系统基本功能正常。数据库备份是生命线在导入真实数据前务必对数据库进行备份。定期如每天备份clinic_drug_db数据库。可以使用 MySQL 的mysqldump命令或图形化工具设置定时任务。修改默认密码和端口部署到生产环境或测试环境时第一时间修改MySQL 的 root 密码。应用中的默认数据库连接密码。Spring Boot 应用的默认端口8080。前端开发服务器的默认端口如8081。业务逻辑增强建议库存锁在高并发场景下虽然诊所场景不多销售出库必须使用数据库锁悲观锁或乐观锁机制防止超卖。操作日志为所有关键业务操作增、删、改、审核、入库、出库添加详细的日志记录记录操作人、时间、IP、具体内容便于审计和追溯。数据校验在前端和后端同时进行严格的数据校验。例如药品有效期不能早于生产日期销售数量必须为正整数等。前端体验优化表单防重复提交在提交按钮点击后禁用直到请求返回。数据加载提示在查询、提交时显示 Loading 状态提升用户体验。错误友好提示后端返回的错误信息前端应进行友好转译后展示给用户。安全加固API 鉴权确保所有业务 API 都经过权限校验如 Spring Security JWT防止未授权访问。SQL 注入防护使用 MyBatis 的#{}语法或 JPA避免字符串拼接 SQL。XSS 防护对用户输入的内容进行转义或过滤特别是在富文本编辑框如果有场景。为二次开发做准备如果你计划在此基础上开发建议仔细阅读代码理解项目分层结构Controller, Service, Mapper, Entity。在开发新功能前先编写单元测试如使用 JUnit来验证现有核心逻辑避免改坏原有功能。使用 Git 进行版本管理为你的修改创建独立的分支。这个 Spring Boot 诊所药物库管理系统项目其最大的价值在于提供了一个业务逻辑完整、技术栈主流、结构清晰的实战样板。它清晰地展示了如何将“药品档案、供应商、采购、销售、库存、统计”这些业务概念通过数据库设计、后端 API 和前端页面有机地串联起来。对于学习者我建议你重点关注“采购入库”和“销售出库”这两个核心事务。理解它们如何通过状态流转控制业务流程如何在一个事务内保证库存数据的最终一致性这是业务系统开发的核心。对于使用者请务必在测试环境充分验证过期预警和库存统计功能这两个功能直接关系到用药安全和经营决策。最容易踩的坑往往在初始部署阶段数据库配置错误、端口冲突、依赖下载失败。按照本文第 3、4、8 部分的步骤能解决 90% 的启动问题。下一步你可以尝试集成更复杂的报表引擎如 JasperReports增加移动端适配或者将其改造成一个多租户的 SaaS 化服务。
返回列表