mirror of
				https://github.com/dromara/RuoYi-Vue-Plus.git
				synced 2025-11-04 08:13:44 +08:00 
			
		
		
		
	update 添加 FlowCopyVo 类,优化抄送对象处理逻辑
This commit is contained in:
		@@ -0,0 +1,36 @@
 | 
			
		||||
package org.dromara.workflow.domain.vo;
 | 
			
		||||
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import org.dromara.common.translation.annotation.Translation;
 | 
			
		||||
import org.dromara.common.translation.constant.TransConstant;
 | 
			
		||||
 | 
			
		||||
import java.io.Serial;
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 抄送对象
 | 
			
		||||
 *
 | 
			
		||||
 * @author AprilWind
 | 
			
		||||
 */
 | 
			
		||||
@Data
 | 
			
		||||
public class FlowCopyVo implements Serializable {
 | 
			
		||||
 | 
			
		||||
    @Serial
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户id
 | 
			
		||||
     */
 | 
			
		||||
    private Long userId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户名称
 | 
			
		||||
     */
 | 
			
		||||
    @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "userId")
 | 
			
		||||
    private String userName;
 | 
			
		||||
 | 
			
		||||
    public FlowCopyVo(Long userId) {
 | 
			
		||||
        this.userId = userId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -192,7 +192,7 @@ public class FlowTaskVo implements Serializable {
 | 
			
		||||
     * <p>
 | 
			
		||||
     * 根据扩展属性中 CopySettingEnum 类型的数据生成,存储需要抄送的对象 ID
 | 
			
		||||
     */
 | 
			
		||||
    private List<FlowCopyBo> copyList;
 | 
			
		||||
    private List<FlowCopyVo> copyList;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 自定义参数 Map
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,6 @@ import java.io.Serial;
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Node 扩展属性解析结果 VO
 | 
			
		||||
@@ -29,11 +28,11 @@ public class NodeExtVo implements Serializable {
 | 
			
		||||
    private List<ButtonPermissionVo> buttonPermissions;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 抄送对象 ID 集合
 | 
			
		||||
     * 抄送对象
 | 
			
		||||
     * <p>
 | 
			
		||||
     * 根据扩展属性中 CopySettingEnum 类型的数据生成,存储需要抄送的对象 ID
 | 
			
		||||
     */
 | 
			
		||||
    private Set<String> copySettings;
 | 
			
		||||
    private List<FlowCopyVo> flowCopyList;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 自定义参数 Map
 | 
			
		||||
 
 | 
			
		||||
@@ -1,15 +1,12 @@
 | 
			
		||||
package org.dromara.workflow.listener;
 | 
			
		||||
 | 
			
		||||
import cn.hutool.core.collection.CollUtil;
 | 
			
		||||
import cn.hutool.core.convert.Convert;
 | 
			
		||||
import cn.hutool.core.lang.TypeReference;
 | 
			
		||||
import cn.hutool.core.map.MapUtil;
 | 
			
		||||
import cn.hutool.core.util.ObjectUtil;
 | 
			
		||||
import lombok.RequiredArgsConstructor;
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
import org.dromara.common.core.enums.BusinessStatusEnum;
 | 
			
		||||
import org.dromara.common.core.service.UserService;
 | 
			
		||||
import org.dromara.common.core.utils.StreamUtils;
 | 
			
		||||
import org.dromara.common.core.utils.StringUtils;
 | 
			
		||||
import org.dromara.warm.flow.core.dto.FlowParams;
 | 
			
		||||
import org.dromara.warm.flow.core.entity.Definition;
 | 
			
		||||
@@ -33,7 +30,6 @@ import org.springframework.stereotype.Component;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 全局任务办理监听
 | 
			
		||||
@@ -51,7 +47,6 @@ public class WorkflowGlobalListener implements GlobalListener {
 | 
			
		||||
    private final FlowProcessEventHandler flowProcessEventHandler;
 | 
			
		||||
    private final IFlwCommonService flwCommonService;
 | 
			
		||||
    private final IFlwNodeExtService nodeExtService;
 | 
			
		||||
    private final UserService userService;
 | 
			
		||||
    private final InsService insService;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -75,16 +70,9 @@ public class WorkflowGlobalListener implements GlobalListener {
 | 
			
		||||
        if (StringUtils.isNotBlank(ext)) {
 | 
			
		||||
            NodeExtVo nodeExt = nodeExtService.parseNodeExt(ext);
 | 
			
		||||
            Map<String, Object> variable = listenerVariable.getVariable();
 | 
			
		||||
            Set<String> copyList = nodeExt.getCopySettings();
 | 
			
		||||
            if (CollUtil.isNotEmpty(copyList)) {
 | 
			
		||||
                List<FlowCopyBo> list = StreamUtils.toList(copyList, x -> {
 | 
			
		||||
                    FlowCopyBo bo = new FlowCopyBo();
 | 
			
		||||
                    Long id = Convert.toLong(x);
 | 
			
		||||
                    bo.setUserId(id);
 | 
			
		||||
                    bo.setUserName(userService.selectUserNameById(id));
 | 
			
		||||
                    return bo;
 | 
			
		||||
                });
 | 
			
		||||
                variable.put(FlowConstant.FLOW_COPY_LIST, list);
 | 
			
		||||
 | 
			
		||||
            if (CollUtil.isNotEmpty(nodeExt.getFlowCopyList())) {
 | 
			
		||||
                variable.put(FlowConstant.FLOW_COPY_LIST, nodeExt.getFlowCopyList());
 | 
			
		||||
            }
 | 
			
		||||
            if (CollUtil.isNotEmpty(nodeExt.getVariables())) {
 | 
			
		||||
                variable.putAll(nodeExt.getVariables());
 | 
			
		||||
@@ -181,12 +169,14 @@ public class WorkflowGlobalListener implements GlobalListener {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (variable.containsKey(FlowConstant.FLOW_COPY_LIST)) {
 | 
			
		||||
            List<FlowCopyBo> flowCopyList = MapUtil.get(variable, FlowConstant.FLOW_COPY_LIST, new TypeReference<>() {});
 | 
			
		||||
            List<FlowCopyBo> flowCopyList = MapUtil.get(variable, FlowConstant.FLOW_COPY_LIST, new TypeReference<>() {
 | 
			
		||||
            });
 | 
			
		||||
            // 添加抄送人
 | 
			
		||||
            flwTaskService.setCopy(task, flowCopyList);
 | 
			
		||||
        }
 | 
			
		||||
        if (variable.containsKey(FlowConstant.MESSAGE_TYPE)) {
 | 
			
		||||
            List<String> messageType = MapUtil.get(variable, FlowConstant.MESSAGE_TYPE, new TypeReference<>() {});
 | 
			
		||||
            List<String> messageType = MapUtil.get(variable, FlowConstant.MESSAGE_TYPE, new TypeReference<>() {
 | 
			
		||||
            });
 | 
			
		||||
            String notice = MapUtil.getStr(variable, FlowConstant.MESSAGE_NOTICE);
 | 
			
		||||
            // 消息通知
 | 
			
		||||
            if (CollUtil.isNotEmpty(messageType)) {
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,7 @@ import lombok.RequiredArgsConstructor;
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
import org.dromara.common.core.domain.dto.DictTypeDTO;
 | 
			
		||||
import org.dromara.common.core.service.DictService;
 | 
			
		||||
import org.dromara.common.core.utils.StreamUtils;
 | 
			
		||||
import org.dromara.common.core.utils.StringUtils;
 | 
			
		||||
import org.dromara.common.json.utils.JsonUtils;
 | 
			
		||||
import org.dromara.warm.flow.ui.service.NodeExtService;
 | 
			
		||||
@@ -17,6 +18,7 @@ import org.dromara.workflow.common.enums.CopySettingEnum;
 | 
			
		||||
import org.dromara.workflow.common.enums.NodeExtEnum;
 | 
			
		||||
import org.dromara.workflow.common.enums.VariablesEnum;
 | 
			
		||||
import org.dromara.workflow.domain.vo.ButtonPermissionVo;
 | 
			
		||||
import org.dromara.workflow.domain.vo.FlowCopyVo;
 | 
			
		||||
import org.dromara.workflow.domain.vo.NodeExtVo;
 | 
			
		||||
import org.dromara.workflow.service.IFlwNodeExtService;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
@@ -235,8 +237,9 @@ public class FlwNodeExtServiceImpl implements NodeExtService, IFlwNodeExtService
 | 
			
		||||
 | 
			
		||||
            } else if (CopySettingEnum.class.getSimpleName().equals(code)) {
 | 
			
		||||
                // 解析抄送对象 ID 集合
 | 
			
		||||
                nodeExtVo.setCopySettings(StringUtils.str2Set(value, StringUtils.SEPARATOR));
 | 
			
		||||
 | 
			
		||||
                Set<String> userIds = StringUtils.str2Set(value, StringUtils.SEPARATOR);
 | 
			
		||||
                List<FlowCopyVo> copySettings = StreamUtils.toList(userIds, x -> new FlowCopyVo(Convert.toLong(x)));
 | 
			
		||||
                nodeExtVo.setFlowCopyList(copySettings);
 | 
			
		||||
            } else if (VariablesEnum.class.getSimpleName().equals(code)) {
 | 
			
		||||
                // 解析自定义参数
 | 
			
		||||
                // 将 key=value 字符串拆分为 Map
 | 
			
		||||
 
 | 
			
		||||
@@ -46,6 +46,7 @@ import org.dromara.workflow.common.enums.TaskAssigneeType;
 | 
			
		||||
import org.dromara.workflow.common.enums.TaskStatusEnum;
 | 
			
		||||
import org.dromara.workflow.domain.FlowInstanceBizExt;
 | 
			
		||||
import org.dromara.workflow.domain.bo.*;
 | 
			
		||||
import org.dromara.workflow.domain.vo.FlowCopyVo;
 | 
			
		||||
import org.dromara.workflow.domain.vo.FlowHisTaskVo;
 | 
			
		||||
import org.dromara.workflow.domain.vo.FlowTaskVo;
 | 
			
		||||
import org.dromara.workflow.domain.vo.NodeExtVo;
 | 
			
		||||
@@ -601,18 +602,8 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
 | 
			
		||||
        NodeExtVo nodeExtVo = flwNodeExtService.parseNodeExt(flowNode.getExt());
 | 
			
		||||
        //设置按钮权限
 | 
			
		||||
        flowTaskVo.setButtonList(nodeExtVo.getButtonPermissions());
 | 
			
		||||
        if (CollUtil.isNotEmpty(nodeExtVo.getCopySettings())) {
 | 
			
		||||
            List<FlowCopyBo> list = StreamUtils.toList(nodeExtVo.getCopySettings(), x -> {
 | 
			
		||||
                FlowCopyBo bo = new FlowCopyBo();
 | 
			
		||||
                Long id = Convert.toLong(x);
 | 
			
		||||
                bo.setUserId(id);
 | 
			
		||||
                bo.setUserName(userService.selectUserNameById(id));
 | 
			
		||||
                return bo;
 | 
			
		||||
            });
 | 
			
		||||
            flowTaskVo.setCopyList(list);
 | 
			
		||||
        } else {
 | 
			
		||||
            flowTaskVo.setCopyList(new ArrayList<>());
 | 
			
		||||
        }
 | 
			
		||||
        List<FlowCopyVo> flowCopyList = nodeExtVo.getFlowCopyList();
 | 
			
		||||
        flowTaskVo.setCopyList(CollUtil.isEmpty(flowCopyList) ? Collections.emptyList() : flowCopyList);
 | 
			
		||||
        flowTaskVo.setVarList(nodeExtVo.getVariables());
 | 
			
		||||
        flowTaskVo.setNodeRatio(flowNode.getNodeRatio());
 | 
			
		||||
        flowTaskVo.setApplyNode(flowNode.getNodeCode().equals(flwCommonService.applyNodeCode(task.getDefinitionId())));
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user