update 优化 重构将 WorkflowUtils 工具类改为 FlwCommonService 更通用的业务处理
This commit is contained in:
parent
45eac02f4f
commit
b7517cbbd4
@ -0,0 +1,73 @@
|
||||
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.Set;
|
||||
|
||||
/**
|
||||
* 通用 工作流服务
|
||||
*
|
||||
* @author LionLi
|
||||
*/
|
||||
public interface IFlwCommonService {
|
||||
|
||||
/**
|
||||
* 获取工作流用户service
|
||||
*/
|
||||
UserService getFlowUserService();
|
||||
|
||||
/**
|
||||
* 构建工作流用户
|
||||
*
|
||||
* @param userList 办理用户
|
||||
* @param taskId 任务ID
|
||||
* @return 用户
|
||||
*/
|
||||
Set<User> buildUser(List<User> userList, Long taskId);
|
||||
|
||||
/**
|
||||
* 构建工作流用户
|
||||
*
|
||||
* @param userIdList 办理用户
|
||||
* @param taskId 任务ID
|
||||
* @return 用户
|
||||
*/
|
||||
Set<User> buildFlowUser(List<String> userIdList, Long taskId);
|
||||
|
||||
/**
|
||||
* 发送消息
|
||||
*
|
||||
* @param flowName 流程定义名称
|
||||
* @param messageType 消息类型
|
||||
* @param message 消息内容,为空则发送默认配置的消息内容
|
||||
*/
|
||||
void sendMessage(String flowName, Long instId, List<String> messageType, String message);
|
||||
|
||||
/**
|
||||
* 驳回
|
||||
*
|
||||
* @param message 审批意见
|
||||
* @param instanceId 流程实例id
|
||||
* @param targetNodeCode 目标节点
|
||||
* @param flowStatus 流程状态
|
||||
* @param flowHisStatus 节点操作状态
|
||||
*/
|
||||
void backTask(String message, Long instanceId, String targetNodeCode, String flowStatus, String flowHisStatus);
|
||||
|
||||
/**
|
||||
* 申请人节点编码
|
||||
*
|
||||
* @param definitionId 流程定义id
|
||||
* @return 申请人节点编码
|
||||
*/
|
||||
String applyNodeCode(Long definitionId);
|
||||
|
||||
/**
|
||||
* 删除运行中的任务
|
||||
*
|
||||
* @param taskIds 任务id
|
||||
*/
|
||||
void deleteRunTask(List<Long> taskIds);
|
||||
}
|
@ -1,15 +1,21 @@
|
||||
package org.dromara.workflow.utils;
|
||||
package org.dromara.workflow.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.domain.dto.UserDTO;
|
||||
import org.dromara.common.core.utils.SpringUtils;
|
||||
import org.dromara.common.core.utils.StreamUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.mail.utils.MailUtils;
|
||||
import org.dromara.common.sse.dto.SseMessageDto;
|
||||
import org.dromara.common.sse.utils.SseMessageUtils;
|
||||
import org.dromara.warm.flow.core.constant.ExceptionCons;
|
||||
import org.dromara.warm.flow.core.dto.FlowParams;
|
||||
import org.dromara.warm.flow.core.entity.Node;
|
||||
import org.dromara.warm.flow.core.entity.Task;
|
||||
import org.dromara.warm.flow.core.entity.User;
|
||||
import org.dromara.warm.flow.core.enums.NodeType;
|
||||
import org.dromara.warm.flow.core.enums.SkipType;
|
||||
@ -22,36 +28,44 @@ import org.dromara.warm.flow.orm.entity.FlowTask;
|
||||
import org.dromara.warm.flow.orm.entity.FlowUser;
|
||||
import org.dromara.warm.flow.orm.mapper.FlowNodeMapper;
|
||||
import org.dromara.warm.flow.orm.mapper.FlowTaskMapper;
|
||||
import org.dromara.workflow.common.ConditionalOnEnable;
|
||||
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.IFlwTaskAssigneeService;
|
||||
import org.dromara.workflow.service.IFlwTaskService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
||||
/**
|
||||
* 工作流工具
|
||||
*
|
||||
* @author may
|
||||
* @author LionLi
|
||||
*/
|
||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public class WorkflowUtils {
|
||||
@ConditionalOnEnable
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class FlwCommonServiceImpl implements IFlwCommonService {
|
||||
|
||||
private static final IFlwTaskAssigneeService TASK_ASSIGNEE_SERVICE = SpringUtils.getBean(IFlwTaskAssigneeService.class);
|
||||
private static final IFlwTaskService FLW_TASK_SERVICE = SpringUtils.getBean(IFlwTaskService.class);
|
||||
private static final FlowNodeMapper FLOW_NODE_MAPPER = SpringUtils.getBean(FlowNodeMapper.class);
|
||||
private static final FlowTaskMapper FLOW_TASK_MAPPER = SpringUtils.getBean(FlowTaskMapper.class);
|
||||
private static final UserService USER_SERVICE = SpringUtils.getBean(UserService.class);
|
||||
private static final TaskService TASK_SERVICE = SpringUtils.getBean(TaskService.class);
|
||||
private static final NodeService NODE_SERVICE = SpringUtils.getBean(NodeService.class);
|
||||
private final FlowNodeMapper flowNodeMapper;
|
||||
private final FlowTaskMapper flowTaskMapper;
|
||||
private final UserService userService;
|
||||
private final TaskService taskService;
|
||||
private final NodeService nodeService;
|
||||
|
||||
/**
|
||||
* 获取工作流用户service
|
||||
*/
|
||||
public static UserService getFlowUserService() {
|
||||
return USER_SERVICE;
|
||||
@Override
|
||||
public UserService getFlowUserService() {
|
||||
return userService;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -61,15 +75,17 @@ public class WorkflowUtils {
|
||||
* @param taskId 任务ID
|
||||
* @return 用户
|
||||
*/
|
||||
public static Set<User> buildUser(List<User> userList, Long taskId) {
|
||||
@Override
|
||||
public Set<User> buildUser(List<User> userList, Long taskId) {
|
||||
if (CollUtil.isEmpty(userList)) {
|
||||
return Set.of();
|
||||
}
|
||||
Set<User> list = new HashSet<>();
|
||||
Set<String> processedBySet = new HashSet<>();
|
||||
IFlwTaskAssigneeService taskAssigneeService = SpringUtils.getBean(IFlwTaskAssigneeService.class);
|
||||
for (User user : userList) {
|
||||
// 根据 processedBy 前缀判断处理人类型,分别获取用户列表
|
||||
List<UserDTO> users = TASK_ASSIGNEE_SERVICE.fetchUsersByStorageId(user.getProcessedBy());
|
||||
List<UserDTO> users = taskAssigneeService.fetchUsersByStorageId(user.getProcessedBy());
|
||||
// 转换为 FlowUser 并添加到结果集合
|
||||
if (CollUtil.isNotEmpty(users)) {
|
||||
users.forEach(dto -> {
|
||||
@ -95,7 +111,8 @@ public class WorkflowUtils {
|
||||
* @param taskId 任务ID
|
||||
* @return 用户
|
||||
*/
|
||||
public static Set<User> buildFlowUser(List<String> userIdList, Long taskId) {
|
||||
@Override
|
||||
public Set<User> buildFlowUser(List<String> userIdList, Long taskId) {
|
||||
if (CollUtil.isEmpty(userIdList)) {
|
||||
return Set.of();
|
||||
}
|
||||
@ -114,6 +131,52 @@ public class WorkflowUtils {
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送消息
|
||||
*
|
||||
* @param flowName 流程定义名称
|
||||
* @param messageType 消息类型
|
||||
* @param message 消息内容,为空则发送默认配置的消息内容
|
||||
*/
|
||||
@Override
|
||||
public void sendMessage(String flowName, Long instId, List<String> messageType, String message) {
|
||||
IFlwTaskService flwTaskService = SpringUtils.getBean(IFlwTaskService.class);
|
||||
List<UserDTO> userList = new ArrayList<>();
|
||||
List<FlowTask> list = flwTaskService.selectByInstId(instId);
|
||||
if (StringUtils.isBlank(message)) {
|
||||
message = "有新的【" + flowName + "】单据已经提交至您,请您及时处理。";
|
||||
}
|
||||
for (Task task : list) {
|
||||
List<UserDTO> users = flwTaskService.currentTaskAllUser(task.getId());
|
||||
if (CollUtil.isNotEmpty(users)) {
|
||||
userList.addAll(users);
|
||||
}
|
||||
}
|
||||
if (CollUtil.isNotEmpty(userList)) {
|
||||
for (String code : messageType) {
|
||||
MessageTypeEnum messageTypeEnum = MessageTypeEnum.getByCode(code);
|
||||
if (ObjectUtil.isNotEmpty(messageTypeEnum)) {
|
||||
switch (messageTypeEnum) {
|
||||
case SYSTEM_MESSAGE:
|
||||
SseMessageDto dto = new SseMessageDto();
|
||||
dto.setUserIds(StreamUtils.toList(userList, UserDTO::getUserId).stream().distinct().collect(Collectors.toList()));
|
||||
dto.setMessage(message);
|
||||
SseMessageUtils.publishMessage(dto);
|
||||
break;
|
||||
case EMAIL_MESSAGE:
|
||||
MailUtils.sendText(StreamUtils.join(userList, UserDTO::getEmail), "单据审批提醒", message);
|
||||
break;
|
||||
case SMS_MESSAGE:
|
||||
//todo 短信发送
|
||||
break;
|
||||
default:
|
||||
throw new IllegalStateException("Unexpected value: " + messageTypeEnum);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 驳回
|
||||
*
|
||||
@ -123,8 +186,10 @@ public class WorkflowUtils {
|
||||
* @param flowStatus 流程状态
|
||||
* @param flowHisStatus 节点操作状态
|
||||
*/
|
||||
public static void backTask(String message, Long instanceId, String targetNodeCode, String flowStatus, String flowHisStatus) {
|
||||
List<FlowTask> list = FLW_TASK_SERVICE.selectByInstId(instanceId);
|
||||
@Override
|
||||
public void backTask(String message, Long instanceId, String targetNodeCode, String flowStatus, String flowHisStatus) {
|
||||
IFlwTaskService flwTaskService = SpringUtils.getBean(IFlwTaskService.class);
|
||||
List<FlowTask> list = flwTaskService.selectByInstId(instanceId);
|
||||
if (CollUtil.isNotEmpty(list)) {
|
||||
List<FlowTask> tasks = StreamUtils.filter(list, e -> e.getNodeCode().equals(targetNodeCode));
|
||||
if (list.size() == tasks.size()) {
|
||||
@ -132,7 +197,7 @@ public class WorkflowUtils {
|
||||
}
|
||||
}
|
||||
for (FlowTask task : list) {
|
||||
List<UserDTO> userList = FLW_TASK_SERVICE.currentTaskAllUser(task.getId());
|
||||
List<UserDTO> userList = flwTaskService.currentTaskAllUser(task.getId());
|
||||
FlowParams flowParams = FlowParams.build();
|
||||
flowParams.nodeCode(targetNodeCode);
|
||||
flowParams.message(message);
|
||||
@ -143,7 +208,7 @@ public class WorkflowUtils {
|
||||
if (CollUtil.isNotEmpty(userList)) {
|
||||
flowParams.handler(userList.get(0).getUserId().toString());
|
||||
}
|
||||
TASK_SERVICE.skip(task.getId(), flowParams);
|
||||
taskService.skip(task.getId(), flowParams);
|
||||
}
|
||||
//解决会签多人审批问题
|
||||
backTask(message, instanceId, targetNodeCode, flowStatus, flowHisStatus);
|
||||
@ -155,13 +220,14 @@ public class WorkflowUtils {
|
||||
* @param definitionId 流程定义id
|
||||
* @return 申请人节点编码
|
||||
*/
|
||||
public static String applyNodeCode(Long definitionId) {
|
||||
@Override
|
||||
public String applyNodeCode(Long definitionId) {
|
||||
//获取已发布的流程节点
|
||||
List<FlowNode> flowNodes = FLOW_NODE_MAPPER.selectList(new LambdaQueryWrapper<FlowNode>().eq(FlowNode::getDefinitionId, definitionId));
|
||||
List<FlowNode> flowNodes = flowNodeMapper.selectList(new LambdaQueryWrapper<FlowNode>().eq(FlowNode::getDefinitionId, definitionId));
|
||||
AssertUtil.isTrue(CollUtil.isEmpty(flowNodes), ExceptionCons.NOT_PUBLISH_NODE);
|
||||
Node startNode = flowNodes.stream().filter(t -> NodeType.isStart(t.getNodeType())).findFirst().orElse(null);
|
||||
AssertUtil.isNull(startNode, ExceptionCons.LOST_START_NODE);
|
||||
Node nextNode = NODE_SERVICE.getNextNode(definitionId, startNode.getNodeCode(), null, SkipType.PASS.getKey());
|
||||
Node nextNode = nodeService.getNextNode(definitionId, startNode.getNodeCode(), null, SkipType.PASS.getKey());
|
||||
return nextNode.getNodeCode();
|
||||
}
|
||||
|
||||
@ -170,11 +236,12 @@ public class WorkflowUtils {
|
||||
*
|
||||
* @param taskIds 任务id
|
||||
*/
|
||||
public static void deleteRunTask(List<Long> taskIds) {
|
||||
@Override
|
||||
public void deleteRunTask(List<Long> taskIds) {
|
||||
if (CollUtil.isEmpty(taskIds)) {
|
||||
return;
|
||||
}
|
||||
USER_SERVICE.deleteByTaskIds(taskIds);
|
||||
FLOW_TASK_MAPPER.deleteByIds(taskIds);
|
||||
userService.deleteByTaskIds(taskIds);
|
||||
flowTaskMapper.deleteByIds(taskIds);
|
||||
}
|
||||
}
|
@ -33,8 +33,8 @@ import org.dromara.workflow.common.constant.FlowConstant;
|
||||
import org.dromara.workflow.domain.FlowCategory;
|
||||
import org.dromara.workflow.domain.vo.FlowDefinitionVo;
|
||||
import org.dromara.workflow.mapper.FlwCategoryMapper;
|
||||
import org.dromara.workflow.service.IFlwCommonService;
|
||||
import org.dromara.workflow.service.IFlwDefinitionService;
|
||||
import org.dromara.workflow.utils.WorkflowUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
@ -64,6 +64,7 @@ public class FlwDefinitionServiceImpl implements IFlwDefinitionService {
|
||||
private final FlowNodeMapper flowNodeMapper;
|
||||
private final FlowSkipMapper flowSkipMapper;
|
||||
private final FlwCategoryMapper flwCategoryMapper;
|
||||
private final IFlwCommonService flwCommonService;
|
||||
|
||||
/**
|
||||
* 查询流程定义列表
|
||||
@ -125,7 +126,7 @@ public class FlwDefinitionServiceImpl implements IFlwDefinitionService {
|
||||
List<String> errorMsg = new ArrayList<>();
|
||||
if (CollUtil.isNotEmpty(flowNodes)) {
|
||||
for (FlowNode flowNode : flowNodes) {
|
||||
String applyNodeCode = WorkflowUtils.applyNodeCode(id);
|
||||
String applyNodeCode = flwCommonService.applyNodeCode(id);
|
||||
if (StringUtils.isBlank(flowNode.getPermissionFlag()) && !applyNodeCode.equals(flowNode.getNodeCode()) && NodeType.BETWEEN.getKey().equals(flowNode.getNodeType())) {
|
||||
errorMsg.add(flowNode.getNodeName());
|
||||
}
|
||||
|
@ -46,9 +46,9 @@ import org.dromara.workflow.domain.vo.FlowVariableVo;
|
||||
import org.dromara.workflow.handler.FlowProcessEventHandler;
|
||||
import org.dromara.workflow.mapper.FlwCategoryMapper;
|
||||
import org.dromara.workflow.mapper.FlwInstanceMapper;
|
||||
import org.dromara.workflow.service.IFlwCommonService;
|
||||
import org.dromara.workflow.service.IFlwInstanceService;
|
||||
import org.dromara.workflow.service.IFlwTaskService;
|
||||
import org.dromara.workflow.utils.WorkflowUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@ -76,6 +76,7 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
|
||||
private final IFlwTaskService flwTaskService;
|
||||
private final FlwInstanceMapper flwInstanceMapper;
|
||||
private final FlwCategoryMapper flwCategoryMapper;
|
||||
private final IFlwCommonService flwCommonService;
|
||||
|
||||
/**
|
||||
* 分页查询正在运行的流程实例
|
||||
@ -245,15 +246,15 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
|
||||
}
|
||||
String message = bo.getMessage();
|
||||
BusinessStatusEnum.checkCancelStatus(instance.getFlowStatus());
|
||||
String applyNodeCode = WorkflowUtils.applyNodeCode(definition.getId());
|
||||
String applyNodeCode = flwCommonService.applyNodeCode(definition.getId());
|
||||
//撤销
|
||||
WorkflowUtils.backTask(message, instance.getId(), applyNodeCode, BusinessStatusEnum.CANCEL.getStatus(), BusinessStatusEnum.CANCEL.getStatus());
|
||||
flwCommonService.backTask(message, instance.getId(), applyNodeCode, BusinessStatusEnum.CANCEL.getStatus(), BusinessStatusEnum.CANCEL.getStatus());
|
||||
//判断或签节点是否有多个,只保留一个
|
||||
List<Task> currentTaskList = taskService.list(FlowEngine.newTask().setInstanceId(instance.getId()));
|
||||
if (CollUtil.isNotEmpty(currentTaskList)) {
|
||||
if (currentTaskList.size() > 1) {
|
||||
currentTaskList.remove(0);
|
||||
WorkflowUtils.deleteRunTask(StreamUtils.toList(currentTaskList, Task::getId));
|
||||
flwCommonService.deleteRunTask(StreamUtils.toList(currentTaskList, Task::getId));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -22,12 +22,9 @@ import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.core.utils.ValidatorUtils;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import org.dromara.common.mail.utils.MailUtils;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.dromara.common.sse.dto.SseMessageDto;
|
||||
import org.dromara.common.sse.utils.SseMessageUtils;
|
||||
import org.dromara.warm.flow.core.dto.FlowParams;
|
||||
import org.dromara.warm.flow.core.entity.*;
|
||||
import org.dromara.warm.flow.core.enums.NodeType;
|
||||
@ -41,7 +38,6 @@ import org.dromara.warm.flow.orm.mapper.FlowInstanceMapper;
|
||||
import org.dromara.warm.flow.orm.mapper.FlowNodeMapper;
|
||||
import org.dromara.warm.flow.orm.mapper.FlowTaskMapper;
|
||||
import org.dromara.workflow.common.ConditionalOnEnable;
|
||||
import org.dromara.workflow.common.enums.MessageTypeEnum;
|
||||
import org.dromara.workflow.common.enums.TaskAssigneeType;
|
||||
import org.dromara.workflow.common.enums.TaskStatusEnum;
|
||||
import org.dromara.workflow.domain.bo.*;
|
||||
@ -51,9 +47,9 @@ import org.dromara.workflow.handler.FlowProcessEventHandler;
|
||||
import org.dromara.workflow.handler.WorkflowPermissionHandler;
|
||||
import org.dromara.workflow.mapper.FlwCategoryMapper;
|
||||
import org.dromara.workflow.mapper.FlwTaskMapper;
|
||||
import org.dromara.workflow.service.IFlwCommonService;
|
||||
import org.dromara.workflow.service.IFlwTaskAssigneeService;
|
||||
import org.dromara.workflow.service.IFlwTaskService;
|
||||
import org.dromara.workflow.utils.WorkflowUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@ -89,6 +85,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
||||
private final FlwCategoryMapper flwCategoryMapper;
|
||||
private final FlowNodeMapper flowNodeMapper;
|
||||
private final IFlwTaskAssigneeService flwTaskAssigneeService;
|
||||
private final IFlwCommonService flwCommonService;
|
||||
|
||||
/**
|
||||
* 启动任务
|
||||
@ -182,7 +179,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
||||
Instance instance = taskService.skip(taskId, flowParams);
|
||||
this.setHandler(instance, flowTask, flowCopyList);
|
||||
// 消息通知
|
||||
this.sendMessage(definition.getFlowName(), ins.getId(), messageType, notice);
|
||||
flwCommonService.sendMessage(definition.getFlowName(), ins.getId(), messageType, notice);
|
||||
//设置下一环节处理人
|
||||
setNextHandler(ins.getId());
|
||||
return true;
|
||||
@ -205,10 +202,10 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
||||
if (variableMap != null && variableMap.containsKey(task.getNodeCode())) {
|
||||
String userIds = variableMap.get(task.getNodeCode()).toString();
|
||||
// 批量删除现有任务的办理人记录
|
||||
WorkflowUtils.getFlowUserService().deleteByTaskIds(List.of(task.getId()));
|
||||
flwCommonService.getFlowUserService().deleteByTaskIds(List.of(task.getId()));
|
||||
// 批量新增任务办理人记录
|
||||
Set<User> users = WorkflowUtils.buildFlowUser(List.of(userIds.split(StringUtils.SEPARATOR)), task.getId());
|
||||
WorkflowUtils.getFlowUserService().saveBatch(new ArrayList<>(users));
|
||||
Set<User> users = flwCommonService.buildFlowUser(List.of(userIds.split(StringUtils.SEPARATOR)), task.getId());
|
||||
flwCommonService.getFlowUserService().saveBatch(new ArrayList<>(users));
|
||||
variableMap.remove(task.getNodeCode());
|
||||
}
|
||||
}
|
||||
@ -266,7 +263,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
||||
}
|
||||
List<Long> taskIdList = StreamUtils.toList(flowTasks, FlowTask::getId);
|
||||
// 获取与当前任务关联的用户列表
|
||||
List<User> associatedUsers = WorkflowUtils.getFlowUserService().getByAssociateds(taskIdList);
|
||||
List<User> associatedUsers = flwCommonService.getFlowUserService().getByAssociateds(taskIdList);
|
||||
if (CollUtil.isEmpty(associatedUsers)) {
|
||||
return;
|
||||
}
|
||||
@ -275,16 +272,16 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
||||
for (FlowTask flowTask : flowTasks) {
|
||||
List<User> users = StreamUtils.filter(associatedUsers, user -> Objects.equals(user.getAssociated(), flowTask.getId()));
|
||||
if (CollUtil.isNotEmpty(users)) {
|
||||
userList.addAll(WorkflowUtils.buildUser(users, flowTask.getId()));
|
||||
userList.addAll(flwCommonService.buildUser(users, flowTask.getId()));
|
||||
}
|
||||
}
|
||||
// 批量删除现有任务的办理人记录
|
||||
WorkflowUtils.getFlowUserService().deleteByTaskIds(taskIdList);
|
||||
flwCommonService.getFlowUserService().deleteByTaskIds(taskIdList);
|
||||
// 确保要保存的 userList 不为空
|
||||
if (CollUtil.isEmpty(userList)) {
|
||||
return;
|
||||
}
|
||||
WorkflowUtils.getFlowUserService().saveBatch(userList);
|
||||
flwCommonService.getFlowUserService().saveBatch(userList);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -324,7 +321,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
||||
return flowUser;
|
||||
}).collect(Collectors.toList());
|
||||
// 批量保存抄送人员
|
||||
WorkflowUtils.getFlowUserService().saveBatch(userList);
|
||||
flwCommonService.getFlowUserService().saveBatch(userList);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -452,7 +449,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
||||
BusinessStatusEnum.checkBackStatus(inst.getFlowStatus());
|
||||
Long definitionId = task.getDefinitionId();
|
||||
Definition definition = defService.getById(definitionId);
|
||||
String applyNodeCode = WorkflowUtils.applyNodeCode(definitionId);
|
||||
String applyNodeCode = flwCommonService.applyNodeCode(definitionId);
|
||||
FlowParams flowParams = FlowParams.build();
|
||||
flowParams.nodeCode(bo.getNodeCode());
|
||||
flowParams.message(message);
|
||||
@ -465,7 +462,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
||||
Instance instance = insService.getById(inst.getId());
|
||||
this.setHandler(instance, task, null);
|
||||
// 消息通知
|
||||
this.sendMessage(definition.getFlowName(), instance.getId(), messageType, notice);
|
||||
flwCommonService.sendMessage(definition.getFlowName(), instance.getId(), messageType, notice);
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage(), e);
|
||||
@ -565,7 +562,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
||||
}
|
||||
flowTaskVo.setButtonList(flowTaskVo.getButtonList(flowNode.getExt()));
|
||||
flowTaskVo.setNodeRatio(flowNode.getNodeRatio());
|
||||
flowTaskVo.setApplyNode(flowNode.getNodeCode().equals(WorkflowUtils.applyNodeCode(task.getDefinitionId())));
|
||||
flowTaskVo.setApplyNode(flowNode.getNodeCode().equals(flwCommonService.applyNodeCode(task.getDefinitionId())));
|
||||
return flowTaskVo;
|
||||
}
|
||||
|
||||
@ -737,7 +734,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
||||
List<FlowTask> flowTasks = this.selectByIdList(taskIdList);
|
||||
// 批量删除现有任务的办理人记录
|
||||
if (CollUtil.isNotEmpty(flowTasks)) {
|
||||
WorkflowUtils.getFlowUserService().deleteByTaskIds(StreamUtils.toList(flowTasks, FlowTask::getId));
|
||||
flwCommonService.getFlowUserService().deleteByTaskIds(StreamUtils.toList(flowTasks, FlowTask::getId));
|
||||
List<User> userList = flowTasks.stream()
|
||||
.map(flowTask -> {
|
||||
FlowUser flowUser = new FlowUser();
|
||||
@ -748,7 +745,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
if (CollUtil.isNotEmpty(userList)) {
|
||||
WorkflowUtils.getFlowUserService().saveBatch(userList);
|
||||
flwCommonService.getFlowUserService().saveBatch(userList);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
@ -767,7 +764,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
||||
public Map<Long, List<UserDTO>> currentTaskAllUser(List<Long> taskIdList) {
|
||||
Map<Long, List<UserDTO>> map = new HashMap<>();
|
||||
// 获取与当前任务关联的用户列表
|
||||
List<User> associatedUsers = WorkflowUtils.getFlowUserService().getByAssociateds(taskIdList);
|
||||
List<User> associatedUsers = flwCommonService.getFlowUserService().getByAssociateds(taskIdList);
|
||||
Map<Long, List<User>> listMap = StreamUtils.groupByKey(associatedUsers, User::getAssociated);
|
||||
for (Map.Entry<Long, List<User>> entry : listMap.entrySet()) {
|
||||
List<User> value = entry.getValue();
|
||||
@ -787,7 +784,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
||||
@Override
|
||||
public List<UserDTO> currentTaskAllUser(Long taskId) {
|
||||
// 获取与当前任务关联的用户列表
|
||||
List<User> userList = WorkflowUtils.getFlowUserService().getByAssociateds(Collections.singletonList(taskId));
|
||||
List<User> userList = flwCommonService.getFlowUserService().getByAssociateds(Collections.singletonList(taskId));
|
||||
if (CollUtil.isEmpty(userList)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
@ -807,48 +804,4 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
||||
.eq(FlowNode::getDefinitionId, definitionId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送消息
|
||||
*
|
||||
* @param flowName 流程定义名称
|
||||
* @param messageType 消息类型
|
||||
* @param message 消息内容,为空则发送默认配置的消息内容
|
||||
*/
|
||||
public void sendMessage(String flowName, Long instId, List<String> messageType, String message) {
|
||||
List<UserDTO> userList = new ArrayList<>();
|
||||
List<FlowTask> list = this.selectByInstId(instId);
|
||||
if (StringUtils.isBlank(message)) {
|
||||
message = "有新的【" + flowName + "】单据已经提交至您,请您及时处理。";
|
||||
}
|
||||
for (Task task : list) {
|
||||
List<UserDTO> users = this.currentTaskAllUser(task.getId());
|
||||
if (CollUtil.isNotEmpty(users)) {
|
||||
userList.addAll(users);
|
||||
}
|
||||
}
|
||||
if (CollUtil.isNotEmpty(userList)) {
|
||||
for (String code : messageType) {
|
||||
MessageTypeEnum messageTypeEnum = MessageTypeEnum.getByCode(code);
|
||||
if (ObjectUtil.isNotEmpty(messageTypeEnum)) {
|
||||
switch (messageTypeEnum) {
|
||||
case SYSTEM_MESSAGE:
|
||||
SseMessageDto dto = new SseMessageDto();
|
||||
dto.setUserIds(StreamUtils.toList(userList, UserDTO::getUserId).stream().distinct().collect(Collectors.toList()));
|
||||
dto.setMessage(message);
|
||||
SseMessageUtils.publishMessage(dto);
|
||||
break;
|
||||
case EMAIL_MESSAGE:
|
||||
MailUtils.sendText(StreamUtils.join(userList, UserDTO::getEmail), "单据审批提醒", message);
|
||||
break;
|
||||
case SMS_MESSAGE:
|
||||
//todo 短信发送
|
||||
break;
|
||||
default:
|
||||
throw new IllegalStateException("Unexpected value: " + messageTypeEnum);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user