流程中心使用手册

一、概述

流程中心基于 Warm-Flow v1.8.0 工作流引擎,提供完整的业务流程审批能力。支持自定义流程设计、多节点审批、或签/会签/票签等多种协作方式,以及灵活的审批人分配策略。

功能模块

模块 路径 说明
流程分类 bpm/flow-category 管理流程的分类目录(树形结构)
流程定义 bpm/flow-definition 流程的创建、编辑、发布、激活管理
我的待办 bpm/flow-todo 当前用户的待审批任务列表
我的发起 bpm/flow-my 当前用户发起的流程实例列表
流程实例 bpm/flow-instance-manage 管理员视角的所有流程实例

二、流程分类

流程分类采用树形结构,用于对流程定义进行分组管理。

操作说明

  • 新增分类:点击"新增"按钮,填写分类名称、上级分类、排序号
  • 编辑分类:点击分类行的"编辑"按钮
  • 删除分类:点击分类行的"删除"按钮(存在子分类或已关联流程定义时不可删除)

建议:按业务模块建立分类,如"行政审批"、"财务审批"、"采购审批"、"人事审批"等。


三、流程定义

流程定义是整个审批流程的核心配置,包含流程的基本信息、审批节点设计、审批人分配等。

3.1 流程定义列表

列表展示所有流程定义,支持按流程编码、名称、版本、分类、发布状态、激活状态筛选。

关键字段说明:

字段 说明
流程编码 系统自动生成或手动指定的唯一编码
流程名称 流程的显示名称
分类 所属流程分类
版本 流程版本号
发布状态 未发布 / 已发布 / 已过期
激活状态 已激活 / 已停用

3.2 新建流程定义

  1. 点击"新增"按钮
  2. 填写流程名称、选择分类
  3. 流程编码可手动输入或点击"生成编码"自动生成
  4. 在流程设计器中设计审批节点
  5. 为每个审批节点配置审批人
  6. 保存

3.3 流程设计器

流程设计器支持可视化的节点配置:

  • 开始节点:流程的起点
  • 审批节点:需要审批的节点,可配置审批人、协作方式
  • 结束节点:流程的终点

每个审批节点可配置:

  • 审批人类型:用户、角色、部门
  • 协作方式:或签、会签、票签(详见下方说明)
  • 流转条件:通过/驳回后的流转路径

3.4 发布与激活

操作 说明
发布 将流程定义标记为"已发布",业务模块才能引用该流程发起审批
停用 将已发布的流程标记为"已过期",不再接受新的发起
激活 已发布的流程需要激活后才能真正使用
停用(激活) 暂停流程使用,不影响已在审批中的实例

3.5 复制流程

点击"复制"按钮可基于当前流程创建新版本,便于流程迭代升级。


四、审批协作方式

系统支持三种审批协作方式,在流程设计器中为每个审批节点配置。

4.1 或签(NORMAL)

任一人审批即可通过。

  • 节点分配给多个审批人时,只要其中一人审批通过,该节点即通过
  • 适用于需要快速决策、任意审批人均可代表团队意见的场景
  • 可执行操作:通过、退回

示例:部门请假审批分配给部门经理和副经理,其中一人审批即可。

4.2 会签(ALL)

所有人都必须审批通过。

  • 节点分配给多个审批人时,所有人都审批通过后,该节点才通过
  • 任一审批人退回则节点退回
  • 适用于需要全体确认的重要决策
  • 可执行操作:通过、退回

示例:重大项目立项审批需要所有部门负责人签字确认。

4.3 票签(VOTE)

按比例投票决定是否通过。

  • 节点设置通过比例阈值,审批人投票"赞成"或"反对"
  • 达到通过比例后自动流转
  • 适用于需要多数表决的决策场景
  • 可执行操作:赞成、反对

示例:委员会评审,设定 60% 通过率,6 人中 4 人赞成即通过。


五、审批人分配

在流程设计器中为每个审批节点分配审批人,支持三种类型:

