From e5e8d305d2bc4b86cb797b9d8febfe9c7f87d3e0 Mon Sep 17 00:00:00 2001
From: AprilWind <2100166581@qq.com>
Date: Fri, 29 Aug 2025 09:29:12 +0800
Subject: [PATCH] =?UTF-8?q?update=20=E6=B7=BB=E5=8A=A0=20FlowCopyVo=20?=
=?UTF-8?q?=E7=B1=BB=EF=BC=8C=E4=BC=98=E5=8C=96=E6=8A=84=E9=80=81=E5=AF=B9?=
=?UTF-8?q?=E8=B1=A1=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../workflow/domain/vo/FlowCopyVo.java | 36 +++++++++++++++++++
.../workflow/domain/vo/FlowTaskVo.java | 2 +-
.../dromara/workflow/domain/vo/NodeExtVo.java | 5 ++-
.../listener/WorkflowGlobalListener.java | 24 ++++---------
.../service/impl/FlwNodeExtServiceImpl.java | 7 ++--
.../service/impl/FlwTaskServiceImpl.java | 15 ++------
6 files changed, 54 insertions(+), 35 deletions(-)
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/FlowCopyVo.java
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())));