系列:《从零重建 AI-native ERP/MES》· 第 00 篇(总纲,持续更新)
项目代号:Forge
先说结论
我在制造业软件一线写过一整套 ERP/MES:Web 后台、小程序和 App、Java 后端、智能排产、车间工控屏,基本每一端都碰过。
这个系列要做的事情很简单:把这套系统用新架构从零再做一遍,边做边写。
两条规矩:
- 先有能跑的实现,再写文章。 每篇对应一个已完成的里程碑,文中代码都来自真实仓库,都有测试。
- 只讲判断,不讲流水账。 每篇都回答同一个问题:上一代是怎么做的、痛在哪里、这次为什么这么做、放弃了什么。
写这篇的时候,前两个里程碑(M0 骨架、M1 前端底座)已经完成:后端 28 个测试、前端 8 个单测全绿,docker compose up 能拉起整套服务。

为什么要重做
ERP/MES 不是什么秘密,几乎每家制造企业都有,也有很多团队在做。难的不是「做出来」,而是做了三年以后还改得动。
回头看上一代系统,最痛的几件事都不是某个功能写得不好,而是结构性的:
| 痛点 | 表现 | 根因 |
|---|---|---|
| 前后端契约靠手抄 | 接口字段改了,前端运行时才报错 | 三个仓库各自为政,没有单一事实来源 |
| 模块边界模糊 | 改 A 模块,B 模块的报表挂了 | 多模块只是目录划分,没有任何约束 |
| 权限补丁越打越多 | 数据权限散落在各个 Service 里的 if | 权限模型一开始没设计完整 |
| 客户要加字段就得发版 | 「能不能在物料上加个颜色」= 改表 + 改接口 + 改页面 | 没有元数据层 |
| 换个深色主题要逐页扫 | 满屏硬编码的 #fff,只能一处处改成变量 |
没有设计令牌 |
| AI 只是个外挂 | 一个对接大模型的聊天框,业务流程里 AI 插不进去 | 架构里压根没有 AI 的位置 |
这些问题靠加班修不好,只能在架构层面一次性想清楚。这就是重做的理由。
新架构长什么样

| 层 | 选型 | 为什么 |
|---|---|---|
| 业务后端 | Spring Boot 4 + JDK 21 虚拟线程 + Spring Modulith | 事务、报表、工作流、私有化运维的生态都在 JVM;Modulith 让模块边界可以被测试 |
| 数据 | PostgreSQL(JSONB、pgvector)+ ClickHouse | 自定义字段用 JSONB,向量检索用 pgvector,分析型查询交给 ClickHouse |
| AI 接入 | Spring AI:业务 API 以 MCP Server 暴露 | 让 Agent 调用的是带权限的业务能力,而不是裸数据库 |
| Agent | Python + LangGraph | 排产算法和模型生态都在 Python |
| 前端 | Vue 3 + Vite 8 + 自研设计令牌 | 类型由后端 OpenAPI 生成,前后端一份契约 |
| 交付 | Docker Compose + CI | 一条命令起全栈,CI 跑后端、前端全量测试与构建 |
有人会问:既然叫 AI-native,为什么主后端不用 TypeScript 全栈?我确实先用 Bun + Elysia 写了一版工作流引擎的 PoC,最后还是回到了 Spring Boot。原因和取舍会单独写一篇(第 01 篇)。
已经做完的:M0 骨架
M0 解决的是「一个企业系统最先要想清楚的事」:谁能登录、能看到哪个租户的数据、能点哪些按钮、能看到哪些行。
多租户 用的是 Hibernate 7 的 @TenantId,租户来自 JWT,查询和写入都自动带上租户条件:
java
@Entity
@Table(name = "iam_user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@TenantId
private Long tenantId;
// ...
}
关键不在注解本身,而在没登录的时候租户是什么 。我给「无租户」设了一个哨兵值 -1:任何漏掉鉴权的查询都只会查出空结果,而不是全表。安全默认值比安全检查更可靠。
数据权限 分四档(全部 / 本部门及下级 / 本部门 / 仅本人),由 iam 模块算出一个 DataScope,业务模块只拿到一个 JPA Specification,不需要知道部门树怎么存:
java
Specification<User> spec = dataScopeProvider.currentScope()
.<User>toSpecification("deptId", "id")
.and(keywordMatches(keyword));
防提权 是很多后台系统漏掉的一环。我在做完 M0 后让另一个 AI 审查了一遍代码,它找出一个真实漏洞:拥有「修改角色」权限的人,可以给某个角色加上自己都没有的权限,再间接提权。修复后加了一条规则:只能授予不超过自己权限和数据范围的角色,且不能修改自己持有的角色,并写成了回归测试。
测试全部基于 Testcontainers 跑真实 PostgreSQL,覆盖的是「会出事故」的场景,而不是 getter/setter:
- A 租户的管理员改 B 租户的用户 → 404
- 生产经理只能看到生产部及下属车间
- 操作工只能看到自己
- 经理不能在自己的数据范围外建用户,也不能给人分配超管角色
- 角色编辑者不能通过改角色给自己提权
已经做完的:M1 前端底座
设计令牌 + 三态主题。 所有颜色、间距、圆角都收敛成语义化 Token,Element Plus 的变量全部由 Token 派生。切换深色主题只是换一组 Token 的值,业务页面零改动:


