diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowAssignmentListener.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowAssignmentListener.java new file mode 100644 index 000000000..967267c83 --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowAssignmentListener.java @@ -0,0 +1,66 @@ +package org.dromara.workflow.listener; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.domain.dto.UserDTO; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.warm.flow.core.constant.FlowCons; +import org.dromara.warm.flow.core.entity.Instance; +import org.dromara.warm.flow.core.entity.Task; +import org.dromara.warm.flow.core.listener.Listener; +import org.dromara.warm.flow.core.listener.ListenerVariable; +import org.dromara.workflow.service.impl.WfTaskAssigneeServiceImpl; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +/** + * 分派办理人监听器,动态修改代办任务信息 + * + * @author AprilWind + */ +@RequiredArgsConstructor +@Component +@Slf4j +public class WorkflowAssignmentListener implements Listener { + + private final WfTaskAssigneeServiceImpl assigneeService; + + @Override + public void notify(ListenerVariable listenerVariable) { + log.info("分派办理人监听器开始执行......"); + List tasks = listenerVariable.getNextTasks(); + Instance instance = listenerVariable.getInstance(); + for (Task task : tasks) { + List permissionList = task.getPermissionList(); + // 记录待添加的权限项 + List toAddPermissions = new ArrayList<>(); + // 使用迭代器来避免直接删除元素 + Iterator iterator = permissionList.iterator(); + while (iterator.hasNext()) { + String permission = iterator.next(); + // 替换发起人审批权限 + if (StringUtils.isNotEmpty(permission) && permission.contains(FlowCons.WARMFLOWINITIATOR)) { + iterator.remove(); + permissionList.add(permission.replace(FlowCons.WARMFLOWINITIATOR, instance.getCreateBy())); + } else { + // 获取办理人 + List users = assigneeService.fetchUsersByStorageId(permission); + if (!users.isEmpty()) { + // 移除当前权限并替换成多个用户的权限 + iterator.remove(); + for (UserDTO user : users) { + toAddPermissions.add(String.valueOf(user.getUserId())); + } + } + } + } + // 添加新权限项 + permissionList.addAll(toAddPermissions); + } + log.info("分派办理人监听器执行结束......"); + } + +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowStartListener.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowStartListener.java index 77506b7d5..ed52472ba 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowStartListener.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowStartListener.java @@ -34,8 +34,8 @@ public class WorkflowStartListener implements Listener { @Override public void notify(ListenerVariable listenerVariable) { log.info("流程启动监听器"); + // 工作流内置参数 FlowParams flowParams = listenerVariable.getFlowParams(); - // 设置办理人所拥有的权限,比如角色、部门、用户等 log.info("流程启动监听器结束;{}", "开启流程完成"); }