基于jeecgboot的flowabale流程节点动态设置审批人的实现

简介: 基于jeecgboot的flowabale流程节点动态设置审批人的实现

  有些网友希望通过表单的内容来动态决定流程审批人,因为比较个性化,所以需要一个相对通用的方法来实现,想到的是任务监听器,一般都是发起的时候来确定下一个流程审批人,所以可以在第一个发起人这里进行任务监听。

   一、SetAssigneeTaskListener 监听器例子如下:

package com.nbcio.modules.flowable.listener;
import org.flowable.engine.TaskService;
import org.flowable.engine.delegate.TaskListener;
import org.flowable.task.service.delegate.DelegateTask;
import org.jeecg.common.util.SpringContextUtils;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
/**
 * 根据表单内容动态设置审批人
 * @author nbacheng
 * @date 2023-3-02
*/
public class SetAssigneeTaskListener implements TaskListener{
  private static final long serialVersionUID = 1L;
  private TaskService taskService = SpringContextUtils.getBean(TaskService.class);
  
  @Override
  public void notify(DelegateTask delegateTask) {
    
    String processInstanceId = delegateTask.getProcessInstanceId();
    String processDefinitionId = delegateTask.getProcessDefinitionId();
    String taskId = delegateTask.getId();
    String newAssignee;
    
    //表单里面的值,相关逻辑可以根据自己需要进行处理   
    String formvalue = delegateTask.getVariable("assigneeId").toString().trim();
    
    if (StringUtils.equals(formvalue, "admin")) {
      newAssignee = "admin";
    }
    else if (StringUtils.equals(formvalue, "zhangsan")) {
      newAssignee = "zhangsan";
    }
    else {
      newAssignee = "jeecg";
    }
    Map<String, Object> map = taskService.getVariables(taskId);
    map.put("SetAssigneeTaskListener", newAssignee);
    taskService.setVariables(taskId, map);
  }
}

二、设置流程图如下:

三、表单设置如下:

 

四、在启动流程的setNextAssignee里增加下面的代码,就是判断是否通过动态设置审批人的任务监听器进行流程人员的动态设置

// 获取下一个节点数据及设置数据
      FlowNextDto nextFlowNode = flowTaskService.getNextFlowNode(task.getId(), variables);
      if(Objects.nonNull(nextFlowNode)) {
        Map<String, Object> nVariablesMap = taskService.getVariables(task.getId());
        if (Objects.nonNull(task)) {
          if(nVariablesMap.containsKey("SetAssigneeTaskListener")) {//是否通过动态设置审批人的任务监听器
            taskService.complete(task.getId(), variables);
            Task nexttask = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId()).active().singleResult();
            taskService.setAssignee(nexttask.getId(), nVariablesMap.get("SetAssigneeTaskListener").toString());
            return Result.OK("通过动态设置审批人的任务监听器流程启动成功.");
            }
        }

四、效果图


相关文章
|
7天前
|
人工智能 数据可视化 安全
王炸组合!阿里云 OpenClaw X 飞书 CLI,开启 Agent 基建狂潮!(附带免费使用6个月服务器)
本文详解如何用阿里云Lighthouse一键部署OpenClaw,结合飞书CLI等工具,让AI真正“动手”——自动群发、生成科研日报、整理知识库。核心理念:未来软件应为AI而生,CLI即AI的“手脚”,实现高效、安全、可控的智能自动化。
34477 17
王炸组合!阿里云 OpenClaw X 飞书 CLI,开启 Agent 基建狂潮!(附带免费使用6个月服务器)
|
19天前
|
人工智能 JSON 机器人
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
本文带你零成本玩转OpenClaw:学生认证白嫖6个月阿里云服务器,手把手配置飞书机器人、接入免费/高性价比AI模型(NVIDIA/通义),并打造微信公众号“全自动分身”——实时抓热榜、AI选题拆解、一键发布草稿,5分钟完成热点→文章全流程!
45307 142
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
|
8天前
|
人工智能 JSON 监控
Claude Code 源码泄露:一份价值亿元的 AI 工程公开课
我以为顶级 AI 产品的护城河是模型。读完这 51.2 万行泄露的源码,我发现自己错了。
4872 21
|
1天前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
本文介绍了Claude Code终端AI助手的使用指南,主要内容包括:1)常用命令如版本查看、项目启动和更新;2)三种工作模式切换及界面说明;3)核心功能指令速查表,包含初始化、压缩对话、清除历史等操作;4)详细解析了/init、/help、/clear、/compact、/memory等关键命令的使用场景和语法。文章通过丰富的界面截图和场景示例,帮助开发者快速掌握如何通过命令行和交互界面高效使用Claude Code进行项目开发,特别强调了CLAUDE.md文件作为项目知识库的核心作用。
1973 6
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
|
7天前
|
人工智能 API 开发者
阿里云百炼 Coding Plan 售罄、Lite 停售、Pro 抢不到?最新解决方案
阿里云百炼Coding Plan Lite已停售,Pro版每日9:30限量抢购难度大。本文解析原因,并提供两大方案:①掌握技巧抢购Pro版;②直接使用百炼平台按量付费——新用户赠100万Tokens,支持Qwen3.5-Max等满血模型,灵活低成本。
1813 5
阿里云百炼 Coding Plan 售罄、Lite 停售、Pro 抢不到?最新解决方案