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())));