主题
流程管理 PRD
文档信息
| 项目 | 内容 |
|---|---|
| 产品名称 | PMForge - 流程管理 |
| 文档版本 | v2.0 |
| 创建日期 | 2026-09-19 |
| 最后更新 | 2026-09-24 |
| 文档状态 | 评审中 |
| 优先级 | P0 |
一、功能概述
1.1 功能定位
如果把工作流系统比作一座城市的交通网络,那么"流程设计"是道路规划图,"我的流程"是每辆车的导航,而流程管理就是交通指挥中心——管理员坐在大屏前,看到哪条路堵了就去疏通,哪辆车抛锚了就去拖走,哪个路口效率低就去优化信号灯。
流程管理模块是 PMForge 工作流系统的运营管理核心,面向管理员提供五大能力:
| 能力 | 一句话说明 | 类比 |
|---|---|---|
| 流程定义管理 | 管理已经发布上线的流程模板 | 管理"哪些路可以通车" |
| 流程实例管理 | 管理每一条正在跑的具体流程 | 管理"路上跑的车" |
| 流程监控 | 统计和分析流程运行数据 | "交通大数据大屏" |
| 流程任务管理 | 全局视角干预异常任务 | "交警现场指挥" |
| 流程监听配置 | 配置自动化规则,减少人工干预 | "设置自动红绿灯" |
核心设计原则:这个模块是"管理视角"——管理员不需要亲自审批任何流程,但需要有能力干预任何流程。就像交通指挥官不需要自己开车,但需要能叫停任何一辆车。
1.2 目标用户
| 用户类型 | 使用频率 | 核心诉求 | 典型操作 |
|---|---|---|---|
| 系统管理员 | 每天使用 | 确保工作流系统稳定运行,快速发现和处理异常 | 查看监控大屏、处理告警、配置监听器 |
| 流程管理员 | 高频使用 | 管理流程实例全生命周期,干预异常任务 | 终止阻塞流程、转办超时任务、分析效率 |
| IT 运维人员 | 日常使用 | 配置自动化规则,排查流程技术问题 | 创建超时监听器、查看事件日志、排查脚本 |
| 部门主管 | 偶尔使用 | 了解部门审批效率,发现瓶颈 | 查看部门统计报表、导出效率分析 |
1.3 业务价值
- 全局流程管控:管理员可以查看和干预所有流程实例,确保业务流程不阻塞、不卡壳——就像交通指挥中心可以远程控制红绿灯
- 异常快速响应:支持强制转办、委派、加签、减签等操作,快速处理"卡住"的流程——审批人离职了?一键转给新人
- 流程效率优化:通过统计分析和耗时排行,发现"哪个节点最慢""哪个人审批最久",用数据驱动流程优化
- 自动化能力增强:通过监听器配置,实现"超时自动提醒""超时自动转交上级"等规则,减少人工盯盘
- 数据驱动决策:提供流程运行报表,为管理层优化组织架构和审批流程提供依据
1.4 功能范围
| 功能模块 | 功能描述 | 优先级 | 所属端 |
|---|---|---|---|
| 流程定义管理 | 管理已发布的流程定义,查看定义详情,挂起/激活 | P0 | 后台管理 |
| 流程实例管理 | 管理所有流程实例的全生命周期(终止/取消/挂起/恢复/删除) | P0 | 后台管理 |
| 流程监控 | 流程统计分析、耗时分析、效率报表、告警面板 | P1 | 后台管理 |
| 流程任务管理 | 全局任务视图,支持强制转办/委派/加签/减签/催办 | P0 | 后台管理 |
| 流程监听配置 | 配置各类流程监听器和事件订阅,实现自动化处理 | P1 | 后台管理 |
二、用户场景
2.1 用户角色
| 角色名称 | 角色标识 | 权限范围 | 典型操作 |
|---|---|---|---|
| 流程超级管理员 | flow_super_admin | 全流程管理权限 | 终止/取消/强制转办任何流程 |
| 流程管理员 | flow_admin | 管辖范围内的流程管理 | 查看/干预管辖范围内的流程 |
| 流程监控员 | flow_monitor | 只读监控权限 | 查看流程统计和监控数据 |
| 部门审批负责人 | dept_approve_leader | 部门流程管理 | 查看和干预本部门的流程任务 |
2.2 使用场景
场景 1:流程管理员小王处理阻塞流程
场景描述:某采购审批流程因为审批人离职,导致流程阻塞超过一周,供应商催款电话不断。
用户故事:作为流程管理员,小王收到系统告警"采购审批流程阻塞超过 7 天",需要紧急处理以确保业务不受影响。
操作步骤:
- 小王登录后台管理系统,进入"流程管理 > 流程监控"
- 在监控大屏的"告警面板"中看到红色告警:"采购审批流程"有 1 条超时实例
- 点击告警信息,进入流程实例详情页面
- 查看流程图——当前阻塞在"财务经理审批"节点(蓝色闪烁高亮)
- 查看审批时间线,确认该任务已分配给已离职员工"张某某"
- 点击该任务节点,选择"强制转办"操作
- 在弹出的对话框中选择新的审批人(财务部新经理"李某某")
- 填写转办原因"原审批人已离职,转交新经理处理"
- 点击"确认转办"按钮
- 系统记录操作日志,任务重新分配给新审批人
预期结果:
- ① 阻塞的流程恢复运行,新审批人李某某在待办列表中看到该任务
- ② 原处理人张某某收到通知"该任务已转办"
- ③ 操作日志中记录了完整的转办信息(操作人:小王,原因:原审批人已离职)
- ④ 发起人收到通知"您的采购审批已转交新审批人处理"
场景 2:流程管理员小王批量处理月末超时任务
场景描述:月末结算期间,大量报销审批任务超时未处理,堆积了 30 多条。
用户故事:作为流程管理员,小王月底发现大量报销审批任务超时,需要快速识别并批量处理这些超时任务。
操作步骤:
- 进入"流程管理 > 任务管理"
- 设置筛选条件:任务状态="待处理",超时状态="已超时"
- 系统显示所有超时任务列表,按超时时长降序排列
- 查看超时任务详情:任务名称、当前审批人、超时时长、所属流程
- 对于需要批量转办的任务,勾选多个任务(最多 50 条)
- 点击"批量转办"按钮
- 选择目标审批人,填写转办原因"月末集中处理超时任务"
- 确认批量转办操作
- 系统逐一执行转办操作,并发送通知给新审批人
预期结果:
- ① 超时任务被批量转办给新的审批人
- ② 每个新审批人在待办列表中看到转入的任务
- ③ 操作日志记录了批量转办的完整信息
- ④ 监控面板的"超时任务数"指标下降
场景 3:部门主管老张分析季度审批效率
场景描述:部门主管老张需要在季度会议上汇报本部门的审批效率情况。
用户故事:作为部门主管,老张需要了解本季度部门内各审批流程的平均处理时长,找出效率低下的流程环节,以便优化审批流程。
操作步骤:
- 进入"流程管理 > 流程监控"
- 选择"效率分析"标签页
- 设置筛选条件:时间范围="本季度",部门="本部门"
- 系统展示统计数据:
- 流程发起总数 156 条、已完成 120 条、进行中 30 条、已终止 6 条
- 平均处理时长 18.5 小时、最长处理时长 168 小时
- 各节点平均耗时排行——发现"部门经理审批"节点平均耗时 12 小时
- 超时率 8.3%
- 点击"部门经理审批"节点查看详细分析
- 导出统计报表为 Excel 文件
预期结果:
- ① 获得部门流程效率分析报告
- ② 识别出耗时最长的审批节点:"部门经理审批"平均 12 小时
- ③ 发现超时率最高的流程:"采购审批"超时率 15%
- ④ 导出 Excel 报表可直接用于季度会议汇报
场景 4:IT 运维小刘配置超时自动提醒
场景描述:公司要求所有审批任务超时 24 小时自动提醒,超时 48 小时自动转交上级。
用户故事:作为 IT 运维人员,小刘需要为所有审批类任务配置超时监听器,实现自动化超时处理。
操作步骤:
- 进入"流程管理 > 监听配置"
- 点击"创建监听器"按钮
- 填写监听器基本信息:
- 监听器名称:"审批超时提醒"
- 监听器标识:"approval_timeout_remind"
- 监听器类型:"任务监听器"
- 配置监听范围:
- 适用范围:"所有流程定义"
- 节点类型:"用户任务"
- 配置触发事件:"任务超时"
- 配置触发条件:超时阈值 24 小时
- 配置执行动作:
- 动作 1:发送站内消息 + 短信给审批人
- 动作 2:超时 48 小时后自动转交上级
- 配置消息模板:
- 标题:"【流程提醒】您有一条待审批任务即将超时"
- 内容:包含流程名称、发起人、任务创建时间等变量
- 设置监听器优先级为 100(默认)
- 点击"保存并启用"按钮
预期结果:
- ① 所有审批任务超时 24 小时后,审批人自动收到提醒通知
- ② 超时 48 小时后,任务自动转交给审批人的上级
- ③ 事件日志中记录每次触发的详细信息
- ④ 监听器统计显示累计触发次数
场景 5:管理员紧急挂起问题流程
场景描述:发现某报销流程存在配置错误,已经发起的 20 条实例都在走错误的审批链路。
用户故事:作为流程管理员,我需要紧急挂起这个有问题的流程定义,防止更多实例继续走错误链路,同时处理已经发起的实例。
操作步骤:
- 进入"流程管理 > 流程定义"
- 找到"差旅报销流程",点击"挂起"按钮
- 系统弹出确认对话框,询问"是否同时挂起运行中的实例?"
- 选择"是,同时挂起运行中的实例"
- 确认后,流程定义状态变为"挂起"
- 新的发起请求被拒绝,提示"该流程已暂停,请联系管理员"
- 进入"流程实例"页面,逐一检查运行中的 20 条实例
- 对需要重新提交的实例执行"终止"操作,备注"流程配置错误,请重新发起"
预期结果:
- ① 流程定义挂起后,不能再发起新的实例
- ② 运行中的实例全部暂停流转
- ③ 发起人收到通知"您发起的差旅报销流程已暂停"
- ④ 管理员修正配置后重新激活流程
2.3 验收标准汇总
| 编号 | 验收项 | 通过标准 |
|---|---|---|
| AC-01 | 流程定义挂起/激活 | 挂起后不能发起新实例;激活后恢复正常 |
| AC-02 | 流程实例终止 | 终止后状态变为"已终止",发起人收到通知,操作日志有记录 |
| AC-03 | 强制转办 | 转办后新审批人收到待办,原处理人收到通知,日志有记录 |
| AC-04 | 批量转办 | 支持最多 50 条批量转办,每条都记录日志 |
| AC-05 | 监控数据准确性 | 统计数据与实际数据偏差 ≤ 5 分钟 |
| AC-06 | 超时监听触发 | 超时后自动发送通知,延迟 ≤ 1 分钟 |
| AC-07 | 自动转交 | 超时达到阈值后自动转交上级,日志有记录 |
| AC-08 | 流程图高亮 | 已完成节点绿色、当前节点蓝色闪烁、未完成灰色 |
| AC-09 | 数据保留策略 | 已完成实例 1 年后归档,已终止实例 6 个月后归档 |
| AC-10 | 报表导出 | Excel 导出格式正确,数据完整 |
三、功能需求
3.1 流程定义管理(后台管理端)
功能描述
管理所有已部署的流程定义,提供流程定义列表查看、详情查看(流程图 + 节点信息)、挂起/激活、删除、版本对比等功能。
名词解释:流程定义就是"已经发布上线的流程模板"。流程设计模块产出的是"设计图纸"(流程模型),发布之后就变成了"施工标准"(流程定义)。用户发起的每一个流程实例,都是按照某个版本的流程定义来执行的。
页面布局

