基于Ruoyi的MES系统二次开发与部署实战解析

发布时间:2026/8/31 18:28:12
基于Ruoyi的MES系统二次开发与部署实战解析 简介本资源是一套基于Ruoyi框架开发的前后端分离式制造执行系统MES源码面向制造业信息化开发者、MES实施工程师及高校工业软件方向学习者旨在解决中小型制造企业生产计划排程、物料追踪、设备与仓储协同等核心管理痛点。压缩包共113个文件含41个HTML页面构成完整前端路由与业务视图、22个Python脚本用于数据初始化、条码生成及部署辅助、22张JPG/PNG图片含界面截图与流程示意图、12段MP4演示视频覆盖大屏展示、排班日历操作等关键功能以及CSS/JS/MD等配套文件整体大小63.84MB。已有59人下载学习资源附带详细部署教程开箱即用代码结构遵循Ruoyi标准分层规范模块划分清晰系统管理、主数据、生产排产、条码管理、设备监控、统计报表与可视化大屏等全覆盖并提供可直接运行的dashboard、appointments、profile等核心页面源码便于二次开发与教学实践。 先聊个真实的背景。这两年国内制造业数字化喊得震天响但很多工厂的实际状态是ERP上了财务和生产计划在电脑上跑现场却还靠纸质工单流转做完一张填一张老板想查实时产量得靠车间主任口头汇报。MES制造执行系统就是用来填这个空白的它管的是从工单下达到产品入库之间那段“现场执行”的流程。但是MES这玩意儿传统实施动辄几十上百万中小企业根本玩不起。于是越来越多团队开始走“二次开发”路线找一个开源基础框架把MES的核心业务模块长在上面。今天分享的就是这样一个组合基于Ruoyi若依这套国内占有率极高的Java快速开发平台做出来的前后端分离版MES源码我会连部署细节一起拆开讲。这篇文章适合三类人看第一类是工厂IT或者做数字化选型的技术负责人想低成本搭一套能用的MES第二类是Java开发工程师想快速上手制造业业务把Spring Boot Vue的项目经验落到具体行业场景第三类是刚入行准备做毕设或项目实战的同学这套源码的完整度和业务闭环程度远超一般课程项目。我会把技术选型的底层逻辑、仓库里的目录结构、核心业务模块的设计思路、以及我从零部署到跑通全流程的完整步骤都写清楚包括踩过的坑。1. 整体设计与技术选型为什么选 Ruoyi 来长 MES 业务1.1 Ruoyi 到底解决了什么问题先说个很多人都有的误区MES 的核心难点从来不是写代码而是业务模型复杂、角色权限多、页面交互重。一套真正的 MES光看角色就有工厂管理员、计划员、车间主任、班组长、质检员、设备维护员每种角色能看到什么、能批什么、能改什么必须严格区分。传统做法是从零搭一套RBAC权限体系光这个就得写两三个月。Ruoyi 解决的就是这“地基”问题。它内置了完整的部门、用户、角色、菜单、权限管理支持细粒度到按钮级别的权限控制。前端有Vue Element UI的成熟组件库后端有Spring Boot的工程化结构代码生成器能根据数据库表一键生成前后端CRUD代码。更关键的是Ruoyi自带在线用户监控、操作日志、定时任务、文件上传、数据字典这些企业级应用刚需功能这些零碎但必须的东西如果自己写每一件都是时间黑洞。拿权限举例。Ruoyi的权限模型是“用户-角色-菜单”三层一个用户可以有多个角色一个角色对应一堆菜单和按钮权限。放到MES场景里班组长只能看到自己车间内部的工单和处理报工异常计划员可以创建和调整工单质检员只有质量模块的审核权限、看不到成本相关页面。这种颗粒度用Ruoyi原生权限就能轻松实现不需要改框架代码。说说稳定性。Ruoyi在Gitee上长期霸榜十几万Star社区里关于坑的解决方案随手一搜就有。数据库层面对MySQL和Oracle都做了兼容权限注解用起来很顺手拦截器处理token也写得很干净。搞MES这种要长期迭代维护的系统选一个社区活跃、文档齐全的基础框架比选一个冷门的高性能框架稳得多。你自己写个权限系统出bug了只能自己扛用Ruoyi出bug了大概率搜一搜就有答案。1.2 前后端分离架构在工厂场景里的实战价值这套项目用的是标准的前后端分离架构后端Spring Boot提供纯JSON接口前端Vue Element UI独立部署通过HTTP调接口拿数据。为什么MES要做成前后端分离我自己的体验是MES的页面交互太重了。生产看板要实时刷新、工单派工要拖拽操作、质量追溯要做多条件筛选的复杂表格传统模板引擎比如Thymeleaf服务端渲染做这些体验非常吃力。前后端分离以后前端专注交互后端专注业务逻辑和数据处理两边并行开发互不阻塞。数据流向设计也值得一提。前端页面通过Axios请求打到后端Controller后端用Spring Security JWT做认证拦截请求带token到后端后端校验后把业务数据变成JSON返回。Redis在这里做的关键事情是存储登录token和缓存数据字典Redis挂了系统不会立刻瘫但登录会失效。MySQL存业务数据比如工单主表、工序流转记录、质量检验单、设备点检记录。部署层面前端构建完是一堆静态资源可以用Nginx直接托管后端打成一个Jar包用Java命令启动。Nginx监听80或443端口把/api路径的请求反向代理到后端的8080端口。这样一台2核4G的云服务器就能跑起来整个系统工厂内网环境甚至用一台普通办公电脑就能部署对硬件几乎没有要求。实测下来几十个人同时操作后端JVM占内存大概在700MB到1GB之间非常亲民。1.3 从仓库目录看懂Ruoyi工程的骨架拿到源码以后第一步不是急着启动而是先把目录结构看明白。Ruoyi本身的工程分了多个模块每个模块职责非常清晰。ruoyi-admin启动模块包含启动类和Controller层准确说Controller都在这层也是打包的入口Application类在这里。ruoyi-framework框架核心配置Security配置、拦截器、AOP切面、异常处理都在这里。ruoyi-system系统管理模块用户、角色、菜单、部门、字典、配置这些表的Service和Mapper。ruoyi-common公共工具模块字符串处理、文件上传工具、通用返回结果类AjaxResult。ruoyi-quartz定时任务模块基于Quartz实现报工汇总的定时统计任务就放这里。ruoyi-generator代码生成模块连上数据库以后选中表一键生成前后端代码。MES业务模块新增的部分一般会额外建一个模块叫mes-production或者直接在ruoyi-system里扩展包路径看作者的习惯。如果能独立成模块说明作者有比较好的模块化意识后续扩展会舒服很多。2. 核心业务模块剖析一套能落地的MES应该有这些功能2.1 主数据管理物料、BOM和工艺路线是地基MES和进销存软件的很大一个区别是MES以“工艺”为主线。产品在车间里怎么流转从第一道工序到最后一道工序中间的先后顺序、工时定额、质检标准都靠工艺路线来定义。这套MES源码里主数据模块通常包含四张核心表物料信息表存物料编码、名称、规格、单位、默认仓库、物料清单表BOM父子件结构、工艺路线表工序列表顺序、工作中心表对应物理上的产线或设备组。很多系统搞不清BOM和工艺路线的区别。简单说BOM管的是“做什么出来”工艺路线管的是“怎么做出来”。比如生产一个电机外壳BOM告诉你需要铝锭和涂料工艺路线告诉你先压铸、再机加工、再表面处理、最后质检。MES排产和报工的时候都是围绕工艺路线展开的报工报到哪一道工序工单进度就知道走到哪了。源码里这些主数据之间会做引用完整性校验。删除物料时如果它已经被BOM引用系统会提示“该物料已被BOM使用禁止删除”。删除工艺路线前会检查有没有关联的生产工单。这些都是实际生产中的硬约束踩过的坑才会在代码里写这种校验。2.2 工单管理与生产报工从计划到执行的闭环工单是MES的心脏。计划员在系统里创建生产工单填产品、数量、计划开始时间、计划结束时间、关联工艺路线。工单提交后进入审核流程审核通过后在车间大屏或者班组长账号下能看到待执行任务。报工是MES数据流转最关键的动作。工人完成一道工序后在小程序或者车间工控机上输入工单号、工序号、合格数量、不良数量、生产工时点击提交数据就写进工序流转记录表。这道工序就标记为完成系统自动算出来每道工序的达成率、合格率、工时效率。这里有个容易忽略的业务逻辑报工以后库存怎么变。正常的逻辑是最后一道工序报工完成后系统自动调库存接口把成品数量加进成品仓。半成品工序完成时要不要往半成品仓加库存得看业务设置。源码里一般会留一个参数控制默认是末工序自动入库。如果字段没配好会出现车间报表数字“看着完工了”但仓库库存没变的故障。2.3 质量管理、设备管理和异常闭环真正的MES不会只有报工功能质量管理必须跟生产流程绑定。这套源码里质量管理模块做了来料检验IQC、过程检验IPQC、完工检验FQC三类单据。过程检验的质量单关联生产工单和工序填抽检数、不良数、不良原因代码。检验数据录入后自动统计到工单良率看板。设备管理模块做的是设备台账、点检保养计划、设备维修工单。设备状态用“运行、待机、维修、报废”字典控制。生产报工时如果设备出现故障可以挂起当前工单生成一个维修单修完以后恢复执行。设备OEE综合效率用公式“可用率×性能×良率”计算看板上会把这些指标汇总起来。生产制造过程中经常会遇到“异常”场景物料质量异常、设备停机、缺料。这套MES设计了异常上报闭环。工人发现异常可以发起异常单系统自动通知相关角色处理异常单状态从“待处理”流转到“处理中”再到“已关闭”。我个人觉得这个模块是最容易被忽略但实际生产效率价值最大的功能没有异常闭环MES就只是一本电子报表。2.4 车间看板与报表数据最终要变成管理动作MES最后呈现给管理层的核心是看板和报表。这套源码里看板用的大屏一般写成一个独立页面ECharts图表展示今日产值、工单进度、产线稼动率、不良率Top5。数据通过定时任务或者接口实时刷新车间里投到电视上就是实时生产作战图。报表部分比看板更细。工单完工统计表汇总每一张工单的计划数、完工数、合格数、不良数、耗费工时数据。生产日报表按产线或者班组维度做产量同比环比。质量追溯表通过产品序列号/批次号反查原料批次、生产人员、设备参数。追溯这个功能对汽配、电子这种对合规要求高的行业几乎是刚需源码里一般通过绑定“工单-批次-物料批次”关系来实现。3. 实操部署全流程从环境准备到功能跑通3.1 环境准备清单我实际用的版本组合拿到源码以后最关心的就是“怎么跑起来”。先说推荐的环境版本这是我亲自试过可以稳定运行的组合。组件推荐版本说明JDKJDK 8 或 JDK 17Ruoyi 4.x 用 JDK8若源码基于新版 Ruoyi-Vue 可上 JDK17Maven3.6建议 3.8.x不要用太新的 4.xMySQL5.7 或 8.08.0 需要调整驱动配置Redis5.x / 6.x / 7.x本机部署用 Windows 版即可Node.js14/16/18建议 16太高的 Node 版本可能编译报错Nginx1.20生产部署用开发环境用前端自带代理需要说明不同年代下载的 Ruoyi 版本对 JDK 版本要求不同。老版本基于 Spring Boot 2.x 用 JDK8新版本基于 Spring Boot 3.x 的话必须上 JDK17。如果你源码里 pom.xml 的 spring-boot-parent 是 3.0 以上别犹豫直接装 JDK17。这是源码部署中最常翻车的地方一上来就报 UnsupportedClassVersionError。还有一点要注意MySQL 8.0 的驱动类从 com.mysql.jdbc.Driver 改成了 com.mysql.cj.jdbc.Driver数据库连接 URL 还要加上时区参数。源码里的 application-druid.yml 如果连接串里只有 localhost:3306 没有 serverTimezone启动到最后一步必报时区异常提前改掉。3.2 数据库初始化两行命令搞定整个库Ruoyi 项目的 SQL 脚本放在源码的 sql 目录下。典型文件是 ry_2024xxxx.sql系统库和 quartz.sql定时任务库。用 Navicat 或者命令行执行mysql -u root -p ry_2024xxxx.sql mysql -u root -p quartz.sql执行完毕后刷新数据库列表能看到几十张表。ry_开头的表是系统表sys_user、sys_role、sys_menu 这些。mes_开头的表就是业务表了mes_work_order、mes_process_flow、mes_material_info 之类这就是 MES 二次开发的部分。如果 MES 的 SQL 脚本是合并进主脚本里的那执行一个文件就够。我建议执行完之后重点看一下 sys_menu 表里面定义的菜单项和前端路由是对应的。有的源码包里菜单 SQL 是单独的 musql 文件后续你手动加菜单的时候也要往这个表里插数据。3.3 后端启动实操本地跑起来的完整过程后端启动步骤非常简单前提是 Maven 依赖能下下来。mvn clean package -Dmaven.test.skiptrue cd ruoyi-admin/target java -jar ruoyi-admin.jar --spring.profiles.activedev如果非要走 IDE 启动直接打开 RuoyiApplication 右键 Run。但要注意 IDE 里必须先把 Maven 仓库镜像配成阿里云镜像否则国内网络环境下载依赖慢到怀疑人生。配置方式是在 Maven 的 conf/settings.xml 里加 mirror 节点。启动过程中观察日志。看到类似下面这行就说明后端起来了Started RuoyiApplication in 12.35 seconds (JVM running for 13.02)如果启动卡在 Redis 连接先检查本地 Redis 服务有没有起来。如果报数据库连接错误重点看 application-druid.yml 里的用户名密码、URL 地址。这个文件在 ruoyi-admin/src/main/resources 下同时存在 application.yml 和 application-druid.yml 两个配置文件。端口方面后端默认跑在 8080。如果 8080 被占用直接在 application.yml 里改 server.port。这里有一个非常实用的小技巧在本机测试的时候可以在 hosts 里配一个虚拟域名前端代理转发到 8080避免每次访问都输 IP 加端口也方便模拟生产环境。3.4 前端启动实操依赖安装和代理配置前端代码在源码的 ruoyi-ui 目录下。前端启动命令就两条npm install npm run devnpm install 在国内经常因为网速问题卡住建议先用淘宝镜像源npm config set registry https://registry.npmmirror.com装完依赖直接 npm run dev默认会跑在 80 端口Vue 的服务。前端开发服务器有个关键配置vue.config.js 里的 proxy 代理它把 /dev-api 开头的请求转发到后端的 8080。默认它代理到 http://localhost:8080如果你的后端跑在别的端口要同步修改。打开浏览器访问 http://localhost能跳到登录页输入默认账号 admin / admin123能进系统看到菜单和看板说明前后端联调通了。这里有个常见的坑是登录页面出来了但点登录转圈多半是前端代理路径和后端 context-path 不一致。检查后端配置 server.servlet.context-path如果设置成了 /prod-api前端代理也要相应改成对应路径。3.5 生产环境部署Nginx 托管前端和反向代理开发环境跑通之后生产部署是另一套逻辑。前端需要先构建npm run build:prod构建完在 dist 目录生成静态文件把整个 dist 目录上传到服务器然后在 Nginx 配置里指定 root 指向它。后端则把 jar 包和配置文件传到服务器用 nohup 启动nohup java -jar ruoyi-admin.jar --spring.profiles.activeprod logs/ruoyi.log 21 Nginx 配置的关键是 location / 指向前端静态文件location /prod-api/ 反向代理到后端。我实际生产用的 Nginx 配置片段server { listen 80; server_name your-domain.com; location / { root /opt/ruoyi/dist; index index.html; try_files $uri $uri/ /index.html; } location /prod-api/ { proxy_pass http://127.0.0.1:8080/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }注意 proxy_pass 后面 URL 结尾加了斜杠是“把匹配到的路径去掉前缀再转发”。也就是说前端请求 /prod-api/loginNginx 转发到后端的实际路径是 /login。这和 Ruoyi 默认的 context-path 设计是对应的。如果这里忘了加斜杠后端的接口地址会变成 /prod-api/login一定会报 404。4. 常见问题与排查技巧实录4.1 前端请求接口全部 404 或者 401这个问题在部署时出现的频率极高。404 优先查前端代理路径和后端 context-path 是否对齐。如果后端没设置 context-path前端代理就不要加上前缀。401 一般是 token 失效或 Redis 数据丢了清掉浏览器本地存储的 token重新登录一次。还有一种情况是系统时间不同步导致 JWT 校验过期服务器上用 date 命令看一眼时间偏差太大就跑个 ntpdate 同步一下。4.2 本地启动后端却连不上 Redis后端卡在 Redis 连接失败先检查 Redis 服务是否在运行。Windows 下 redis-server.exe 没启动就会报这个。还有一个很容易踩的坑默认配置文件里 Redis 密码是空的如果你本机 Redis 设了密码要去 application.yml 里补充 redis.password 字段。Redis 部署成本很低但是配置细节多生产环境建议给 Redis 设置强密码并绑定内网 IP防止暴力破解。4.3 启动时报“时区错误”或数据库驱动找不到直接看驱动的 jar 包是否引入了引入的话看 URL 是否带 serverTimezone 参数。MySQL 8 的驱动要求明确指定时区建议统一用 jdbc:mysql://localhost:3306/ry?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghai。还有一点MySQL 8 和 Maven 依赖的版本必须匹配如果你本地是 MySQL 8 却引用了 5.x 的驱动启动后会有各种诡异报错直接升级依赖版本到 8.0.x。4.4 新增业务菜单不显示MES 二次开发新增了业务表也写好了代码但前端菜单不显示。检查是不是菜单 SQL 没执行或者菜单状态字段 status 默认为 0正常而人为改成了 2停用。还要看当前登录用户绑定的角色有没有分配该菜单权限。Ruoyi 的菜单权限是“新增菜单后要给角色勾选”的设计管理员账号默认拥有所有权限但普通账号必须去角色管理里重新授权。这个逻辑和 RBAC 权限模型完全对应绕不开的。4.5 前端依赖安装特别慢或者报错npm install 报错类型很多最常见的是 node-sass 安装失败。Node.js 版本和 node-sass 版本不匹配就会报错。新版 Ruoyi 前端已经换用 sassdart-sass而不是 node-sass兼容性好了很多。如果还是 node-sass 的项目建议把 Node 降到 14 以下再装或者改用 dart-sass 替代。其次 npm cache 也可能有问题先删除 node_modules 和 package-lock.json 再重新 install。最后提醒一句尽量不要用 cnpm虽然快但有时会产出残缺的依赖树导致运行莫名其妙报错。我踩过这个坑后来老老实实用 npm 淘宝镜像。回到这套 MES 本身的价值我用一句话概括它不是一个放着当摆设的demo而是一个从主数据到生产执行再到质量追溯的完整业务闭环。拿它来做企业内部的MES试点或者作为自己进入智能制造赛道的敲门砖都够用。最后分享一点个人经验部署这套系统时一定不要急着改业务代码先把默认流程完整跑通——建物料、配BOM、建工艺路线、创建工单、报工、看报表。这整个流程走下来你对MES的数据流就有体感了。后续再改逻辑比如加一个工序流转的扫码约束加一个看板指标或者把报工页面对接PDA都是在这个地基上长新芽。如果在这个过程中遇到启动或部署的问题先重新审视环境和配置再看日志里第一个异常一步一步来比到处搜答案要快得多。本文还有配套的精品资源点击获取

相关新闻