refactor(权限点):增加支持workspace查询;构建顶层

This commit is contained in:
zhansihu 2023-09-11 17:26:35 +08:00
parent d4d18740e0
commit 8faa8f2cb0
3 changed files with 64 additions and 6 deletions

View File

@ -28,4 +28,7 @@ public class PermissionPointTreeQueryReq {
/** 权限点ID列表 **/
private List<Long> ids;
/** 权限点terminal对应workspaceType **/
private List<String> workspaceType;
}

View File

@ -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<PermissionPointTreeNode> listTreeNodes(PermissionPointTreeQueryReq request) {
//条件转换 workspace --> terminal
workspace2Terminal(request);
//查询条件构建
LambdaQueryWrapper<SaasFeature> queryWrapper = new LambdaQueryWrapper<SaasFeature>()
.in(CollectionUtil.isNotEmpty(request.getTerminalList()), SaasFeature::getTerminal, request.getTerminalList());
@ -72,22 +84,63 @@ public class PermissionPointServiceImpl implements PermissionPointService {
list = null; //for GC
//搜索或需要按授权策略过滤 - 有额外的过滤条件
List<PermissionPointTreeNode> result = filterTreeNode(request, treeList);
List<PermissionPointTreeNode> nodesResult = filterTreeNode(request, treeList);
//指定parent后不需要顶级的工作台
if (request.getParentId() != null) {
return result;
return nodesResult;
}
//TODO:@Zhan 依赖系统字典接口封装上级
//按terminal分组
Map<String, List<PermissionPointTreeNode>> mappingNode = treeList.stream()
.collect(Collectors.groupingBy(PermissionPointTreeNode::getTerminal));
//构建terminal工作台层级
//构建workspace-terminal工作台层级
List<BasicDictTreeResp> dictList = saasBasicDictService.getBasicDictNodeTree(DictTypeFiledEnum.TERMINAL).getData();
//遍历所有workspace和terminal
List<PermissionPointTreeNode> result = new ArrayList<>();
for (BasicDictTreeResp workspace : dictList) {
List<BasicDictTreeResp> terminals = workspace.getChildren();
PermissionPointTreeNode workspaceNode = null;
for (BasicDictTreeResp terminal : terminals) {
//有对应权限点 则建立上级
List<PermissionPointTreeNode> 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<PermissionPointTreeNode> 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<String> terminals = new ArrayList<>();
BasicDictQueryReq dictReq = new BasicDictQueryReq();
for (String workSpaceType : request.getWorkspaceType()) {
dictReq.setWorkspaceType(DictWorkSpaceTypeEnum.getByValue(workSpaceType));
dictReq.setType(DictTypeFiledEnum.TERMINAL);
List<BasicDictNodeResp> dictList = saasBasicDictDao.getBasicDictNodeList(dictReq);
terminals.addAll(dictList.stream().map(BasicDictNodeResp::getCode).collect(Collectors.toList()));
}
request.setTerminalList(terminals);
}
}
private List<PermissionPointTreeNode> filterTreeNode(PermissionPointTreeQueryReq request, List<PermissionPointTreeNode> treeList) {
//过滤条件
boolean needFilter = StrUtil.isNotBlank(request.getKeyword())

View File

@ -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<List<PermissionPointTreeNode>> result = controller.listTreeNodes(request);
System.out.println("---------------");
System.out.println(JSON.toJSONString(result, SerializerFeature.DisableCircularReferenceDetect));