From 865627fdad325fe7df687e2173d2df82b9644560 Mon Sep 17 00:00:00 2001 From: AprilWind <2100166581@qq.com> Date: Thu, 13 Mar 2025 16:20:48 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E6=89=A9=E5=B1=95=E5=B1=9E=E6=80=A7,?= =?UTF-8?q?=E7=AE=80=E5=8C=96=E8=8A=82=E7=82=B9=E7=BC=96=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/FlwNodeExtServiceImpl.java | 95 ++++++++----------- 1 file changed, 40 insertions(+), 55 deletions(-) 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 4d8368a85..2dc30607c 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 @@ -6,7 +6,6 @@ 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.StringUtils; import org.dromara.warm.flow.ui.service.NodeExtService; import org.dromara.warm.flow.ui.vo.NodeExt; import org.dromara.workflow.common.ConditionalOnEnable; @@ -37,11 +36,6 @@ public class FlwNodeExtServiceImpl implements NodeExtService { */ private static final String PERMISSION_TAB_NAME = "权限"; - /** - * 枚举类型标识 - */ - private static final String ENUM_TYPE_PREFIX = "enum:"; - /** * 基础设置 */ @@ -58,7 +52,7 @@ public class FlwNodeExtServiceImpl implements NodeExtService { private static final Map> CHILD_NODE_MAP = new HashMap<>(); static { - CHILD_NODE_MAP.put(ButtonPermissionEnum.class.getName(), + CHILD_NODE_MAP.put(ButtonPermissionEnum.class.getSimpleName(), Map.of("label", "权限按钮", "type", 4, "must", false, "multiple", true)); } @@ -67,33 +61,40 @@ public class FlwNodeExtServiceImpl implements NodeExtService { /** * 获取节点扩展属性 * - * @return 结果 + * @return 节点扩展属性列表 */ @Override public List getNodeExt() { List nodeExtList = new ArrayList<>(); // 构建按钮权限页面 nodeExtList.add(buildNodeExt(PERMISSION_TAB, PERMISSION_TAB_NAME, TYPE_NEW_TAB, - ENUM_TYPE_PREFIX + ButtonPermissionEnum.class.getName())); + List.of(ButtonPermissionEnum.class))); return nodeExtList; } /** - * 构建一个 NodeExt 对象 + * 构建一个 `NodeExt` 对象 * - * @param code 编码,此json中唯一 - * @param name 名称,如果type为新页签时,作为页签名称 - * @param type 节点类型,1:基础设置,2:新页签 - * @param sourceTypes 字典/枚举类型来源(逗号分隔) - * @return 返回构建好的 NodeExt 对象 + * @param code 唯一编码 + * @param name 名称(新页签时,作为页签名称) + * @param type 节点类型(1: 基础设置,2: 新页签) + * @param sources 数据来源(枚举类或字典类型) + * @return 构建的 `NodeExt` 对象 */ - private NodeExt buildNodeExt(String code, String name, int type, String sourceTypes) { + private NodeExt buildNodeExt(String code, String name, int type, List sources) { NodeExt nodeExt = new NodeExt(); nodeExt.setCode(code); nodeExt.setType(type); nodeExt.setName(name); - nodeExt.setChilds(StringUtils.splitList(sourceTypes) - .stream().map(this::buildChildNode) + nodeExt.setChilds(sources.stream() + .map(source -> { + if (source instanceof Class clazz && NodeExtEnum.class.isAssignableFrom(clazz)) { + return buildChildNode((Class>) clazz); + } else if (source instanceof String dictType) { + return buildChildNode(dictType); + } + return null; + }) .filter(ObjectUtil::isNotNull) .toList() ); @@ -101,52 +102,36 @@ public class FlwNodeExtServiceImpl implements NodeExtService { } /** - * 构建一个 ChildNode 对象 + * 根据枚举类型构建一个 `ChildNode` 对象 * - * @param sourceType 字典类型 - * @return 返回构建好的 ChildNode 对象 + * @param enumClass 枚举类,必须实现 `NodeExtEnum` 接口 + * @return 构建的 `ChildNode` 对象 */ - private NodeExt.ChildNode buildChildNode(String sourceType) { - return sourceType.startsWith(ENUM_TYPE_PREFIX) ? - buildChildNodeFromEnum(sourceType.substring(ENUM_TYPE_PREFIX.length())) : buildChildNodeFromDict(sourceType); - } - - /** - * 根据枚举构建一个 ChildNode 对象 - * - * @param enumClassName 枚举名称 - * @return 返回构建好的 ChildNode 对象 - */ - private NodeExt.ChildNode buildChildNodeFromEnum(String enumClassName) { - try { - Class enumClass = Class.forName(enumClassName); - if (!enumClass.isEnum()) { - return null; - } - NodeExt.ChildNode childNode = buildChildNodeMap(enumClassName); - // 编码,此json中唯 - childNode.setCode(ENUM_TYPE_PREFIX + enumClassName); - // 字典,下拉框和复选框时用到 - childNode.setDict(Arrays.stream(enumClass.getEnumConstants()) - .filter(NodeExtEnum.class::isInstance) - .map(NodeExtEnum.class::cast) - .map(x -> - new NodeExt.DictItem(x.getLabel(), x.getValue(), x.isSelected()) - ).toList()); - return childNode; - } catch (ClassNotFoundException e) { - log.error("Enum class not found: {}", enumClassName, e); + private NodeExt.ChildNode buildChildNode(Class> enumClass) { + if (!enumClass.isEnum()) { + return null; } - return null; + String simpleName = enumClass.getSimpleName(); + NodeExt.ChildNode childNode = buildChildNodeMap(simpleName); + // 编码,此json中唯 + childNode.setCode(simpleName); + // 字典,下拉框和复选框时用到 + childNode.setDict(Arrays.stream(enumClass.getEnumConstants()) + .filter(NodeExtEnum.class::isInstance) + .map(NodeExtEnum.class::cast) + .map(x -> + new NodeExt.DictItem(x.getLabel(), x.getValue(), x.isSelected()) + ).toList()); + return childNode; } /** - * 根据字典构建一个 ChildNode 对象 + * 根据字典类型构建 `ChildNode` 对象 * * @param dictType 字典类型 - * @return 返回构建好的 ChildNode 对象 + * @return 构建的 `ChildNode` 对象 */ - private NodeExt.ChildNode buildChildNodeFromDict(String dictType) { + private NodeExt.ChildNode buildChildNode(String dictType) { DictTypeDTO dictTypeDTO = dictService.getDictType(dictType); if (ObjectUtil.isNull(dictTypeDTO)) { return null;