1. 项目背景与核心价值
福泰轴承是一家典型的机械制造企业,其进销存管理面临着多仓库协同、批次追溯、安全库存预警等业务痛点。这套基于SpringBoot2+Vue3的技术方案,正是为解决传统ERP系统在轴承行业适配性差、二次开发成本高等问题而设计的实战型解决方案。
轴承行业的进销存有三大特殊性:一是SKU编码复杂(包含材质、精度等级、内外径等参数),二是需要支持多单位换算(如套/箱/个),三是需要严格的批次质量追溯。本系统在基础进销存功能上,特别强化了这三个业务场景的支持能力。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构解析
2.1 后端技术栈设计
SpringBoot2.7.3的选择平衡了稳定性和新特性支持。与旧版相比,其改进的Actuator端点管理和GraalVM原生镜像支持,为后期运维监控和性能优化预留了空间。配置示例:
java复制// 安全配置中特别开放Actuator端点
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.authorizeRequests()
.requestMatchers("/actuator/health").permitAll()
.anyRequest().authenticated();
return http.build();
}
MyBatis-Plus 3.5.3的Lambda查询封装,大幅简化了轴承产品多条件动态查询的代码量。其独创的AR模式(Active Record)特别适合库存流水这类单表高频操作:
java复制// 典型的库存扣减AR模式操作
InventoryLog log = new InventoryLog()
.setSku("Bearing-6205-ZZ-C3")
.setChangeQty(-50)
.setBatchNo("BT20230701");
log.insert();
2.2 前端技术栈亮点
Vue3的组合式API配合TypeScript,使复杂表单(如轴承采购单)的开发效率提升明显。该系统特别封装了以下业务组件:
- 带单位换算的数值输入框(支持套→箱自动换算)
- 轴承规格参数联动选择器
- 批次有效期预警表格
Pinia状态管理解决了多仓库数据同步的难题。典型store设计:
typescript复制// warehouseStore.ts
export const useWarehouseStore = defineStore('warehouse', {
state: () => ({
currentWarehouse: null as Warehouse | null,
inventoryLevels: new Map<string, number>()
}),
actions: {
async syncInventory(sku: string) {
const res = await api.getRealTimeInventory(sku)
this.inventoryLevels.set(sku, res.data)
}
}
})
3. 核心业务模块实现
3.1 智能采购预警模块
轴承的安全库存计算需考虑:
- 采购周期(进口轴承通常60-90天)
- 历史月均消耗量
- 在途订单量
系统采用动态再订货点算法:
code复制再订货点 = (日均消耗量 × 采购周期) × 波动系数 + 安全库存
其中波动系数根据历史数据标准差计算得出,在库存不足时自动生成采购建议单。
3.2 多单位库存管理
轴承行业特有的单位转换逻辑:
java复制// 单位换算服务
public BigDecimal convertUnit(BigDecimal qty, String fromUnit, String toUnit) {
// 示例:1箱=50套,1套=1个(深沟球轴承)
if ("BOX".equals(fromUnit) && "SET".equals(toUnit)) {
return qty.multiply(new BigDecimal("50"));
}
// 其他转换规则...
}
3.3 质量追溯体系
通过批次号(batchNo)贯穿采购→入库→销售全流程。关键数据库设计:
sql复制CREATE TABLE `t_batch_trace` (
`batch_no` varchar(20) NOT NULL COMMENT '批次号',
`purchase_id` varchar(20) DEFAULT NULL COMMENT '采购单号',
`warehouse_in_id` varchar(20) DEFAULT NULL COMMENT '入库单号',
`outbound_id` varchar(20) DEFAULT NULL COMMENT '出库单号',
`heat_no` varchar(30) DEFAULT NULL COMMENT '热处理批号',
`quality_report_url` varchar(255) DEFAULT NULL COMMENT '质检报告URL'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
4. 性能优化实践
4.1 MySQL8.0特性应用
利用窗口函数优化库存流水统计:
sql复制SELECT
sku,
SUM(change_qty) OVER (PARTITION BY sku ORDER BY create_time) AS cumulative_qty
FROM inventory_log
WHERE warehouse_id = 'WH001'
JSON字段存储轴承动态参数:
sql复制ALTER TABLE product
ADD COLUMN spec_json JSON COMMENT '规格参数(动态字段)';
4.2 缓存策略设计
采用多级缓存应对高并发查询:
- 本地Caffeine缓存热点数据(有效期5分钟)
- Redis集群缓存基础数据(有效期2小时)
- 库存数据采用Redisson分布式锁保证一致性
java复制@Cacheable(value = "product", key = "#sku", cacheManager = "caffeineCacheManager")
public Product getProductBySku(String sku) {
// 数据库查询
}
5. 部署与运维要点
5.1 容器化部署方案
Docker Compose编排示例:
yaml复制services:
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
volumes:
- ./mysql/conf:/etc/mysql/conf.d
- ./mysql/data:/var/lib/mysql
redis:
image: redis:6-alpine
command: redis-server --requirepass ${REDIS_PASS}
5.2 监控配置
Prometheus监控指标采集配置:
yaml复制scrape_configs:
- job_name: 'springboot'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['app:8080']
6. 开发经验总结
6.1 轴承行业特别注意事项
- 精度等级参数必须使用枚举约束(如C3/P6等)
- 内外径等尺寸参数应存储原始测量值(带3位小数)
- 材质字段需要支持多种国际标准(如ASTM/AISI)
6.2 高频问题排查
问题现象:批次追溯查询超时
解决方案:
sql复制ALTER TABLE inventory_log ADD INDEX idx_batch_no (batch_no);
问题现象:单位换算精度丢失
修复方案:
java复制// 使用BigDecimal进行精确计算
BigDecimal boxQty = new BigDecimal("50");
return setQty.divide(boxQty, 4, RoundingMode.HALF_UP);
这套系统在福泰轴承实施后,库存周转率提升27%,采购失误率下降63%。特别在应对海外订单时,其完善的批次追溯功能帮助企业在德国客户验厂时获得高度评价。
