Workforce Hub 项目简介:从零构建企业级协同办公平台的技术选型之路

SailTrack
2026-05-14
点 赞
0
热 度
2
评 论
0
  1. 首页
  2. 系统设计
  3. Workforce Hub 项目简介:从零构建企业级协同办公平台的技术选型之路

最近总算有空整理一下这个折腾了大半个学期的项目——Workforce Hub。

说实话,一开始的动机很简单:大三了,得有个拿得出手的项目。但真正开始写之后才发现,一个"企业级"系统的复杂度远超课堂上的 CRUD 练习。今天先聊聊这个项目是什么、为什么选这套技术栈,后续再分模块展开说。

一、这个项目是做什么的?——企业协同人事平台

简单说就是一个可以部署在企业自己服务器上的钉钉。员工用它聊天、请假、打卡,领导用它审批、管理团队。但和普通 OA 不一样的地方在于,我们在业务流程里嵌入了 AI Agent。

核心功能模块:

模块 做什么
组织与人员 部门树、员工档案、角色权限
考勤管理 打卡、排班、请假、异常计算
审批流程 Flowable 引擎驱动的全流程审批
IM 即时通讯 私聊、群组、@Agent 知识问答
Agent 平台 模型编排、知识库 RAG、工具调用
文件存储 MinIO 企业网盘

二、为什么选这套技术栈?——一个普通大三生的选型思考

2.1 模块化单体 vs 微服务

Workforce Hub 四层架构图

关于架构形态,一开始确实纠结过要不要拆微服务。但看了不少文章和实践后,结合自己的情况做了以下判断:

我:一个人,一台 Mac mini,一个 deadline
微服务:需要 10 个 repo、10 个 CI pipeline、服务发现、分布式事务...

血泪教训:对于个人项目或者小团队项目,在业务边界还不清晰的时候就拆微服务,大概率是在给自己找事做。模块化单体先把核心跑通,后续真要拆也有迹可循。

对比:

维度 模块化单体 微服务
开发效率 ✅ 一个 IDE 搞定全部 ❌ 多 repo 切换
部署复杂度 ✅ Docker Compose 一键 ❌ K8s + 服务网格
代码复用 ✅ 共享包即引用 ❌ 需独立打包或远程调用
横向扩展 ❌ 整包扩缩 ✅ 按服务独立扩缩
团队协作 ❌ 代码冲突风险 ✅ 服务边界天然隔离

我的选择:模块化单体,但做了一些"预拆分"设计——通过 SPI 接口解耦模块,未来需要拆的时候只要把接口实现抽成独立服务即可。

2.2 后端选型:Spring Boot 3 + MyBatis-Plus

为什么不是 Spring Boot 2?

因为我们用了 Java 17 + Spring Boot 3.x,原生支持虚拟线程和 GraalVM AOT 编译。虽然这两个特性在这版项目里没有深度使用,但至少不用踩"从 2 升 3"的坑。

为什么是 MyBatis-Plus 而不是 JPA?

说实话我对 JPA 的"自动建表 + 延迟加载"有心理阴影。MyBatis-Plus 至少 SQL 是可见的,出了问题能直接看是哪个查询炸了。当然代价是多写点 XML,但配合 IDEA 的 MyBatis 插件,开发体验还不错。

技术栈一览:

技术 用途
Java 17 + Spring Boot 3.x 主框架
Spring Security + Session + Redis 认证鉴权
MyBatis-Plus ORM
Flowable 审批流引擎
Spring AI LLM 统一接入
Spring WebSocket (STOMP) IM 实时通信
Flyway 数据库版本迁移
Spring Scheduling Agent 定时任务

2.3 前端选型:Vue3 + TypeScript + Element Plus

前端分了两端:

  • admin-web(管理后台):用 Element Plus,标准的 B 端风格,管理员操作的界面
  • employee-web(员工端):自研 UI 组件,消息优先的协同工具风格

为什么没有直接用一套?

因为管理员和普通员工的使用场景完全不同。管理员需要表格、表单、批量操作;员工更关心消息、审批、考勤。如果硬塞进同一个 UI 框架,要么管理员觉得不够专业,要么员工觉得太重。

三、数据存储:四个仓库各司其职

这也是我第一次在一个项目里同时接入四种存储:

存储 干什么
MySQL 8.x 主业务库(组织、账号、审批、考勤、消息)
PostgreSQL + pgvector 知识库向量检索(RAG)
Redis 登录会话、验证码、限流、缓存
MinIO 文件与附件对象存储

为什么多一个 PostgreSQL?

因为 RAG 知识库需要向量检索。MySQL 虽然本身没什么问题,但 pgvector 做向量计算的性能和生态比 MySQL 的方案成熟。虽然多维护一个数据库有点麻烦,但在知识问答这个功能上,选错存储的代价更大。

四、Agent 平台:这个项目的核心差异点

大多数 OA 系统里,AI 就是一个聊天机器人叠在界面上。我们这个的思路不一样——Agent 是业务链路的一等公民

Agent = 模型配置 + Prompt 模板 + 工具绑定 + 知识库绑定 + 触发器 + 权限审计

具体怎么落地:

  1. 审批流程中的预审节点:请假天数超了?AI 直接驳回,不用等领导手工发现
  2. 会话中的 @Agent 知识问答:在聊天框 @ 一下 Agent,"年假怎么算"、"报销流程是什么",它从公司制度文档里检索回答
  3. 定时任务主动提醒:考勤异常、假期快过期、审批超时未处理

这部分后续会单独写一篇展开说,设计思路比较有意思。

五、项目当前进度

模块 状态
后端组织 + 认证 ✅ 完成
admin-web 前端 ✅ Phase 1-3 完成
employee-web 前端 🔄 UI 联调中
Agent 平台 🔄 工作流编排开发中
IM 即时通讯 🔄 WebSocket 集成中
Flowable 审批 🔄 流程模板对接中
Docker Compose 交付 🔲 待做

总结

这个项目的核心思路其实就一句话:用模块化单体保证开发效率,用 Agent 平台做差异化,用 Docker Compose 降低交付门槛

对我自己来说,它最大的价值不是代码本身,而是逼着我去理解一个完整的系统该怎么设计——从架构到数据库到接口到部署,课堂上学不到的工程思维在里面。

下一步:下一篇文章聊聊 Flowable 工作流引擎在实际项目中的集成过程,以及在审批流程嵌入 AI 预审的设计细节。

环境信息:JDK 17 + Spring Boot 3.4 + Vue3 + MySQL 8.4 + PostgreSQL 16 + Redis 7 + MinIO 更新日期:2026年5月14日


让我们忠于理想,让我们面对显示

SailTrack

entp 辩论家

站长

不具版权性
不具时效性

文章内容不具时效性。若文章内容有错误之处,请您批评指正。

目录

欢迎来到SailTrack的站点,为您导航全站动态

31 文章数
11 分类数
3 评论数
28标签数