赞
踩
我摸索后测试这样是可行的
1、修改前端“审批人设置”,新增自定义,如下图
文件路径:ruoyi-ui/src/plugins/package/penal/task/task-components/UserTask.vue
- 1、
- <el-radio label="LISTENER">监听器指定</el-radio>
-
-
- 2、
- else if (val === 'LISTENER') {
- // userTaskForm.assignee = "${assignee}"; //设置单个审批人
- userTaskForm.candidateUsers = "${candidateUsers}"; //可以指定多个审批人
- userTaskForm.text = "监听器指定";
- }
2、配置测试监听器DeptLeaderTaskListener,我将监听器放在了system模块,因为要调用一些类。
- package com.ruoyi.workflow.listener;
-
-
- import cn.hutool.extra.spring.SpringUtil;
- import com.ruoyi.common.core.domain.entity.SysUser;
- import com.ruoyi.system.mapper.SysUserMapper;
- import org.flowable.engine.RuntimeService;
- import org.flowable.engine.delegate.DelegateExecution;
- import org.flowable.engine.delegate.ExecutionListener;
- import org.flowable.engine.runtime.ProcessInstance;
- import org.springframework.stereotype.Component;
-
- import java.util.List;
- import java.util.stream.Collectors;
-
- /**
- * 动态指定部门经理审批监听器
- */
- @Component
- public class DeptLeaderTaskListener implements ExecutionListener {
-
- @Override
- public void notify(DelegateExecution execution) {
- // 获取发起人id
- ProcessInstance processInstance = SpringUtil.getBean(RuntimeService.class)
- .createProcessInstanceQuery()
- .processInstanceId(execution.getProcessInstanceId())
- .singleResult();
- String startUserId = processInstance.getStartUserId();
-
- // 根据具体情况修改
- SysUserMapper userMapper = SpringUtil.getBean(SysUserMapper.class);
- // 根据发起人id查询本部门的经理id
- List<SysUser> leaders = userMapper.getLeaderById(Long.valueOf(startUserId));
-
-
- List<String> ids = leaders.stream()
- .map(SysUser::getUserId) // 提取 SysUser 对象的 id 属性
- .map(String::valueOf) // 将 id 转换为字符串
- .collect(Collectors.toList()); // 将结果收集到 List<String> 中
-
- execution.setVariable("candidateUsers", ids); // 将计算得到的审批人设置为流程变量,多人审批只需一人通过就可以进行下一节点的审批流程
- // 也可以使用assignee
- System.out.println("动态指定部门经理审批监听器执行完成");
- }
-
- }
-

3、创建流程
选择要使用监听器的节点,选择自定义的审批人设置,点击添加监听器,如下图
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。