流程定义详情页: 
操作流程
查看流程定义列表:
- 进入"流程管理 > 流程定义"页面
- 系统展示所有流程定义列表,支持以下筛选条件:
- 按流程名称关键字搜索
- 按流程分类筛选
- 按流程状态筛选(激活/挂起)
- 按部署时间范围筛选
- 列表展示字段:流程名称、流程标识、分类、版本号、状态、关联实例数(运行中/总数)、部署时间、部署人
- 支持操作:查看详情、挂起/激活、删除
查看流程定义详情:
- 在流程定义列表点击"查看详情"
- 系统打开流程定义详情页面,包含以下区域:
- 基本信息:流程名称、标识、版本、分类、描述、部署时间
- 流程图:渲染完整的 BPMN 流程图
- 鼠标悬停节点显示节点名称和类型
- 点击节点在右侧面板查看节点配置详情
- 节点信息包括:节点名称、节点类型、审批人配置、条件表达式、表单配置等
- 版本信息:显示该流程定义的所有版本列表
- 关联实例统计:运行中实例数、已完成实例数、已终止实例数
挂起/激活流程定义:
- 在流程定义列表找到目标流程
- 点击"挂起"按钮:
- 系统弹出确认对话框
- 选择是否同时挂起该流程的运行中实例
- 确认后流程定义状态变为"挂起"
- 挂起后该流程不能再发起新的实例
- 运行中的实例可以选择是否继续执行
- 点击"激活"按钮:
- 系统弹出确认对话框
- 选择是否同时激活已挂起的实例
- 确认后流程定义状态恢复为"激活"
删除流程定义:
- 在流程定义列表点击"删除"按钮
- 系统校验:
- 是否有运行中的流程实例(有则不允许删除)
- 是否有已挂起但未结束的流程实例
- 校验通过:弹出确认对话框,输入流程标识确认删除
- 校验失败:提示不能删除的原因
版本对比:
- 在流程定义详情页,点击"版本对比"
- 选择两个要对比的版本
- 系统展示版本差异:
- 流程节点的增删改情况
- 节点配置的变更情况
- 以高亮方式标记:新增(绿色)、删除(红色)、修改(黄色)
业务规则
流程定义状态规则:
- 激活状态:可以发起新实例,运行中实例正常流转
- 挂起状态:不能发起新实例,运行中实例默认暂停流转
- 挂起流程定义时可以选择是否级联挂起实例
- 为什么这样设计:有些场景下流程定义需要暂停(比如发现配置错误),但运行中的实例可能已经走到最后一步,强制全部暂停会影响业务,所以给管理员选择权
删除规则:
- 有运行中实例的流程定义不能删除
- 删除采用逻辑删除方式,数据保留但标记为已删除
- 删除前必须输入流程标识二次确认(防止误操作)
- 删除操作记录到操作日志
版本规则:
- 每个流程标识可以有多个版本
- 同一时间只有一个"最新版本"用于发起新实例
- 运行中的实例使用发起时的版本继续执行(不会因为新版本发布而中断)
- 新版本部署不影响旧版本实例的运行
- 为什么这样设计:就像软件升级不影响已经打开的文档一样,流程升级不影响已经在跑的流程实例
接口列表
| 接口名称 | 请求方式 | 接口路径 | 功能说明 |
|---|---|---|---|
| 分页查询流程定义列表 | GET | /api/bpm/definition/page | 分页查询流程定义列表 |
| 获取流程定义详情 | GET | /api/bpm/definition/ | 获取流程定义详细信息 |
| 获取流程图 XML | GET | /api/bpm/definition/{id}/xml | 获取流程定义 BPMN XML |
| 获取流程图图片 | GET | /api/bpm/definition/{id}/image | 获取流程定义渲染图片 |
| 获取流程定义节点列表 | GET | /api/bpm/definition/{id}/nodes | 获取流程定义所有节点信息 |
| 挂起流程定义 | POST | /api/bpm/definition/{id}/suspend | 挂起流程定义 |
| 激活流程定义 | POST | /api/bpm/definition/{id}/activate | 激活流程定义 |
| 删除流程定义 | DELETE | /api/bpm/definition/ | 删除流程定义 |
| 获取版本列表 | GET | /api/bpm/definition/{processKey}/versions | 获取流程定义版本列表 |
| 版本对比 | POST | /api/bpm/definition/compare | 对比两个版本差异 |
3.2 流程实例管理(后台管理端)
功能描述
管理所有流程实例的全生命周期,提供实例列表查看、详情查看(流程图高亮 + 审批时间线)、终止、取消、挂起、恢复、删除、搜索筛选等功能。
名词解释:流程实例就是"一条正在跑的具体流程"。比如张三发起了一条请假申请,这条申请就是一个流程实例。管理员在这里可以看到全公司所有正在跑的流程。
流程实例状态机

