add 新增分派办理人监听器

This commit is contained in:
AprilWind 2024-12-02 19:19:58 +08:00
parent aee13fa6fc
commit c58892a6bb
2 changed files with 67 additions and 1 deletions

View File

@ -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<Task> tasks = listenerVariable.getNextTasks();
Instance instance = listenerVariable.getInstance();
for (Task task : tasks) {
List<String> permissionList = task.getPermissionList();
// 记录待添加的权限项
List<String> toAddPermissions = new ArrayList<>();
// 使用迭代器来避免直接删除元素
Iterator<String> 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<UserDTO> users = assigneeService.fetchUsersByStorageId(permission);
if (!users.isEmpty()) {
// 移除当前权限并替换成多个用户的权限
iterator.remove();
for (UserDTO user : users) {
toAddPermissions.add(String.valueOf(user.getUserId()));
}
}
}
}
// 添加新权限项
permissionList.addAll(toAddPermissions);
}
log.info("分派办理人监听器执行结束......");
}
}

View File

@ -34,8 +34,8 @@ public class WorkflowStartListener implements Listener {
@Override
public void notify(ListenerVariable listenerVariable) {
log.info("流程启动监听器");
// 工作流内置参数
FlowParams flowParams = listenerVariable.getFlowParams();
// 设置办理人所拥有的权限比如角色部门用户等
log.info("流程启动监听器结束;{}", "开启流程完成");
}