本文以一套低代码平台源码为样本,解读流程引擎与工程引擎的双引擎协同设计,供平台选型者参考。
该平台 BPM 低代码平台在「流程引擎」之外,新增了与之一脉相承的 工程引擎(菜单分组「工程」)。本文结合 `` 前后端实现,解读其管理思想、任务处理的三种模式,并分析典型适用场景与边界。
在企业数字化建设中,流程引擎(WF) 擅长处理「按节点顺序推进、需要审批留痕」的事务性工作;而 项目管理 更关注「多任务并行、阶段分组、工期可视、人力投入」——这是两套不同的管理范式。
该低代码平台的做法不是另起炉灶,而是 参照流程引擎的分层架构,平行建设工程管理体系:
维度 | 流程引擎(WF) | 工程引擎(CCPrj) |
|---|---|---|
层次 | 流程类别 → 流程模板 → 流程实例 | 工程类别 → 工程模板 → 工程实例 |
主键 | WorkID(后端算法生成) | OID(同 WorkID 生成方式) |
业务编号 | BillNo | BillNo(项目实例编号) |
生命周期 | 发起 / 待办 / 在途 / 已完成 | 草稿 / 进行中 / 已完成 |
设计器 | 流程设计器 | 工程模板设计器(甘特 + 任务树) |
用户入口 | 发起、待办、在途、已完成 | 同名菜单体系(LinkPrj 引入) |
核心思想一句话:把「项目」当作与「流程」同等级的一等公民,用同一套低代码基础设施(实体、菜单、列表、表单、权限)承载,让业务人员既能跑审批,也能管进度。
工程数据按三层组织(见 工程管理需求.md 与实体定义):
工程类别(Prj_Sort)
└─ 工程模板(Prj_Prj / TemplatePrj)
└─ 任务模板(Prj_TemplateTask + 任务分组)
↓ 用户「发起工程」
工程实例(Prj_GenerPrj)
└─ 任务实例(Prj_GenerTask / GenerTask)
└─ 参与人(Prj_GenerWorker)、日志(Prj_WorkerLog)、轨迹(Prj_Track)关键设计:模板与实例完全脱耦。
创建工程时,系统将模板任务树 复制 到实例表;此后实例可自由增删改节点,不影响原模板。这与流程「按模板发起、实例独立演进」的逻辑一致,降低了「标准项目」与「一次性项目」之间的切换成本。
工程实例的主界面是 MyPrj.vue——项目处理器。它以 任务树 + 甘特时间轴 呈现:
DTFrom / DTTo 定位;DurationDays、参与人数量,可推算工时/人天(第一版不涉及金额成本)。用户不需要学习专业 PM 工具,在熟悉的低代码界面里就能「看见进度」。
在 GPN_Menu.ts 中,工程分组(Group P)提供:
这与流程的 LinkFlow 完全对称:选一个工程模板,自动长出整套操作入口,实施人员不必手写路由。
工程状态(PrjSta):草稿 → 进行中 → 已完成(完成后不可回退)。
任务状态(TaskSta):未开始 → 已完成 / 延期 / 暂停,支持开始、完成、暂停、恢复等操作。
权限规则(需求文档 7.4 节):
操作 | 允许角色 |
|---|---|
查看工程/任务 | 发起人、负责人、参与人 |
编辑任务 | 负责人、参与人 |
新增/删除任务 | 工程发起人 |
启动/完成/删除工程 | 工程发起人 |
工具栏按钮、行内操作均按状态 动态显隐,避免「已完成还能改」的混乱。
TaskCenter.vue 提供 待办 / 参与中 / 已完成 三栏视图,聚合用户在所有工程中的任务,并按 TaskType 展示任务类型标签。点击任务后,系统根据类型 自动路由 到对应的任务处理页——这是三态任务模式落地的枢纽。
在任务模板实体 TemplateTask 中,字段 TaskType 定义了任务关联类型:
@0=通用任务
@1=绑定单流程
@2=绑定单表单运行时,Comm/taskHandler.ts 负责解析元数据并分发到不同 Vue 组件:
// taskHandler.ts
export function getTaskTypeLabel(taskType: number) {
switch (taskType) {
case 1: return '流程任务';
case 2: return '单据任务';
default: return '通用任务';
}
}
export function getTaskHandlerCompUrl(taskType: number) {
if (taskType === 1) return '/@/工程模块
if (taskType === 2) return '/@/工程模块
return '/@/工程模块
}MyPrj.vue 与 TaskCenter.vue 打开任务时,均调用 loadTaskTemplateMeta 读取 TaskType、RefFlowNo、RefFrmID,再动态加载对应处理器。同一套工程骨架,挂载三种不同的「任务内脏」。
TaskGener.vue定位:不绑定外部流程或表单,在工程上下文内完成 执行记录型 工作。
典型能力(见 TaskGener.vue):
TaskFilePanel)管理任务级附件。适合:现场施工记录、调研笔记、日常协作、无法表单化的柔性工作——「人做了什么事、花了多少时间」比「填了一张表」更重要。
创建入口:GPN_PrjTask 向导中选择「通用类型」→ TemplateTaskGener。
TaskFlow.vue定位:将工程中的某个任务 锚定到一条 WF 流程,在工程 Drawer 内嵌入流程运行时。
典型能力(见 TaskFlow.vue):
RefFlowNo;MyFlow?FlowNo=xxx;适合:需要 审批链、会签、退回、留痕 的节点——如合同评审、变更审批、验收签核。工程甘特负责「什么时候该做」,流程引擎负责「怎么做才合规」。
创建入口:GPN_PrjTask 选择「单流程」→ 后端 Task_CreateTaskFlow → TemplateTaskFlowSingle 维护 RefFlowNo。
TaskBill.vue定位:将任务 锚定到一张低代码表单,在工程内直接填报、保存结构化数据。
典型能力(见 TaskBill.vue):
FrmGener_Init 加载表单;FrmFool 渲染可编辑字段;GPN_PrjTask.defaultBillFields)。适合:检查表、测量记录、材料清单、设备台账等 强结构、可统计、可归档 的采集场景。数据落在 PTable 关联表,便于后续报表与大屏。
创建入口:GPN_PrjTask 选择「单表单」→ 后端 Task_CreateTaskBill → 自动创建 Frm{taskId} 及默认字段。
维度 | 通用任务 | 流程任务 | 单据任务 |
|---|---|---|---|
组件 | TaskGener.vue | TaskFlow.vue | TaskBill.vue |
核心价值 | 日志、工时、协作 | 审批、合规、留痕 | 结构化数据采集 |
绑定对象 | 无 | RefFlowNo | RefFrmID |
数据形态 | 文本日志 + 附件 | 流程轨迹 + 表单节点 | 业务表字段 |
典型用户动作 | 写日志、标记完成 | 提交流程、审批 | 填表、保存 |
与 WF 关系 | 弱耦合 | 强集成(iframe) | 中集成(共享表单引擎) |
设计亮点:三种模式在 工程时间轴上统一呈现,在执行层 各取所长——不必为了填一张表去单独发起流程,也不必为了记一条日志去建一张空表单。
传统 BPM 以 串行节点 为中心,难以表达:
工程引擎用 甘特 + 任务树 补齐这一层,流程退居为「某一任务的处理方式」,而非项目的唯一载体。
许多团队用 Project / 禅道管进度,用 OA 跑审批,用 Excel 记数据——三套系统、三套账号、数据对不上。
工程引擎把 进度、审批、表单 收敛到同一低代码平台:任务类型在模板期配置好,运行时自动路由,用户只面对「我的待办」。
纯定制项目管理系统:每个项目重写一遍; 纯流程驱动:改一个节点要动整张流程图。
模板复制 + 实例脱耦 兼顾了标准化与灵活性——装修公司可以沉淀「标准装修模板」,具体门店工程仍可在实例里加急改期、增删工序。
通用任务的 工时日志 + 附件、全工程的 Prj_Track 轨迹、流程任务的 审批记录,形成多层证据链——对审计、结算、复盘都有价值。
FileWorkspace.vue 进一步探索 工程文件工作区:按任务组织目录、版本、送审状态,并与审核流程联动。这指向「图纸 / 方案 / 合同」类项目的深度场景。
场景 | 推荐任务组合 | 理由 |
|---|---|---|
建筑装饰 / 市政施工 | 通用任务(日志)+ 里程碑 + 单据(检查表) | 甘特天然匹配工序;验收用里程碑;质检用表单 |
IT 实施 / 交付项目 | 通用(日报)+ 流程(变更/上线审批)+ 单据(配置清单) | 三态覆盖柔性协作与刚性管控 |
咨询 / 外包项目 | 通用任务为主 + 关键节点流程 | 轻量管理,重点节点留痕 |
企业内部专项 | 模板化发起 + LinkPrj 菜单 | 快速复制「年度技改」「门店翻新」等标准项目 |
多组织协同工程 | 工程实例 + 参与人 + 任务中心 | 统一待办,降低跨部门跟进成本 |
场景 | 注意点 |
|---|---|
强依赖前置任务(CPM 关键路径) | 第一版不做任务依赖,复杂排程需外接或二次开发 |
精细成本 / 预算管理 | 当前侧重人天统计,不含金额成本模块 |
超大型项目(数千任务) | 需关注甘特渲染性能与分页策略 |
纯审批、无工期概念的事务 | 直接用流程引擎更合适,不必强行套工程 |
Frm 实体,可直接关联,减少重复建表。
TaskCenter 进入,而不是只在单个工程里找任务——降低多项目并行时的认知负担。
flowchart TB
subgraph Menu["低代码菜单(工程分组 P)"]
A1[新建工程模板]
A2[引入工程组件 LinkPrj]
A3[发起 / 待办 / 在途 / 已完成]
end
subgraph Template["模板层"]
T1[工程类别 Prj_Sort]
T2[工程模板 Prj_Prj]
T3[任务模板 TemplateTask]
end
subgraph Instance["实例层"]
I1[工程实例 GenerPrj]
I2[任务实例 GenerTask]
I3[参与人 / 日志 / 轨迹]
end
subgraph TaskMode["三态任务处理"]
M0[TaskGener 通用任务]
M1[TaskFlow 流程任务]
M2[TaskBill 单据任务]
end
Menu --> Template
Template -->|复制脱耦| Instance
I2 --> TaskMode
M1 --> WF[流程引擎 MyFlow]
M2 --> Frm[表单引擎 FrmFool]该低代码平台的 工程引擎,本质上是把成熟十年的 流程引擎方法论 平移到 项目管理领域:同样的类别—模板—实例、同样的发起—待办—在途—完成、同样的低代码实体与菜单装配能力。
其最具辨识度的创新,是 三态任务模式——在同一张甘特图上,通用协作、流程审批、表单采集三种执行方式并存,由 TaskType 一行配置、运行时自动分发。
对于 有阶段、有并行、有工期、且执行方式 heterogeneous(异构) 的项目型业务,工程引擎不是流程引擎的替代品,而是与之并列的 第二引擎。双引擎协同,才能让低代码平台真正覆盖「管事」与「管项目」两类企业核心场景。
本文基于 `` 模块代码与需求文档整理,涉及核心文件:taskHandler.ts、MyPrj.vue、TaskGener.vue、TaskFlow.vue、TaskBill.vue、TaskCenter.vue、GPN_Menu.ts、TemplateTask.ts、GPN_PrjTask.ts。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。