flowable工作流设置审批人为指定角色+部门的实现方式

一、绘制流程图页面配置

 

1、指定固定审批角色+组织的实现

如上图红框部分,需要修改此处为需求对应。比如此时红框不支持指定某个部门下的指定角色这种组合判断的审批人。则需要修改页面变成选完角色同时也选择上部门统一生成一个group标识。

修改完后,生成类似 ROLE001DEPT130000 的group标识。

在xml中设置 CandidateGroup时,设置为固定值就可以。

2、指定审批人为发起人所在部门的指定角色

此时,用方式1显然不支持,因为发起人是变化的,dept也会跟着变,只能在发起审批流程时读取到传入发起人信息后进行设置。

在xml中设置 CandidateGroup时,需要指定为可变参数,类似下图这种

 设置这个参数有几种方式:

2.1直接基于框架进行表单设置

 

 2.2 在后端代码中发起流程这个步骤时,通过setVariable()的方式设置deptId这个参数

二、流程查询时找到对应审批人

我们设置好对应审批人后,还需要在该查到的时候查到,比如 有一个部门d1,里面有 张三-员工 李四-部门领导 两个人。张三发起了一个审批,审批人设置的是本部门领导角色。此时,在李四登录时应该在待办列表里看到这条审批。

查询这块包含了发起中所有情况,因为查的时候要遵循宁可把可能的群组都查,也不能漏掉。

直接上代码吧:

// 定义的一些标识
public class TaskConstants {

    /**
     * 流程发起人
     */
    public static final String PROCESS_INITIATOR = "initiator";

    /**
     * 角色候选组前缀
     */
    public static final String ROLE_GROUP_PREFIX = "ROLE";

    /**
     * 部门候选组前缀
     */
    public static final String DEPT_GROUP_PREFIX = "DEPT";

    /**
     * 分割符
     */
    public static final String SPLIT = "-";
}
    /**
     * 获取用户组信息,包含了当前所有组合:role、dept、role+dept作为群组
     *
     * @return candidateGroup
     */
    public static List<String> getCandidateGroup() {
        List<String> list = new ArrayList<>();
// 获取当前登录人信息,不同框架有不同的获取方法,适当修改
        LoginUser user = LoginHelper.getLoginUser();
        if (ObjectUtil.isNotNull(user)) {
            if (ObjectUtil.isNotEmpty(user.getRoles())) {
                user.getRoles().forEach(role -> {
                    list.add(TaskConstants.ROLE_GROUP_PREFIX + role.getRoleId());
                    list.add(TaskConstants.ROLE_GROUP_PREFIX + role.getRoleId() + TaskConstants.SPLIT
                        + TaskConstants.DEPT_GROUP_PREFIX + user.getDeptId());
                });
            }
            if (ObjectUtil.isNotNull(user.getDeptId())) {
                list.add(TaskConstants.DEPT_GROUP_PREFIX + user.getDeptId());
            }
        }
        return list;
    }
// 查询待办事项列表        
TaskQuery taskQuery = taskService.createTaskQuery()
            .active()
            .includeProcessVariables()
            .taskCandidateOrAssigned(TaskUtils.getUserId())
            .taskCandidateGroupIn(TaskUtils.getCandidateGroup())
            .orderByTaskCreateTime().desc();

  • 11
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Java 中,Flowable 是一种基于 Reactive Streams 标准的异步流处理库,可以用于实现工作流中的审批拒绝逻辑。下面是一个简单的代码示例,展示了如何使用 Flowable 实现审批拒绝的功能: ```java import io.reactivex.Flowable; import io.reactivex.schedulers.Schedulers; public class ApprovalWorkflow { public static void main(String[] args) { // 模拟审批流程,创建一个包含多个审批节点的 Flowable Flowable<String> approvalFlow = Flowable.just("Step 1", "Step 2", "Step 3", "Step 4"); // 处理审批节点的逻辑 approvalFlow .observeOn(Schedulers.computation()) .subscribe(step -> { // 模拟审批逻辑 boolean approved = performApprovalLogic(step); if (approved) { System.out.println(step + " is approved"); } else { System.out.println(step + " is rejected"); // 如果有节点被拒绝,则取消后续审批节点的处理 throw new RuntimeException("Approval rejected"); } }, error -> { System.out.println("Workflow failed: " + error.getMessage()); }, () -> { System.out.println("Workflow completed"); }); } private static boolean performApprovalLogic(String step) { // 这里可以根据具体的业务逻辑实现审批判断 // 返回 true 表示审批通过,返回 false 表示审批拒绝 return !step.equals("Step 3"); } } ``` 在上面的代码中,我们创建了一个包含多个审批节点的 Flowable 对象 `approvalFlow`。然后使用 `observeOn()` 指定了处理节点的线程,并通过 `subscribe()` 方法对每个节点进行处理。 在每个节点的处理逻辑中,我们使用 `performApprovalLogic()` 方法模拟了审批的判断逻辑。如果某个节点被拒绝,我们通过抛出一个 RuntimeException 来取消后续节点的处理。 最后,我们通过传入的 `error` 参数来处理整个工作流程的失败情况,通过 `onComplete()` 来处理整个工作流程的完成情况。 请注意,这只是一个简单的示例,实际的工作流程可能更加复杂,具体实现需要根据具体的业务需求进行调整和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值