# opencode-mes **Repository Path**: ayetony/opencode-mes ## Basic Information - **Project Name**: opencode-mes - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-06 - **Last Updated**: 2026-06-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MES 制造执行系统 基于 Spring Boot + Vue 3 构建的制造执行系统(Manufacturing Execution System),覆盖 BOM 管理、工艺路线、工位/设备/产线管理、工单管理、生产排产与进度跟踪,集成用户、角色、权限管理体系与系统监控能力。 --- ## 技术栈 ### 后端(mes-admin) | 技术 | 说明 | |------|------| | Spring Boot 3.2.5 | 核心框架 | | Java 17 | 运行环境 | | Spring JDBC | 数据访问层(无 ORM,直接 JDBC) | | H2 | 文件型关系数据库,兼容 PostgreSQL 模式 | | HikariCP | 数据库连接池 | | SpringDoc OpenAPI 2.6.0 | API 文档与 Swagger UI | | Lombok | 代码简洁工具 | ### 前端(mes-front) | 技术 | 说明 | |------|------| | Vue 3.4 | 渐进式前端框架 | | Vue Router 4.3 | 路由管理 | | Pinia 2.1 | 状态管理 | | Element Plus 2.6 | UI 组件库 | | Axios 1.7 | HTTP 请求库 | | TypeScript 5.4 | 类型安全(strict,禁用 `any`) | | Vite 5.2 | 构建工具 | --- ## 快速开始 ### 环境要求 - JDK 17+ - Maven 3.6+ - Node.js 18+ ### 启动应用(如已运行则自动重启) ```bash lsof -ti:8080 | xargs kill -9 2>/dev/null; sleep 1 cd mes-admin && mvn spring-boot:run > /tmp/mes-admin.log 2>&1 & lsof -ti:3000 | xargs kill -9 2>/dev/null; sleep 1 cd mes-front && npm run dev > /tmp/mes-front.log 2>&1 & ``` ### 退出应用 ```bash lsof -ti:8080 | xargs kill -9 2>/dev/null lsof -ti:3000 | xargs kill -9 2>/dev/null ``` ### 访问系统 打开浏览器访问 `http://localhost:3000`,使用以下账号登录: | 用户名 | 密码 | 角色 | |--------|------|------| | admin | admin | SUPER_ADMIN(全部权限) | ### 验证 ```bash # 后端编译 + 测试 cd mes-admin mvn compile mvn test -Dtest=BomApplicationTests mvn test -Dtest=ProductionScheduleServiceTest # 前端类型检查 + 构建 cd mes-front npx vue-tsc --noEmit npm run build ``` --- ## 功能模块 ### 仪表盘 系统首页,展示生产概况、工单统计、工位/设备状态等关键指标。 ### BOM 管理 管理物料清单(Bill of Materials): - **BOM 头**:产品编码、名称、版本、状态(DRAFT / RELEASED 等) - **BOM 子项**:树形结构的物料明细,支持层级嵌套(自引用 parent_id),记录物料编码、名称、用量、单位 - **BOM 展开视图**:扁平化展示完整物料明细,含总用量(逐层乘法合计)和层级路径 BOM 子项通过 `parent_id` 自引用构建树状结构;修改时会重新计算展开视图,确保数据一致。 ### 物料管理 物料主数据管理,维护所有原材料、半成品的基础信息(编码、名称、规格、单位、类型、分类),供 BOM 引用。 ### 工位管理 维护生产线上的工位信息,记录工位编码、名称、类型、能力类型、位置和运行状态。 ### 设备管理 管理生产设备,关联到工位,记录设备编码、名称、型号、类型、状态、制造商、序列号、运行时长和维护次数。 ### 产线管理 定义生产线的组织架构,将多个工位按顺序排列,指定责任人,分配所属工厂区域。 ### 工艺路线 定义产品的生产工艺路线: - **路线头**:路线编码、名称、关联产品、版本、状态 - **工序明细**:工序编号、名称、类型、标准工时(秒)、准备时间、能力类型要求,支持排序 ### 工单管理 生产工单全生命周期管理: - 工单编号、产品、计划数量、已生产/不良数量 - 优先级(P1~P5)、计划起止日期、实际起止时间 - 状态流转(DRAFT → RELEASED → IN_PROGRESS → COMPLETED) - 下发时自动从工艺路线复制工序执行副本到 `order_operation` ### 生产计划 - **产品排产**:基于工艺路线生成生产计划,支持加班设置、夜班时间、是否排除节假日、每日工时。自动生成排产任务,分配到符合条件的工位。 - **排产进度**:跟踪每个排产任务的执行进度,记录任务状态(PENDING / IN_PROGRESS / COMPLETED)、计划与实际工位和时间。 ### 权限管理 RBAC(基于角色的访问控制): - **用户管理**:用户增删改查、状态管理(ACTIVE / INACTIVE) - **角色管理**:角色定义与权限分配,支持工位级角色绑定 - **路由管理**:权限树维护,定义系统内所有功能权限点(MENU + BUTTON 两种类型) 前端路由和侧边栏菜单均根据用户权限自动过滤。 ### 应用管理 - **字典管理**:系统字典类型与字典项维护,驱动工位类型、设备类型、能力类型等下拉选项 - **操作日志**:用户操作行为审计(方法、参数、IP、耗时、状态) - **系统日志**:滚动查看 `mes-admin` 的日志输出 - **应用配置**:管理 Open API 对外接口配置 ### 系统监控 - **系统配置**:系统级只读模式开关(admin 专属),只读模式下所有写操作按钮和批量删除按钮均禁用或隐藏 - **慢SQL统计**:拦截所有 SQL 执行,记录耗时超过阈值的慢查询,展示执行时间、SQL 语句、调用位置 - **JVM监控**:实时展示堆内存、CPU 负载、线程数、GC 统计、数据库连接池状态 --- ## 权限控制 系统采用 **RBAC(基于角色的访问控制)** 模型: ``` sys_user ──many-to-many── sys_user_role ──many-to-many── sys_role │ │ many-to-many │ sys_role_permission │ sys_permission (树状结构,parent_id 自引用) ``` - 用户可关联多个角色 - 角色可绑定多个权限 - 权限为树状结构,支持父子层级(`parent_id`) - 工位可通过 `workstation_role` 与角色绑定,实现工位级授权 ### 权限标识对照 | 权限标识 | 说明 | |----------|------| | `dashboard:view` | 仪表盘查看 | | `workstation:view` | 工位管理查看 | | `device:view` | 设备管理查看 | | `line:view` | 产线管理查看 | | `material:view` | 物料管理查看 | | `bom:view` | BOM 管理查看 | | `route:view` | 工艺路线查看 | | `order:view` | 工单管理查看 | | `schedule:view` | 生产计划菜单访问 | | `schedule:plan:view` | 产品排产查看 | | `schedule:progress:view` | 排产进度查看 | | `system:view` | 系统设置菜单访问 | | `system:user:view` | 用户管理查看 | | `system:role:view` | 角色管理查看 | | `system:perm:view` | 路由管理查看 | | `system:dict:view` | 字典管理查看 | | `system:log:view` | 操作日志/系统日志查看 | | `system:app-config:view` | 应用配置查看 | | `system:config` | 系统配置(只读模式)访问 | | `system:slow-sql:view` | 慢SQL统计查看 | | `system:jvm:view` | JVM监控查看 | | `*` | 超级管理员,拥有全部权限 | --- ## 数据库 ### H2 文件型数据库 - 数据文件:`mes-admin/data/mes_admin.mv.db` - 模式:PostgreSQL 兼容模式(`SET MODE PostgreSQL`) - `spring.sql.init.mode: always` — 每次启动自动执行 `schema.sql` 建表 - `app.test-schema: true` — 启动后自动加载测试数据(若 BOM 表为空则初始化完整测试数据) ### H2 控制台 `http://localhost:8080/h2-console` | 参数 | 值 | |------|------| | JDBC URL | `jdbc:h2:file:./data/mes_admin` | | 用户名 | `sa` | | 密码 | (留空) | ### 表结构与外键依赖 共 21 张表,分为**业务域**和**系统域**两组。 #### 表总览 | # | 表名 | 说明 | 依赖表 | |---|------|------|--------| | 1 | `bom_header` | BOM 头信息 | — | | 2 | `bom_item` | BOM 子项(树形) | → bom_header, bom_item(自引用) | | 3 | `bom_exploded` | BOM 展开视图 | → bom_header | | 4 | `material` | 物料主数据 | — | | 5 | `process_route` | 工艺路线头 | — | | 6 | `route_operation` | 工序明细 | → process_route | | 7 | `workstation` | 工位信息 | — | | 8 | `device` | 设备信息 | → workstation (SET NULL) | | 9 | `production_line` | 产线信息 | → sys_user (责任人, SET NULL) | | 10 | `production_line_workstation` | 产线-工位关联 | → production_line, workstation | | 11 | `work_order` | 工单 | — | | 12 | `order_operation` | 工单工序副本 | → work_order | | 13 | `production_schedule` | 生产计划 | → process_route | | 14 | `schedule_task` | 排产任务 | → production_schedule | | 15 | `sys_user` | 用户 | — | | 16 | `sys_role` | 角色 | — | | 17 | `sys_user_role` | 用户-角色关联 | → sys_user, sys_role | | 18 | `sys_permission` | 权限(树形) | — (parent_id 自引用) | | 19 | `sys_role_permission` | 角色-权限关联 | → sys_role, sys_permission | | 20 | `workstation_role` | 工位-角色绑定 | → workstation, sys_role | | 21 | `sys_operation_log` | 操作日志 | — | | 22 | `sys_config` | 系统配置 | — | | 23 | `sys_dict_type` | 字典类型 | — | | 24 | `sys_dict_entry` | 字典项 | → sys_dict_type | #### 外键关系图 ``` ┌──────────────────────────────────────────────────────────────────────┐ │ SYSTEM 系统域 │ │ │ │ sys_user ──────┐ sys_permission │ │ │ │ (parent_id 自引用) │ │ │ ▼ │ │ │ sys_user_role ──── sys_role ──── sys_role_permission │ │ │ │ │ │ │ ▼ │ │ │ workstation_role │ │ │ │ │ │ ▼ ▼ │ │ production_line ──→ workstation │ │ │ ▲ │ │ │ │ │ │ ▼ │ sys_dict_type ◄── sys_dict_entry │ │ production_line_workstation │ │ │ │ sys_operation_log sys_config (独立表, 无外键) │ └──────────────────────────────────────────────────────────────────────┘ ┌──────────────────────────────────────────────────────────────────────┐ │ BOM 物料域 │ │ │ │ bom_header ◄── bom_item (parent_id 自引用, 构建树形结构) │ │ │ │ │ └──► bom_exploded (扁平展开视图, 含路径与总用量) │ │ │ │ material (物料主数据, 独立表, BOM 通过 material_code 引用) │ └──────────────────────────────────────────────────────────────────────┘ ┌──────────────────────────────────────────────────────────────────────┐ │ 生产计划 + 工单域 │ │ │ │ process_route ◄── route_operation │ │ ▲ │ │ │ (下发时复制工序) │ │ │ │ │ work_order ◄── order_operation │ │ │ │ process_route ◄── production_schedule ◄── schedule_task │ └──────────────────────────────────────────────────────────────────────┘ ``` #### 建表/删表顺序(基于外键依赖) | 顺序 | 建表 (CREATE) | 删表 (DROP) | |------|--------------|-------------| | 1 | `sys_user` | `schedule_task` | | 2 | `sys_role` | `production_schedule` | | 3 | `sys_permission` | `order_operation` | | 4 | `sys_user_role` | `work_order` | | 5 | `sys_role_permission` | `route_operation` | | 6 | `workstation` | `process_route` | | 7 | `workstation_role` | `production_line_workstation` | | 8 | `sys_operation_log` | `device` | | 9 | `sys_config` | `workstation` | | 10 | `sys_dict_type` | `bom_exploded` | | 11 | `sys_dict_entry` | `material` | | 12 | `production_line` | `bom_item` | | 13 | `bom_header` | `bom_header` | | 14 | `bom_item` | `sys_role_permission` | | 15 | `bom_exploded` | `sys_user_role` | | 16 | `material` | `workstation_role` | | 17 | `process_route` | `sys_operation_log` | | 18 | `route_operation` | `sys_permission` | | 19 | `workstation` | `sys_role` | | 20 | `device` | `sys_user` | | 21 | `production_line_workstation` | `sys_dict_entry` | | 22 | `work_order` | `sys_dict_type` | | 23 | `order_operation` | `sys_config` | | 24 | `production_schedule` | `production_line` | | 25 | `schedule_task` | `sys_user` | --- ## 项目结构 ``` opencodePro/ ├── AGENTS.md # AI 助手开发指南(编码规范、验证流程) ├── mes-admin/ # 后端 Spring Boot 项目 │ ├── pom.xml # Maven 配置 │ ├── src/main/ │ │ ├── java/com/mes/admin/ │ │ │ ├── config/ # 配置类(DataInitializer 测试数据初始化) │ │ │ ├── security/ # 安全(XSS 过滤、JWT 鉴权) │ │ │ ├── sql/ # SQL 拦截与慢查询追踪 │ │ │ ├── web/ # REST 控制器(Controller 层) │ │ │ └── ... # Service / Repository 等 │ │ └── resources/ │ │ ├── application.yml # 应用配置(端口、H2、测试数据开关) │ │ └── schema.sql # 数据库建表脚本(21 张表) │ └── data/ # H2 数据文件(运行时生成) ├── mes-front/ # 前端 Vue 3 项目 │ ├── package.json │ ├── vite.config.ts # Vite 配置(端口 3000, API 代理 → 8080) │ └── src/ │ ├── api/ # Axios 封装 + 各模块 API 调用函数 │ ├── router/ # 路由定义 + 权限守卫 │ ├── stores/ # Pinia 状态(auth、config、app) │ ├── layout/ # 布局组件(MainLayout、Sidebar 菜单定义) │ ├── constants/ # 常量(权限通配符、storage key) │ └── views/ # 页面组件 │ ├── dashboard/ # 仪表盘 │ ├── bom/ # BOM 管理 │ ├── material/ # 物料管理 │ ├── workstation/ # 工位管理 │ ├── device/ # 设备管理 │ ├── line/ # 产线管理 │ ├── route/ # 工艺路线 │ ├── order/ # 工单管理 │ ├── schedule/ # 产品排产 │ ├── progress/ # 排产进度 │ ├── system/ # 系统管理(用户/角色/权限/日志/字典/配置/JVM监控/慢SQL) │ ├── settings/ # 设置(Open API) │ └── login/ # 登录页 ├── README.md └── TEST-GUIDE.md # 测试数据文档 + 验证 SQL ``` --- ## API 文档 启动后端后,可通过以下方式访问 Swagger UI: - **直接访问**:`http://localhost:8080/swagger-ui/index.html` - **通过前端代理**:`http://localhost:3000/swagger-ui/index.html` API JSON 端点:`/v3/api-docs` Vite 代理配置(`vite.config.ts`)将 `/api`、`/swagger-ui`、`/v3/api-docs` 转发到后端。