Skip to content

流程实例与任务 ​

概述 ​

流程实例是「流程定义」的一次具体执行,审批任务则是流程实例在某个审批节点上产生的、由特定用户处理的工作项。本章聚焦实例与任务的运行态:如何发起、查询、推进(审批/退回/加签等)以及取消,并涵盖抄送场景。

相关代码位置:

  • 后端:backend/app/api/v1/module_bpm/process_instance、backend/app/api/v1/module_bpm/task、backend/app/api/v1/module_bpm/copy
  • 前端:frontend/apps/web-ele/src/views/bpm/processInstance、frontend/apps/web-ele/src/views/bpm/task

一次流程从「定义」到「运行」,会落地为三张核心表与一类抄送记录:

  • 流程实例 bpm_process_instance:一次完整流程的运行时载体,记录发起人、状态、流程变量、摘要等。
  • 活动节点 bpm_process_node:流程引擎在实例内推进时的「令牌」记录,每个经过的节点(发起人、审批人、条件、抄送等)都会写入一行,体现该节点的状态与候选人。
  • 审批任务 bpm_task:节点为「人」时产生的可处理工作项,关联到具体审批人;会签、加签会衍生多个任务。
  • 抄送 bpm_process_instance_copy:流程到达抄送节点或被手工抄送时,记录「谁被抄送」「来自哪个节点」。

说明:一个用户任务节点可能对应多个 bpm_task(多人会签、加签场景);活动节点与任务是一对多的关系。

流程实例 ​

生命周期 ​

image-20260930172748446

实例从发起到结束,状态由枚举 BpmProcessInstanceStatusEnum 描述:

状态值含义
未开始-1尚未进入审批
审批中1运行态(默认)
审批通过2流程正常结束
审批不通过3被拒绝结束
已取消4发起人/管理员取消

任务侧的状态由 BpmTaskStatusEnum 描述(审批中、通过、拒绝、退回、取消、加签挂起 WAIT 等),其中 通过/拒绝/退回/取消 为终态,已在办列表以终态集合过滤。

实例接口 ​

所有实例接口挂载于 /bpm/process-instance,权限前缀 bpm:process-instance:*。

发起流程 POST /create 提交 processDefinitionId、variables(流程变量)以及可选的 startUserSelectAssignees(发起人自选审批人,形如 {节点ID: [用户ID]})。引擎会先校验当前用户是否有发起权限(见流程定义的 startUserType:全员 / 指定人员 / 指定部门),随后创建实例并推进到首个节点。

查询详情 GET /get:返回单个实例及流程定义信息。

分页查询

  • GET /my-page:仅当前用户发起的实例。
  • GET /manager-page:管理视角(可带名称、分类、状态、发起人等条件筛选)。

取消流程

  • DELETE /cancel-by-start-user:发起人取消,需填写原因。
  • DELETE /cancel-by-admin:管理员取消,需填写原因。 取消会终止实例下所有运行中的任务与节点,并写入取消原因。

触发器回调恢复 PUT /trigger-callback:当流程挂起在「HTTP 回调」触发器节点时,外部业务方完成处理后调用此接口,携带 taskDefineKey 唤醒并继续推进流程。

审批辅助查询

  • GET /get-approval-detail:获取审批详情。已发起实例返回真实节点轨迹 + 引擎预测的后继节点 + 当前用户待办任务 + 表单字段权限;仅传 processDefinitionId 时返回「发起前预览」(纯预测)。
  • GET /get-next-approval-nodes:预测下一个审批节点(支持按任务/实例/定义+节点解析)。用于前端在审批时展示「下一处理人」或「自选审批人」。
  • GET /get-bpmn-model-view:返回流程模型视图(已办/当前/驳回节点着色),供简易设计器查看器渲染流程图。
  • GET /get-print-data:返回打印数据(项目暂未启用打印模板,printTemplateEnable=false)。

抄送分页 GET /copy/page:查询「抄送给我」的流程列表,详见后文「抄送」。

审批任务 ​

image-20260930172841814

任务接口挂载于 /bpm/task,权限前缀 bpm:task:*。任务本质上是引擎对外暴露的「人工处理入口」,所有写操作最终都交给 BpmProcessEngine 执行。

