SpringBoot+Vue构建学校物资采购系统实战
1. 项目背景与核心需求
学校物资采购系统是教育机构日常运营中不可或缺的管理工具。传统的手工记账或Excel管理方式在采购规模扩大后暴露出诸多问题:审批流程不透明、库存数据滞后、供应商管理混乱等。我们团队近期完成的这套基于SpringBoot+Vue的系统,正是为了解决这些痛点而生。
这个系统最核心的价值在于实现了采购全流程的数字化管理。从需求提报、审批流转、供应商比价到入库登记、领用发放,所有环节都在线上完成。某中学使用后反馈,采购周期从原来的平均15天缩短到7天,库存准确率提升至99.3%。
2. 技术架构设计
2.1 后端技术选型
SpringBoot 2.7.4作为后端框架是经过多重考量后的选择:
- 内嵌Tomcat简化部署
- 自动配置减少XML配置
- 丰富的Starter依赖(特别是Spring Security和MyBatis-Plus)
- Actuator提供的完善监控端点
数据库选用MySQL 8.0,主要考虑到:
- 学校IT部门现有运维能力
- 事务完整性要求
- JSON字段对动态扩展属性的支持
2.2 前端技术栈
Vue 3.2作为前端框架具有明显优势:
- Composition API更适合复杂业务逻辑
- 更小的打包体积(相比Vue 2减少40%)
- 更好的TypeScript支持
配合使用的关键技术:
- Element Plus组件库(表格、表单等)
- Axios处理HTTP请求
- Vue Router管理路由
- Pinia状态管理(替代Vuex)
3. 核心功能实现
3.1 采购审批工作流
采用Activiti 7实现的可配置审批流:
// 审批流程定义示例 @Workflow public class PurchaseApprovalProcess { @StartEvent public void startProcess(PurchaseRequest request) { // 初始化流程变量 } @UserTask(assignee = "#{request.departmentHead}") public void departmentApproval() { // 部门审批逻辑 } @ServiceTask public void financialReview() { // 财务审核 } }3.2 供应商智能推荐
基于历史采购数据的推荐算法:
- 计算供应商的准时交付率
- 分析商品质量合格率
- 综合价格因素加权评分
- 使用Elasticsearch实现快速检索
3.3 库存预警机制
多维度库存监控策略:
- 安全库存阈值预警
- 保质期提前预警(针对易耗品)
- 季节性使用预测(如开学季文具需求)
4. 前后端交互设计
4.1 API规范
采用RESTful风格设计:
GET /api/v1/purchases?status=approved POST /api/v1/purchases PUT /api/v1/purchases/{id}4.2 安全控制
JWT认证流程:
- 用户登录获取token
- 前端存储于localStorage
- 每次请求携带Authorization头
- 后端校验token并鉴权
Spring Security配置要点:
@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable() .authorizeRequests() .antMatchers("/api/auth/**").permitAll() .anyRequest().authenticated() .and() .addFilter(new JwtAuthenticationFilter(authenticationManager())); } }5. 部署与优化
5.1 生产环境部署
推荐部署方案:
- 后端:Docker容器化部署
- 前端:Nginx静态资源服务
- 数据库:主从复制架构
5.2 性能优化措施
实测有效的优化手段:
- Vue组件懒加载
- SpringBoot启用GZIP压缩
- MyBatis二级缓存
- 高频接口添加Redis缓存
6. 典型问题解决方案
6.1 跨域问题处理
完整解决方案:
@Configuration public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") .allowedMethods("GET", "POST", "PUT", "DELETE") .allowCredentials(true) .maxAge(3600); } }6.2 文件上传限制
SpringBoot配置调整:
# application.properties spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-request-size=20MB7. 扩展功能建议
值得考虑的增强功能:
- 移动端审批(集成企业微信/钉钉)
- 采购数据分析看板
- 供应商评价体系
- 电子合同在线签署
实际开发中发现,采购审批的撤回功能需求比预期更频繁,建议在流程设计阶段就考虑审批链的可逆性。另外,物品分类体系最好采用国家标准编码,便于后续数据对接。