类型 格式 说明
用户 {userId} 指定具体用户作为审批人
角色 role:{roleId} 拥有该角色的所有用户均可审批(通常配合或签使用)
部门 dept:{deptId} 属于该部门的所有用户均可审批

同一节点可混合配置多种类型的审批人。系统在运行时会将角色和部门自动解析为具体的用户列表。


六、审批操作

6.1 操作入口

  • 我的待办 (bpm/flow-todo):查看并处理待审批的任务
  • 我的发起 (bpm/flow-my):查看自己发起的流程,可进行撤回操作

6.2 审批操作类型

操作 说明 使用场景
通过 同意当前节点的审批,流程流转到下一节点 所有审批节点(通用)
退回 不同意当前节点的审批,退回给发起人或上一节点 或签、会签模式
反对 投票反对(仅票签模式) 票签模式
撤回 发起人撤回整个流程 我的发起列表,仅"审批中"状态可撤回
终止 管理员强制终止流程实例 流程实例管理

6.3 审批对话框

点击审批按钮后弹出审批对话框,包含三个标签页:

  1. 详情:显示当前流程实例的基本信息和业务数据
  2. 流程图:可视化展示流程进度,当前节点高亮显示
  3. 审批历史:列出所有已完成节点的审批记录

审批时需填写审批意见(必填),系统提供常用意见快捷标签。


七、流程实例状态说明

状态码 状态名称 说明
0 待提交 实例已创建但未提交
1 审批中 流程正在审批过程中
2 已通过 全部审批节点通过
4 已终止 管理员手动终止
5 已作废 流程被取消作废
6 已撤回 发起人撤回
8 已完成 流程正常结束
9 已退回 审批被退回
10 已失效 流程失效
11 已驳回 审批被驳回

八、示例流程:请假审批

下面通过一个完整的请假审批流程演示系统的使用。

8.1 业务场景

某公司请假审批规则:

  • 员工提交请假申请
  • 直属上级审批(或签:部门经理或副经理任一审批)
  • 请假天数 ≤ 3 天:直属上级通过后直接结束
  • 请假天数 > 3 天:直属上级通过后还需人事部门审批(会签:所有人事专员确认)
  • 任意节点退回则流程回到发起人

8.2 流程设计

[开始] → [直属上级审批(或签)] → {≤3天} → [结束]
                                      ↓
                                   {>3天}
                                      ↓
                              [人事审批(会签)]
                                      ↓
                                  [结束]

8.3 操作步骤

准备工作:设置部门主管(实现"发起人的直属上级"动态审批)

本系统通过 SpEL 表达式 实现"发起人的直属上级"精确匹配。原理:

  • 每个部门在"部门管理"中指定一名主管用户
  • 审批节点使用 SpEL 表达式:#{@supervisorService.getSupervisor(#initiator)}
  • 流程发起时,系统根据发起人所属部门自动找到其主管,仅该主管能审批
  1. 进入 系统管理 > 部门管理
  2. 编辑每个部门,在"主管"字段中选择该部门的主管用户
  3. 保存后立即生效,无需修改流程定义

与角色方案的区别:角色方案下 A 部门主管也能看到 B 部门员工的申请。本方案精确匹配发起人所属部门的主管,避免了跨部门审批问题。

步骤一:创建流程分类

  1. 进入 流程中心 > 流程分类
  2. 点击"新增"
  3. 填写:分类名称 = "行政审批",排序号 = 1
  4. 保存

步骤二:设计流程定义

  1. 进入 流程中心 > 流程定义

  2. 点击"新增"

  3. 填写流程信息:

    • 流程名称:员工请假审批
    • 分类:选择"行政审批"
    • 点击"生成编码"自动生成流程编码
  4. 在流程设计器中设计节点:

    节点一:直属上级审批

    • 节点名称:直属上级审批
    • 审批人类型:手动输入 SpEL 表达式
    • 审批人表达式:#{@supervisorService.getSupervisor(#initiator)}
    • 流转条件:
      • 通过 + 请假天数 ≤ 3 → 流向结束节点
      • 通过 + 请假天数 > 3 → 流向人事审批节点
      • 退回 → 流向发起人

    表达式说明@supervisorService 是系统内置的 Spring Bean,#initiator 是启动流程时传入的发起人用户 ID。系统运行时自动调用 getSupervisor() 方法,返回发起人所属部门的主管 ID。

    节点二:人事审批

    • 节点名称:人事审批
    • 协作方式:会签
    • 审批人类型:选择"用户"
    • 审批人:搜索并选择"张三"、"李四"(人事专员)
    • 流转条件:
      • 通过 → 流向结束节点
      • 退回 → 流向发起人
  5. 保存流程定义

