公司动态
SpringBoot+Vue防疫物资管理系统开发实践
1. 项目背景与核心价值2020年以来的特殊时期让各类机构对防疫物资管理有了前所未有的重视。传统Excel表格登记方式在应对大规模物资调配时暴露出数据滞后、协同困难等痛点。我们团队基于SpringBootVueMyBatis技术栈开发的这套管理系统已在3家大型制造企业和5家医疗机构稳定运行超过18个月峰值时单日处理过10万件防护用品的出入库操作。这套系统最核心的价值在于实现了四个关键突破多仓库实时库存可视化误差率0.3%物资有效期智能预警提前30天提醒应急调拨电子审批流平均处理时间8分钟全链条操作留痕审计2. 技术架构解析2.1 前后端分离设计采用经典的SpringBootVue组合前端通过axios与后端交互。特别设计了双层API网关外层网关Nginx处理静态资源与负载均衡内层网关Spring Cloud Gateway负责路由转发和JWT鉴权这种设计使得系统在疫情期间承受住日均300万次API调用压力实测单节点QPS可达1500。2.2 数据持久层方案MyBatis的灵活映射能力完美适配物资管理的复杂查询场景。我们特别优化了三个方面动态SQL生成根据不同物资类型自动调整查询条件二级缓存策略对基础数据如物资分类启用Redis缓存批量操作优化采用foreach标签处理大批量物资入库!-- 典型的多条件物资查询SQL -- select idselectByCondition resultMapMaterialMap SELECT * FROM t_material where if testtype ! nullAND material_type #{type}/if if teststockMin ! nullAND current_stock #{stockMin}/if if testvalidDate ! nullAND valid_date #{validDate}/if /where ORDER BY update_time DESC /select3. 核心功能实现3.1 智能预警模块通过Spring Scheduled实现三级预警机制日常检查每30分钟扫描近效期物资重点监控每10分钟检查关键防护用品库存应急触发实时库存低于安全阈值即时告警// 效期预警任务示例 Scheduled(cron 0 0/30 * * * ?) public void checkExpiration() { LocalDate threshold LocalDate.now().plusDays(30); ListMaterial materials materialMapper.selectExpiringSoon(threshold); materials.forEach(m - { String msg String.format(物资%s将在%s过期, m.getCode(), m.getValidDate()); alertService.sendWarning(m.getWarehouseId(), msg); }); }3.2 分布式事务控制针对跨仓库调拨场景采用Seata AT模式保证数据一致性。关键配置点全局事务超时设置为120秒对库存扣减操作添加GlobalTransactional注解建立undo_log表实现反向补偿4. 部署实践指南4.1 数据库配置建议MySQL推荐使用5.7版本关键参数优化innodb_buffer_pool_size 4G # 缓冲池大小 innodb_log_file_size 512M # 日志文件大小 max_connections 500 # 最大连接数 transaction_isolation READ-COMMITTED4.2 前端性能优化通过以下Vue配置提升移动端体验路由懒加载启用Gzip压缩vue.config.js关键组件预加载 // vue.config.js性能配置 module.exports { chainWebpack: config { config.plugin(preload).tap(() [{ rel: preload, fileBlacklist: [/\.map$/, /hot-update\.js$/] }]) } }5. 踩坑实录5.1 MyBatis缓存陷阱在事务中连续查询相同数据时一级缓存可能导致获取不到最新数据。解决方案添加Options(flushCache Options.FlushCachePolicy.TRUE)或直接使用SqlSession.clearCache()5.2 高并发库存扣减最初使用SELECT...FOR UPDATE导致死锁后优化为UPDATE t_stock SET quantity quantity - #{num} WHERE material_id #{mid} AND quantity #{num}配合Retryable注解实现自动重试6. 扩展建议物联网集成通过RFID设备自动采集物资出入库区块链存证关键操作上链增强审计可信度智能预测基于历史数据预测物资消耗趋势系统已在GitHub开源仓库名epms-core包含完整部署文档和Docker Compose文件。实际部署时建议根据机构规模调整线程池参数我们测试发现Tomcat的maxThreads设置为核心数*21时性能最优。