当前位置:   article > 正文

在ruoyi-flowable-plus-0.8.X-vform审批流程中动态设置审批人为发起人的部门经理

ruoyi-flowable-plus

我摸索后测试这样是可行的

1、修改前端“审批人设置”,新增自定义,如下图

文件路径:ruoyi-ui/src/plugins/package/penal/task/task-components/UserTask.vue

  1. 1
  2. <el-radio label="LISTENER">监听器指定</el-radio>
  3. 2
  4. else if (val === 'LISTENER') {
  5. // userTaskForm.assignee = "${assignee}"; //设置单个审批人
  6. userTaskForm.candidateUsers = "${candidateUsers}"; //可以指定多个审批人
  7. userTaskForm.text = "监听器指定";
  8. }

2、配置测试监听器DeptLeaderTaskListener,我将监听器放在了system模块,因为要调用一些类。

  1. package com.ruoyi.workflow.listener;
  2. import cn.hutool.extra.spring.SpringUtil;
  3. import com.ruoyi.common.core.domain.entity.SysUser;
  4. import com.ruoyi.system.mapper.SysUserMapper;
  5. import org.flowable.engine.RuntimeService;
  6. import org.flowable.engine.delegate.DelegateExecution;
  7. import org.flowable.engine.delegate.ExecutionListener;
  8. import org.flowable.engine.runtime.ProcessInstance;
  9. import org.springframework.stereotype.Component;
  10. import java.util.List;
  11. import java.util.stream.Collectors;
  12. /**
  13. * 动态指定部门经理审批监听器
  14. */
  15. @Component
  16. public class DeptLeaderTaskListener implements ExecutionListener {
  17. @Override
  18. public void notify(DelegateExecution execution) {
  19. // 获取发起人id
  20. ProcessInstance processInstance = SpringUtil.getBean(RuntimeService.class)
  21. .createProcessInstanceQuery()
  22. .processInstanceId(execution.getProcessInstanceId())
  23. .singleResult();
  24. String startUserId = processInstance.getStartUserId();
  25. // 根据具体情况修改
  26. SysUserMapper userMapper = SpringUtil.getBean(SysUserMapper.class);
  27. // 根据发起人id查询本部门的经理id
  28. List<SysUser> leaders = userMapper.getLeaderById(Long.valueOf(startUserId));
  29. List<String> ids = leaders.stream()
  30. .map(SysUser::getUserId) // 提取 SysUser 对象的 id 属性
  31. .map(String::valueOf) // 将 id 转换为字符串
  32. .collect(Collectors.toList()); // 将结果收集到 List<String>
  33. execution.setVariable("candidateUsers", ids); // 将计算得到的审批人设置为流程变量,多人审批只需一人通过就可以进行下一节点的审批流程
  34. // 也可以使用assignee
  35. System.out.println("动态指定部门经理审批监听器执行完成");
  36. }
  37. }

3、创建流程

选择要使用监听器的节点,选择自定义的审批人设置,点击添加监听器,如下图

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/852360
推荐阅读
  

闽ICP备14008679号