update 手动合并冲突 优化 工作流模块下一个节点指定办理人、角色和部门转具体用户、抄送人和消息推送,改到通过全局分派监听器和完成监听器处理
update 修复退回申请人无法发送消息问题
This commit is contained in:
parent
21c87eee9a
commit
777ae645c5
@ -14,7 +14,10 @@ import org.dromara.warm.flow.core.listener.GlobalListener;
|
|||||||
import org.dromara.warm.flow.core.listener.ListenerVariable;
|
import org.dromara.warm.flow.core.listener.ListenerVariable;
|
||||||
import org.dromara.warm.flow.orm.entity.FlowTask;
|
import org.dromara.warm.flow.orm.entity.FlowTask;
|
||||||
import org.dromara.workflow.common.ConditionalOnEnable;
|
import org.dromara.workflow.common.ConditionalOnEnable;
|
||||||
|
import org.dromara.workflow.common.enums.TaskStatusEnum;
|
||||||
|
import org.dromara.workflow.domain.bo.FlowCopyBo;
|
||||||
import org.dromara.workflow.handler.FlowProcessEventHandler;
|
import org.dromara.workflow.handler.FlowProcessEventHandler;
|
||||||
|
import org.dromara.workflow.service.IFlwCommonService;
|
||||||
import org.dromara.workflow.service.IFlwInstanceService;
|
import org.dromara.workflow.service.IFlwInstanceService;
|
||||||
import org.dromara.workflow.service.IFlwTaskService;
|
import org.dromara.workflow.service.IFlwTaskService;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
@ -37,6 +40,7 @@ public class WorkflowGlobalListener implements GlobalListener {
|
|||||||
private final IFlwTaskService taskService;
|
private final IFlwTaskService taskService;
|
||||||
private final IFlwInstanceService instanceService;
|
private final IFlwInstanceService instanceService;
|
||||||
private final FlowProcessEventHandler flowProcessEventHandler;
|
private final FlowProcessEventHandler flowProcessEventHandler;
|
||||||
|
private final IFlwCommonService flwCommonService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建监听器,任务创建时执行
|
* 创建监听器,任务创建时执行
|
||||||
@ -70,6 +74,32 @@ public class WorkflowGlobalListener implements GlobalListener {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void assignment(ListenerVariable listenerVariable) {
|
public void assignment(ListenerVariable listenerVariable) {
|
||||||
|
Map<String, Object> variable = listenerVariable.getVariable();
|
||||||
|
List<Task> nextTasks = listenerVariable.getNextTasks();
|
||||||
|
FlowParams flowParams = listenerVariable.getFlowParams();
|
||||||
|
Definition definition = listenerVariable.getDefinition();
|
||||||
|
Instance instance = listenerVariable.getInstance();
|
||||||
|
String applyNodeCode = flwCommonService.applyNodeCode(definition.getId());
|
||||||
|
for (Task flowTask : nextTasks) {
|
||||||
|
// 如果办理或者退回并行存在需要指定办理人,则直接覆盖办理人
|
||||||
|
if (variable.containsKey(flowTask.getNodeCode()) && (TaskStatusEnum.PASS.getStatus().equals(flowParams.getHisStatus())
|
||||||
|
|| TaskStatusEnum.BACK.getStatus().equals(flowParams.getHisStatus()))) {
|
||||||
|
String userIds = variable.get(flowTask.getNodeCode()).toString();
|
||||||
|
flowTask.setPermissionList(List.of(userIds.split(StringUtils.SEPARATOR)));
|
||||||
|
variable.remove(flowTask.getNodeCode());
|
||||||
|
} else {
|
||||||
|
// 否则把所有的角色或者部门转成对应的用户
|
||||||
|
List<String> permissionList = flowTask.getPermissionList();
|
||||||
|
if (CollUtil.isNotEmpty(permissionList)) {
|
||||||
|
List<String> newUserList = flwCommonService.buildUser(permissionList);
|
||||||
|
flowTask.setPermissionList(newUserList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 如果是申请节点,则把启动人添加到办理人
|
||||||
|
if (flowTask.getNodeCode().equals(applyNodeCode)) {
|
||||||
|
flowTask.setPermissionList(List.of(instance.getCreateBy()));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -96,6 +126,27 @@ public class WorkflowGlobalListener implements GlobalListener {
|
|||||||
if (StringUtils.isNotBlank(status)) {
|
if (StringUtils.isNotBlank(status)) {
|
||||||
flowProcessEventHandler.processHandler(definition.getFlowCode(), instance, status, params, false);
|
flowProcessEventHandler.processHandler(definition.getFlowCode(), instance, status, params, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 只有办理或者退回的时候才执行消息通知和抄送
|
||||||
|
if (TaskStatusEnum.PASS.getStatus().equals(flowParams.getHisStatus())
|
||||||
|
|| TaskStatusEnum.BACK.getStatus().equals(flowParams.getHisStatus())) {
|
||||||
|
Task task = listenerVariable.getTask();
|
||||||
|
Map<String, Object> variable = listenerVariable.getVariable();
|
||||||
|
List<FlowCopyBo> flowCopyList = (List<FlowCopyBo>) variable.get("flowCopyList");
|
||||||
|
List<String> messageType = (List<String>) variable.get("messageType");
|
||||||
|
String notice = (String) variable.get("notice");
|
||||||
|
|
||||||
|
// 添加抄送人
|
||||||
|
taskService.setCopy(task, flowCopyList);
|
||||||
|
variable.remove("flowCopyList");
|
||||||
|
|
||||||
|
// 消息通知
|
||||||
|
if (CollUtil.isNotEmpty(messageType)) {
|
||||||
|
flwCommonService.sendMessage(definition.getFlowName(), instance.getId(), messageType, notice);
|
||||||
|
variable.remove("messageType");
|
||||||
|
variable.remove("notice");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,10 +1,6 @@
|
|||||||
package org.dromara.workflow.service;
|
package org.dromara.workflow.service;
|
||||||
|
|
||||||
import org.dromara.warm.flow.core.entity.User;
|
|
||||||
import org.dromara.warm.flow.core.service.UserService;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通用 工作流服务
|
* 通用 工作流服务
|
||||||
@ -13,30 +9,13 @@ import java.util.Set;
|
|||||||
*/
|
*/
|
||||||
public interface IFlwCommonService {
|
public interface IFlwCommonService {
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取工作流用户service
|
|
||||||
*
|
|
||||||
* @return 工作流用户service
|
|
||||||
*/
|
|
||||||
UserService getFlowUserService();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 构建工作流用户
|
* 构建工作流用户
|
||||||
*
|
*
|
||||||
* @param userList 办理用户
|
* @param permissionList 办理用户
|
||||||
* @param taskId 任务ID
|
|
||||||
* @return 用户
|
* @return 用户
|
||||||
*/
|
*/
|
||||||
Set<User> buildUser(List<User> userList, Long taskId);
|
List<String> buildUser(List<String> permissionList);
|
||||||
|
|
||||||
/**
|
|
||||||
* 构建工作流用户
|
|
||||||
*
|
|
||||||
* @param userIdList 办理用户
|
|
||||||
* @param taskId 任务ID
|
|
||||||
* @return 用户
|
|
||||||
*/
|
|
||||||
Set<User> buildFlowUser(List<String> userIdList, Long taskId);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送消息
|
* 发送消息
|
||||||
|
@ -5,6 +5,7 @@ import org.dromara.common.core.domain.dto.UserDTO;
|
|||||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||||
import org.dromara.warm.flow.core.entity.Node;
|
import org.dromara.warm.flow.core.entity.Node;
|
||||||
|
import org.dromara.warm.flow.core.entity.Task;
|
||||||
import org.dromara.warm.flow.orm.entity.FlowHisTask;
|
import org.dromara.warm.flow.orm.entity.FlowHisTask;
|
||||||
import org.dromara.warm.flow.orm.entity.FlowNode;
|
import org.dromara.warm.flow.orm.entity.FlowNode;
|
||||||
import org.dromara.warm.flow.orm.entity.FlowTask;
|
import org.dromara.warm.flow.orm.entity.FlowTask;
|
||||||
@ -38,6 +39,14 @@ public interface IFlwTaskService {
|
|||||||
*/
|
*/
|
||||||
boolean completeTask(CompleteTaskBo completeTaskBo);
|
boolean completeTask(CompleteTaskBo completeTaskBo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加抄送人
|
||||||
|
*
|
||||||
|
* @param task 任务信息
|
||||||
|
* @param flowCopyList 抄送人
|
||||||
|
*/
|
||||||
|
void setCopy(Task task, List<FlowCopyBo> flowCopyList);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询当前用户的待办任务
|
* 查询当前用户的待办任务
|
||||||
*
|
*
|
||||||
|
@ -13,21 +13,18 @@ import org.dromara.common.sse.dto.SseMessageDto;
|
|||||||
import org.dromara.common.sse.utils.SseMessageUtils;
|
import org.dromara.common.sse.utils.SseMessageUtils;
|
||||||
import org.dromara.warm.flow.core.entity.Node;
|
import org.dromara.warm.flow.core.entity.Node;
|
||||||
import org.dromara.warm.flow.core.entity.Task;
|
import org.dromara.warm.flow.core.entity.Task;
|
||||||
import org.dromara.warm.flow.core.entity.User;
|
|
||||||
import org.dromara.warm.flow.core.enums.SkipType;
|
import org.dromara.warm.flow.core.enums.SkipType;
|
||||||
import org.dromara.warm.flow.core.service.NodeService;
|
import org.dromara.warm.flow.core.service.NodeService;
|
||||||
import org.dromara.warm.flow.core.service.UserService;
|
|
||||||
import org.dromara.warm.flow.orm.entity.FlowTask;
|
import org.dromara.warm.flow.orm.entity.FlowTask;
|
||||||
import org.dromara.warm.flow.orm.entity.FlowUser;
|
|
||||||
import org.dromara.workflow.common.ConditionalOnEnable;
|
import org.dromara.workflow.common.ConditionalOnEnable;
|
||||||
import org.dromara.workflow.common.enums.MessageTypeEnum;
|
import org.dromara.workflow.common.enums.MessageTypeEnum;
|
||||||
import org.dromara.workflow.common.enums.TaskAssigneeType;
|
|
||||||
import org.dromara.workflow.service.IFlwCommonService;
|
import org.dromara.workflow.service.IFlwCommonService;
|
||||||
import org.dromara.workflow.service.IFlwTaskAssigneeService;
|
import org.dromara.workflow.service.IFlwTaskAssigneeService;
|
||||||
import org.dromara.workflow.service.IFlwTaskService;
|
import org.dromara.workflow.service.IFlwTaskService;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
|
||||||
@ -41,82 +38,27 @@ import java.util.stream.Collectors;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@Service
|
@Service
|
||||||
public class FlwCommonServiceImpl implements IFlwCommonService {
|
public class FlwCommonServiceImpl implements IFlwCommonService {
|
||||||
private final UserService userService;
|
|
||||||
private final NodeService nodeService;
|
private final NodeService nodeService;
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取工作流用户service
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public UserService getFlowUserService() {
|
|
||||||
return userService;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 构建工作流用户
|
* 构建工作流用户
|
||||||
*
|
*
|
||||||
* @param userList 办理用户
|
* @param permissionList 办理用户
|
||||||
* @param taskId 任务ID
|
|
||||||
* @return 用户
|
* @return 用户
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Set<User> buildUser(List<User> userList, Long taskId) {
|
public List<String> buildUser(List<String> permissionList) {
|
||||||
if (CollUtil.isEmpty(userList)) {
|
if (CollUtil.isEmpty(permissionList)) {
|
||||||
return Set.of();
|
return List.of();
|
||||||
}
|
}
|
||||||
Set<User> list = new HashSet<>();
|
|
||||||
Set<String> processedBySet = new HashSet<>();
|
|
||||||
IFlwTaskAssigneeService taskAssigneeService = SpringUtils.getBean(IFlwTaskAssigneeService.class);
|
IFlwTaskAssigneeService taskAssigneeService = SpringUtils.getBean(IFlwTaskAssigneeService.class);
|
||||||
Map<String, List<User>> userListMap = StreamUtils.groupByKey(userList, User::getType);
|
String processedBys = CollUtil.join(permissionList, StringUtils.SEPARATOR);
|
||||||
for (Map.Entry<String, List<User>> entry : userListMap.entrySet()) {
|
// 根据 processedBy 前缀判断处理人类型,分别获取用户列表
|
||||||
List<User> entryValue = entry.getValue();
|
List<UserDTO> users = taskAssigneeService.fetchUsersByStorageIds(processedBys);
|
||||||
String processedBys = StreamUtils.join(entryValue, User::getProcessedBy);
|
|
||||||
// 根据 processedBy 前缀判断处理人类型,分别获取用户列表
|
return StreamUtils.toList(users, userDTO -> String.valueOf(userDTO.getUserId()));
|
||||||
List<UserDTO> users = taskAssigneeService.fetchUsersByStorageIds(processedBys);
|
|
||||||
// 转换为 FlowUser 并添加到结果集合
|
|
||||||
if (CollUtil.isNotEmpty(users)) {
|
|
||||||
users.forEach(dto -> {
|
|
||||||
String processedBy = String.valueOf(dto.getUserId());
|
|
||||||
if (!processedBySet.contains(processedBy)) {
|
|
||||||
FlowUser flowUser = new FlowUser();
|
|
||||||
flowUser.setType(entry.getKey());
|
|
||||||
flowUser.setProcessedBy(processedBy);
|
|
||||||
flowUser.setAssociated(taskId);
|
|
||||||
list.add(flowUser);
|
|
||||||
processedBySet.add(processedBy);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return list;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 构建工作流用户
|
|
||||||
*
|
|
||||||
* @param userIdList 办理用户
|
|
||||||
* @param taskId 任务ID
|
|
||||||
* @return 用户
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public Set<User> buildFlowUser(List<String> userIdList, Long taskId) {
|
|
||||||
if (CollUtil.isEmpty(userIdList)) {
|
|
||||||
return Set.of();
|
|
||||||
}
|
|
||||||
Set<User> list = new HashSet<>();
|
|
||||||
Set<String> processedBySet = new HashSet<>();
|
|
||||||
for (String userId : userIdList) {
|
|
||||||
if (!processedBySet.contains(userId)) {
|
|
||||||
FlowUser flowUser = new FlowUser();
|
|
||||||
flowUser.setType(TaskAssigneeType.APPROVER.getCode());
|
|
||||||
flowUser.setProcessedBy(String.valueOf(userId));
|
|
||||||
flowUser.setAssociated(taskId);
|
|
||||||
list.add(flowUser);
|
|
||||||
processedBySet.add(String.valueOf(userId));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送消息
|
* 发送消息
|
||||||
|
@ -25,6 +25,7 @@ import org.dromara.common.core.validate.EditGroup;
|
|||||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||||
import org.dromara.common.satoken.utils.LoginHelper;
|
import org.dromara.common.satoken.utils.LoginHelper;
|
||||||
|
import org.dromara.warm.flow.core.FlowEngine;
|
||||||
import org.dromara.warm.flow.core.dto.FlowParams;
|
import org.dromara.warm.flow.core.dto.FlowParams;
|
||||||
import org.dromara.warm.flow.core.entity.*;
|
import org.dromara.warm.flow.core.entity.*;
|
||||||
import org.dromara.warm.flow.core.enums.NodeType;
|
import org.dromara.warm.flow.core.enums.NodeType;
|
||||||
@ -155,6 +156,14 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
String notice = completeTaskBo.getNotice();
|
String notice = completeTaskBo.getNotice();
|
||||||
// 获取抄送人
|
// 获取抄送人
|
||||||
List<FlowCopyBo> flowCopyList = completeTaskBo.getFlowCopyList();
|
List<FlowCopyBo> flowCopyList = completeTaskBo.getFlowCopyList();
|
||||||
|
// 设置抄送人
|
||||||
|
completeTaskBo.getVariables().put("flowCopyList", flowCopyList);
|
||||||
|
// 消息类型
|
||||||
|
completeTaskBo.getVariables().put("messageType", messageType);
|
||||||
|
// 消息通知
|
||||||
|
completeTaskBo.getVariables().put("notice", notice);
|
||||||
|
|
||||||
|
|
||||||
FlowTask flowTask = flowTaskMapper.selectById(taskId);
|
FlowTask flowTask = flowTaskMapper.selectById(taskId);
|
||||||
if (ObjectUtil.isNull(flowTask)) {
|
if (ObjectUtil.isNull(flowTask)) {
|
||||||
throw new ServiceException("流程任务不存在或任务已审批!");
|
throw new ServiceException("流程任务不存在或任务已审批!");
|
||||||
@ -180,12 +189,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
.hisStatus(TaskStatusEnum.PASS.getStatus())
|
.hisStatus(TaskStatusEnum.PASS.getStatus())
|
||||||
.hisTaskExt(completeTaskBo.getFileId());
|
.hisTaskExt(completeTaskBo.getFileId());
|
||||||
// 执行任务跳转,并根据返回的处理人设置下一步处理人
|
// 执行任务跳转,并根据返回的处理人设置下一步处理人
|
||||||
Instance instance = taskService.skip(taskId, flowParams);
|
taskService.skip(taskId, flowParams);
|
||||||
this.setHandler(instance, flowTask, flowCopyList);
|
|
||||||
// 消息通知
|
|
||||||
flwCommonService.sendMessage(definition.getFlowName(), ins.getId(), messageType, notice);
|
|
||||||
//设置下一环节处理人
|
|
||||||
setNextHandler(ins.getId(), completeTaskBo.getAssigneeMap());
|
|
||||||
return true;
|
return true;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error(e.getMessage(), e);
|
log.error(e.getMessage(), e);
|
||||||
@ -193,33 +197,6 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 设置下一环节处理人
|
|
||||||
*
|
|
||||||
* @param instanceId 实例ID
|
|
||||||
* @param assigneeMap 办理人
|
|
||||||
*/
|
|
||||||
private void setNextHandler(Long instanceId, Map<String, Object> assigneeMap) {
|
|
||||||
if (CollUtil.isEmpty(assigneeMap)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Instance inst = insService.getById(instanceId);
|
|
||||||
List<FlowTask> flowTaskList = selectByInstId(instanceId);
|
|
||||||
Map<String, Object> variableMap = inst.getVariableMap();
|
|
||||||
for (FlowTask task : flowTaskList) {
|
|
||||||
if (variableMap != null && variableMap.containsKey(task.getNodeCode())) {
|
|
||||||
String userIds = variableMap.get(task.getNodeCode()).toString();
|
|
||||||
// 批量删除现有任务的办理人记录
|
|
||||||
flwCommonService.getFlowUserService().deleteByTaskIds(List.of(task.getId()));
|
|
||||||
// 批量新增任务办理人记录
|
|
||||||
Set<User> users = flwCommonService.buildFlowUser(List.of(userIds.split(StringUtils.SEPARATOR)), task.getId());
|
|
||||||
flwCommonService.getFlowUserService().saveBatch(new ArrayList<>(users));
|
|
||||||
variableMap.remove(task.getNodeCode());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
taskService.mergeVariable(inst, variableMap);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置弹窗处理人
|
* 设置弹窗处理人
|
||||||
*
|
*
|
||||||
@ -251,54 +228,14 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 设置办理人
|
|
||||||
*
|
|
||||||
* @param instance 实例
|
|
||||||
* @param task (当前任务)未办理的任务
|
|
||||||
* @param flowCopyList 抄送人
|
|
||||||
*/
|
|
||||||
private void setHandler(Instance instance, FlowTask task, List<FlowCopyBo> flowCopyList) {
|
|
||||||
if (ObjectUtil.isNull(instance)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// 添加抄送人
|
|
||||||
this.setCopy(task, flowCopyList);
|
|
||||||
// 根据流程实例ID查询所有关联的任务
|
|
||||||
List<FlowTask> flowTasks = this.selectByInstId(instance.getId());
|
|
||||||
if (CollUtil.isEmpty(flowTasks)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
List<Long> taskIdList = StreamUtils.toList(flowTasks, FlowTask::getId);
|
|
||||||
// 获取与当前任务关联的用户列表
|
|
||||||
List<User> associatedUsers = flwCommonService.getFlowUserService().getByAssociateds(taskIdList);
|
|
||||||
if (CollUtil.isEmpty(associatedUsers)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
List<User> userList = new ArrayList<>();
|
|
||||||
// 遍历任务列表,处理每个任务的办理人
|
|
||||||
for (FlowTask flowTask : flowTasks) {
|
|
||||||
List<User> users = StreamUtils.filter(associatedUsers, user -> Objects.equals(user.getAssociated(), flowTask.getId()));
|
|
||||||
if (CollUtil.isNotEmpty(users)) {
|
|
||||||
userList.addAll(flwCommonService.buildUser(users, flowTask.getId()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 批量删除现有任务的办理人记录
|
|
||||||
flwCommonService.getFlowUserService().deleteByTaskIds(taskIdList);
|
|
||||||
// 确保要保存的 userList 不为空
|
|
||||||
if (CollUtil.isEmpty(userList)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
flwCommonService.getFlowUserService().saveBatch(userList);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 添加抄送人
|
* 添加抄送人
|
||||||
*
|
*
|
||||||
* @param task 任务信息
|
* @param task 任务信息
|
||||||
* @param flowCopyList 抄送人
|
* @param flowCopyList 抄送人
|
||||||
*/
|
*/
|
||||||
public void setCopy(FlowTask task, List<FlowCopyBo> flowCopyList) {
|
@Override
|
||||||
|
public void setCopy(Task task, List<FlowCopyBo> flowCopyList) {
|
||||||
if (CollUtil.isEmpty(flowCopyList)) {
|
if (CollUtil.isEmpty(flowCopyList)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -329,7 +266,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
return flowUser;
|
return flowUser;
|
||||||
}).collect(Collectors.toList());
|
}).collect(Collectors.toList());
|
||||||
// 批量保存抄送人员
|
// 批量保存抄送人员
|
||||||
flwCommonService.getFlowUserService().saveBatch(userList);
|
FlowEngine.userService().saveBatch(userList);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -456,21 +393,25 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
Instance inst = insService.getById(task.getInstanceId());
|
Instance inst = insService.getById(task.getInstanceId());
|
||||||
BusinessStatusEnum.checkBackStatus(inst.getFlowStatus());
|
BusinessStatusEnum.checkBackStatus(inst.getFlowStatus());
|
||||||
Long definitionId = task.getDefinitionId();
|
Long definitionId = task.getDefinitionId();
|
||||||
Definition definition = defService.getById(definitionId);
|
|
||||||
String applyNodeCode = flwCommonService.applyNodeCode(definitionId);
|
String applyNodeCode = flwCommonService.applyNodeCode(definitionId);
|
||||||
|
|
||||||
|
Map<String, Object> variable = new HashMap<>();
|
||||||
|
// 设置抄送人
|
||||||
|
variable.put("flowCopyList", bo.getMessageType());
|
||||||
|
// 消息类型
|
||||||
|
variable.put("messageType", messageType);
|
||||||
|
// 消息通知
|
||||||
|
variable.put("notice", notice);
|
||||||
|
|
||||||
FlowParams flowParams = FlowParams.build()
|
FlowParams flowParams = FlowParams.build()
|
||||||
.nodeCode(bo.getNodeCode())
|
.nodeCode(bo.getNodeCode())
|
||||||
|
.variable(variable)
|
||||||
.message(message)
|
.message(message)
|
||||||
.skipType(SkipType.REJECT.getKey())
|
.skipType(SkipType.REJECT.getKey())
|
||||||
.flowStatus(applyNodeCode.equals(bo.getNodeCode()) ? TaskStatusEnum.BACK.getStatus() : TaskStatusEnum.WAITING.getStatus())
|
.flowStatus(applyNodeCode.equals(bo.getNodeCode()) ? TaskStatusEnum.BACK.getStatus() : TaskStatusEnum.WAITING.getStatus())
|
||||||
.hisStatus(TaskStatusEnum.BACK.getStatus())
|
.hisStatus(TaskStatusEnum.BACK.getStatus())
|
||||||
.hisTaskExt(bo.getFileId());
|
.hisTaskExt(bo.getFileId());
|
||||||
taskService.skip(task.getId(), flowParams);
|
taskService.skip(task.getId(), flowParams);
|
||||||
|
|
||||||
Instance instance = insService.getById(inst.getId());
|
|
||||||
this.setHandler(instance, task, null);
|
|
||||||
// 消息通知
|
|
||||||
flwCommonService.sendMessage(definition.getFlowName(), instance.getId(), messageType, notice);
|
|
||||||
return true;
|
return true;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error(e.getMessage(), e);
|
log.error(e.getMessage(), e);
|
||||||
@ -745,7 +686,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
List<FlowTask> flowTasks = this.selectByIdList(taskIdList);
|
List<FlowTask> flowTasks = this.selectByIdList(taskIdList);
|
||||||
// 批量删除现有任务的办理人记录
|
// 批量删除现有任务的办理人记录
|
||||||
if (CollUtil.isNotEmpty(flowTasks)) {
|
if (CollUtil.isNotEmpty(flowTasks)) {
|
||||||
flwCommonService.getFlowUserService().deleteByTaskIds(StreamUtils.toList(flowTasks, FlowTask::getId));
|
FlowEngine.userService().deleteByTaskIds(StreamUtils.toList(flowTasks, FlowTask::getId));
|
||||||
List<User> userList = flowTasks.stream()
|
List<User> userList = flowTasks.stream()
|
||||||
.map(flowTask -> {
|
.map(flowTask -> {
|
||||||
FlowUser flowUser = new FlowUser();
|
FlowUser flowUser = new FlowUser();
|
||||||
@ -756,7 +697,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
})
|
})
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
if (CollUtil.isNotEmpty(userList)) {
|
if (CollUtil.isNotEmpty(userList)) {
|
||||||
flwCommonService.getFlowUserService().saveBatch(userList);
|
FlowEngine.userService().saveBatch(userList);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -775,13 +716,13 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
public Map<Long, List<UserDTO>> currentTaskAllUser(List<Long> taskIdList) {
|
public Map<Long, List<UserDTO>> currentTaskAllUser(List<Long> taskIdList) {
|
||||||
Map<Long, List<UserDTO>> map = new HashMap<>();
|
Map<Long, List<UserDTO>> map = new HashMap<>();
|
||||||
// 获取与当前任务关联的用户列表
|
// 获取与当前任务关联的用户列表
|
||||||
List<User> associatedUsers = flwCommonService.getFlowUserService().getByAssociateds(taskIdList);
|
List<User> associatedUsers = FlowEngine.userService().getByAssociateds(taskIdList);
|
||||||
Map<Long, List<User>> listMap = StreamUtils.groupByKey(associatedUsers, User::getAssociated);
|
Map<Long, List<User>> listMap = StreamUtils.groupByKey(associatedUsers, User::getAssociated);
|
||||||
for (Map.Entry<Long, List<User>> entry : listMap.entrySet()) {
|
for (Map.Entry<Long, List<User>> entry : listMap.entrySet()) {
|
||||||
List<User> value = entry.getValue();
|
List<User> value = entry.getValue();
|
||||||
if (CollUtil.isNotEmpty(value)) {
|
if (CollUtil.isNotEmpty(value)) {
|
||||||
List<UserDTO> userDTOS = userService.selectListByIds(StreamUtils.toList(value, e -> Long.valueOf(e.getProcessedBy())));
|
List<UserDTO> userDtoList = userService.selectListByIds(StreamUtils.toList(value, e -> Long.valueOf(e.getProcessedBy())));
|
||||||
map.put(entry.getKey(), userDTOS);
|
map.put(entry.getKey(), userDtoList);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return map;
|
return map;
|
||||||
@ -795,7 +736,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
@Override
|
@Override
|
||||||
public List<UserDTO> currentTaskAllUser(Long taskId) {
|
public List<UserDTO> currentTaskAllUser(Long taskId) {
|
||||||
// 获取与当前任务关联的用户列表
|
// 获取与当前任务关联的用户列表
|
||||||
List<User> userList = flwCommonService.getFlowUserService().getByAssociateds(Collections.singletonList(taskId));
|
List<User> userList = FlowEngine.userService().getByAssociateds(Collections.singletonList(taskId));
|
||||||
if (CollUtil.isEmpty(userList)) {
|
if (CollUtil.isEmpty(userList)) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user