mirror of
				https://github.com/dromara/RuoYi-Vue-Plus.git
				synced 2025-11-04 16:23:42 +08:00 
			
		
		
		
	update 优化 将工作流消息发送从工具类迁移到业务内 便于扩展
This commit is contained in:
		@@ -22,9 +22,12 @@ 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;
 | 
			
		||||
@@ -38,6 +41,7 @@ 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.*;
 | 
			
		||||
@@ -178,7 +182,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
 | 
			
		||||
            Instance instance = taskService.skip(taskId, flowParams);
 | 
			
		||||
            this.setHandler(instance, flowTask, flowCopyList);
 | 
			
		||||
            // 消息通知
 | 
			
		||||
            WorkflowUtils.sendMessage(definition.getFlowName(), ins.getId(), messageType, notice);
 | 
			
		||||
            this.sendMessage(definition.getFlowName(), ins.getId(), messageType, notice);
 | 
			
		||||
            //设置下一环节处理人
 | 
			
		||||
            setNextHandler(ins.getId());
 | 
			
		||||
            return true;
 | 
			
		||||
@@ -461,7 +465,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
 | 
			
		||||
            Instance instance = insService.getById(inst.getId());
 | 
			
		||||
            this.setHandler(instance, task, null);
 | 
			
		||||
            // 消息通知
 | 
			
		||||
            WorkflowUtils.sendMessage(definition.getFlowName(), instance.getId(), messageType, notice);
 | 
			
		||||
            this.sendMessage(definition.getFlowName(), instance.getId(), messageType, notice);
 | 
			
		||||
            return true;
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            log.error(e.getMessage(), e);
 | 
			
		||||
@@ -802,4 +806,49 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
 | 
			
		||||
            .eq(FlowNode::getNodeCode, nodeCode)
 | 
			
		||||
            .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);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,21 +1,15 @@
 | 
			
		||||
package org.dromara.workflow.utils;
 | 
			
		||||
 | 
			
		||||
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 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;
 | 
			
		||||
@@ -28,16 +22,13 @@ 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.enums.MessageTypeEnum;
 | 
			
		||||
import org.dromara.workflow.common.enums.TaskAssigneeType;
 | 
			
		||||
import org.dromara.workflow.service.IFlwTaskAssigneeService;
 | 
			
		||||
import org.dromara.workflow.service.IFlwTaskService;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.util.stream.Collectors;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -123,50 +114,6 @@ public class WorkflowUtils {
 | 
			
		||||
        return list;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 发送消息
 | 
			
		||||
     *
 | 
			
		||||
     * @param flowName    流程定义名称
 | 
			
		||||
     * @param messageType 消息类型
 | 
			
		||||
     * @param message     消息内容,为空则发送默认配置的消息内容
 | 
			
		||||
     */
 | 
			
		||||
    public static void sendMessage(String flowName, Long instId, List<String> messageType, String message) {
 | 
			
		||||
        List<UserDTO> userList = new ArrayList<>();
 | 
			
		||||
        List<FlowTask> list = FLW_TASK_SERVICE.selectByInstId(instId);
 | 
			
		||||
        if (StringUtils.isBlank(message)) {
 | 
			
		||||
            message = "有新的【" + flowName + "】单据已经提交至您,请您及时处理。";
 | 
			
		||||
        }
 | 
			
		||||
        for (Task task : list) {
 | 
			
		||||
            List<UserDTO> users = FLW_TASK_SERVICE.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);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 驳回
 | 
			
		||||
     *
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user