Spring Cloud 微服务 · Flowable 工作流 · 动态表单引擎 · 多租户 · 协同文档 · 即时通讯
在线演示:https://www.sxwzyx.com | 测试账号 admin / 123456
YX-Cloud 是一套基于 Spring Cloud + Vue 3 的企业级微服务开发平台。除了常规的权限管理、代码生成、定时任务等基础能力,重点建设了四条业务主线:
- 工作流:Flowable 7 引擎 + 可视化流程设计器 + 审批中心(驳回、跳转、委派转办、加签减签、催办)
- 表单引擎:拖拉拽表单设计器,表单与流程节点联动,节点级字段权限与按钮控制
- 多租户:域名/请求头识别租户,数据行级隔离,租户独立初始化
- 协同办公:OnlyOffice / Univer 在线文档,WebSocket 即时通讯,消息通知中心
架构上遵循 服务独立 原则:新服务不依赖公共包,服务间只通过网关请求头契约与 Feign 交互。
下方「功能特性」只列已落地能力,规划中的能力见 后期规划。
截图放在
docs/images/目录下,替换同名文件即可生效。
| 首页工作台 | 审批中心 |
|---|---|
![]() |
![]() |
| 流程设计器 | 节点表单配置 |
|---|---|
![]() |
![]() |
| 表单设计器 | 流程实例跟踪 |
|---|---|
![]() |
| 在线文档 | 即时通讯 |
|---|---|
![]() |
![]() |
| 多租户管理 | 系统管理 |
|---|---|
![]() |
![]() |
| 能力 | 说明 |
|---|---|
| 流程设计器 | 基于 bpmn-js 重写的设计器,支持用户任务、条件分支、并行/排他网关、多实例会签、监听器、脚本/服务任务 |
| 节点配置 | 审批人(指定人 assignee / 候选用户 / 候选组)、到期时间、优先级、表单字段权限、按钮显隐 |
| 流程流转 | 启动、审批、退回上一步、退回发起人、自由跳转、委派、转办、加签/减签、撤回、删除实例 |
| 审批中心 | 待办 / 已办 / 我发起 / 抄送我,卡片列表 + 详情面板 + 审批时间线 |
| 流程催办 | 发起人对当前审批人催办,催办消息推送到消息中心 |
| 流程跟踪 | 流程实例查看器,高亮已走节点与当前节点,展示审批意见 |
- 拖拉拽表单设计器,覆盖输入、选择、日期、上传、布局容器等常用组件
- 表单数据独立存储(yx-form-engine),与流程实例绑定,节点流转时同步业务字段
- 节点级字段权限(可编辑 / 只读 / 隐藏)与按钮权限配置
- 表单预览与流程发起表单渲染复用同一套 Renderer
- 租户识别:域名解析 + 网关注入
X-Tenant-Id请求头 - 数据隔离:MyBatis-Plus 租户拦截器行级隔离,超管跨租户可见
- 租户初始化:新建租户自动创建默认角色、菜单授权与初始管理员账号,接口返回初始账号密码
- 租户状态:禁用/过期租户在网关拦截;超管(
tenant_id=0)可跨租户查询与管理租户
- 在线文档:OnlyOffice 集成(Word/Excel/PPT 在线协同编辑)+ Univer 表格/文档编辑器,文件夹管理与分享
- 即时通讯:STOMP over WebSocket,单聊/群聊、未读数、已读回执、@提醒、消息撤回、消息搜索、在线状态、群管理(改名/公告/禁言/转让/成员管理)、动态圈(发布/点赞/评论)
- 消息通知中心:审批通过、被驳回、被抄送、被催办、流程结束、系统公告统一收口,顶栏消息铃铛实时提醒
- 权限管理:用户、角色、菜单、部门、岗位、数据权限
- 系统监控:在线用户、操作日志、登录日志、定时任务、Spring Boot Admin
- 代码生成:Velocity 模板生成前后端 CRUD,另提供 Python 版生成工具
- 文件存储:MinIO 对象存储
┌─────────────────┐
│ yx-cloud-ui │ Vue3 + Vite + Element Plus
└────────┬────────┘
│
┌────────▼────────┐
│ yx-gateway │ 网关:鉴权 / 限流 / 租户解析 / 请求头注入
└────────┬────────┘
┌──────────┬───────────┬───┴────┬────────────┬───────────┬──────────┐
┌────▼────┐ ┌───▼────┐ ┌────▼─────┐ ┌▼─────────┐ ┌▼────────┐ ┌▼───────┐
│ yx-auth │ │yx-system│ │ flowable │ │ form │ │document │ │ yx-im │
│ 认证 │ │ 系统管理 │ │ engine │ │ engine │ │ 在线文档 │ │ IM │
└─────────┘ └─────────┘ └────┬─────┘ └──────────┘ └─────────┘ └────────┘
│ ┌──────────────────┐
└───────────►│ flowable-design │ 流程模型设计
└──────────────────┘
─────────────────────────────────────────────────────────────────────────
Nacos(注册/配置) · Sentinel(限流) · Redis · MySQL · MinIO · OnlyOffice
| 类别 | 技术 | 版本 |
|---|---|---|
| 基础框架 | Spring Boot | 4.0.3 / 3.4.1 / 2.7.18 |
| 微服务 | Spring Cloud + Alibaba | 2025.1.0 / 2025.1.0.0 |
| 注册与配置 | Nacos | 2.x |
| 网关 | Spring Cloud Gateway (WebFlux) | — |
| 熔断限流 | Sentinel | — |
| 持久层 | MyBatis / MyBatis-Plus | 4.0.1 / 3.0.4 |
| 连接池 | Druid + Dynamic Datasource | 1.2.28 / 4.5.0 |
| 缓存 | Redis | 6.0+ |
| 工作流 | Flowable | 7.1.0(引擎)/ 6.8.1(设计器) |
| 定时任务 | Quartz | — |
| 对象存储 | MinIO | 8.2.2 |
| 接口文档 | SpringDoc OpenAPI 3 | 3.0.2 |
| 服务监控 | Spring Boot Admin | 4.0.2 |
| JSON | Fastjson2 | 2.0.61 |
| 认证 | JWT (jjwt) | 0.9.1 |
| 在线文档 | OnlyOffice Document Server | 8.x |
| 类别 | 技术 | 版本 |
|---|---|---|
| 框架 | Vue | 3.5.26 |
| 构建 | Vite | 6.4.1 |
| 语言 | TypeScript | 5.6.3 |
| UI | Element Plus | 2.13.1 |
| 状态管理 | Pinia | 3.0.4 |
| 路由 | Vue Router | 4.6.4 |
| HTTP | Axios | 1.13.2 |
| 流程图 | bpmn-js + properties-panel | 17.11.1 |
| 表格/文档 | Univer | 0.25.0 |
| 图表 | ECharts | 5.6.0 |
| WebSocket | @stomp/stompjs | 7.3.0 |
yx-cloud/
├── yx-gateway/ # 网关:路由、鉴权、验证码、租户解析(8080)
├── yx-auth/ # 认证中心:登录、Token 签发(9200)
├── yx-system/ # 系统管理:权限、代码生成、定时任务、文件、监控(9201)
├── yx-common/ # 老服务公共模块(历史遗留,新服务不引入)
├── yx-flowable-engine/ # 工作流引擎:流程流转、审批中心、消息通知(9203)
├── yx-flowable-design/ # 流程模型设计服务(Flowable 6.8 Modeler,9204)
├── yx-form-engine/ # 表单引擎:表单定义与数据存储(9205)
├── yx-document/ # 在线文档:OnlyOffice 集成(9206)
├── yx-im/ # 即时通讯:WebSocket 会话与消息(9207)
├── yx-cloud-ui/ # 前端工程(Vue 3 + Vite)
├── config/ # 各服务 Nacos 配置模板 + nginx 配置
├── sql/ # 数据库脚本
├── docs/ # 部署文档、演示图片
├── tools/ # Python 代码生成与文档工具
└── pom.xml # 父 POM
| 依赖 | 版本 |
|---|---|
| JDK | 17+ |
| Maven | 3.8+ |
| Node.js | 18+ |
| MySQL | 8.0+ |
| Redis | 6.0+ |
| Nacos | 2.x |
| MinIO | 可选(文件存储) |
| OnlyOffice Document Server | 可选(在线文档) |
git clone https://gitee.com/yx-project/yx-cloud.git
cd yx-cloud按需执行 sql/ 下脚本:
| 脚本 | 说明 |
|---|---|
nacos.sql |
Nacos 配置库 |
yx-cloud.sql |
主库(用户、权限、字典、日志等) |
qrtz.sql |
Quartz 定时任务表 |
yx-flowable.sql |
Flowable 工作流库 + 业务扩展表 |
yx_form.sql |
表单引擎库 |
yx_document.sql |
在线文档库 |
yx_im.sql / yx_im_moment.sql |
即时通讯库 |
multi-tenant.sql |
多租户相关表与字段 |
yx-seata.sql |
Seata 事务表(预留,当前版本未启用分布式事务) |
启动 Nacos 后,把 config/ 下的 *-dev.yml 导入配置中心,并按实际环境修改 MySQL、Redis、MinIO 连接信息。
先起 yx-gateway、yx-auth、yx-system,再按需启动业务服务:
mvn clean install -DskipTests
# 依次启动(或在 IDE 中启动各模块 Application 类)
mvn -pl yx-gateway spring-boot:run
mvn -pl yx-auth spring-boot:run
mvn -pl yx-system spring-boot:run
mvn -pl yx-flowable-design spring-boot:run
mvn -pl yx-flowable-engine spring-boot:run
mvn -pl yx-form-engine spring-boot:run
mvn -pl yx-document spring-boot:run
mvn -pl yx-im spring-boot:runcd yx-cloud-ui
npm install
npm run dev线上演示环境:
| 入口 | 地址 | 账号 |
|---|---|---|
| 演示站点 | https://www.sxwzyx.com | admin / 123456 |
| 在线文档(OnlyOffice 同源反代) | https://www.sxwzyx.com(`/web-apps/`、`/coauthoring/` 由 Nginx 反代到内网 8000) | 同上 |
演示环境为公开测试环境,数据会不定期重置,请勿上传敏感文件。多租户域名解析按
sys_tenant.domain匹配 Host,用 IP 或localhost访问只会落到默认租户。
本地开发环境:
| 入口 | 地址 | 账号 |
|---|---|---|
| 前端管理界面 | http://localhost:3000 | admin / 123456 |
| 网关 | http://localhost:8080 | — |
| 接口文档(网关聚合) | http://localhost:8080/doc.html | — |
| Nacos 控制台 | http://localhost:8848/nacos | nacos / nacos |
| Spring Boot Admin | http://localhost:9201 | 无需登录(内网访问,生产请加保护) |
| MinIO 控制台 | 见 config/*-dev.yml 中 minio.url |
minio.accessKey / minio.secretKey |
各服务直连端口:网关 8080、认证 9200、系统 9201、流程引擎 9203、流程设计 9204、表单引擎 9205、在线文档 9206、即时通讯 9207。
开发环境注意两点:
- vite proxy 的
changeOrigin必须为false,否则 Host 头被改写导致多租户域名解析失效。- 在线文档需额外部署 OnlyOffice Document Server,并配置
VITE_ONLYOFFICE_URL;未部署时文档编辑页不可用,其余功能不受影响。
生产部署(Docker / Nginx / OnlyOffice)参见 docs/部署文档.md。
网关统一注入身份信息到请求头,下游服务直接读取,不使用跨进程 ThreadLocal:
| 含义 | Header |
|---|---|
| 用户 ID | user_id |
| 用户名 | username |
| 用户标识 | user_key |
| 部门 ID | dept_id |
| 部门名称 | dept_name |
| 租户 ID | X-Tenant-Id |
| 授权信息 | Authorization |
| 请求来源 | from-source(内部为 inner) |
发起 Feign 调用的服务需自建 FeignHeaderInterceptor 透传上述请求头,否则链路后续服务拿不到身份信息。
- 在线代码生成:系统工具 → 代码生成,导入表结构后生成前后端 CRUD
- Python 工具:
python tools/gen/gen.py,配置见tools/gen/example.yml
以下能力已完成需求与设计文档(见 .kiro/specs/),尚未落地实现:
| 规划项 | 说明 | 设计文档 |
|---|---|---|
| 批量审批 | 同类待办批量通过/驳回,批量结果反馈 | 33-批量审批 |
| 流程打印导出 | 审批单打印模板、PDF 导出、流程图图片导出 | 32-流程打印导出 |
| 流程版本管理 | 流程定义多版本共存,运行中实例按发起版本执行,版本对比与回滚 | 34-流程版本管理 |
| 流程数据报表 | 流程效率、节点耗时、审批人工作量统计与图表 | 28-流程数据报表 |
| 外部表单集成 | 业务系统自有页面接入流程,表单数据回调 | 35-外部表单集成 |
| 组织架构选人组件 | 部门树 + 人员/角色/岗位统一选人组件,供节点配置与表单复用 | 30-组织架构选人组件 |
| 移动端适配 | H5 审批、消息、待办 | 29-移动端适配 |
| 大数据建模平台 | 数据源管理、Kafka 采集、Flink 治理、Spark 建模、数据资产目录、统一调度 | 27-大数据建模平台 |
| IM 二期 | 文档分享消息、系统通知落会话、智能体接入、对外客服会话与坐席接待 | 37-即时通讯IM |
| 分布式事务 | Seata 表结构已预留(sql/yx-seata.sql),尚未接入服务 |
— |
节点审批人当前支持 assignee / 候选用户 / 候选组,「角色、部门、发起人自选」等动态审批人策略同样在规划中。
欢迎提 Issue 和 Pull Request。提交前请确认:
- 新增微服务不引入
yx-common,自带独立 common 包 - 身份信息从请求头读取,不新增 ThreadLocal 上下文
- Header 常量走各服务自己的常量类,不硬编码字符串
如果本项目对你有帮助,欢迎微信赞助或加入交流群:
| 微信赞助 | 微信交流群 |
|---|---|
![]() |
![]() |
基于 MIT License 开源,可免费用于商业项目,请保留版权声明。










