From 63d3e5d01524bf04af87879b21ae88265220ec14 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Mon, 29 Nov 2021 17:48:41 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=95=B0=E6=8D=AE=E9=9B=86):=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=90=8C=E6=AD=A5=E4=BB=BB=E5=8A=A1=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E8=BF=87=E6=BB=A4=E6=8E=89=E7=A9=BA=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../request/authModel/VAuthModelRequest.java | 3 + .../dataease/dto/authModel/VAuthModelDTO.java | 1 + .../service/authModel/VAuthModelService.java | 86 ++++++++++++++++++- .../src/views/chart/view/TableSelector.vue | 9 +- .../common/DatasetGroupSelectorTree.vue | 9 +- .../src/views/system/task/DatasetTaskList.vue | 2 +- 6 files changed, 103 insertions(+), 7 deletions(-) diff --git a/backend/src/main/java/io/dataease/controller/request/authModel/VAuthModelRequest.java b/backend/src/main/java/io/dataease/controller/request/authModel/VAuthModelRequest.java index 618409b9f5..8210c83aa4 100644 --- a/backend/src/main/java/io/dataease/controller/request/authModel/VAuthModelRequest.java +++ b/backend/src/main/java/io/dataease/controller/request/authModel/VAuthModelRequest.java @@ -12,5 +12,8 @@ import lombok.Data; public class VAuthModelRequest extends VAuthModelDTO { private String userId; + private String privileges; + private Integer datasetMode; + private boolean clearEmptyDir; } diff --git a/backend/src/main/java/io/dataease/dto/authModel/VAuthModelDTO.java b/backend/src/main/java/io/dataease/dto/authModel/VAuthModelDTO.java index 6fbb6fe4a3..a3ce5a3978 100644 --- a/backend/src/main/java/io/dataease/dto/authModel/VAuthModelDTO.java +++ b/backend/src/main/java/io/dataease/dto/authModel/VAuthModelDTO.java @@ -17,4 +17,5 @@ public class VAuthModelDTO extends VAuthModelWithBLOBs implements ITreeBase children; + private long allLeafs = 0l; } diff --git a/backend/src/main/java/io/dataease/service/authModel/VAuthModelService.java b/backend/src/main/java/io/dataease/service/authModel/VAuthModelService.java index 7224451b34..a7f0a68272 100644 --- a/backend/src/main/java/io/dataease/service/authModel/VAuthModelService.java +++ b/backend/src/main/java/io/dataease/service/authModel/VAuthModelService.java @@ -5,10 +5,13 @@ import io.dataease.commons.utils.AuthUtils; import io.dataease.commons.utils.TreeUtils; import io.dataease.controller.request.authModel.VAuthModelRequest; import io.dataease.dto.authModel.VAuthModelDTO; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.Iterator; import java.util.List; +import java.util.stream.Collectors; /** * Author: wangjiahao @@ -21,9 +24,88 @@ public class VAuthModelService { @Resource private ExtVAuthModelMapper extVAuthModelMapper; - public List queryAuthModel(VAuthModelRequest request){ + public List queryAuthModel(VAuthModelRequest request) { request.setUserId(String.valueOf(AuthUtils.getUser().getUserId())); List result = extVAuthModelMapper.queryAuthModel(request); - return TreeUtils.mergeTree(result ); + result = filterData(request, result); + List vAuthModelDTOS = TreeUtils.mergeTree(result); + if (request.isClearEmptyDir()) { + setAllLeafs(vAuthModelDTOS); + removeEmptyDir(vAuthModelDTOS); + } + return vAuthModelDTOS; + } + + private List filterData(VAuthModelRequest request, List result){ + if (request.getDatasetMode() != null && request.getDatasetMode() == 1) { + result = result.stream().filter(vAuthModelDTO -> { + if (vAuthModelDTO.getNodeType().equalsIgnoreCase("spine") || (vAuthModelDTO.getNodeType().equalsIgnoreCase("leaf") && vAuthModelDTO.getMode().equals(1L)) && !vAuthModelDTO.getModelInnerType().equalsIgnoreCase("excel") && !vAuthModelDTO.getModelInnerType().equalsIgnoreCase("custom")) { + return true; + } else { + return false; + } + }).collect(Collectors.toList()); + } + if (request.getPrivileges() != null) { + result = result.stream().filter(vAuthModelDTO -> { + if (vAuthModelDTO.getNodeType().equalsIgnoreCase("spine") || (vAuthModelDTO.getNodeType().equalsIgnoreCase("leaf") && vAuthModelDTO.getPrivileges() != null && vAuthModelDTO.getPrivileges().contains(request.getPrivileges()))) { + return true; + } else { + return false; + } + }).collect(Collectors.toList()); + } + return result; + } + + private void removeEmptyDir(List result) { + if (CollectionUtils.isEmpty(result)) { + return; + } + Iterator iterator = result.listIterator(); + while (iterator.hasNext()) { + VAuthModelDTO tmp = (VAuthModelDTO) iterator.next(); + if (tmp.getNodeType().equalsIgnoreCase("spine") && tmp.getAllLeafs() == 0) { + iterator.remove(); + } else { + removeEmptyDir(tmp.getChildren()); + } + } + } + + private void setAllLeafs(List result) { + for (VAuthModelDTO vAuthModelDTO : result) { + if (CollectionUtils.isEmpty(vAuthModelDTO.getChildren())) { + vAuthModelDTO.setAllLeafs(0); + continue; + } + long leafs = 0l; + for (VAuthModelDTO child : vAuthModelDTO.getChildren()) { + if (child.getNodeType().equalsIgnoreCase("leaf")) { + leafs = leafs + 1; + } else { + leafs = +leafs + getLeafs(child); + } + } + vAuthModelDTO.setAllLeafs(leafs); + } + } + + private long getLeafs(VAuthModelDTO child) { + long leafs = 0l; + if (CollectionUtils.isEmpty(child.getChildren())) { + child.setAllLeafs(0); + return leafs; + } + for (VAuthModelDTO childChild : child.getChildren()) { + if (childChild.getNodeType().equalsIgnoreCase("leaf")) { + leafs = leafs + 1; + } else { + leafs = +leafs + getLeafs(childChild); + } + } + child.setAllLeafs(leafs); + return leafs; } } + diff --git a/frontend/src/views/chart/view/TableSelector.vue b/frontend/src/views/chart/view/TableSelector.vue index 0741875729..ebfdc2a107 100644 --- a/frontend/src/views/chart/view/TableSelector.vue +++ b/frontend/src/views/chart/view/TableSelector.vue @@ -1,7 +1,7 @@