1. 项目概述
这个药品管理系统是我在2022年完成的毕业设计项目,采用SpringBoot+Vue前后端分离架构,配合MySQL数据库,实现了药品信息管理、库存预警、销售统计等核心功能。系统从需求分析到最终部署上线历时3个月,期间踩过不少坑,也积累了很多实战经验。
作为一个典型的医院/药店信息化解决方案,这个系统最突出的特点是:
- 采用主流技术栈组合,符合企业级开发规范
- 实现了完整的药品生命周期管理
- 包含详细的部署文档和数据库设计说明
- 配套完整的毕业论文和技术文档
提示:系统源码已通过Gitee开源(仓库地址见文末),建议配合部署文档边看边操作。
2. 技术架构解析
2.1 后端技术选型
SpringBoot 2.7.3作为后端框架,主要基于以下考虑:
- 自动配置特性大幅减少XML配置
- 内嵌Tomcat简化部署流程
- 与MyBatis-Plus的完美整合
- 丰富的starter依赖(如spring-boot-starter-security)
核心依赖项:
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>2.2 前端技术方案
Vue 3 + Element Plus的组合提供了:
- 响应式数据绑定
- 组件化开发体验
- 丰富的UI组件库
- Axios HTTP请求封装
关键配置示例:
// axios拦截器配置 service.interceptors.request.use(config => { if (store.getters.token) { config.headers['Authorization'] = 'Bearer ' + getToken() } return config })2.3 数据库设计
MySQL 8.0数据库包含12张核心表:
- 药品基础表(medicine)
- 库存记录表(inventory)
- 供应商表(supplier)
- 采购记录表(purchase)
- 销售记录表(sales)
CREATE TABLE `medicine` ( `id` bigint NOT NULL AUTO_INCREMENT, `code` varchar(32) COMMENT '药品编码', `name` varchar(100) NOT NULL, `spec` varchar(50) COMMENT '规格', `unit` varchar(10) COMMENT '单位', `price` decimal(10,2) NOT NULL, `stock` int DEFAULT '0', `warning_value` int DEFAULT '10', PRIMARY KEY (`id`), UNIQUE KEY `idx_code` (`code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;3. 核心功能实现
3.1 药品信息管理模块
采用RBAC权限控制模型,实现功能包括:
- 药品CRUD操作
- 批量导入/导出
- 条形码生成与识别
- 多条件复合查询
后端接口示例:
@RestController @RequestMapping("/api/medicine") public class MedicineController { @Autowired private MedicineService medicineService; @GetMapping("/list") public Result list(MedicineQuery query) { Page<Medicine> page = medicineService.queryPage(query); return Result.success(page); } }3.2 库存预警系统
实现策略:
- 定时任务每天凌晨检查库存
- 使用Redis缓存热点药品数据
- 多级预警机制(邮件+站内信)
@Scheduled(cron = "0 0 2 * * ?") public void checkStock() { List<Medicine> medicines = medicineService.listLowStock(); medicines.forEach(med -> { String message = String.format("药品[%s]库存不足,当前数量:%d", med.getName(), med.getStock()); alertService.sendWarning(med.getManagerId(), message); }); }3.3 销售统计报表
技术要点:
- ECharts可视化
- 动态SQL构建
- 多维度数据分析
<template> <div> <el-row> <el-col :span="12"> <div ref="salesChart" style="height:400px"></div> </el-col> </el-row> </div> </template> <script> import * as echarts from 'echarts' export default { methods: { initChart() { const chart = echarts.init(this.$refs.salesChart) chart.setOption({ tooltip: {...}, xAxis: {...}, series: [...] }) } } } </script>4. 部署实践与优化
4.1 环境准备
推荐配置:
- JDK 11+
- Node.js 16+
- MySQL 8.0+
- Redis 6.2+
注意:Windows环境下需手动配置MySQL大小写敏感参数lower_case_table_names=1
4.2 后端部署要点
- 修改application.yml中的数据库配置
- 执行SQL初始化脚本
- 打包命令:
mvn clean package -DskipTests- 启动命令:
java -jar medicine-system.jar --spring.profiles.active=prod4.3 前端部署方案
生产环境建议:
- 开启Gzip压缩
- 配置Nginx反向代理
- 启用HTTPS安全协议
典型Nginx配置:
server { listen 443 ssl; server_name medicine.example.com; location / { root /var/www/medicine-web; try_files $uri $uri/ /index.html; } location /api { proxy_pass http://127.0.0.1:8080; } }5. 开发经验总结
5.1 常见问题排查
- 跨域问题解决方案:
@Configuration public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") .allowedMethods("*") .maxAge(3600); } }- MyBatis-Plus分页失效: 确保配置分页插件:
@Configuration public class MyBatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); return interceptor; } }5.2 性能优化建议
- 接口响应慢:
- 添加二级缓存
- 启用MyBatis-Plus性能分析插件
@Bean public PerformanceInterceptor performanceInterceptor() { PerformanceInterceptor interceptor = new PerformanceInterceptor(); interceptor.setMaxTime(1000); interceptor.setFormat(true); return interceptor; }- 前端加载优化:
- 路由懒加载
- 组件异步加载
- 使用CDN加速
5.3 扩展方向
- 增加移动端适配(Uniapp)
- 集成第三方支付接口
- 开发微信小程序版本
- 接入智能硬件(如自动售药机)
项目完整源码: Gitee仓库:https://gitee.com/example/medicine-system (包含完整部署文档和数据库脚本)