1. 项目背景与核心价值
车间管理系统是制造业数字化转型的关键基础设施。传统工厂普遍面临生产数据分散、设备状态不透明、人工排产效率低等痛点。我们团队为某中型机械加工厂设计的这套系统,实现了从原料入库到成品出库的全流程数字化管控。系统上线后,该工厂订单交付周期缩短27%,设备利用率提升35%,纸质单据减少90%。
这套系统采用前后端分离架构,后端基于SpringBoot 2.7 + MyBatis-Plus 3.5,前端使用Vue 3 + Element Plus,数据库选用MySQL 8.0。特别设计了工单优先级动态算法和可视化看板,解决了该厂紧急插单频繁导致的产线混乱问题。
2. 技术架构设计解析
2.1 后端技术栈选型
选择SpringBoot而非传统SSM框架的三大理由:
- 内置Tomcat简化部署,适合工厂IT人员技术水平
- Starter依赖自动配置,快速集成Redis缓存、Quartz定时任务
- Actuator端点监控特别适合7×24小时运行的车间环境
数据库设计中的关键优化:
CREATE TABLE `work_order` ( `id` bigint NOT NULL AUTO_INCREMENT, `order_no` varchar(32) NOT NULL COMMENT '工单号规则:年月日+流水号', `priority` tinyint NOT NULL DEFAULT 2 COMMENT '0-紧急 1-高 2-普通', `machine_group` varchar(20) NOT NULL COMMENT '设备组别', `estimated_time` int NOT NULL COMMENT '预计耗时(分钟)', `actual_start` datetime DEFAULT NULL, `actual_end` datetime DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `idx_order_no` (`order_no`), KEY `idx_machine_group` (`machine_group`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;2.2 前端技术方案
采用Vue3+TypeScript的组合带来两大优势:
- Composition API更好封装设备状态看板组件
- TypeScript接口定义确保与后端DTO严格一致
可视化看板实现技巧:
<template> <el-row :gutter="20"> <el-col :span="8" v-for="(machine, index) in machineList" :key="index"> <machine-card :status="machine.status" :current-order="machine.currentOrder" @click="handleMachineSelect(machine.id)" /> </el-col> </el-row> </template> <script setup lang="ts"> // 使用WebSocket实时更新设备状态 const ws = new WebSocket(`wss://${location.host}/api/ws/machine-status`) </script>3. 核心功能实现细节
3.1 动态工单排产算法
优先级计算模型考虑因素:
- 订单交期紧急程度(剩余时间占比)
- 物料齐套状态(BOM满足率)
- 设备负载均衡度(当前班组空闲率)
核心算法片段:
public class OrderScheduler { public List<WorkOrder> schedule(List<WorkOrder> orders) { return orders.stream() .sorted(Comparator .comparingDouble(this::calculateUrgencyScore) .thenComparingInt(WorkOrder::getPriority) .reversed()) .collect(Collectors.toList()); } private double calculateUrgencyScore(WorkOrder order) { double timeFactor = 1 - (dueDate - now) / totalDays; double materialFactor = bomCheckService.getReadyRate(order.getId()); return 0.6 * timeFactor + 0.3 * materialFactor + 0.1 * getMachineLoadFactor(); } }3.2 设备状态实时监控
采用三种状态同步机制:
- 设备PLC定时上报(30秒间隔)
- 扫码枪触发事件驱动更新
- 人工强制状态覆盖按钮
状态流转设计:
[待机] --开始加工--> [运行中] [运行中] --正常完成--> [待机] [运行中] --异常停机--> [故障] [故障] --维修完成--> [待机]4. 典型问题排查实录
4.1 工单状态不同步问题
现象:前端显示工单已完成,但看板仍显示设备运行中 排查步骤:
- 检查WebSocket连接状态(Network面板)
- 验证后端事件发布逻辑
- 查看MySQL事务隔离级别(应为READ_COMMITTED)
根本原因:设备状态更新未触发Hibernate二级缓存清除 解决方案:
@Transactional public void completeOrder(Long orderId) { // 先更新工单状态 workOrderMapper.updateStatus(orderId, "COMPLETED"); // 手动清除缓存 cacheManager.getCache("machineCache").evict( machineService.getByOrderId(orderId).getId()); // 发送领域事件 applicationContext.publishEvent( new OrderCompletedEvent(this, orderId)); }4.2 高并发下的数据冲突
场景:多个终端同时报工导致产量统计异常 解决策略:
- 在报工接口添加@Version乐观锁控制
- 关键操作增加分布式锁(Redisson实现)
- 采用最终一致性补偿机制
分布式锁实现示例:
public void reportProduction(ReportDTO dto) { String lockKey = "lock:order:" + dto.getOrderId(); RLock lock = redissonClient.getLock(lockKey); try { if (lock.tryLock(3, 10, TimeUnit.SECONDS)) { // 核心业务逻辑 productionService.handleReport(dto); } } finally { lock.unlock(); } }5. 部署优化实践
5.1 性能调优参数
生产环境JVM配置建议:
-Xms2g -Xmx2g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:InitiatingHeapOccupancyPercent=35MySQL关键配置:
[mysqld] innodb_buffer_pool_size=4G innodb_log_file_size=512M sync_binlog=1 innodb_flush_log_at_trx_commit=25.2 高可用部署方案
采用Nginx+Keepalived双机热备:
[VIP:192.168.1.100] | +------------------+------------------+ | | [NGINX Master] [NGINX Backup] 192.168.1.101 192.168.1.102 | | +-------+-------+ +-------+-------+ | SpringBoot | | SpringBoot | | Node1 | | Node2 | +---------------+ +---------------+6. 扩展功能建议
设备预测性维护
- 通过振动传感器数据训练LSTM模型
- 提前3天预警轴承磨损风险
质量追溯看板
- 扫描成品二维码反查生产批次
- 展示关键工序的质检数据
移动端小程序
- 微信小程序扫码快速报工
- 异常状态推送提醒
这套系统在实际运行中最大的收获是:永远要为现场操作留出容错空间。我们最初设计的严格流程控制,在实际车间环境中反而导致工人频繁绕过系统。后来增加了"应急通道"机制,允许班组长在特殊情况下手动覆盖系统状态,才真正实现了数字化与人性化的平衡。