flow-client.md 5.0 KB

流程引擎客户端(forge-flow-client)

流程引擎 REST 客户端模块,支持通过注解将业务方法与流程实例绑定,自动启动流程和处理流程事件。

快速开始

1. 引入依赖

<dependency>
    <groupId>com.mdframe.forge</groupId>
    <artifactId>forge-flow-client</artifactId>
</dependency>

2. 配置流程服务地址

forge:
  flow:
    client:
      url: http://localhost:8080    # 流程服务地址
      token: your-auth-token        # 服务间认证 Token(可选)
      connect-timeout: 3000         # 连接超时(ms)
      read-timeout: 10000           # 读取超时(ms)
      redis-subscribe: true         # 是否启用 Redis Pub/Sub 订阅流程事件

核心功能

注解驱动的流程集成

@FlowBind — 绑定流程模型

标注在 Service 类上,声明该类与某个流程模型关联:

@Service
@FlowBind(modelKey = "leave", businessType = "leave_request")
public class LeaveService {
    // ...
}

@FlowStart — 自动启动流程

标注在方法上,方法执行成功后自动启动流程:

@FlowStart(
    businessKeySpEl = "#result.id",
    titleSpEl = "#request.title",
    variablesSpEl = "#request.variables"
)
public LeaveResult submitLeave(LeaveRequest request) {
    // 提交请假申请...
    return result;  // 方法成功后自动启动流程
}
属性 说明
modelKey 流程模型编码(可选,默认取类级别 @FlowBind 的值)
businessKeySpEl 必填,业务主键 SpEL 表达式
titleSpEl 流程标题 SpEL
userIdSpEl 申请人 ID SpEL
userNameSpEl 申请人姓名 SpEL
deptIdSpEl 申请部门 ID SpEL
deptNameSpEl 申请部门名称 SpEL
variablesSpEl 流程变量 SpEL
skipOnError 发生异常时是否跳过(默认 true)

@FlowCallback — 流程事件回调

标注在方法上,接收流程引擎推送的事件:

@FlowCallback(on = {FlowEventContext.ON_COMPLETED, FlowEventContext.ON_REJECTED})
public void onFlowComplete(FlowEventContext context) {
    if (context.getEventType().equals(FlowEventContext.ON_COMPLETED)) {
        // 流程审批通过
        leaveService.approve(context.getBusinessKey());
    } else {
        // 流程被驳回
        leaveService.reject(context.getBusinessKey());
    }
}
属性 说明
on 监听的事件类型列表

可用事件类型

事件常量 说明
ON_COMPLETED 流程完成(审批通过)
ON_REJECTED 流程被驳回
ON_CANCELED 流程被取消
ON_TASK_CREATED 任务创建
ON_TASK_COMPLETED 任务完成
ON_TASK_ASSIGNED 任务被分配

FlowEventContext

流程事件上下文,传递给 @FlowCallback 方法:

字段 说明
event / eventType 事件类型
businessKey 业务主键
processInstanceId 流程实例 ID
processDefKey 流程定义编码
title 流程标题
startUserId / applyUserId 申请人 ID
startUserName / applyUserName 申请人姓名
eventTime 事件时间
lastComment 最新审批意见
taskId 任务 ID
taskName 任务名称
assigneeId 处理人 ID
assigneeName 处理人姓名
comment 审批意见
variables 流程变量

REST API 封装

FlowClient 封装了以下流程服务接口调用:

流程操作

方法 说明
startProcess() 启动流程
getProcessStatus() 查询流程状态
terminateProcess() 终止流程
withdrawProcess() 撤回流程
getProcessVariables() 获取流程变量
updateProcessVariables() 更新流程变量

任务操作

方法 说明
approve() 审批通过
reject() 驳回
delegate() 转交任务
claimTask() 签收任务
remind() 催办

查询

方法 说明
getTodoTasks() 待办任务列表
getDoneTasks() 已办任务列表
getStartedTasks() 我发起的流程
getProcessComments() 获取审批意见列表
getProcessDiagram() 获取流程图
getModelList() 获取流程模型列表

动态 Token

FlowTokenProvider 接口支持动态获取认证 Token:

@Component
public class MyFlowTokenProvider implements FlowTokenProvider {
    @Override
    public String getToken() {
        // 从配置中心/缓存中获取动态 Token
        return configService.getFlowToken();
    }
}

核心组件

组件 说明
FlowClient 流程服务 HTTP 客户端
FlowStartAspect @FlowStart AOP 切面
FlowEventSubscriber Redis Pub/Sub 事件订阅,路由到 @FlowCallback 方法
FlowClientHelperAutoConfiguration 辅助组件自动配置
FlowResult<T> 流程服务统一响应体
FlowClientException 流程客户端自定义异常