页面布局

流程实例详情页(核心页面): 
操作流程
查看流程实例列表:
- 进入"流程管理 > 流程实例"页面
- 系统展示所有流程实例列表,支持以下筛选条件:
- 按流程名称筛选
- 按流程分类筛选
- 按流程状态筛选(运行中/已完成/已挂起/已终止/已取消)
- 按发起人筛选
- 按发起时间范围筛选
- 按流程实例编号搜索
- 按当前节点名称筛选
- 列表展示字段:实例编号、流程名称、发起人、发起时间、当前节点、当前审批人、流程状态、耗时
- 支持操作:查看详情、终止、取消、挂起、恢复、删除
查看流程实例详情:
- 在流程实例列表点击"查看详情"
- 系统打开流程实例详情页面,包含以下区域:
- 基本信息区域:实例编号、流程名称、流程版本、发起人、发起时间、结束时间、流程状态、总耗时、关联业务信息
- 流程图区域(核心功能):
- 已完成节点:绿色高亮 + 勾选标记
- 当前节点:蓝色高亮 + 闪烁动画
- 未完成节点:灰色
- 已完成连线:绿色加粗
- 当前连线:蓝色动画
- 鼠标悬停节点显示:节点名称、处理人、处理时间、耗时
- 审批时间线:以时间线形式展示每个审批步骤(节点名称、处理人、处理时间、处理动作、审批意见、耗时)
- 表单数据区域:展示流程表单的完整数据,支持查看每个节点修改的表单数据变更
- 操作日志区域:记录流程实例的所有操作日志
终止流程实例:
- 在流程实例列表或详情页点击"终止"按钮
- 系统弹出终止确认对话框
- 选择终止原因(预设选项 + 自定义输入)
- 填写终止备注说明
- 点击"确认终止"
- 系统执行终止操作:流程状态变为"已终止",当前任务被取消,发送终止通知给发起人,记录操作日志
取消流程实例:
- 取消操作与终止类似,但语义不同:取消是发起人主动撤回,终止是管理员强制结束
- 系统弹出取消确认对话框,填写取消原因
- 确认后流程状态变为"已取消"
挂起/恢复流程实例:
- 挂起操作:在流程实例列表点击"挂起"按钮,确认后流程实例暂停流转,流程状态变为"已挂起"
- 恢复操作:在已挂起的实例上点击"恢复"按钮,确认后流程实例恢复流转,流程状态恢复为"运行中"
删除流程实例:
- 只有"已终止"、"已取消"、"已完成"状态的实例才能删除
- 弹出确认对话框,输入实例编号确认删除
- 确认后逻辑删除流程实例数据
高级搜索:
- 列表支持多条件组合筛选
- 支持高级搜索:
- 按表单字段值搜索(如:报销金额 > 10000)
- 按审批人搜索
- 按当前停留节点搜索
- 按流程耗时范围搜索
- 支持保存搜索条件为"常用筛选"
业务规则
终止规则:
- 管理员可以终止任何运行中/已挂起的流程
- 终止后不可恢复(这是刻意的——终止是一个"严肃"的操作,不应该被轻易撤销)
- 终止时必须填写原因
- 终止操作通知发起人
- 终止操作记录到操作日志
删除规则:
- 只有已结束(已完成/已终止/已取消)的实例才能删除
- 删除采用逻辑删除
- 运行中的实例不能删除,需先终止
数据保留规则:
- 已完成实例默认保留 1 年
- 已终止/已取消实例默认保留 6 个月
- 超过保留期的实例自动归档到历史库
- 归档后的实例只能查看,不能操作
- 为什么这样设计:流程数据占用存储空间,但又有审计需求。通过分层保留策略,既保证近期数据快速访问,又满足长期审计要求
接口列表
| 接口名称 | 请求方式 | 接口路径 | 功能说明 |
|---|---|---|---|
| 分页查询流程实例列表 | GET | /api/bpm/instance/page | 分页查询流程实例列表 |
| 获取流程实例详情 | GET | /api/bpm/instance/ | 获取流程实例详细信息 |
| 获取流程图(高亮) | GET | /api/bpm/instance/{id}/diagram | 获取带高亮的流程图 |
| 获取审批时间线 | GET | /api/bpm/instance/{id}/timeline | 获取审批时间线数据 |
| 获取流程操作日志 | GET | /api/bpm/instance/{id}/logs | 获取操作日志列表 |
| 获取表单数据 | GET | /api/bpm/instance/{id}/form-data | 获取流程表单数据 |
| 终止流程实例 | POST | /api/bpm/instance/{id}/terminate | 终止流程实例 |
| 取消流程实例 | POST | /api/bpm/instance/{id}/cancel | 取消流程实例 |
| 挂起流程实例 | POST | /api/bpm/instance/{id}/suspend | 挂起流程实例 |
| 恢复流程实例 | POST | /api/bpm/instance/{id}/resume | 恢复流程实例 |
| 删除流程实例 | DELETE | /api/bpm/instance/ | 删除流程实例 |
| 批量终止流程实例 | POST | /api/bpm/instance/batch/terminate | 批量终止流程实例 |
| 高级搜索流程实例 | POST | /api/bpm/instance/search | 高级组合条件搜索 |
| 保存搜索条件 | POST | /api/bpm/instance/search/preset | 保存常用搜索条件 |
| 获取实例变量 | GET | /api/bpm/instance/{id}/variables | 获取流程实例变量数据 |
3.3 流程监控(后台管理端)
功能描述
提供流程运行状态的统计分析和可视化展示,相当于工作流系统的"大数据大屏"。包括流程统计概览、耗时分析、节点耗时排行、处理效率等报表数据,帮助管理员了解系统运行状况和发现流程瓶颈。
页面布局

