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