步骤三:发布并激活流程

  1. 在流程定义列表中,点击刚创建的流程的"发布"按钮
  2. 确认发布
  3. 点击"激活"按钮,将流程设为激活状态

步骤四:发起请假审批(业务系统)

  1. 员工在业务系统中填写请假申请单
  2. 选择审批流程"员工请假审批"
  3. 填写请假天数、请假事由等信息
  4. 提交申请

步骤五:直属上级审批

  1. 直属上级登录系统,进入 流程中心 > 我的待办
  2. 找到该请假审批任务,点击"审批"
  3. 查看详情和流程图,确认请假信息
  4. 选择操作:
    • 通过:同意请假,填写审批意见"同意请假申请"
    • 退回:不同意,填写退回原因
  5. 如果通过且请假天数 > 3 天,流程自动流转到人事审批节点

步骤六:人事审批(如需要)

  1. 人事专员登录系统,进入 我的待办
  2. 由于节点配置为会签,所有人事专员都需要审批
  3. 张三审批通过后,任务状态变为等待李四审批
  4. 李四审批通过后,流程结束
  5. 如果任一专员退回,流程退回到发起人

步骤七:查看审批历史

  1. 流程参与者可随时查看审批进度
  2. 点击流程实例进入详情
  3. 切换到"审批历史"标签页
  4. 可以看到每个节点的审批人、审批时间、审批意见

8.4 流程图示例

    ┌──────────┐
    │   开始   │
    └────┬─────┘
         │ 员工提交请假申请
         ▼
    ┌──────────────┐
    │ 直属上级审批  │ ← SpEL动态解析(发起人所属部门主管)
    └──┬───────┬───┘
       │       │
    通过(≤3天)  通过(>3天)
       │       │
       │       ▼
       │  ┌──────────┐
       │  │ 人事审批  │ ← 会签(张三、李四都需审批)
       │  └────┬─────┘
       │       │
       │    通过 │ 退回
       │       │   │
       ▼       ▼   ▼
    ┌──────────────┐
    │    结束      │ (退回时重新发起)
    └──────────────┘

九、常用操作速查

需求 操作路径
新建流程 流程定义 → 新增 → 设计节点 → 保存 → 发布 → 激活
停用流程 流程定义 → 找到流程 → 停用(激活状态切换)
废弃流程 流程定义 → 找到流程 → 设为过期
审批任务 我的待办 → 找到任务 → 审批 → 通过/退回
撤回申请 我的发起 → 找到实例 → 撤回
查看进度 我的发起/待办 → 点击实例 → 流程图标签页
查看历史 点击实例 → 审批历史标签页
终止流程 流程实例管理 → 找到实例 → 终止

十、业务模块审批流程配置

系统支持为以下业务模块配置审批流程,在各自模块的"参数设置"中开启:

业务模块 参数设置路径 说明
采购订单 sc/config 采购参数设置 开启后,采购订单创建时自动发起审批流程
采购收货单 sc/config 采购参数设置 开启后,采购收货单创建时自动发起审批流程
采购退货单 sc/config 采购参数设置 开启后,采购退货单创建时自动发起审批流程
销售订单 sc/saleConfig 销售参数设置 开启后,销售订单创建时自动发起审批流程
销售出库单 sc/saleConfig 销售参数设置 开启后,销售出库单创建时自动发起审批流程
销售退货单 sc/saleConfig 销售参数设置 开启后,销售退货单创建时自动发起审批流程
零售出库单 sc/retailConfig 零售参数设置 开启后,零售出库单创建时自动发起审批流程
零售退货单 sc/retailConfig 零售参数设置 开启后,零售退货单创建时自动发起审批流程
盘点单 sc/takeStockConfig 盘点参数设置 开启后,盘点单创建时自动发起审批流程
供应商结算单 settle/config 供应商结算参数设置 开启后,供应商结算单创建时自动发起审批流程
供应商对账单 settle/config 供应商结算参数设置 开启后,供应商对账单创建时自动发起审批流程
供应商费用单 settle/config 供应商结算参数设置 开启后,供应商费用单创建时自动发起审批流程
供应商预付款单 settle/config 供应商结算参数设置 开启后,供应商预付款单创建时自动发起审批流程
客户结算单 customer/settle/config 客户结算参数设置 开启后,客户结算单创建时自动发起审批流程
客户对账单 customer/settle/config 客户结算参数设置 开启后,客户对账单创建时自动发起审批流程
客户费用单 customer/settle/config 客户结算参数设置 开启后,客户费用单创建时自动发起审批流程
客户预付款单 customer/settle/config 客户结算参数设置 开启后,客户预付款单创建时自动发起审批流程

配置方法

  1. 先在 流程中心 > 流程定义 中创建并发布一个审批流程
  2. 进入对应模块的 参数设置 页面
  3. 将"是否开启审批流程"设为
  4. 点击"审批流程"输入框,搜索并选择已发布的流程
  5. 保存

审批流程工作原理

  1. 用户在业务模块中创建单据(如销售订单)
  2. 系统检查该模块是否开启了审批流程
  3. 如果开启,自动发起审批流程实例,将单据提交到流程的第一个审批节点
  4. 审批人在 我的待办 中处理审批任务
  5. 审批通过 → 系统回调对应的 BpmBizListener,自动执行单据的审核通过逻辑
  6. 审批退回 → 单据状态变为"审核拒绝",用户可修改后重新提交

注意:开启审批流程后,单据不再支持手动"审核通过/拒绝"操作,必须通过流程审批来完成。

参数页面与业务模块对应关系

一个参数设置页面可能包含多个业务模块的审批开关:

参数页面 包含的审批模块
采购参数设置 (sc/config) 采购订单、采购收货单、采购退货单
销售参数设置 (sc/saleConfig) 销售订单、销售出库单、销售退货单
零售参数设置 (sc/retailConfig) 零售出库单、零售退货单
盘点参数设置 (sc/takeStockConfig) 盘点单
供应商结算参数设置 (settle/config) 供应商结算单、供应商对账单、供应商费用单、供应商预付款单
客户结算参数设置 (customer/settle/config) 客户结算单、客户对账单、客户费用单、客户预付款单

十一、常见问题

Q:发布后的流程能否修改?

A:不能直接修改已发布且被使用的流程。建议使用"复制"功能创建新版本,修改后重新发布,旧版本可设为过期。

Q:会签模式下,某个审批人长期不处理怎么办?

A:目前需要管理员在流程实例管理中手动催办或终止。后续版本将支持超时自动提醒和自动流转功能。

Q:审批人离职了怎么办?

A:如果审批人配置为"角色"或"部门"类型,只需调整角色成员或部门成员即可生效,无需修改流程定义。如果是按"用户"指定的审批人,则需要修改流程定义。

Q:如何实现"发起人的直属上级"作为审批人?

A:使用 SpEL 动态表达式。先在部门管理中为每个部门设置主管用户,然后在流程审批节点中输入表达式 #{@supervisorService.getSupervisor(#initiator)}。发起流程时传入 initiator 变量(发起人用户ID),系统会自动根据发起人所属部门找到其主管并分配审批任务。此方式精确匹配发起人本部门的主管,不会出现跨部门审批问题。

Q:能否在审批节点设置条件分支?

A:支持。在流程设计器中可以为每个审批节点的"通过"和"退回"设置不同的流转目标,并配置条件表达式(如请假天数阈值)。