轴承行业进销存系统:SpringBoot+Vue全栈实践
1. 项目背景与核心价值轴承行业作为机械制造领域的关键配套产业其供应链管理具有鲜明的行业特点SKU种类繁多不同型号、规格、材质的轴承产品、批次管理严格涉及质保追溯、价格体系复杂经销商分级定价。福泰轴承这类中型制造企业传统Excel手工记账的方式已明显暴露出三个痛点库存账实不符率高达15%-20%轴承产品体积小、流转快订单处理效率低下平均每单需30分钟人工核对财务对账周期长月末对账通常需要3-5个工作日这套进销存系统正是针对这些痛点设计的全栈解决方案。采用SpringBootVue的技术组合实现了以下核心价值库存实时可视化精确到每个仓库货架的库存状态支持扫码出入库智能预警机制自动触发低库存预警、临期产品提醒轴承防锈油有效期管理全流程追溯从原材料采购到成品出库的完整批次追溯链特别提示轴承行业对批次管理的要求比普通商品更高系统特别强化了保质期管理和质量追溯功能这在源码的BatchController中有集中体现。2. 技术架构解析2.1 后端技术栈设计SpringBoot选用2.7.18版本长期支持版主要模块设计如下com.futai ├── config // 安全配置及Swagger配置 ├── controller // 包含7个核心业务控制器 │ ├── PurchaseController.java // 采购管理 │ ├── SalesController.java // 销售管理含经销商价格体系 │ └── InventoryController.java // 包含独特的轴承库存周转算法 ├── service // 业务逻辑层 ├── repository // 数据访问层 └── model // 实体类 ├── Product.java // 包含轴承特有的属性字段 └── Batch.java // 批次管理核心实体数据库选用MySQL 8.0关键表结构设计考虑CREATE TABLE bearing_product ( id varchar(20) NOT NULL COMMENT 轴承产品特殊编码规则, inner_diameter decimal(10,2) NOT NULL COMMENT 内径(mm), outer_diameter decimal(10,2) NOT NULL COMMENT 外径(mm), material varchar(50) COMMENT 轴承钢材质类型, seal_type tinyint COMMENT 密封方式(0-开式 1-接触式 2-非接触式), PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;2.2 前端工程化实践Vue3组合式API的项目结构src/ ├── api/ // 接口请求封装 │ └── inventory.js // 包含轴承库存特有的API方法 ├── components/ │ ├── BearingSpecSelector.vue // 轴承规格选择器组件 │ └── BatchScanner.vue // 支持扫码枪的批次录入组件 ├── views/ │ ├── inventory/ │ │ ├── ShelfManagement.vue // 货架可视化界面 │ │ └── TurnoverAnalysis.vue // 轴承周转率分析看板 └── utils/ └── bearingCodeUtil.js // 轴承编码规则处理工具特色功能实现举例 - 轴承规格联动选择器// 在BearingSpecSelector组件中 const diameterRange computed(() { // 根据轴承类型动态返回内外径可选范围 switch (props.type) { case deep_groove: return { minInner: 3, maxInner: 200, minOuter: 10, maxOuter: 250 } case angular_contact: return { minInner: 10, maxInner: 150, minOuter: 30, maxOuter: 210 } default: return { minInner: 1, maxInner: 300, minOuter: 5, maxOuter: 400 } } })3. 行业特色功能实现3.1 轴承专用库存管理针对轴承产品的特性系统实现了以下特殊处理组合件管理圆锥滚子轴承需要管理内外圈配套关系系统采用assembly_code字段建立组件关联防锈有效期预警// 在InventoryService中 public ListInventory checkAntiRustExpiry() { return inventoryRepository.findByExpiryDateBefore( LocalDate.now().plusMonths(3) // 提前3个月预警 ); }周转率计算算法SELECT p.id, p.name, COUNT(i.id) AS turnover_count, DATEDIFF(MAX(i.out_date), MIN(i.in_date)) AS storage_days FROM bearing_product p JOIN inventory_transaction i ON p.id i.product_id GROUP BY p.id3.2 经销商价格体系轴承行业特有的价格管理方案等级价目表// 前端价格计算逻辑 function getDealerPrice(basePrice, dealerLevel) { const ratios { 1: 0.9, 2: 0.85, 3: 0.8 } return basePrice * (ratios[dealerLevel] || 1) }批量折扣规则// SalesService.java public BigDecimal calculateDiscount(Integer quantity) { if (quantity 1000) return new BigDecimal(0.85); if (quantity 500) return new BigDecimal(0.9); if (quantity 100) return new BigDecimal(0.95); return BigDecimal.ONE; }4. 系统部署指南4.1 环境准备要点硬件推荐配置组件最低配置生产环境推荐应用服务器4核8G8核16GSSD数据库MySQL 8.0 4核8GMySQL集群 16核32G前端部署Nginx 2C4GNginx负载均衡依赖安装注意事项# 后端需要特别安装的库 sudo apt-get install libjna-java # 用于扫码枪支持4.2 初始化流程轴承基础数据导入-- 典型轴承产品初始化数据 INSERT INTO bearing_product VALUES (6000ZZ, 10, 26, GCr15, 2), (6203-2RS, 17, 40, SUJ2, 1);系统参数配置# application-prod.yml bearing: default-shelf-life: 24 # 轴承默认保质期(月) alert-before-expiry: 3 # 提前预警月数 auto-generate-batch: true # 是否自动生成批次号5. 常见问题排查5.1 典型错误解决方案现象描述可能原因解决方案批次扫码失败扫码枪波特率不匹配检查/dev/ttyUSB0设备权限修改application.yml中的serial.port配置库存报表数据不一致未刷新物化视图执行REFRESH MATERIALIZED VIEW mv_inventory_summary经销商价格显示异常缓存未更新清除Redis缓存redis-cli KEYS price:*5.2 性能优化建议数据库索引优化-- 轴承查询关键索引 CREATE INDEX idx_bearing_specs ON bearing_product(inner_diameter, outer_diameter); CREATE INDEX idx_batch_trace ON inventory_transaction(batch_no, product_id);前端懒加载策略// 在路由配置中 { path: /inventory, component: () import(../views/inventory/ShelfManagement.vue), meta: { requiresAuth: true } }JVM参数调整# 在启动脚本中加入 JAVA_OPTS-Xms2048m -Xmx2048m -XX:UseG1GC这套系统在福泰轴承实施后实现了库存准确率提升至99.2%、订单处理时间缩短至8分钟/单、月末对账效率提高70%的显著效果。对于想要学习SpringBootVue全栈开发特别是对制造业ERP系统开发感兴趣的开发者这个项目提供了完整的行业解决方案参考