From 8faa8f2cb04ff48fc5e71fcaad29e8119473ee0e Mon Sep 17 00:00:00 2001 From: zhansihu Date: Mon, 11 Sep 2023 17:26:35 +0800 Subject: [PATCH] =?UTF-8?q?refactor(=E6=9D=83=E9=99=90=E7=82=B9):=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=94=AF=E6=8C=81workspace=E6=9F=A5=E8=AF=A2=EF=BC=9B?= =?UTF-8?q?=E6=9E=84=E5=BB=BA=E9=A1=B6=E5=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PermissionPointTreeQueryReq.java | 3 + .../impl/PermissionPointServiceImpl.java | 61 +++++++++++++++++-- .../permission/PermissionPointTest.java | 6 +- 3 files changed, 64 insertions(+), 6 deletions(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java index fb93b1ae..978a9d01 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/permission/PermissionPointTreeQueryReq.java @@ -28,4 +28,7 @@ public class PermissionPointTreeQueryReq { /** 权限点ID列表 **/ private List ids; + + /** 权限点terminal对应workspaceType **/ + private List workspaceType; } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java index 8e45a05a..dd5b2615 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/PermissionPointServiceImpl.java @@ -4,14 +4,21 @@ import cn.axzo.basics.common.BeanMapper; import cn.axzo.basics.common.util.TreeUtil; import cn.axzo.framework.domain.web.BizException; import cn.axzo.framework.domain.web.code.BaseCode; +import cn.axzo.tyr.client.model.DictTypeFiledEnum; +import cn.axzo.tyr.client.model.DictWorkSpaceTypeEnum; +import cn.axzo.tyr.client.model.dict.request.BasicDictQueryReq; +import cn.axzo.tyr.client.model.dict.response.BasicDictNodeResp; +import cn.axzo.tyr.client.model.dict.response.BasicDictTreeResp; import cn.axzo.tyr.client.model.enums.FeatureType; import cn.axzo.tyr.client.model.permission.PermissionPointDTO; import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq; import cn.axzo.tyr.client.model.permission.PermissionPointVO; +import cn.axzo.tyr.server.repository.SaasBasicDictDao; import cn.axzo.tyr.server.repository.entity.SaasFeature; import cn.axzo.tyr.server.repository.service.SaasFeatureDao; import cn.axzo.tyr.server.service.PermissionPointService; +import cn.axzo.tyr.server.service.SaasBasicDictService; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -45,10 +52,15 @@ import static cn.axzo.tyr.server.common.constants.PermissionConstant.FEATURE_TOP @RequiredArgsConstructor @Service public class PermissionPointServiceImpl implements PermissionPointService { + private final SaasFeatureDao saasFeatureDao; + private final SaasBasicDictDao saasBasicDictDao; + private final SaasBasicDictService saasBasicDictService; @Override public List listTreeNodes(PermissionPointTreeQueryReq request) { + //条件转换 workspace --> terminal + workspace2Terminal(request); //查询条件构建 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() .in(CollectionUtil.isNotEmpty(request.getTerminalList()), SaasFeature::getTerminal, request.getTerminalList()); @@ -72,22 +84,63 @@ public class PermissionPointServiceImpl implements PermissionPointService { list = null; //for GC //搜索或需要按授权策略过滤 - 有额外的过滤条件 - List result = filterTreeNode(request, treeList); + List nodesResult = filterTreeNode(request, treeList); //指定parent后不需要顶级的工作台 if (request.getParentId() != null) { - return result; + return nodesResult; } - //TODO:@Zhan 依赖系统字典接口封装上级 //按terminal分组 Map> mappingNode = treeList.stream() .collect(Collectors.groupingBy(PermissionPointTreeNode::getTerminal)); - //构建terminal工作台层级 + //构建workspace-terminal工作台层级 + List dictList = saasBasicDictService.getBasicDictNodeTree(DictTypeFiledEnum.TERMINAL).getData(); + //遍历所有workspace和terminal + List result = new ArrayList<>(); + for (BasicDictTreeResp workspace : dictList) { + List terminals = workspace.getChildren(); + PermissionPointTreeNode workspaceNode = null; + for (BasicDictTreeResp terminal : terminals) { + //有对应权限点 则建立上级 + List childrenNodes = mappingNode.get(terminal.getCode()); + if (CollectionUtil.isNotEmpty(childrenNodes)) { + PermissionPointTreeNode terminalTree = new PermissionPointTreeNode(); + terminalTree.setPermissionName(terminal.getName()); + terminalTree.setCode(terminal.getCode()); + terminalTree.setChildren(childrenNodes); + if (workspaceNode == null) { + List terminalChildren = new ArrayList<>(); + workspaceNode = new PermissionPointTreeNode(); + workspaceNode.setPermissionName(workspace.getName()); + workspaceNode.setChildren(terminalChildren); + } + workspaceNode.getChildren().add(terminalTree); + } + } + if (workspaceNode != null) { + result.add(workspaceNode); + } + } + return result; } + private void workspace2Terminal(PermissionPointTreeQueryReq request) { + if (CollectionUtil.isNotEmpty(request.getWorkspaceType())) { + List terminals = new ArrayList<>(); + BasicDictQueryReq dictReq = new BasicDictQueryReq(); + for (String workSpaceType : request.getWorkspaceType()) { + dictReq.setWorkspaceType(DictWorkSpaceTypeEnum.getByValue(workSpaceType)); + dictReq.setType(DictTypeFiledEnum.TERMINAL); + List dictList = saasBasicDictDao.getBasicDictNodeList(dictReq); + terminals.addAll(dictList.stream().map(BasicDictNodeResp::getCode).collect(Collectors.toList())); + } + request.setTerminalList(terminals); + } + } + private List filterTreeNode(PermissionPointTreeQueryReq request, List treeList) { //过滤条件 boolean needFilter = StrUtil.isNotBlank(request.getKeyword()) diff --git a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java index ace2ed4a..882ff203 100644 --- a/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java +++ b/tyr-server/src/test/java/cn/axzo/tyr/server/permission/PermissionPointTest.java @@ -40,8 +40,10 @@ public class PermissionPointTest { @Test public void testListTreeNode() { PermissionPointTreeQueryReq request = new PermissionPointTreeQueryReq(); - request.setParentId(354L); - request.setKeyword("合同"); + //request.setParentId(354L); + request.setKeyword("预警"); + //request.setWorkspaceType(Arrays.asList("ent")); + request.setTerminalList(Arrays.asList("NT_CMS_WEB_ENT_ZB")); ApiResult> result = controller.listTreeNodes(request); System.out.println("---------------"); System.out.println(JSON.toJSONString(result, SerializerFeature.DisableCircularReferenceDetect));