Flowable批量修改审批人

本文介绍了一种批量修改工作流程中审批人的方法,通过界面一键更新,实现高效便捷地替换离职员工的审批角色。

如果一个人员离职了,你要变更这个人员所在的流程为其他的审批人,如果一个个的去检察,你是不是很累,这就是我们如果批量修改的原因。

场景很简单,就是人力告诉你有人离职了,需要变更为其他的人

目标:通过界面来修改审批人

1. 界面怎么做在这里就不用讲了
  • 第一 、获取所有的最新的流程定义

public ReturnVo<String> updateTaskAssignee(List<String> keys, String oldAssignee, String newAssignee) {
        ReturnVo<String> returnVo = new ReturnVo<>(ReturnCode.SUCCESS, "OK");
        //1. 查询最新的流程定义列表
        StringBuffer sql = new StringBuffer("SELECT a.* FROM act_re_procdef a INNER JOIN (SELECT key_,MAX(version_) max_version FROM act_re_procdef GROUP BY key_ ) b " +
                " ON a.key_ = b.key_ AND a.version_ = b.max_version ");
        StringBuffer inkeys = new StringBuffer("");
        if (CollectionUtils.isNotEmpty(keys)) {
            StringBuffer finalInkeys = inkeys;
            keys.forEach(key -> finalInkeys.append("'").append(key).append("'").append(","));
            if (inkeys.length() > 0) {
                inkeys = inkeys.deleteCharAt(inkeys.length() - 1);
                sql.append(" where a.key_ in (").append(inkeys.toString()).append(")");
                List<ProcessDefinition> processDefinitions = repositoryService.createNativeProcessDefinitionQuery().sql(sql.toString()).list();
                if (CollectionUtils.isNotEmpty(processDefinitions)) {
                    processDefinitions.forEach(processDefinition -> this.updateTaskAssignee(processDefinition, oldAssignee, newAssignee));
                }
            }
        }
        return returnVo;
    }
  • 第二、修改每一个流程定义的审批人信息

public ReturnVo<String> updateTaskAssignee(ProcessDefinition processDefinition, String oldAssignee, String newAssignee) {
        ReturnVo<String> returnVo = new ReturnVo<>(ReturnCode.SUCCESS, "OK");
        BpmnModel model = repositoryService.getBpmnModel(processDefinition.getId());
        List<UserTask> userTasks = bpmnModelService.findUserTasksByBpmnModel(model);
        userTasks.forEach(userTask -> {
            if (userTask.getAssignee() != null && userTask.getAssignee().equals(oldAssignee) && !oldAssignee.equals(newAssignee)) {
                ObjectNode processInfo = dynamicBpmnService.changeUserTaskAssignee(userTask.getId(), newAssignee);
                dynamicBpmnService.saveProcessDefinitionInfo(processDefinition.getId(), processInfo);
            }
        });
 }
### 若依框架集成 Flowable Plus 及 Flowable 的相关信息 #### 集成概述 RuoYi-Flowable-Plus 是一个基于 RuoYi-Vue-Plus 的开源项目,专注于扩展 Flowable 工作流的功能[^1]。该项目提供了在线表单设计和丰富的流程设计能力,适合企业级应用中的复杂业务场景。 为了实现若依框架与 Flowable 的无缝集成,开发者可以参考以下内容: --- #### 安装与配置教程 根据官方文档描述,以下是关于 RuoYi-Flowable 和其衍生版本的安装与使用指南[^2]: 1. **环境准备** - Java JDK 8 或更高版本。 - MySQL 数据库用于存储工作流数据。 - Maven 构建工具以管理依赖项。 2. **克隆项目** 使用 Git 命令下载项目的最新代码: ```bash git clone https://gitcode.com/gh_mirrors/ru/RuoYi-Flowable-Plus.git ``` 3. **数据库初始化** 导入 `sql` 文件夹下的 SQL 脚本到本地数据库中,完成必要的表结构创建。 4. **修改配置文件** 编辑 `application.yml` 文件,调整数据库连接参数和其他基础设置。 5. **启动服务** 执行以下命令运行 Spring Boot 应用程序: ```bash mvn clean spring-boot:run ``` --- #### 自定义方法示例 在实际开发过程中,可能需要针对特定需求进行功能增强。例如,在用户身份验证方面,可以通过重写方法来支持批量查询用户名[^3]: ```java @Override public List<String> selectUserNames(List<Long> userIds) { // 查询多个用户的详细信息 List<SysUser> userList = baseMapper.selectBatchIds(userIds); // 提取并返回用户名列表 List<String> userNames = new ArrayList<>(); for (SysUser user : userList) { userNames.add(user.getUserName()); } return userNames; } ``` 上述代码片段展示了如何通过传入一组用户 ID 来获取对应的用户名集合,适用于复杂的流程审批逻辑。 --- #### 流程引擎核心概念 Flowable 是一种轻量级 BPMN 2.0 实现方案,能够轻松嵌入至任何 Java 应用程序中。它提供了一套完整的 API 接口供开发者调用,主要特性包括但不限于以下几点: - 支持图形化流程设计器。 - 提供任务分配机制(如人工节点、自动节点)。 - 具备历史记录追踪功能以便审计。 对于初学者而言,建议先熟悉基本术语及其关系图谱;而后逐步深入学习高级主题比如监听器事件处理或者外部系统交互等内容。 --- #### 示例应用场景 假设某公司希望构建一套请假管理系统,则可按照如下思路搭建整个架构体系: 1. 创建实体类表示员工基本信息; 2. 设计 BPMN 图形模型描绘申请提交 -> 主管审核 -> HR 复核这一系列环节走向; 3. 将前端页面绑定后台接口从而触发相应动作序列直至最终状态达成。 具体操作步骤详见官方提供的详尽手册链接地址部分所列明资料说明文档里头都有详细介绍可供查阅学习之便利用起来更加得心应手些呢! ---
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小学生05101

flowable

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值