操作流程
查看流程统计概览:
- 进入"流程管理 > 流程监控"页面
- 默认展示统计概览面板:
- 核心指标卡片:今日新发起流程数(对比昨日增减)、运行中流程总数、今日完成流程数、平均处理时长(小时)、超时率(百分比)
- 趋势图表:近 30 天流程发起/完成趋势折线图、按流程分类统计饼图、按部门统计柱状图
- 告警面板:超时流程列表、异常流程列表、堆积任务排行
耗时分析:
- 在监控页面切换到"耗时分析"标签页
- 设置筛选条件:时间范围、流程分类、部门
- 系统展示以下分析数据:
- 各流程平均处理时长排行(柱状图)
- 各节点类型平均处理时长对比
- 处理时长分布图(直方图,展示不同耗时区间的流程数量)
- 最长处理时长 TOP10 流程实例列表
- 支持导出分析数据为 Excel
节点耗时排行:
- 在耗时分析页面切换到"节点排行"子标签
- 系统展示各节点的平均耗时排行:节点名称、所属流程、平均耗时、最大耗时、最小耗时
- 支持按流程筛选,查看特定流程的各节点耗时
- 支持按处理人筛选,查看特定人员的各节点处理效率
处理效率分析:
- 在监控页面切换到"效率分析"标签页
- 设置筛选条件:时间范围、部门、人员
- 系统展示以下效率数据:
- 审批人处理效率排行:平均处理时长、处理任务总数、超时率,按部门分组统计
- 流程通过率统计:一次通过率(无驳回)、驳回率排行(按流程和节点)
- 流程处理时段分析:按小时/星期统计任务处理量(发现处理高峰和低谷)
业务规则
统计规则:
- 统计数据实时更新(延迟不超过 5 分钟)
- 统计数据排除已删除和已归档的流程实例
- 耗时计算排除挂起时间(挂起期间不算"处理时间")
- 效率统计只统计已完成的流程实例
告警规则:
- 流程超时阈值:可配置,默认 48 小时
- 节点超时阈值:由流程设计时配置
- 告警级别:一般(超时 1 倍)、重要(超时 2 倍)、紧急(超时 3 倍)
- 告警通知:通过站内消息通知流程管理员
数据报表规则:
- 支持按日、周、月、季度、年维度统计
- 数据导出格式:Excel(.xlsx)
- 报表数据缓存周期:10 分钟(避免频繁查询影响性能)
接口列表
| 接口名称 | 请求方式 | 接口路径 | 功能说明 |
|---|---|---|---|
| 获取统计概览数据 | GET | /api/bpm/monitor/overview | 获取流程统计概览数据 |
| 获取趋势数据 | GET | /api/bpm/monitor/trend | 获取流程趋势分析数据 |
| 获取分类统计 | GET | /api/bpm/monitor/category-stats | 获取按分类统计数据 |
| 获取部门统计 | GET | /api/bpm/monitor/dept-stats | 获取按部门统计数据 |
| 获取耗时分析数据 | GET | /api/bpm/monitor/duration-analysis | 获取耗时分析数据 |
| 获取节点耗时排行 | GET | /api/bpm/monitor/node-duration-rank | 获取节点耗时排行 |
| 获取审批人效率排行 | GET | /api/bpm/monitor/approver-efficiency | 获取审批人处理效率排行 |
| 获取超时流程列表 | GET | /api/bpm/monitor/timeout-list | 获取超时流程实例列表 |
| 获取驳回率统计 | GET | /api/bpm/monitor/reject-stats | 获取流程驳回率统计 |
| 获取处理时段分析 | GET | /api/bpm/monitor/time-slot-analysis | 获取按时段处理量分析 |
| 导出统计报表 | GET | /api/bpm/monitor/export | 导出统计报表为 Excel |
| 获取告警列表 | GET | /api/bpm/monitor/alerts | 获取流程告警列表 |
3.4 流程任务管理 - 管理视角(后台管理端)
功能描述
提供全局视角的流程任务管理,管理员可以查看所有待办任务,对异常任务进行干预操作。
与"我的流程"模块的区别:在"我的流程"模块中,审批人只能处理分配给自己的任务;而在"任务管理"模块中,管理员可以看到全公司的所有任务,并且可以强制干预(转办、加签、减签等)。就像普通员工只能看自己的快递,而快递站站长可以看所有快递并重新分配。
页面布局

操作流程
查看全局任务列表:
- 进入"流程管理 > 任务管理"页面
- 系统展示所有流程任务列表,支持以下筛选条件:
- 按任务状态筛选(待处理/已完成/已驳回/已转办/已取消)
- 按所属流程筛选
- 按当前处理人筛选
- 按创建时间范围筛选
- 按超时状态筛选(正常/即将超时/已超时)
- 按任务名称搜索
- 列表展示字段:任务名称、所属流程、实例编号、发起人、发起时间、当前处理人、任务创建时间、任务状态、超时状态
- 支持操作:查看详情、转办、委派、加签、减签
强制转办任务:
- 在任务列表点击某条任务的"转办"按钮
- 系统弹出转办对话框:显示当前任务信息和处理人、选择新的处理人、填写转办原因(必填)
- 点击"确认转办"
- 系统执行转办操作:任务处理人变更、发送通知给新旧处理人、记录操作日志
委派任务:
- 在任务列表点击"委派"按钮
- 系统弹出委派对话框:选择委派目标人、选择委派方式
- 临时委派:处理完后任务回到原处理人确认(像"代班"——同事帮你值班,但值班结束后还是你的岗位)
- 永久委派:任务永久转给目标人(效果等同于转办)
- 确认委派操作,发送通知给相关人员
加签:
- 在任务列表点击"加签"按钮
- 系统弹出加签对话框:
- 选择加签类型:
- 前加签:在当前任务之前插入新的审批节点(像"加一个前置审核")
- 后加签:在当前任务之后插入新的审批节点(像"加一个后续复核")
- 选择加签人员(可多选)
- 配置加签方式:或签/会签/依次审批
- 填写加签说明
- 选择加签类型:
- 确认加签操作,发送通知给加签人员
减签:
- 在任务列表点击"减签"按钮(仅在会签场景下可用)
- 系统弹出减签对话框:显示当前节点所有待处理任务,勾选需要减签的任务,填写减签原因
- 确认减签操作:取消选中的任务、重新计算会签完成条件、发送通知给被减签人员
超时处理:
- 在任务列表设置筛选条件为"已超时"
- 查看所有超时任务列表,系统显示超时信息:超时时长、超时级别
- 对超时任务可以执行的操作:催办、转办、自动处理
- 支持批量催办:勾选多个超时任务,一键发送催办通知
业务规则
转办规则:
- 管理员可以转办任何待处理任务
- 转办必须填写原因
- 转办后原处理人不再参与该任务
- 支持批量转办(最多一次 50 条)
- 转办操作记录完整操作日志
委派规则:
- 临时委派:处理完成后需原处理人确认(像"请示汇报"——代班人处理完后需要原负责人确认)
- 永久委派:等同于转办
- 委派操作需要记录委派关系链
加签规则:
- 前加签:插入到当前任务之前,当前任务暂停,先由加签人员审批
- 后加签:插入到当前任务之后,当前任务完成后再由加签人员审批
- 加签人员不能与当前处理人重复
- 加签操作不可撤销(加签后需要走完加签流程)
- 为什么这样设计:加签是"增加审批环节"的严肃操作,如果允许随意撤销会导致流程状态混乱
减签规则:
- 只能减少会签任务中的待处理任务
- 不能减少已经开始处理的会签任务
- 减签后需要重新计算会签完成条件
催办规则:
- 催办通知方式:站内消息 + 短信(可配置)
- 同一任务催办间隔不少于 4 小时(防止频繁打扰审批人)
- 催办记录计入操作日志
接口列表
| 接口名称 | 请求方式 | 接口路径 | 功能说明 |
|---|---|---|---|
| 分页查询全局任务列表 | GET | /api/bpm/task/page | 分页查询全局流程任务 |
| 获取任务详情 | GET | /api/bpm/task/ | 获取任务详细信息 |
| 强制转办任务 | POST | /api/bpm/task/{id}/transfer | 强制转办任务给其他人员 |
| 委派任务 | POST | /api/bpm/task/{id}/delegate | 委派任务给其他人员 |
| 加签 | POST | /api/bpm/task/{id}/add-sign | 加签操作(前加签/后加签) |
| 减签 | POST | /api/bpm/task/{id}/reduce-sign | 减签操作 |
| 催办任务 | POST | /api/bpm/task/{id}/urge | 发送催办通知 |
| 批量转办 | POST | /api/bpm/task/batch/transfer | 批量转办任务 |
| 批量催办 | POST | /api/bpm/task/batch/urge | 批量催办任务 |
| 获取超时任务列表 | GET | /api/bpm/task/timeout-list | 获取超时任务列表 |
| 获取任务操作日志 | GET | /api/bpm/task/{id}/logs | 获取任务操作日志 |
| 获取待处理任务统计 | GET | /api/bpm/task/stats | 获取待处理任务统计数据 |
3.5 流程监听配置(后台管理端)
功能描述
提供流程事件监听器的配置管理,通过配置化方式实现流程自动化处理,减少硬编码开发。
名词解释:监听器就像"自动化规则"——你可以设置"当某个事件发生时,自动执行某个动作"。比如"当任务超时 24 小时,自动发送提醒"。这样管理员就不需要人工盯着每个流程,系统会自动处理常见异常。
监听器工作原理

