1. 项目背景与核心价值
轴承制造企业的进销存管理一直是个痛点问题。我在去年参与过一家中型轴承厂的系统升级项目,亲眼见过他们用Excel表格管理上千种轴承型号的混乱场景——仓库管理员每天要手动更新十几个表格,采购和销售数据经常对不上,月底盘点时库存差异率高达15%。这正是传统管理方式效率低下的典型表现。
这套基于SpringBoot+Vue的进销存系统,正是为解决这类问题而设计。它实现了三个核心价值:
- 业务全流程数字化:从采购订单创建到销售出库,所有操作线上留痕
- 库存实时可视化:动态监控库存水位,自动预警低于安全库存的产品
- 数据决策支持:通过销售趋势分析指导采购计划,降低呆滞库存
提示:系统特别设计了轴承行业特有的"型号+规格"双维度库存管理,解决传统系统无法精准管理轴承参数的问题。
2. 技术架构解析
2.1 前后端分离设计
采用现在主流的SpringBoot+Vue技术栈,这种架构有三大优势:
- 开发效率高:前端可并行开发,通过Swagger文档对接接口
- 性能更好:Nginx部署静态资源,减轻后端服务器压力
- 易于维护:前后端代码完全解耦,升级技术栈不影响另一方
技术组件选型考量:
- SpringBoot 2.7.x:稳定版+LTS支持,避免新版本的兼容性问题
- Vue 2.6:考虑到ElementUI的兼容性,未盲目追求Vue3
- MySQL 8.0:选用JSON字段支持,方便存储产品规格参数
2.2 数据库设计精要
用户权限模型
采用RBAC(基于角色的访问控制)设计,通过role_type字段实现:
- 1-管理员:可操作所有功能
- 2-采购专员:仅限采购模块
- 3-销售专员:仅限销售模块
- 4-仓库管理员:仅限库存模块
java复制// Spring Security配置示例
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/purchase/**").hasAnyRole("ADMIN","PURCHASER")
.antMatchers("/sale/**").hasAnyRole("ADMIN","SALES")
.anyRequest().authenticated()
.and()
.formLogin();
}
}
库存事务处理
关键设计点在于保证库存操作的原子性:
sql复制UPDATE product_stock
SET current_stock = current_stock - #{quantity}
WHERE product_id = #{productId}
AND current_stock >= #{quantity}
重要:必须添加current_stock>=#{quantity}条件,避免超卖。我在初期版本漏掉这个判断,导致出现负库存。
3. 核心功能实现
3.1 采购-库存-销售闭环
-
采购入库流程
- 创建采购单时自动生成入库任务
- 质检模块记录轴承的尺寸公差等质检数据
- 入库后触发库存更新和应付款计算
-
销售出库防错设计
- 出库前校验库存可用量
- 自动匹配相同型号不同批次的库存(FIFO)
- 生成物流单同步到WMS系统
3.2 智能预警系统
通过Spring定时任务每天凌晨检查:
java复制@Scheduled(cron = "0 0 2 * * ?")
public void checkLowStock() {
List<Product> lowStockProducts = productMapper.selectLowStockProducts();
lowStockProducts.forEach(product -> {
String message = String.format("产品%s库存不足,当前%d件(安全库存%d)",
product.getProductName(),
product.getCurrentStock(),
product.getMinStock());
alertService.sendAlert(message);
});
}
3.3 数据可视化方案
采用Vue+ECharts实现:
- 销售热力图:显示各型号轴承的销售分布
- 库存水位图:用仪表盘展示库存健康度
- 应收账款账龄分析表
javascript复制// Vue组件中初始化图表
initChart() {
const chart = echarts.init(this.$refs.chart);
chart.setOption({
tooltip: { trigger: 'item' },
series: [{
type: 'pie',
data: this.stockData
}]
});
}
4. 开发实战经验
4.1 踩坑记录
-
MyBatis批量插入优化
初期采用逐条插入,1000条数据需要8秒:java复制// 错误做法 products.forEach(p -> productMapper.insert(p));改进后使用批量插入,耗时降至0.5秒:
java复制// 正确做法 productMapper.batchInsert(products);对应Mapper.xml配置:
xml复制<insert id="batchInsert"> INSERT INTO product(...) VALUES <foreach collection="list" item="p" separator=","> (#{p.name}, #{p.stock}, ...) </foreach> </insert> -
Vue性能优化
发现库存列表渲染卡顿,解决方案:- 使用Virtual Scroll处理万级数据
- 表格列改为固定宽度避免重排
- 复杂计算属性添加缓存
4.2 测试要点
-
并发测试
- 使用JMeter模拟100用户并发操作
- 重点测试库存扣减的线程安全
- 验证分布式锁的有效性
-
数据一致性检查
sql复制-- 每日运行的校验脚本 SELECT SUM(CASE WHEN order_type=1 THEN quantity ELSE 0 END) AS total_purchase, SUM(CASE WHEN order_type=2 THEN quantity ELSE 0 END) AS total_sale, (SELECT SUM(current_stock) FROM product) AS current_stock FROM orders;
5. 项目部署方案
5.1 生产环境配置
推荐使用Docker Compose部署:
yaml复制version: '3'
services:
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: yourpassword
volumes:
- ./mysql-data:/var/lib/mysql
backend:
build: ./backend
ports:
- "8080:8080"
depends_on:
- mysql
frontend:
build: ./frontend
ports:
- "80:80"
5.2 高可用建议
-
数据库层面
- 配置主从复制
- 定期备份binlog
-
应用层面
- Nginx负载均衡
- Redis缓存热点数据
6. 扩展开发建议
-
移动端适配
- 使用Vant组件库开发H5版本
- 添加PWA支持实现离线功能
-
ERP集成
- 通过REST API对接财务模块
- 开发Webhook接收生产系统事件
-
数据分析增强
- 集成Python机器学习预测需求
- 使用Apache POI生成复杂报表
这套系统在轴承行业具有普适性,我在实施时特别注重了以下行业特性:
- 轴承型号的规范化管理(如6204-2RS/C3)
- 计量单位的灵活配置(套/个/箱)
- 供应商评价体系的嵌入
对于想用此做毕设的同学,建议重点研究库存预测算法或质量追溯模块,这两个方向既有理论深度又容易出亮点。