元数据驱动。 这是我认为企业系统里投入产出比最高的一层。一个实体的 Schema = 模块声明的内置字段 + 租户自己加的自定义字段,列表列、表单控件、校验规则都从同一份 Schema 生成:

「能不能在物料上加个颜色」这类需求,现在是管理员在页面上点两下,不用发版。自定义字段的值存在 JSONB 里,后端会按 Schema 严格校验:类型不对、选项不在范围内、必填为空都会被拒绝,未定义的字段直接丢弃。前端怎么改请求都绕不过去。
顺手做掉的一件事:Element Plus 从全量引入改成按需引入,最大的打包块从 500 kB 以上降到约 130 kB。
路线图
| 里程碑 | 内容 | 状态 |
|---|---|---|
| M0 骨架 | 多租户、RBAC、数据权限、防提权、OpenAPI 契约、CI | ✅ |
| M1 前端底座 | 设计令牌、三态主题、元数据驱动、自定义字段、物料主数据 | ✅ |
| M2 核心单据 | BOM → 销售订单 → 工单 → 报工 → 质检 → 发货 | 下一步 |
| M3 AI 接入 | Spring AI、业务 API 的 MCP Server、业务助手、AI 建单 | |
| M4 审批流 | BPMN 引擎 + AI 预审节点,人工兜底,决策留痕 | |
| M5 排产 | LangGraph 排产 Agent + 甘特图 | |
| M6 多端 | 小程序 / App / 车间平板 PWA | |
| M7 可视化 | 报表、打印、看板、3D 数字孪生 | |
| M8 收尾 | RAG、AI 评估、部署与可观测、老系统迁移 |
系列目录
链接随发布更新。
架构与底座
- 01 我先用 Bun 写了一版 PoC,最后主后端还是选了 Spring Boot:ERP/MES 选型复盘
- 02 2026 年的 Spring Boot 长什么样:JDK 21 虚拟线程 + 模块化单体重建业务后端
- 03 订单 → 工单 → 报工 → 质检 → 发货:制造业核心单据的领域建模
- 04 多租户 + RBAC + 数据权限:企业系统权限模型一次设计到位
AI-native 核心
- 05 AI 预审、人工兜底:给审批流加上 AI 节点
- 06 用 Spring AI 把整个 ERP 变成 Agent 的工具箱:业务 API 的 MCP 化设计
- 07 Spring AI 业务助手工程化:Function Calling 查单据,从能用到好用的 8 个细节
- 08 LangGraph 智能排产 Agent:约束求解 + 大模型,谁负责什么
- 09 工艺文件问答:制造业 RAG 的切分、检索与本体(Ontology)
- 10 粘贴一段合同,AI 生成单据:把大模型输出关进 Schema
- 11 AI 功能怎么上线:评估集、审计留痕与成本控制
前端体系
- 12 企业后台设计系统:Design Token + 三态主题,让 Element Plus 跟着你的 Token 走
- 13 元数据驱动的列表与表单:一份 Schema 生成表格、表单和校验,客户加字段不用发版
- 14 从零手写区块式打印设计器:pt 坐标、吸附、分页与多记录
- 15 排产甘特图从零实现:连续时间线、三级 BOM、拖拽缩放与撤销重做
- 16 报表设计器全栈实现:从 SQL 分组聚合到拖拽看板
- 17 一套业务,四个终端:Web、小程序、App、车间平板 PWA
- 18 SMT 产线数字孪生:Three.js 3D 大屏的性能与内存治理
工程化与落地
- 19 Vite 8 + Rolldown:大型后台的构建与开发体验优化
- 20 不停机换架构:老 Java 系统到新架构的绞杀者迁移
- 21 一个人交付整套系统:我的 AI 协作开发方法论
关于我
科班出身,学校里写的是 Java、.NET、SQL,第一批项目就是 MVC + 三层架构的前后端一体应用。工作后在制造业软件一线,前端写得最多,但后端、移动端、AI 服务都在做。
这个系列想证明一件事:懂业务、懂分层、懂数据,再加上 AI 的杠杆,一个人可以把一整套企业系统做得既快又稳。
如果你也在做企业系统,或者对某一篇特别感兴趣,欢迎在评论区告诉我,我会调整顺序。
- 仓库:待更新(目前为私有仓库,需要代码可以私信我)