本文基于源码静态分析,梳理一套工作流引擎的组织结构设计:五表核心模型的字段语义、与选人引擎的配合,以及与极简二元模型、重度 RBAC 模型的对比。
组织结构是指:系统运行要依赖的人员、部门、角色,以及人员与部门、角色之间的对应关系。
在该 BPM 平台(该引擎)中,这一概念直接落地为 Port_* 系列数据表,实体类统一归属 引擎内核命名空间 命名空间。流程引擎的节点接收人规则、表单权限、组织隔离、待办推送等能力,均以这套结构为数据底座。
组织结构不仅是 BPM 的专属需求,更是整个应用系统的基础,也是权限管理的基本条件:
依赖方 | 典型场景 |
|---|---|
工作流引擎 | 按"部门 + 角色"计算下一节点处理人 |
权限体系 | 按部门、岗位控制菜单、数据范围 |
低代码平台 | 组织树选人、按组织隔离应用与流程 |
第三方集成 | HR/OA 主数据向 BPM 同步或映射 |
若组织模型与业务语义不匹配,轻则集成成本陡增,重则流程"找不到人"、权限穿透或数据串租户——这类问题在生产环境中极难补救。
每个架构师对组织结构的理解、应用方向、部署环境各不相同,导致表结构设计千差万别:
核心矛盾:模型太简单则无法覆盖政企复杂场景;模型太复杂则难以与存量 HR/OA 系统对接。究竟哪种设计能覆盖绝大多数场景? 这是本报告要回答的问题。
该平台结合十余年 BPM 交付与组织结构集成经验,提出一套经过大量项目验证的五表核心模型。其目标不是学术上的"最范式化",而是:
用尽可能少的表,表达尽可能完整的组织语义,并让整个工作流引擎能用一条 SQL 完成"按部门+角色找人"。
# | 表名 | 实体类 | 职责 |
|---|---|---|---|
1 | Port_Dept | Dept | 部门树 |
2 | Port_Emp | Emp | 人员主档 |
3 | Port_Station | Station | 角色(岗位) |
4 | Port_DeptEmp | DeptEmp | 部门—人员(支持兼职) |
5 | Port_DeptEmpStation | DeptEmpStation | 部门—角色—人员(三要素绑定) |
另有扩展表 Port_StationType(角色分类)、Port_Org / Port_OrgAdminer(多组织管理)等,服务于集团/SAAS 模式,不改变五表核心语义。
ParentNo 自关联,NameOfPath 冗余全路径以加速展示与检索。Leader 存部门领导登录账号(非中文名),直接支撑"找部门负责人"类流程规则。OrgNo 在集团/SAAS 模式下做组织隔离。FK_Dept 表示主部门,满足"此人默认归属哪里"的高频查询。UserID 与 No(组织编号_UserID)分离,允许跨租户账号重复。Leader 字段支撑"找直属领导"规则,与部门领导字段语义区分清晰。FK_StationType 分类,便于流程设计器按类型筛选。GroupStationModel 配置为"组织级角色"或"部门级角色"。MyPK = FK_Dept + "_" + FK_Emp,一人可挂多个部门。Port_DeptEmpStation 记录,保证数据一致性。MyPK = FK_Dept + "_" + FK_Emp + "_" + FK_Station。该平台没有强迫所有关系都走关联表,而是采用双轨策略:
场景 | 使用表 | 原因 |
|---|---|---|
默认部门、快速查人 | Port_Emp.FK_Dept | 单表查询,性能最优 |
一人多部门(兼职) | Port_DeptEmp | 不破坏主部门字段的简洁性 |
部门内岗位绑定 | Port_DeptEmpStation | 角色必须带部门上下文 |
这避免了"所有关系都塞进关联表"导致的性能问题,也避免了"只在用户表上挂一个部门字段"无法表达兼职的局限。
这是该平台方案与许多简易 OA 的根本分歧。
简易方案常把角色直接挂在人员上(User.Role = 经理),但现实中:
若角色不绑定部门,流程引擎无法区分"找 A 部门的经理"与"找 B 部门的经理"。
该平台用 Port_DeptEmpStation 将 部门 × 角色 × 人员 三维绑定,使语义与政企编制管理一致。
FindWorker.cs 中大量接收人规则最终归结为对 Port_DeptEmpStation 的查询。例如"按角色智能计算"的核心 SQL:
引擎内核命名空间.Glo 中的公共选人方法同样依赖此表:
人员是否拥有某角色,也通过此表判断:
设计结论:五表不是"数据库教科书式"的拆表,而是让引擎能用简单 SQL 表达复杂组织语义的最小闭包。
维度 | 方案A:用户—部门 | 方案B:该平台五表 | 方案C:重度 RBAC |
|---|---|---|---|
表数量 | 2~3 | 5(核心) | 8~15+ |
兼职部门 | 不支持或 hack | 原生支持 | 需额外建模 |
部门上下文角色 | 不支持 | 原生支持 | 需 RoleScope 扩展 |
BPM 选人 SQL 复杂度 | 高(需业务层拼装) | 低(单表/双表 JOIN) | 高(多表 JOIN + 范围判断) |
与 HR 主数据映射 | 简单但不完整 | 中等,语义对齐 | 复杂,概念不对等 |
权限细粒度 | 弱 | 中(角色+部门) | 强(资源级 ACL) |
集成维护成本 | 低 | 中 | 高 |
许多系统采用 UserStation(用户—角色)二元关联。其缺陷在 BPM 场景下会被放大:
该平台在数据模型层一次性解决,使引擎逻辑保持简洁、可测试、可审计。
完整身份与访问管理(IAM)模型适合统一身份平台,但对 BPM 集成而言往往过度设计:
该平台五表在表达能力与集成友好度之间取了工程上的平衡点。
优势 | 说明 |
|---|---|
语义贴近政企编制 | 部门树 + 岗位 + 兼职,与真实组织管理一致,业务人员易理解 |
BPM 原生适配 | FindWorker 引擎直接查询 Port_DeptEmpStation,无需应用层翻译 |
集成面收敛 | 视图/接口集成都只需对齐五表,文档与 API 边界清晰 |
多组织可扩展 | 通过 OrgNo 字段贯通五表,单组织到 SAAS 无需改模型 |
双轨性能 | 主部门走 Port_Emp.FK_Dept 快速查询,复杂关系走关联表 |
级联一致性 | DeptEmp 删除自动清理 DeptEmpStation,减少脏数据 |
经大量项目验证 | OrganizationAPI 提供完整增删改同步能力,降低对接风险 |
局限 | 影响 | 该平台的应对 |
|---|---|---|
五表同步成本 | 外部 HR 需维护 DeptEmp + DeptEmpStation | 提供 Port_Emp_Save 一次调用写入三表;推荐视图模式合并库 |
角色非全局 | "全公司总监"类岗位需特殊处理 | 可用虚拟部门、或按组织根部门绑定角色 |
冗余字段 | NameOfPath、DeptEmp 中 Vue3 辅助列 | 换取查询性能与前端展示便利 |
复合主键 | MyPK 拼接规则在 SAAS 下有变体 | 统一由实体 beforeUpdateInsertAction 生成,集成时调用 API 即可 |
非完整 IAM | 不支持资源级 ACL、动态策略 | 权限场景由应用系统承担;BPM 聚焦流程选人 |
标签/用户组非核心 | Port_Team 系列为辅助 | 不影响五表主模型,按需启用 |
该平台五表模型不是万能的组织架构,而是为 BPM 工作流场景优化的最小完备集:
五表模型通过 该引擎RunModel 配置项支持三种运行模式,无需修改表结构:
值 | 模式 | 组织特征 |
|---|---|---|
0 | 单组织 | 无 OrgNo 隔离,一个 admin 管理全部 |
1 | 集团组织 | 多独立组织,OrgNo 隔离;用户账号全局唯一;可共享流程 |
2 | SAAS | 多租户;账号可跨租户重复;Emp.UserID + Emp.No 双字段 |
扩展表 Port_Org、Port_OrgAdminer 在集团/SAAS 模式下管理组织生命周期与管理员权限,与五表通过 OrgNo 松耦合。
该平台提供两种组织结构集成路径,均围绕五表展开:
删除 该引擎 侧五张物理表,创建同结构视图,将业务库组织数据映射过来。优势:
通过 OrganizationAPI 在组织变更时主动同步。核心接口:
接口 | 作用 |
|---|---|
Port_Org_Save | 同步组织及主管理员 |
Port_Dept_Save / Port_Dept_Delete | 同步部门 |
Port_Emp_Save / Port_Emp_Delete | 同步人员及部门角色关系 |
Port_Station_Save / Port_Station_Delete | 同步角色 |
Port_Emp_Save 的实现体现了五表联动逻辑——一次调用完成 Port_Emp、Port_DeptEmp、Port_DeptEmpStation 的写入:
集成建议:
Port_Emp_Save。# | 命题 | 该平台的回答 |
|---|---|---|
1 | 组织结构是什么 | 人员、部门、角色及其对应关系 |
2 | 为何重要 | 应用系统基础,权限与流程的前提 |
3 | 为何设计千差万别 | 场景、环境、理解差异导致模型分化 |
4 | 哪种设计覆盖大多数场景 | 五表核心模型,经大量政企项目验证 |
5 | 五表是什么 | Dept、Emp、Station、DeptEmp、DeptEmpStation |
6 | 优劣如何 | 流程语义完备、集成面收敛;非完整 IAM,同步需规范 |
7 | 如何落地 | 视图模式或 OrganizationAPI,按部署条件选择 |
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。