页面布局

创建监听器表单: 
操作流程
创建监听器:
- 进入"流程管理 > 监听配置"页面
- 点击"创建监听器"按钮
- 填写监听器基本信息:名称、标识(唯一)、类型、描述
- 配置监听范围:适用流程(所有/指定流程/指定分类)、排除流程、适用节点类型
- 配置触发事件:流程级事件(启动/结束/删除)、任务级事件(创建/分配/完成/超时)、执行级事件(开始/结束/转移)
- 配置触发条件(可选):条件表达式
- 配置执行动作:通知/自动审批/自动转交/HTTP回调/脚本/变量更新
- 配置执行顺序(优先级)和执行超时时间
- 点击"保存并启用"按钮
管理监听器列表:
- 在监听配置页面展示所有监听器列表
- 支持按类型、状态、名称筛选
- 支持操作:编辑、删除、启用、禁用、调整优先级、复制
事件订阅日志:
- 在监听配置页面切换到"事件日志"标签
- 查看所有监听器的触发日志
- 支持按监听器、事件类型、时间范围筛选
- 日志内容:触发时间、事件类型、流程信息、执行结果、执行耗时
业务规则
监听器类型说明:
- 全局监听器:监听所有流程的特定事件(像"全市通用的交通规则")
- 执行监听器:监听流程执行路径上的事件(像"在某个路口安装的摄像头")
- 任务监听器:监听用户任务的生命周期事件(像"专门监控审批任务的传感器")
- 事件监听器:监听自定义事件的发布(像"自定义的报警器")
事件触发规则:
- 事件触发为同步执行,阻塞流程执行直到监听器执行完成
- 监听器执行超时时间:默认 10 秒,超时后跳过并记录告警
- 监听器执行异常:根据配置的异常策略处理(跳过/中断/重试)
- 同一事件多个监听器按优先级顺序执行(数值越小越先执行)
安全规则:
- Groovy 脚本执行在安全沙箱中,限制系统 API 访问
- HTTP 回调只允许访问配置白名单中的域名(防止 SSRF 攻击)
- 监听器配置变更需要管理员权限
- 所有监听器执行记录完整日志
接口列表
| 接口名称 | 请求方式 | 接口路径 | 功能说明 |
|---|---|---|---|
| 分页查询监听器列表 | GET | /api/bpm/listener/page | 分页查询流程监听器列表 |
| 获取监听器详情 | GET | /api/bpm/listener/ | 获取监听器详细信息 |
| 创建监听器 | POST | /api/bpm/listener/create | 创建流程监听器 |
| 更新监听器 | PUT | /api/bpm/listener/update | 更新监听器配置 |
| 删除监听器 | DELETE | /api/bpm/listener/ | 删除流程监听器 |
| 启用监听器 | POST | /api/bpm/listener/{id}/enable | 启用流程监听器 |
| 禁用监听器 | POST | /api/bpm/listener/{id}/disable | 禁用流程监听器 |
| 复制监听器 | POST | /api/bpm/listener/{id}/copy | 复制流程监听器 |
| 调整优先级 | PUT | /api/bpm/listener/{id}/priority | 调整监听器执行优先级 |
| 查询事件日志 | GET | /api/bpm/listener/event-log | 查询监听器触发日志 |
| 获取事件类型列表 | GET | /api/bpm/listener/event-types | 获取所有可监听的事件类型 |
| 获取动作类型列表 | GET | /api/bpm/listener/action-types | 获取所有可用的动作类型 |
| 测试监听器 | POST | /api/bpm/listener/{id}/test | 测试监听器配置是否正确 |
四、非功能需求
4.1 性能需求
| 指标项 | 指标要求 | 说明 |
|---|---|---|
| 实例列表查询 | ≤ 1 秒 | 分页查询流程实例列表的响应时间 |
| 任务列表查询 | ≤ 1 秒 | 分页查询全局任务列表的响应时间 |
| 流程图渲染 | ≤ 2 秒 | 包含高亮的流程图渲染完成时间 |
| 时间线加载 | ≤ 1 秒 | 审批时间线数据加载完成时间 |
| 监控数据查询 | ≤ 3 秒 | 统计概览数据的查询响应时间 |
| 监听器执行 | ≤ 10 秒 | 单个监听器的执行超时时间 |
| 并发实例数 | ≥ 1000 | 系统同时运行的流程实例数量 |
| 并发任务数 | ≥ 5000 | 系统同时存在的待办任务数量 |
| 历史数据查询 | ≤ 5 秒 | 查询归档历史数据的响应时间 |
| 批量操作 | ≤ 30 秒 | 批量转办/催办等操作的处理时间 |
4.2 安全需求
| 安全项 | 安全要求 | 实现方式 |
|---|---|---|
| 权限控制 | 管理操作需要对应权限 | RBAC 权限模型,细粒度权限标识控制 |
| 数据安全 | 流程数据不能越权访问 | 数据权限隔离,部门级/角色级权限控制 |
| 操作审计 | 所有管理操作需要审计 | 操作日志记录,包含操作人、时间、内容、IP |
| 敏感操作保护 | 终止/删除等需要二次确认 | 二次输入确认 + 权限校验 |
| 脚本安全 | Groovy 脚本在安全环境执行 | 沙箱执行,限制系统 API 访问 |
| 回调安全 | HTTP 回调防止 SSRF | 域名白名单校验,内网地址过滤 |
| 数据传输 | 敏感数据传输加密 | 表单数据加密存储,日志脱敏 |
4.3 兼容性需求
| 兼容项 | 兼容要求 | 说明 |
|---|---|---|
| 浏览器兼容 | Chrome 80+、Firefox 75+、Edge 80+ | 管理端支持主流现代浏览器 |
| 数据兼容 | Flowable 6.8.0 引擎数据格式 | 完全兼容 Flowable 原生数据格式 |
| 数据库兼容 | MySQL 5.7+、PostgreSQL 12+ | 支持主流关系型数据库 |
| 接口兼容 | RESTful API 标准 | 所有接口遵循 RESTful 设计规范 |
| 导出格式 | Excel (.xlsx) | 报表导出支持标准 Excel 格式 |
五、数据设计
5.1 核心数据表
本模块涉及 5 个核心数据表:
| 表名 | 用途 | 类比 |
|---|---|---|
| bpm_process_definition_ext | 流程定义扩展信息 | "道路信息卡"——记录每条路的基本信息 |
| bpm_process_instance | 流程实例运行状态 | "车辆行驶记录"——每趟行程的详细信息 |
| bpm_task | 流程任务状态和处理信息 | "路口通行任务"——每个路口的通行情况 |
| bpm_task_assign | 任务分配和转办历史 | "代驾记录"——谁替谁开过这段路 |
| bpm_process_listener | 流程监听器配置 | "自动红绿灯规则"——什么条件下自动执行什么操作 |
5.2 表结构定义
bpm_process_definition_ext 表(流程定义扩展表)
流程定义的核心数据来自 Flowable 引擎的 ACT_RE_PROCDEF 表,本表是系统扩展的管理信息。
| 字段名称 | 字段类型 | 长度 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | 20 | 是 | 自增 | 主键 ID |
| definition_id | VARCHAR | 64 | 是 | - | Flowable 流程定义 ID |
| process_key | VARCHAR | 100 | 是 | - | 流程标识 |
| process_name | VARCHAR | 100 | 是 | - | 流程名称 |
| category_id | BIGINT | 20 | 否 | NULL | 所属分类 ID |
| version | INT | 11 | 是 | 1 | 版本号 |
| deployment_id | VARCHAR | 64 | 是 | - | 部署 ID |
| model_id | BIGINT | 20 | 是 | - | 关联模型 ID |
| suspension_state | INT | 1 | 是 | 1 | 状态(1-激活/2-挂起) |
| instance_count | INT | 11 | 是 | 0 | 关联实例总数 |
| running_instance_count | INT | 11 | 是 | 0 | 运行中实例数 |
| deploy_time | DATETIME | - | 是 | - | 部署时间 |
| deploy_by | BIGINT | 20 | 是 | - | 部署人 ID |
| created_time | DATETIME | - | 是 | CURRENT_TIMESTAMP | 创建时间 |
| deleted | TINYINT | 1 | 是 | 0 | 删除标记 |
索引设计:
- idx_process_key:process_key(按流程标识查询)
- idx_model_id:model_id(按模型查询关联定义)
- idx_category:category_id(按分类查询)
bpm_process_instance 表(流程实例表)
| 字段名称 | 字段类型 | 长度 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | 20 | 是 | 自增 | 主键 ID |
| instance_id | VARCHAR | 64 | 是 | - | Flowable 流程实例 ID |
| instance_no | VARCHAR | 32 | 是 | - | 实例编号(唯一) |
| process_key | VARCHAR | 100 | 是 | - | 流程标识 |
| process_name | VARCHAR | 100 | 是 | - | 流程名称 |
| process_version | INT | 11 | 是 | - | 流程版本号 |
| definition_id | VARCHAR | 64 | 是 | - | 流程定义 ID |
| model_id | BIGINT | 20 | 是 | - | 关联模型 ID |
| category_id | BIGINT | 20 | 否 | NULL | 所属分类 ID |
| title | VARCHAR | 200 | 否 | NULL | 流程标题 |
| initiator_id | BIGINT | 20 | 是 | - | 发起人 ID |
| initiator_name | VARCHAR | 50 | 是 | - | 发起人姓名 |
| initiator_dept_id | BIGINT | 20 | 否 | NULL | 发起人部门 ID |
| initiator_dept_name | VARCHAR | 100 | 否 | NULL | 发起人部门名称 |
| status | TINYINT | 1 | 是 | 1 | 状态(1-运行中/2-已完成/3-已挂起/4-已终止/5-已取消) |
| current_node_id | VARCHAR | 64 | 否 | NULL | 当前节点 ID |
| current_node_name | VARCHAR | 100 | 否 | NULL | 当前节点名称 |
| current_assignee_ids | VARCHAR | 500 | 否 | NULL | 当前审批人 ID(多个逗号分隔) |
| form_data | LONGTEXT | - | 否 | NULL | 表单数据 JSON |
| business_key | VARCHAR | 200 | 否 | NULL | 业务关联 Key |
| business_type | VARCHAR | 100 | 否 | NULL | 业务类型 |
| start_time | DATETIME | - | 是 | - | 发起时间 |
| end_time | DATETIME | - | 否 | NULL | 结束时间 |
| duration | BIGINT | 20 | 否 | NULL | 总耗时(毫秒) |
| terminate_reason | VARCHAR | 500 | 否 | NULL | 终止/取消原因 |
| created_time | DATETIME | - | 是 | CURRENT_TIMESTAMP | 创建时间 |
| updated_time | DATETIME | - | 是 | CURRENT_TIMESTAMP | 更新时间 |
| deleted | TINYINT | 1 | 是 | 0 | 删除标记 |
索引设计:
- uk_instance_no:instance_no(唯一索引,按编号查询)
- idx_initiator:initiator_id(按发起人查询)
- idx_process_key:process_key + status(按流程和状态查询)
- idx_status:status + created_time(按状态和时间排序)
- idx_category:category_id(按分类统计)
bpm_task 表(流程任务表)
| 字段名称 | 字段类型 | 长度 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | 20 | 是 | 自增 | 主键 ID |
| task_id | VARCHAR | 64 | 是 | - | Flowable 任务 ID |
| task_name | VARCHAR | 200 | 是 | - | 任务名称 |
| task_definition_key | VARCHAR | 100 | 是 | - | 任务定义标识 |
| instance_id | VARCHAR | 64 | 是 | - | 所属流程实例 ID |
| instance_no | VARCHAR | 32 | 是 | - | 实例编号 |
| process_key | VARCHAR | 100 | 是 | - | 流程标识 |
| process_name | VARCHAR | 100 | 是 | - | 流程名称 |
| node_id | VARCHAR | 64 | 是 | - | 所属节点 ID |
| node_name | VARCHAR | 100 | 是 | - | 所属节点名称 |
| node_type | VARCHAR | 20 | 是 | - | 节点类型(userTask 等) |
| assignee_id | BIGINT | 20 | 否 | NULL | 处理人 ID |
| assignee_name | VARCHAR | 50 | 否 | NULL | 处理人姓名 |
| candidate_ids | VARCHAR | 1000 | 否 | NULL | 候选处理人 ID(逗号分隔) |
| candidate_group_ids | VARCHAR | 500 | 否 | NULL | 候选角色/部门 ID(逗号分隔) |
| status | TINYINT | 1 | 是 | 1 | 状态(1-待处理/2-已完成/3-已驳回/4-已转办/5-已取消) |
| priority | INT | 11 | 是 | 50 | 优先级(0-100,数值越大越优先) |
| approval_result | TINYINT | 1 | 否 | NULL | 审批结果(1-通过/2-驳回/3-转办/4-委派) |
| approval_opinion | VARCHAR | 1000 | 否 | NULL | 审批意见 |
| form_data | LONGTEXT | - | 否 | NULL | 任务表单数据 JSON |
| create_time | DATETIME | - | 是 | - | 任务创建时间 |
| claim_time | DATETIME | - | 否 | NULL | 签收时间 |
| complete_time | DATETIME | - | 否 | NULL | 完成时间 |
| duration | BIGINT | 20 | 否 | NULL | 处理耗时(毫秒) |
| due_time | DATETIME | - | 否 | NULL | 超时时间 |
| timeout_status | TINYINT | 1 | 是 | 0 | 超时状态(0-正常/1-即将超时/2-已超时) |
| urge_count | INT | 11 | 是 | 0 | 催办次数 |
| last_urge_time | DATETIME | - | 否 | NULL | 最后催办时间 |
| created_time | DATETIME | - | 是 | CURRENT_TIMESTAMP | 记录创建时间 |
| updated_time | DATETIME | - | 是 | CURRENT_TIMESTAMP | 记录更新时间 |
| deleted | TINYINT | 1 | 是 | 0 | 删除标记 |
索引设计:
- idx_task_id:task_id(按 Flowable 任务 ID 查询)
- idx_instance:instance_id(按实例查询关联任务)
- idx_assignee:assignee_id + status(按处理人和状态查询)
- idx_timeout:timeout_status + due_time(超时任务查询)
bpm_task_assign 表(任务分配表)
| 字段名称 | 字段类型 | 长度 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | 20 | 是 | 自增 | 主键 ID |
| task_id | BIGINT | 20 | 是 | - | 关联任务 ID |
| task_flowable_id | VARCHAR | 64 | 是 | - | Flowable 任务 ID |
| assignee_id | BIGINT | 20 | 是 | - | 分配人 ID |
| assignee_name | VARCHAR | 50 | 是 | - | 分配人姓名 |
| assign_type | TINYINT | 1 | 是 | - | 分配类型(1-指定/2-候选/3-角色/4-部门) |
| assign_source | VARCHAR | 50 | 否 | NULL | 分配来源(规则/手动/转办/委派) |
| status | TINYINT | 1 | 是 | 1 | 状态(1-待处理/2-已处理/3-已取消) |
| original_assignee_id | BIGINT | 20 | 否 | NULL | 原处理人 ID(转办/委派时有值) |
| transfer_reason | VARCHAR | 500 | 否 | NULL | 转办/委派原因 |
| operate_type | VARCHAR | 20 | 否 | NULL | 操作类型(transfer/delegate/addSign/reduceSign) |
| operate_by | BIGINT | 20 | 否 | NULL | 操作人 ID |
| operate_time | DATETIME | - | 否 | NULL | 操作时间 |
| created_time | DATETIME | - | 是 | CURRENT_TIMESTAMP | 创建时间 |
索引设计:
- idx_task:task_id(按任务查询分配记录)
- idx_assignee:assignee_id(按人员查询分配记录)
bpm_process_listener 表(流程监听器表)
| 字段名称 | 字段类型 | 长度 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|---|
| id | BIGINT | 20 | 是 | 自增 | 主键 ID |
| listener_key | VARCHAR | 100 | 是 | - | 监听器标识(唯一) |
| listener_name | VARCHAR | 100 | 是 | - | 监听器名称 |
| listener_type | TINYINT | 1 | 是 | - | 类型(1-全局/2-执行/3-任务/4-事件) |
| description | VARCHAR | 500 | 否 | NULL | 监听器描述 |
| scope_type | TINYINT | 1 | 是 | 1 | 范围类型(1-所有/2-指定流程/3-指定分类) |
| scope_values | VARCHAR | 1000 | 否 | NULL | 范围值(流程 ID 或分类 ID,逗号分隔) |
| exclude_values | VARCHAR | 1000 | 否 | NULL | 排除值(排除的流程 ID) |
| node_types | VARCHAR | 200 | 否 | NULL | 适用节点类型(逗号分隔) |
| event_type | VARCHAR | 50 | 是 | - | 触发事件类型 |
| event_condition | VARCHAR | 500 | 否 | NULL | 触发条件表达式 |
| action_type | TINYINT | 1 | 是 | - | 动作类型(1-通知/2-自动审批/3-转交/4-回调/5-脚本/6-变量更新) |
| action_config | LONGTEXT | - | 是 | - | 动作配置 JSON |
| priority | INT | 11 | 是 | 100 | 执行优先级(数值越小越先执行) |
| error_strategy | TINYINT | 1 | 是 | 1 | 异常策略(1-跳过/2-中断/3-重试) |
| timeout | INT | 11 | 是 | 10 | 执行超时时间(秒) |
| retry_count | INT | 11 | 是 | 0 | 重试次数 |
| status | TINYINT | 1 | 是 | 1 | 状态(0-禁用/1-启用) |
| trigger_count | BIGINT | 20 | 是 | 0 | 累计触发次数 |
| last_trigger_time | DATETIME | - | 否 | NULL | 最后触发时间 |
| created_by | BIGINT | 20 | 是 | - | 创建人 ID |
| created_time | DATETIME | - | 是 | CURRENT_TIMESTAMP | 创建时间 |
| updated_by | BIGINT | 20 | 是 | - | 更新人 ID |
| updated_time | DATETIME | - | 是 | CURRENT_TIMESTAMP | 更新时间 |
| deleted | TINYINT | 1 | 是 | 0 | 删除标记 |
索引设计:
- uk_listener_key:listener_key(唯一索引)
- idx_event_type:event_type + status(按事件类型查询启用的监听器)
- idx_scope:scope_type(按范围类型查询)
5.3 数据字典
| 字段 | 值 | 说明 |
|---|---|---|
| instance.status | 1 | 运行中 |
| instance.status | 2 | 已完成 |
| instance.status | 3 | 已挂起 |
| instance.status | 4 | 已终止 |
| instance.status | 5 | 已取消 |
| task.status | 1 | 待处理 |
| task.status | 2 | 已完成 |
| task.status | 3 | 已驳回 |
| task.status | 4 | 已转办 |
| task.status | 5 | 已取消 |
| task.approval_result | 1 | 通过 |
| task.approval_result | 2 | 驳回 |
| task.approval_result | 3 | 转办 |
| task.approval_result | 4 | 委派 |
| definition.suspension_state | 1 | 激活 |
| definition.suspension_state | 2 | 挂起 |
| listener.listener_type | 1 | 全局监听器 |
| listener.listener_type | 2 | 执行监听器 |
| listener.listener_type | 3 | 任务监听器 |
| listener.listener_type | 4 | 事件监听器 |
| listener.action_type | 1 | 发送通知 |
| listener.action_type | 2 | 自动审批 |
| listener.action_type | 3 | 自动转交 |
| listener.action_type | 4 | HTTP 回调 |
| listener.action_type | 5 | 执行脚本 |
| listener.action_type | 6 | 更新变量 |
| listener.error_strategy | 1 | 跳过继续 |
| listener.error_strategy | 2 | 中断流程 |
| listener.error_strategy | 3 | 重试执行 |
5.4 action_config JSON 结构
监听器的动作配置采用 JSON 格式,根据 action_type 不同使用不同的配置段:
json
{
"notify": {
"channels": ["站内消息", "短信", "邮件"],
"templateId": "tpl_timeout_remind",
"receivers": ["assignee", "initiator", "admin"],
"title": "【流程提醒】您有一条任务即将超时",
"content": "流程名称:${processName},发起人:${initiatorName},请尽快处理"
},
"autoApprove": {
"result": "approve",
"opinion": "系统自动审批(超时)"
},
"autoTransfer": {
"targetType": "role",
"targetValue": "DEPT_LEADER",
"reason": "审批超时,自动转交上级"
},
"httpCallback": {
"url": "https://api.example.com/workflow/callback",
"method": "POST",
"headers": {"Authorization": "Bearer xxx"},
"body": "{\"instanceId\": \"${instanceId}\", \"action\": \"timeout\"}"
},
"script": {
"language": "groovy",
"content": "def task = execution.getVariable('task'); ..."
}
}变量占位符说明:
${processName}:流程名称${initiatorName}:发起人姓名${instanceId}:流程实例 ID${taskName}:任务名称${assignee}:当前审批人${duration}:已耗时时长
六、跨模块联动
6.1 联动关系总览
本模块是工作流系统的"管理中枢",与多个模块存在紧密的数据和业务联动:
| 联动模块 | 联动方式 | 数据流向 | 联动说明 |
|---|---|---|---|
| 流程设计(03-01) | 数据依赖 | 03-01 → 本模块 | 流程设计发布后生成本模块管理的流程定义 |
| 我的流程(03-03) | 视角互补 | 双向 | 03-03 是用户视角(看自己的),本模块是管理员视角(看所有的) |
| 待办管理(03-04) | 功能互补 | 双向 | 03-04 侧重审批操作,本模块侧重管理干预 |
| 用户管理(01-01) | 数据依赖 | 01-01 → 本模块 | 流程发起人、审批人、转办目标人的信息来自用户管理 |
| 部门管理(01-02) | 数据依赖 | 01-02 → 本模块 | 部门统计数据、部门负责人(自动转交目标)来自部门管理 |
| 角色管理(01-03) | 数据依赖 | 01-03 → 本模块 | 监听器自动转交可按角色指定目标人 |
| 通知模块 | 事件触发 | 本模块 → 通知模块 | 终止/转办/催办等操作触发通知发送 |
| 日志审计(01-08) | 数据输出 | 本模块 → 01-08 | 所有管理操作记录到操作日志 |
| 租户管理(01-07) | 数据隔离 | 01-07 → 本模块 | 多租户场景下流程数据按租户隔离 |
| 数据字典(01-06) | 数据依赖 | 01-06 → 本模块 | 流程分类、终止原因等使用字典数据 |
6.2 关键联动流程
流程发布 → 流程定义管理: 
管理员终止流程 → 通知发起人: 
6.3 数据一致性要求
| 一致性场景 | 要求 | 实现方式 |
|---|---|---|
| 流程定义挂起 | 挂起后前端立即不能发起新实例 | 状态变更同步到 Flowable 引擎 |
| 流程实例终止 | 终止后任务状态同步更新为"已取消" | 事务保证实例和任务状态一致 |
| 任务转办 | 转办后新处理人立即看到待办 | 同步更新 bpm_task 和 bpm_task_assign |
| 监控数据 | 统计数据与实际数据偏差不超过 5 分钟 | Redis 缓存 + 定时刷新 |
| 监听器触发 | 监听器执行结果影响任务状态 | 事务保证监听器动作和状态变更一致 |
七、附录
7.1 名词解释
| 名词 | 英文 | 通俗解释 |
|---|---|---|
| 流程定义 | Process Definition | 已经发布上线的"流程模板",就像已经审批通过的"施工图纸" |
| 流程实例 | Process Instance | 一条正在跑的具体流程,就像公路上跑的一辆车 |
| 流程任务 | Process Task | 流程走到某个节点时生成的待办事项,就像到达某个路口时的通行任务 |
| 挂起 | Suspend | 暂停流程运行,就像"临时封路"——路还在,但暂时不能通行 |
| 激活 | Activate | 恢复被挂起的流程,就像"解封道路"——恢复正常通行 |
| 终止 | Terminate | 强制结束流程,就像"取消这趟行程"——车直接回库,不再继续 |
| 转办 | Transfer | 把任务交给别人处理,就像"把快递转交给同事签收" |
| 委派 | Delegate | 临时让别人代处理,分"临时委派"(代完还给你)和"永久委派"(直接给出去) |
| 加签 | Add Sign | 在流程中增加额外审批人,就像"加一道审核关卡" |
| 减签 | Reduce Sign | 在会签中减少审批人,就像"取消某个审核关卡" |
| 催办 | Urge | 向审批人发送催促通知,就像"催快递小哥赶紧送货" |
| 监听器 | Listener | 自动化规则——"当XX事件发生时,自动执行XX动作" |
| 执行监听器 | Execution Listener | 监听流程执行路径上的事件,像"路口摄像头" |
| 任务监听器 | Task Listener | 监听审批任务的生命周期事件,像"快递站传感器" |
| 流程变量 | Process Variable | 流程运行过程中的数据,像"车辆载的货物信息" |
| 超时状态 | Timeout Status | 任务是否超过了规定的处理时间,分"正常""即将超时""已超时"三级 |
7.2 权限标识
| 权限标识 | 权限名称 | 说明 |
|---|---|---|
| bpm:definition:query | 查询流程定义 | 查看流程定义列表和详情 |
| bpm:definition:manage | 管理流程定义 | 挂起/激活/删除流程定义 |
| bpm:instance:query | 查询流程实例 | 查看流程实例列表和详情 |
| bpm:instance:terminate | 终止流程实例 | 强制终止流程实例 |
| bpm:instance:cancel | 取消流程实例 | 取消流程实例 |
| bpm:instance:suspend | 挂起流程实例 | 挂起/恢复流程实例 |
| bpm:instance:delete | 删除流程实例 | 删除已结束的流程实例 |
| bpm:task:query | 查询流程任务 | 查看全局任务列表 |
| bpm:task:transfer | 转办任务 | 强制转办流程任务 |
| bpm:task:delegate | 委派任务 | 委派流程任务 |
| bpm:task:add-sign | 加签 | 加签操作 |
| bpm:task:reduce-sign | 减签 | 减签操作 |
| bpm:task:urge | 催办 | 催办任务处理人 |
| bpm:monitor:query | 查询流程监控 | 查看流程监控数据 |
| bpm:monitor:export | 导出监控报表 | 导出统计分析报表 |
| bpm:listener:create | 创建监听器 | 创建流程监听器 |
| bpm:listener:update | 编辑监听器 | 编辑监听器配置 |
| bpm:listener:delete | 删除监听器 | 删除流程监听器 |
| bpm:listener:query | 查询监听器 | 查看监听器列表和日志 |
7.3 错误码定义
| 错误码 | 错误信息 | 处理建议 |
|---|---|---|
| BPM_DEF_001 | 流程定义不存在 | 检查流程定义 ID 是否正确 |
| BPM_DEF_002 | 流程定义有运行中实例,不能删除 | 先终止所有运行中实例 |
| BPM_DEF_003 | 流程定义已经是目标状态 | 无需重复操作 |
| BPM_INS_001 | 流程实例不存在 | 检查实例 ID 是否正确 |
| BPM_INS_002 | 运行中的实例不能删除 | 先终止实例再删除 |
| BPM_INS_003 | 已结束的实例不能终止 | 只有运行中/已挂起的实例可以终止 |
| BPM_INS_004 | 终止原因不能为空 | 填写终止原因 |
| BPM_TASK_001 | 任务不存在或已完成 | 检查任务 ID 和状态 |
| BPM_TASK_002 | 转办目标人不能为空 | 选择新的处理人 |
| BPM_TASK_003 | 转办原因不能为空 | 填写转办原因 |
| BPM_TASK_004 | 批量操作超过上限(50条) | 减少选择的任务数量 |
| BPM_TASK_005 | 催办间隔不足 4 小时 | 等待间隔时间后再催办 |
| BPM_LIS_001 | 监听器标识已存在 | 更换唯一的监听器标识 |
| BPM_LIS_002 | 监听器执行超时 | 检查动作配置或增加超时时间 |
| BPM_LIS_003 | 脚本执行异常 | 检查 Groovy 脚本语法 |
7.4 接口汇总
本模块共涉及 57 个接口,分布在 5 个子模块中:
| 子模块 | 接口数量 | 接口前缀 |
|---|---|---|
| 流程定义管理 | 10 | /api/bpm/definition/ |
| 流程实例管理 | 15 | /api/bpm/instance/ |
| 流程监控 | 12 | /api/bpm/monitor/ |
| 流程任务管理 | 12 | /api/bpm/task/ |
| 流程监听配置 | 13 | /api/bpm/listener/ |
八、修订记录
| 版本 | 日期 | 修订人 | 修订内容 |
|---|---|---|---|
| v1.0 | 2026-09-24 | PMForge 产品团队 | 初稿创建 |
| v2.0 | 2026-09-19 | PMForge 产品团队 | 增强业务场景(命名用户)、验收标准、ASCII 页面原型、状态机图、监听器工作原理图、跨模块联动章节、名词解释(含通俗类比)、错误码定义 |
文档结束