update 优化获取节点扩展属性,简化节点编码

dev
AprilWind 9 months ago
parent 3e4727db17
commit 04bcc0890c

@ -5,7 +5,6 @@ import cn.hutool.core.util.ObjectUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference; import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.system.api.RemoteDictService; import org.dromara.system.api.RemoteDictService;
import org.dromara.system.api.domain.vo.RemoteDictTypeVo; import org.dromara.system.api.domain.vo.RemoteDictTypeVo;
import org.dromara.warm.flow.ui.service.NodeExtService; import org.dromara.warm.flow.ui.service.NodeExtService;
@ -38,11 +37,6 @@ public class FlwNodeExtServiceImpl implements NodeExtService {
*/ */
private static final String PERMISSION_TAB_NAME = "权限"; private static final String PERMISSION_TAB_NAME = "权限";
/**
*
*/
private static final String ENUM_TYPE_PREFIX = "enum:";
/** /**
* *
*/ */
@ -59,7 +53,7 @@ public class FlwNodeExtServiceImpl implements NodeExtService {
private static final Map<String, Map<String, Object>> CHILD_NODE_MAP = new HashMap<>(); private static final Map<String, Map<String, Object>> CHILD_NODE_MAP = new HashMap<>();
static { static {
CHILD_NODE_MAP.put(ButtonPermissionEnum.class.getName(), CHILD_NODE_MAP.put(ButtonPermissionEnum.class.getSimpleName(),
Map.of("label", "权限按钮", "type", 4, "must", false, "multiple", true)); Map.of("label", "权限按钮", "type", 4, "must", false, "multiple", true));
} }
@ -69,33 +63,41 @@ public class FlwNodeExtServiceImpl implements NodeExtService {
/** /**
* *
* *
* @return * @return
*/ */
@Override @Override
public List<NodeExt> getNodeExt() { public List<NodeExt> getNodeExt() {
List<NodeExt> nodeExtList = new ArrayList<>(); List<NodeExt> nodeExtList = new ArrayList<>();
// 构建按钮权限页面 // 构建按钮权限页面
nodeExtList.add(buildNodeExt(PERMISSION_TAB, PERMISSION_TAB_NAME, TYPE_NEW_TAB, nodeExtList.add(buildNodeExt(PERMISSION_TAB, PERMISSION_TAB_NAME, TYPE_NEW_TAB,
ENUM_TYPE_PREFIX + ButtonPermissionEnum.class.getName())); List.of(ButtonPermissionEnum.class)));
return nodeExtList; return nodeExtList;
} }
/** /**
* NodeExt * `NodeExt`
* *
* @param code json * @param code
* @param name type * @param name
* @param type 12 * @param type 1: 2:
* @param sourceTypes / * @param sources
* @return NodeExt * @return `NodeExt`
*/ */
private NodeExt buildNodeExt(String code, String name, int type, String sourceTypes) { @SuppressWarnings("unchecked cast")
private NodeExt buildNodeExt(String code, String name, int type, List<Object> sources) {
NodeExt nodeExt = new NodeExt(); NodeExt nodeExt = new NodeExt();
nodeExt.setCode(code); nodeExt.setCode(code);
nodeExt.setType(type); nodeExt.setType(type);
nodeExt.setName(name); nodeExt.setName(name);
nodeExt.setChilds(StringUtils.splitList(sourceTypes) nodeExt.setChilds(sources.stream()
.stream().map(this::buildChildNode) .map(source -> {
if (source instanceof Class<?> clazz && NodeExtEnum.class.isAssignableFrom(clazz)) {
return buildChildNode((Class<? extends NodeExtEnum>) clazz);
} else if (source instanceof String dictType) {
return buildChildNode(dictType);
}
return null;
})
.filter(ObjectUtil::isNotNull) .filter(ObjectUtil::isNotNull)
.toList() .toList()
); );
@ -103,52 +105,35 @@ public class FlwNodeExtServiceImpl implements NodeExtService {
} }
/** /**
* ChildNode * `ChildNode`
* *
* @param sourceType * @param enumClass `NodeExtEnum`
* @return ChildNode * @return `ChildNode`
*/ */
private NodeExt.ChildNode buildChildNode(String sourceType) { private NodeExt.ChildNode buildChildNode(Class<? extends NodeExtEnum> enumClass) {
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()) { if (!enumClass.isEnum()) {
return null; return null;
} }
NodeExt.ChildNode childNode = buildChildNodeMap(enumClassName); String simpleName = enumClass.getSimpleName();
NodeExt.ChildNode childNode = buildChildNodeMap(simpleName);
// 编码此json中唯 // 编码此json中唯
childNode.setCode(ENUM_TYPE_PREFIX + enumClassName); childNode.setCode(simpleName);
// 字典,下拉框和复选框时用到 // 字典,下拉框和复选框时用到
childNode.setDict(Arrays.stream(enumClass.getEnumConstants()) childNode.setDict(Arrays.stream(enumClass.getEnumConstants())
.filter(NodeExtEnum.class::isInstance)
.map(NodeExtEnum.class::cast) .map(NodeExtEnum.class::cast)
.map(x -> .map(x ->
new NodeExt.DictItem(x.getLabel(), x.getValue(), x.isSelected()) new NodeExt.DictItem(x.getLabel(), x.getValue(), x.isSelected())
).toList()); ).toList());
return childNode; return childNode;
} catch (ClassNotFoundException e) {
log.error("Enum class not found: {}", enumClassName, e);
}
return null;
} }
/** /**
* ChildNode * `ChildNode`
* *
* @param dictType * @param dictType
* @return ChildNode * @return `ChildNode`
*/ */
private NodeExt.ChildNode buildChildNodeFromDict(String dictType) { private NodeExt.ChildNode buildChildNode(String dictType) {
RemoteDictTypeVo dictTypeDTO = remoteDictService.selectDictTypeByType(dictType); RemoteDictTypeVo dictTypeDTO = remoteDictService.selectDictTypeByType(dictType);
if (ObjectUtil.isNull(dictTypeDTO)) { if (ObjectUtil.isNull(dictTypeDTO)) {
return null; return null;

Loading…
Cancel
Save