diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/FlowCopyVo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/FlowCopyVo.java
new file mode 100644
index 000000000..67ef9e2c3
--- /dev/null
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/FlowCopyVo.java
@@ -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;
+ }
+
+}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/FlowTaskVo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/FlowTaskVo.java
index aee4a7f1d..9108655a0 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/FlowTaskVo.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/FlowTaskVo.java
@@ -192,7 +192,7 @@ public class FlowTaskVo implements Serializable {
*
* 根据扩展属性中 CopySettingEnum 类型的数据生成,存储需要抄送的对象 ID
*/
- private List copyList;
+ private List copyList;
/**
* 自定义参数 Map
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/NodeExtVo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/NodeExtVo.java
index 5fb3380b4..f10caac3b 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/NodeExtVo.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/NodeExtVo.java
@@ -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 buttonPermissions;
/**
- * 抄送对象 ID 集合
+ * 抄送对象
*
* 根据扩展属性中 CopySettingEnum 类型的数据生成,存储需要抄送的对象 ID
*/
- private Set copySettings;
+ private List flowCopyList;
/**
* 自定义参数 Map
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java
index 79404b619..09e861ce8 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java
@@ -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 variable = listenerVariable.getVariable();
- Set copyList = nodeExt.getCopySettings();
- if (CollUtil.isNotEmpty(copyList)) {
- List 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 flowCopyList = MapUtil.get(variable, FlowConstant.FLOW_COPY_LIST, new TypeReference<>() {});
+ List flowCopyList = MapUtil.get(variable, FlowConstant.FLOW_COPY_LIST, new TypeReference<>() {
+ });
// 添加抄送人
flwTaskService.setCopy(task, flowCopyList);
}
if (variable.containsKey(FlowConstant.MESSAGE_TYPE)) {
- List messageType = MapUtil.get(variable, FlowConstant.MESSAGE_TYPE, new TypeReference<>() {});
+ List messageType = MapUtil.get(variable, FlowConstant.MESSAGE_TYPE, new TypeReference<>() {
+ });
String notice = MapUtil.getStr(variable, FlowConstant.MESSAGE_NOTICE);
// 消息通知
if (CollUtil.isNotEmpty(messageType)) {
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwNodeExtServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwNodeExtServiceImpl.java
index b5f4c6deb..7b83ca793 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwNodeExtServiceImpl.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwNodeExtServiceImpl.java
@@ -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 userIds = StringUtils.str2Set(value, StringUtils.SEPARATOR);
+ List copySettings = StreamUtils.toList(userIds, x -> new FlowCopyVo(Convert.toLong(x)));
+ nodeExtVo.setFlowCopyList(copySettings);
} else if (VariablesEnum.class.getSimpleName().equals(code)) {
// 解析自定义参数
// 将 key=value 字符串拆分为 Map
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java
index d21b978b6..96a705189 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java
@@ -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 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 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())));