1. 项目概述
作为一名经历过多个工业信息化项目的开发者,我深知传统车间管理面临的痛点:纸质工单满天飞、设备状态靠人盯、生产进度拍脑袋。这套基于SpringBoot+Vue3的车间管理系统,正是为解决这些问题而生。它用数字化手段重构了从生产计划到设备维护的全流程,特别适合50-200人规模的中小型制造企业。
系统采用主流的前后端分离架构,后端用SpringBoot 2.7 + MyBatis-Plus 3.5实现,前端基于Vue3 + Element Plus构建。我在实际部署中发现,这种技术组合既能保证后端服务的稳定性(SpringBoot的自动配置和健康检查很省心),又能发挥Vue3的响应式优势(生产看板的数据实时更新效果很流畅)。
2. 核心功能设计
2.1 生产任务调度模块
任务排程算法是核心中的核心。我们采用基于优先级的动态调度策略:
java复制// 任务优先级计算公式
public int calculatePriority(Task task) {
return (task.getUrgency() * 0.6)
+ (task.getCustomerLevel() * 0.3)
+ (task.getEquipmentDemand() * 0.1);
}
这套算法在注塑车间实测中,将订单准时交付率提升了23%。特别要注意的是,任务进度更新采用了乐观锁机制,防止并发修改:
xml复制<update id="updateProgress">
UPDATE production_task
SET progress_rate = #{progress}, version = version + 1
WHERE task_id = #{id} AND version = #{version}
</update>
2.2 设备管理模块
设备状态监测采用心跳机制,每5分钟上报一次数据。我们在数据库设计中加入了历史状态表:
sql复制CREATE TABLE equipment_history (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
equipment_id VARCHAR(20) NOT NULL,
status ENUM('RUNNING','IDLE','FAULT','MAINTAINING'),
record_time DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (equipment_id) REFERENCES equipment_info(equipment_id)
);
维护提醒功能通过Spring的Scheduled注解实现定时扫描:
java复制@Scheduled(cron = "0 0 9 * * ?") // 每天9点检查
public void checkMaintenance() {
// 查询超过30天未维护的设备
List<Equipment> overdue = equipmentMapper.selectOverdue(30);
overdue.forEach(equip -> {
String message = String.format("设备%s已超过%d天未维护",
equip.getName(), equip.getMaintenanceDays());
alertService.sendToMaintenanceTeam(message);
});
}
3. 关键技术实现
3.1 前后端交互设计
RESTful API遵循以下规范:
- 资源命名:/api/v1/tasks(复数形式)
- 状态码:200(成功)、400(参数错误)、401(未授权)
- 数据格式:JSON with HATEOAS
典型响应示例:
json复制{
"data": {
"taskId": "T202307001",
"progress": 65,
"_links": {
"self": { "href": "/api/v1/tasks/T202307001" },
"pause": { "href": "/api/v1/tasks/T202307001/pause" }
}
}
}
3.2 权限控制方案
采用RBAC模型结合JWT实现:
mermaid复制graph TD
A[用户] -->|关联| B[角色]
B -->|包含| C[权限]
C --> D[菜单权限]
C --> E[操作权限]
C --> F[数据权限]
前端权限指令示例:
vue复制<template>
<button v-permission="'task:assign'">分配任务</button>
</template>
4. 数据库优化实践
4.1 索引策略
针对高频查询场景建立的复合索引:
sql复制-- 生产任务查询索引
CREATE INDEX idx_task_query ON production_task
(assignee_id, status, start_dt);
-- 物料库存查询索引
CREATE INDEX idx_material_stock ON material_inventory
(material_id, warehouse_id, current_stock);
4.2 分表方案
对于设备历史记录这类增长快速的数据,采用按月分表策略:
java复制public class EquipmentHistoryRouter implements ITableNameHandler {
@Override
public String dynamicTableName(String sql, String tableName) {
return tableName + "_" + LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMM"));
}
}
5. 部署与运维要点
5.1 性能调优参数
application-prod.yml关键配置:
yaml复制server:
tomcat:
max-threads: 200
min-spare-threads: 20
spring:
datasource:
hikari:
maximum-pool-size: 15
connection-timeout: 30000
5.2 监控方案
推荐使用Prometheus + Grafana监控体系,关键指标:
- 接口响应时间P99 < 500ms
- JVM内存使用率 < 70%
- 数据库连接池活跃连接 < 80%
6. 踩坑实录
-
Vue3响应式丢失问题:
在任务详情页遇到深层次对象更新不触发渲染的情况,最终采用toRaw+reactive重构数据对象解决 -
MyBatis批量插入优化:
最初逐条插入500条物料记录需要8秒,改用BatchExecutor后降至1.2秒:java复制@Bean public Executor executor(DataSource dataSource) { return new BatchExecutor(configuration, new SimpleExecutor(configuration, dataSource)); } -
时间序列数据查询:
发现按月查询设备状态历史时,没有索引导致超时,通过建立(equipment_id, record_time)复合索引解决
7. 扩展建议
-
与MES系统集成:
通过Kafka实现与上层MES系统的数据同步,建议topic设计:factory.equipment.statusfactory.production.event
-
移动端适配:
基于uniapp快速构建微信小程序版本,关键调整:- 简化复杂表单
- 增加扫码功能
- 优化离线操作
这套系统在汽配厂实际运行半年后,生产报表生成时间从原来的4小时缩短到15分钟,设备利用率提升了18%。特别建议在实施时先做3-5天的现场观察,准确捕捉一线员工的实际操作习惯,这对后期系统落地非常关键。