外观
流程实例与任务
概述
流程实例是「流程定义」的一次具体执行,审批任务则是流程实例在某个审批节点上产生的、由特定用户处理的工作项。本章聚焦实例与任务的运行态:如何发起、查询、推进(审批/退回/加签等)以及取消,并涵盖抄送场景。
相关代码位置:
- 后端:
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(多人会签、加签场景);活动节点与任务是一对多的关系。
流程实例
生命周期

实例从发起到结束,状态由枚举 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:查询「抄送给我」的流程列表,详见后文「抄送」。
审批任务

任务接口挂载于 /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:当前任务所在流程中「可退回的已通过用户节点」列表(退回弹窗数据源)。
审批动作

| 动作 | 接口 | 说明 |
|---|---|---|
| 通过 | 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」,待所有加签人完成后再统一推进。
抄送
抄送让相关人员「知会但不处理」。系统支持两种来源:
- 设计器抄送节点:流程经过
COPY_TASK_NODE时,引擎自动向配置的候选人写入抄送记录。 - 任务手工抄送:审批人在处理任务时调用
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) // 撤回