查询 ​

  • GET /todo-page:我的待办(状态为审批中、当前用户为处理人)。
  • GET /done-page:我的已办(终态任务:通过/拒绝/退回/取消)。
  • GET /manager-page:任务管理视角,可带名称、实例、状态筛选。
  • GET /list-by-process-instance-id:某实例下的全部任务(流程详情页使用)。
  • GET /list-by-parent-task-id:某任务的加签子任务列表。
  • GET /list-by-return:当前任务所在流程中「可退回的已通过用户节点」列表(退回弹窗数据源)。

审批动作 ​

image-20260930173052063

动作接口说明
通过PUT /approve审批通过,可附意见、签名图、附件,并通过 variables 回写流程变量(如指定下节点审批人)
拒绝PUT /reject审批不通过,流程按「拒绝处理策略」结束或驳回到指定节点
退回PUT /return退回至指定 targetTaskDefinitionKey 节点,可带原因
委派PUT /delegate委托他人代为审批,原处理人 ownerId 保留,完成后回归
转办PUT /transfer将任务转交给他人,由新处理人直接审批
加签PUT /create-sign在本人前后追加审批人(type 为 before/after 或 1/2)
减签DELETE /delete-sign撤销某个加签产生的子任务
抄送PUT /copy任务处理时顺手抄送他人(见抄送)
撤回PUT /withdraw在下一节点尚未处理时,撤回自己刚完成的任务

加签语义:向前加签(before)会先把当前任务挂起(WAIT),等前置加签人先审;向后加签(after)当前人先审,子任务状态为「审批通过中 APPROVING」,待所有加签人完成后再统一推进。

抄送 ​

抄送让相关人员「知会但不处理」。系统支持两种来源:

  1. 设计器抄送节点:流程经过 COPY_TASK_NODE 时,引擎自动向配置的候选人写入抄送记录。
  2. 任务手工抄送:审批人在处理任务时调用 PUT /task/copy,把当前节点信息抄送给指定用户。

抄送记录存于 bpm_process_instance_copy,权限策略为 OWN(仅被抄送人可见自己的记录)。相关查询:

  • 后端实例侧:GET /process-instance/copy/page 返回「抄送我的流程」,含实例名称、发起人、来源节点、摘要等。
  • 前端任务侧:copyTask() 发起抄送,frontend/.../views/bpm/task/copy 提供「抄送我的」列表页。

前端集成 ​

路由与页面 ​

BPM 列表页(我的流程、待办、已办、抄送、任务管理等)由后端菜单驱动;以下为前端路由中登记的「隐藏页」(从列表跳转进入):

路由页面用途
/bpm/process-instance/create发起流程选择流程定义并填写表单发起
/bpm/process-instance/detail流程详情展示审批详情、流程图、审批记录
/bpm/process-instance/report数据报表流程运行统计
/bpm/manager/task任务管理管理员视角的任务列表

任务相关页面位于 frontend/.../views/bpm/task:

  • todo:待办任务(审批操作入口)
  • done:已办任务
  • copy:抄送我的
  • manager:任务管理

API 封装 ​

前端在 src/api/bpm/processInstance 与 src/api/bpm/task 中封装了对应方法,常用如下:

ts
// 流程实例
createProcessInstance(data)              // 发起
getProcessInstanceMyPage(params)         // 我的流程
getProcessInstanceManagerPage(params)    // 管理流程
cancelProcessInstanceByStartUser(id, reason)
cancelProcessInstanceByAdmin(id, reason)
getApprovalDetail(params)                // 审批详情(真实+预测)
getNextApprovalNodes(params)             // 下一审批节点
getProcessInstanceBpmnModelView(id)      // 流程图视图

// 审批任务
getTaskTodoPage(params)                   // 待办
getTaskDonePage(params)                   // 已办
getTaskManagerPage(params)                // 任务管理
approveTask(data)                         // 通过
rejectTask(data)                          // 拒绝
returnTask(data)                          // 退回
delegateTask(data)                        // 委派
transferTask(data)                        // 转办
signCreateTask(data) / signDeleteTask(data) // 加签/减签
copyTask(data)                            // 抄送
withdrawTask(taskId)                       // 撤回