1. 项目概述:烟厂车间设备清洗管理系统
这个系统是我去年为某烟草生产企业开发的车间设备管理平台,核心解决的是烟厂生产设备清洗流程的数字化管理难题。传统烟厂设备清洗依赖纸质记录和人工巡查,容易出现记录丢失、清洗周期混乱、责任追溯困难等问题。
系统采用SpringBoot+Vue.js前后端分离架构,实现了从设备台账管理、清洗计划制定、任务分配到执行记录的全流程数字化。特别针对烟草行业设备油污严重、清洗标准严格的特点,设计了多级审核机制和质检流程。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构设计
2.1 后端技术选型
选择SpringBoot 2.7作为后端框架主要考虑三点:
- 快速集成MyBatis-Plus 3.5.1操作设备数据
- 内置Schedule模块实现定时清洗计划
- 与Activemq消息队列无缝整合处理异步任务
数据库采用MySQL 8.0,关键表设计包括:
- 设备基础表(含RFID标签字段)
- 清洗标准表(不同设备类型对应不同标准)
- 任务工单表(状态机设计)
java复制// 典型设备实体类设计
@Data
public class Equipment {
private Long id;
private String rfidTag; // 设备RFID标识
private Integer type; // 设备类型枚举
private LocalDate lastCleanDate;
private Integer cleanCycle; // 清洗周期(天)
}
2.2 前端技术方案
Vue 2.6作为前端框架,主要特性实现:
- 使用ElementUI构建管理后台界面
- ECharts可视化展示设备清洗数据
- WebSocket实时推送任务状态变更
特别开发了移动端PWA应用,支持车间人员扫码接单:
javascript复制// RFID扫码逻辑
mounted() {
this.$socket.on('rfid-scanned', (rfid) => {
this.getEquipmentDetail(rfid)
})
}
3. 核心业务实现
3.1 智能排程算法
清洗计划生成是系统核心,算法逻辑:
- 基于设备类型获取标准周期
- 结合上次清洗时间计算理论日期
- 避开生产计划中的繁忙时段
- 均衡分配每日工作量
java复制public List<CleanTask> generatePlan(LocalDate start, LocalDate end) {
// 获取所有待清洗设备
List<Equipment> equipments = equipmentMapper.selectNeedCleanDevices();
return equipments.stream()
.filter(e -> !isInProductionPeriod(e))
.sorted(comparing(Equipment::getPriority))
.map(e -> new CleanTask(e))
.collect(Collectors.toList());
}
3.2 工单状态机设计
工单状态流转采用状态模式:
code复制待分配 -> 已分配 -> 进行中
-> 已完成 -> 已质检
-> 已驳回
使用Spring StateMachine实现:
xml复制<state id="待分配" initial="true">
<transition on="ASSIGN" target="已分配"/>
</state>
<state id="已分配">
<transition on="START" target="进行中"/>
</state>
4. 物联网集成方案
4.1 设备数据采集
通过工业Modbus协议对接车间PLC,实时获取:
- 设备运行时长
- 当前温度湿度
- 油污传感器数据
java复制// ModbusTCP采集示例
ModbusMaster master = new ModbusMasterFactory()
.createTcpMaster(new TcpParameters("192.168.1.100", 502));
ReadInputRegistersRequest request = new ReadInputRegistersRequest(
slaveId, startAddress, quantity);
InputRegistersResponse response = (InputRegistersResponse) master.send(request);
4.2 移动端RFID集成
采用高频13.56MHz RFID读写器:
- 工牌识别:绑定操作人员
- 设备识别:自动调取清洗标准
- 位置识别:结合地理围栏校验
5. 典型问题解决方案
5.1 离线作业支持
车间网络不稳定时的应对方案:
- 使用IndexedDB缓存基础数据
- 采用Service Worker实现离线表单提交
- 网络恢复后自动同步数据
javascript复制// 离线存储实现
const db = new Dexie('CleanDB');
db.version(1).stores({
tasks: '++id,equipmentId,status'
});
// 网络状态监听
window.addEventListener('online', syncPendingTasks);
5.2 大文件上传优化
清洗前后对比照片上传方案:
- 前端分片(每片2MB)
- 断点续传
- 压缩后上传
java复制// 分片上传接口
@PostMapping("/upload/chunk")
public ResponseEntity<?> uploadChunk(
@RequestParam MultipartFile file,
@RequestParam String chunkId,
@RequestParam Integer chunkIndex,
@RequestParam Integer totalChunks) {
// 存储分片到临时目录
String tempPath = "/tmp/" + chunkId + "_" + chunkIndex;
file.transferTo(new File(tempPath));
// 检查是否所有分片已上传
if (checkAllChunksReceived(chunkId, totalChunks)) {
mergeChunks(chunkId);
}
return ResponseEntity.ok().build();
}
6. 安全与权限设计
6.1 多级权限体系
RBAC模型扩展设计:
- 车间主任:计划制定/报表查看
- 班组长:任务分配
- 操作工:任务执行
- 质检员:结果验收
sql复制-- 权限表结构
CREATE TABLE `sys_permission` (
`id` bigint NOT NULL AUTO_INCREMENT,
`code` varchar(50) COMMENT '权限编码',
`name` varchar(100) COMMENT '权限名称',
`resource_type` enum('MENU','BUTTON','API') NOT NULL,
`resource_id` bigint COMMENT '关联资源ID',
PRIMARY KEY (`id`)
);
6.2 审计日志实现
关键操作审计方案:
- 使用Spring AOP拦截Service方法
- 记录操作人、时间、参数
- 敏感数据脱敏存储
java复制@Aspect
@Component
public class AuditLogAspect {
@AfterReturning(
pointcut = "@annotation(com.xxx.AuditLog)",
returning = "result")
public void afterReturning(JoinPoint jp, Object result) {
AuditLogEntry entry = new AuditLogEntry();
entry.setOperation(getOperationName(jp));
entry.setParams(JsonUtils.toJson(jp.getArgs()));
entry.setResult(JsonUtils.toJson(result));
auditLogMapper.insert(entry);
}
}
7. 部署与运维方案
7.1 Docker化部署
采用多容器方案:
- 应用容器:SpringBoot+JRE8
- 数据库容器:MySQL 8.0
- 中间件容器:Redis+ActiveMQ
dockerfile复制# SpringBoot应用Dockerfile示例
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
7.2 监控方案设计
Prometheus+Granfa监控体系:
- SpringBoot Actuator暴露指标
- 自定义业务指标采集
- 关键阈值告警配置
yaml复制# Prometheus配置示例
scrape_configs:
- job_name: 'clean-system'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['app:8080']
这个项目让我深刻体会到工业场景下的特殊需求:比如车间环境对触摸屏操作的适配、设备离线状态的业务连续性保障、与老旧工业协议的对接等。建议类似项目一定要提前做足现场调研,我们最初设计的扫码功能就因车间粉尘问题调整了三次方案
