From a009656d5f12b111af372472bd401b1b94c62db6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=BC=98=E6=98=8A?= Date: Thu, 19 Oct 2023 17:25:12 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=9A=E8=BF=87=E5=90=8D=E7=A7=B0=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E8=A7=92=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../axzo/tyr/client/feign/TyrSaasRoleApi.java | 3 +- .../model/req/FeaturePermissionReq.java | 14 ++ .../tyr/client/model/req/FeatureTreeReq.java | 10 + .../client/model/req/QueryRoleByNameReq.java | 5 + .../client/model/res/QueryRoleByNameResp.java | 26 +++ .../controller/role/SaasRoleController.java | 3 +- .../server/repository/dao/SaasRoleDao.java | 7 +- .../axzo/tyr/server/service/RoleService.java | 9 +- .../server/service/impl/RoleServiceImpl.java | 34 ++- .../service/impl/SaasFeatureServiceImpl.java | 200 +++--------------- 10 files changed, 121 insertions(+), 190 deletions(-) create mode 100644 tyr-api/src/main/java/cn/axzo/tyr/client/model/res/QueryRoleByNameResp.java diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleApi.java index 591b34ba..ff593e25 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasRoleApi.java @@ -8,6 +8,7 @@ import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; import cn.axzo.tyr.client.model.req.RoleWithUserQueryReq; import cn.axzo.tyr.client.model.res.IsSuperAdminRes; import cn.axzo.tyr.client.model.res.QueryBatchByIdentityIdTypeRes; +import cn.axzo.tyr.client.model.res.QueryRoleByNameResp; import cn.axzo.tyr.client.model.res.RoleWithUserRes; import cn.axzo.tyr.client.model.vo.SaasRoleVO; import cn.axzo.tyr.client.model.vo.SaveOrUpdateRoleVO; @@ -82,7 +83,7 @@ public interface TyrSaasRoleApi { * @return */ @PostMapping("/api/saasRole/findRoleByName") - ApiResult> findRoleByName(@RequestBody @Valid QueryRoleByNameReq req); + ApiResult> findRoleByName(@RequestBody @Valid QueryRoleByNameReq req); /** 分页查询角色含用户 **/ diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/FeaturePermissionReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/FeaturePermissionReq.java index fd143810..84cbccd1 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/FeaturePermissionReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/FeaturePermissionReq.java @@ -1,5 +1,6 @@ package cn.axzo.tyr.client.model.req; +import cn.axzo.tyr.client.common.enums.WorkspaceJoinType; import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; @@ -25,6 +26,19 @@ public class FeaturePermissionReq { @NotNull @Min(value = 1) Long workspaceId; + + /** + * 工作台类型 + */ + @NotNull + private Integer workspaceType; + + /** + * 使用{@link WorkspaceJoinType} + */ + @NotNull + private Integer workspaceJoinType; + /** * 单位id */ diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/FeatureTreeReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/FeatureTreeReq.java index f26a00e0..066e48da 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/FeatureTreeReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/FeatureTreeReq.java @@ -21,6 +21,16 @@ public class FeatureTreeReq { */ private Long workspaceId; + /** + * 工作台类型 + */ + private Integer workspaceType; + + /** + * 单位类型 + */ + private Integer ouTypeCode; + /** * 单位Id */ diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QueryRoleByNameReq.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QueryRoleByNameReq.java index 8fac7a6f..199c5d6f 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QueryRoleByNameReq.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/req/QueryRoleByNameReq.java @@ -18,4 +18,9 @@ public class QueryRoleByNameReq extends BaseWorkspaceAndOuModel { @NotEmpty(message = "角色名字不能为空") private List roleNames; + /** + * 单位类型字典code + */ + private List ouTypeCode; + } \ No newline at end of file diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/QueryRoleByNameResp.java b/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/QueryRoleByNameResp.java new file mode 100644 index 00000000..36379816 --- /dev/null +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/model/res/QueryRoleByNameResp.java @@ -0,0 +1,26 @@ +package cn.axzo.tyr.client.model.res; + +import lombok.Data; + +/** + * @author honghao.zhang + * @since 2023/10/19 11:38 + */ +@Data +public class QueryRoleByNameResp { + + /** + * 角色名字 + */ + private String roleName; + + /** + * 角色Id + */ + private Long roleId; + + /** + * 角色类型:common 普通角色 super_admin超级管理员(禁止删除) admin子管理员(禁止删除) init初始化内置角色 + */ + private String roleType; +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java index 2012bea3..21960164 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/role/SaasRoleController.java @@ -10,6 +10,7 @@ import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; import cn.axzo.tyr.client.model.req.RoleWithUserQueryReq; import cn.axzo.tyr.client.model.res.IsSuperAdminRes; import cn.axzo.tyr.client.model.res.QueryBatchByIdentityIdTypeRes; +import cn.axzo.tyr.client.model.res.QueryRoleByNameResp; import cn.axzo.tyr.client.model.res.RoleWithUserRes; import cn.axzo.tyr.client.model.vo.SaasRoleVO; import cn.axzo.tyr.client.model.vo.SaveOrUpdateRoleVO; @@ -79,7 +80,7 @@ public class SaasRoleController implements TyrSaasRoleApi { } @Override - public ApiResult> findRoleByName(QueryRoleByNameReq req) { + public ApiResult> findRoleByName(QueryRoleByNameReq req) { return ApiResult.ok(roleService.findRoleByName(req)); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleDao.java b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleDao.java index bd044f10..71ea0b48 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleDao.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/repository/dao/SaasRoleDao.java @@ -81,13 +81,14 @@ public class SaasRoleDao extends ServiceImpl { .list(); } - public List findRoleByName(Long ouId, Long workspaceId, + public List findRoleByName(Long ouId, Long workspaceId,List roleIds, List roleNames) { - return this.lambdaQuery() + return this.lambdaQuery().select(SaasRole::getId, SaasRole::getName, SaasRole::getRoleType) .eq(workspaceId != null && workspaceId != 0, SaasRole::getWorkspaceId, workspaceId) .eq(ouId != null && ouId != 0, SaasRole::getOwnerOuId, ouId) + .in(CollectionUtils.isNotEmpty(roleIds), SaasRole::getId, roleIds) .in(CollectionUtils.isNotEmpty(roleNames), SaasRole::getName, roleNames) - .eq(SaasRole::getIsDelete, TableIsDeleteEnum.NORMAL.value).list(); + .list(); } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java index e883805c..af2ad213 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/RoleService.java @@ -2,12 +2,10 @@ package cn.axzo.tyr.server.service; import cn.axzo.framework.domain.page.PageResp; import cn.axzo.tyr.client.model.enums.IdentityType; -import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq; -import cn.axzo.tyr.client.model.req.QueryRoleByNameReq; -import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; -import cn.axzo.tyr.client.model.req.RoleWithUserQueryReq; +import cn.axzo.tyr.client.model.req.*; import cn.axzo.tyr.client.model.res.IsSuperAdminRes; import cn.axzo.tyr.client.model.res.QueryBatchByIdentityIdTypeRes; +import cn.axzo.tyr.client.model.res.QueryRoleByNameResp; import cn.axzo.tyr.client.model.res.RoleWithUserRes; import cn.axzo.tyr.client.model.vo.SaasRoleVO; import cn.axzo.tyr.client.model.vo.SaveOrUpdateRoleVO; @@ -59,7 +57,7 @@ public interface RoleService { * @param req * @return */ - List findRoleByName(QueryRoleByNameReq req); + List findRoleByName(QueryRoleByNameReq req); /** 分页查询角色含用户 **/ PageResp queryRoleWithUser(RoleWithUserQueryReq req); @@ -71,4 +69,5 @@ public interface RoleService { * @return */ List queryRoleByRoleTypes(QueryByIdentityIdTypeReq req, List roleTypes); + } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java index e8d87f49..d32c1f9f 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/RoleServiceImpl.java @@ -9,13 +9,9 @@ import cn.axzo.tyr.client.model.enums.IdentityType; import cn.axzo.tyr.client.model.enums.PermissionGroupType; import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode; import cn.axzo.tyr.client.model.req.*; -import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq; -import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq; -import cn.axzo.tyr.client.model.req.QuerySaasRoleGroupReq; -import cn.axzo.tyr.client.model.req.QuerySaasRoleReq; -import cn.axzo.tyr.client.model.req.RoleWithUserQueryReq; import cn.axzo.tyr.client.model.res.IsSuperAdminRes; import cn.axzo.tyr.client.model.res.QueryBatchByIdentityIdTypeRes; +import cn.axzo.tyr.client.model.res.QueryRoleByNameResp; import cn.axzo.tyr.client.model.res.RoleWithUserRes; import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO; import cn.axzo.tyr.client.model.vo.SaasRoleGroupVO; @@ -508,8 +504,30 @@ public class RoleServiceImpl implements RoleService { } @Override - public List findRoleByName(QueryRoleByNameReq req) { - List roleList = saasRoleDao.findRoleByName(req.getOuId(), req.getWorkspaceId(), req.getRoleNames()); - return BeanUtil.copyToList(roleList, SaasRoleVO.class); + public List findRoleByName(QueryRoleByNameReq req) { + List relationRoleIds = Lists.newArrayList(); + if (CollectionUtils.isNotEmpty(req.getOuTypeCode())) { + List roleGroup = saasRoleGroupDao.query(QuerySaasRoleGroupReq.builder() + .ouTypeCode(req.getOuTypeCode()) + .build()); + if (CollectionUtils.isEmpty(roleGroup)) { + return new ArrayList<>(); + } + List groupRelation = roleGroupRelationDao.lambdaQuery() + .in(SaasRoleGroupRelation::getSaasRoleGroupId, roleGroup.stream().map(BaseEntity::getId).collect(Collectors.toList())) + .list(); + if (CollectionUtils.isEmpty(groupRelation)) { + return new ArrayList<>(); + } + relationRoleIds = groupRelation.stream().map(SaasRoleGroupRelation::getRoleId).collect(Collectors.toList()); + } + List roleList = saasRoleDao.findRoleByName(req.getOuId(), req.getWorkspaceId(), relationRoleIds, req.getRoleNames()); + return roleList.stream().map(item -> { + QueryRoleByNameResp resp = new QueryRoleByNameResp(); + resp.setRoleName(item.getName()); + resp.setRoleId(item.getId()); + resp.setRoleType(item.getRoleType()); + return resp; + }).collect(Collectors.toList()); } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasFeatureServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasFeatureServiceImpl.java index d4f88f1f..991c734d 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasFeatureServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasFeatureServiceImpl.java @@ -1,36 +1,22 @@ package cn.axzo.tyr.server.service.impl; -import cn.axzo.framework.domain.ServiceException; -import cn.axzo.thrones.client.saas.ServicePkgClient; -import cn.axzo.thrones.client.saas.entity.serivicepgkproduct.ServicePkgProduct; -import cn.axzo.tyr.client.common.enums.RoleTypeEnum; +import cn.axzo.tyr.client.model.enums.IdentityType; import cn.axzo.tyr.client.model.req.FeaturePermissionReq; -import cn.axzo.tyr.client.model.req.FeatureTreeReq; -import cn.axzo.tyr.client.model.req.QueryByIdentityIdTypeReq; +import cn.axzo.tyr.client.model.req.IdentityAuthReq; import cn.axzo.tyr.client.model.res.FeaturePermissionRes; -import cn.axzo.tyr.client.model.res.FeatureTreeResp; -import cn.axzo.tyr.client.model.vo.SaasRoleVO; -import cn.axzo.tyr.server.repository.dao.SaasFeatureDao; -import cn.axzo.tyr.server.repository.entity.SaasFeature; -import cn.axzo.tyr.server.service.RoleService; +import cn.axzo.tyr.client.model.res.IdentityAuthRes; import cn.axzo.tyr.server.service.SaasFeatureService; -import cn.axzo.tyr.server.util.IdPathUtil; -import cn.azxo.framework.common.logger.MethodAroundLog; -import cn.azxo.framework.common.model.CommonResponse; -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.collection.CollectionUtil; +import cn.axzo.tyr.server.service.TyrSaasAuthService; +import cn.hutool.core.collection.CollUtil; import com.google.common.collect.Lists; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; -import java.util.*; -import java.util.function.Function; +import java.util.List; import java.util.stream.Collectors; -import static cn.axzo.tyr.server.util.RpcInternalUtil.checkAndGetData; - /** * @author honghao.zhang * @since 2023/10/18 18:26 @@ -40,163 +26,33 @@ import static cn.axzo.tyr.server.util.RpcInternalUtil.checkAndGetData; @RequiredArgsConstructor public class SaasFeatureServiceImpl implements SaasFeatureService { - private final RoleService roleService; - private final ServicePkgClient servicePkgClient; - private final SaasFeatureDao saasFeatureDao; + private final TyrSaasAuthService tyrSaasAuthService; @Override public FeaturePermissionRes listPermissionCodes(FeaturePermissionReq req) { FeaturePermissionRes featurePermissionRes = new FeaturePermissionRes(); - QueryByIdentityIdTypeReq idTypeReq = QueryByIdentityIdTypeReq.builder() - .identityId(req.getIdentityId()).identityType(req.getIdentityType()) - .ouId(req.getOuId()).workspaceId(req.getWorkspaceId()) - .build(); - List saasRoleVOS = roleService.queryRoleByRoleTypes(idTypeReq, Lists.newArrayList(RoleTypeEnum.SUPER_ADMIN.getValue(), - RoleTypeEnum.ADMIN.getValue())); - featurePermissionRes.setSuperAdmin(saasRoleVOS.stream().anyMatch(e -> RoleTypeEnum.SUPER_ADMIN.getValue().equals(e.getRoleType()))); - FeatureTreeReq featureTreeReq = new FeatureTreeReq(); - featureTreeReq.setIdentityId(req.getIdentityId()); - featureTreeReq.setIdentityType(req.getIdentityType()); - featureTreeReq.setWorkspaceId(req.getWorkspaceId()); - featureTreeReq.setOuId(req.getOuId()); - featureTreeReq.setTerminal(req.getTerminal()); + IdentityAuthReq authReq = new IdentityAuthReq(); + if (StringUtils.hasText(req.getTerminal())) { + authReq.setTerminal(Lists.newArrayList()); + } + authReq.setIdentityId(req.getIdentityId()); + authReq.setIdentityType(IdentityType.getIdentityType(req.getIdentityType())); + IdentityAuthReq.WorkspaceOuPair workspaceOuPair = new IdentityAuthReq.WorkspaceOuPair(); + workspaceOuPair.setWorkspaceId(req.getWorkspaceId()); + workspaceOuPair.setOuId(req.getOuId()); + workspaceOuPair.setWorkspaceType(req.getWorkspaceType()); + workspaceOuPair.setWorkspaceJoinType(req.getWorkspaceJoinType()); + authReq.setWorkspaceOusPairs(Lists.newArrayList(workspaceOuPair)); - List saasFeatureTreeResp = filterFeatureTree(featureTreeReq, !saasRoleVOS.isEmpty()); - Map> treeMap = groupByMenuType( - saasFeatureTreeResp, 20); - featurePermissionRes.setPermissionCodes(treeMap.getOrDefault(3, Collections.emptyList()).stream().map(FeatureTreeResp::getCode) - .collect(Collectors.toSet())); + IdentityAuthRes identityAuthRes = tyrSaasAuthService.findIdentityAuth(authReq); + List workspacePermissionList = identityAuthRes.getPermissions(); + if (CollUtil.isNotEmpty(workspacePermissionList)) { + IdentityAuthRes.WorkspacePermission workspacePermission = workspacePermissionList.get(0); + featurePermissionRes.setSuperAdmin(workspacePermission.isSuperAdmin()); + featurePermissionRes.setPermissionCodes(workspacePermission.getPermissionPoint() + .stream().map(IdentityAuthRes.PermissionPoint::getFeatureCode).collect(Collectors.toSet())); + } return featurePermissionRes; } - @MethodAroundLog(value = "获取权限集树") - private List filterFeatureTree(FeatureTreeReq req, boolean isAdmin) { - // 1. 根据这个用户的角色,找到对应的code,Admin/Common各自的拿法。 - List minFeatureCode = listFeatureCode(req, isAdmin); - - log.info("产品对应的最小权限集:{}", minFeatureCode); - // 因为只能查出来最小功能FeatureCode,所以在递归查询出其上级. - List allFeature = saasFeatureDao.listFeatureByTerminal(req.getTerminal()); - List featureTree = constructFeatureByMinFeatureCode(minFeatureCode, allFeature - ); - - // 2. 组织成一棵树 - return formatToTreeAndSort(featureTree, req.getLimitFeatureTypeLevel()); - } - - private List formatToTreeAndSort(List featureTree, Integer level) { - List roots = new ArrayList<>(); - Map map = new LinkedHashMap<>(); - - for (SaasFeature feature : featureTree) { - if (feature.getFeatureType() > level) - continue; - FeatureTreeResp resp = featureBOToResp(feature); - map.put(feature.getId(), resp); - if (feature.getFeatureType() == 0 || feature.getParentId() == 0) { - roots.add(resp); - } - } - - for (FeatureTreeResp feature : map.values()) { - FeatureTreeResp parent = map.get(feature.getParentId()); - if (null == parent) { - continue; - } - if (parent.getChildren() == null) - parent.setChildren(new ArrayList<>()); - parent.getChildren().add(feature); - } - return roots; - } - - private FeatureTreeResp featureBOToResp(SaasFeature feature) { - FeatureTreeResp resp = new FeatureTreeResp(); - BeanUtil.copyProperties(feature, resp); - resp.setName(feature.getFeatureName()); - resp.setCode(feature.getFeatureCode()); - resp.setMenuType(feature.getFeatureType()); - return resp; - } - - private List constructFeatureByMinFeatureCode(List minFeatureCode, List allFeature) { - List result = new ArrayList<>(); - Map featureMap = allFeature.stream() - .collect(Collectors.toMap(SaasFeature::getId, Function.identity())); - if (!CollectionUtils.isEmpty(minFeatureCode)) { - List minFeature = allFeature.stream() - .filter(e -> org.apache.commons.lang3.StringUtils.isNotBlank(e.getFeatureCode()) - && minFeatureCode.contains(e.getFeatureCode())).collect(Collectors.toList()); - result.addAll(minFeature); - Set collect = minFeature.stream().map(SaasFeature::getPath) - .collect(Collectors.toSet()); - Set longs = IdPathUtil.featurePathsToIds(collect); - for (Long aLong : longs) { - SaasFeature saasFeatureBO = featureMap.get(aLong); - if (saasFeatureBO != null) { - result.add(saasFeatureBO); - } - } - } - return getFeatureBOS(result); - } - - private ArrayList getFeatureBOS(List result) { - return result.stream() - .collect(Collectors.collectingAndThen( - Collectors.toCollection( - () -> new TreeSet<>(Comparator.comparing(SaasFeature::getId))), - ArrayList::new)); - } - - private List listFeatureCode(FeatureTreeReq req, boolean isAdmin) { - List productIds = getProductIdsOfWorkspace(req.getWorkspaceId()); - if (isAdmin) { - return listCodeByProductIdsAndTerminal(productIds, req.getTerminal()); - } - return listCodeByProductIds(req, productIds); - } - - private List listCodeByProductIds(FeatureTreeReq req, List productIds) { - return saasFeatureDao.listCodeByProductIds(req, productIds); - } - - private List listCodeByProductIdsAndTerminal(List productIds, String terminal) { - return saasFeatureDao.listByProductIdsAndTerminal(productIds, terminal); - } - - private Map> groupByMenuType(List saasFeatureTree, Integer maxDepth) { - HashMap> result = new HashMap<>(); - if (CollectionUtil.isEmpty(saasFeatureTree) || maxDepth <= 0) { - return result; - } - for (FeatureTreeResp featureTreeResp : saasFeatureTree) { - - List defaultLists = result.getOrDefault(featureTreeResp.getMenuType(), new ArrayList<>()); - if (defaultLists.isEmpty()) { - result.put(featureTreeResp.getMenuType(), defaultLists); - } - defaultLists.add(featureTreeResp); - Map> children = groupByMenuType(featureTreeResp.getChildren(), --maxDepth); - for (Integer childrenKey : children.keySet()) { - List childList = result.getOrDefault(childrenKey, new ArrayList<>()); - if (childList.isEmpty()) { - result.put(childrenKey, childList); - } - childList.addAll(children.get(childrenKey)); - - } - } - return result; - } - - public List getProductIdsOfWorkspace(Long workspaceId) { - CommonResponse> servicePkgResponse = servicePkgClient.listProductInWorkSpace(workspaceId); - List products = checkAndGetData(servicePkgResponse); - if (CollectionUtil.isEmpty(products)) { - log.warn("thrones:获取产品列表失败:workspaceId{}", workspaceId); - throw new ServiceException("当前工作台未找到任何的产品"); - } - return products.stream().map(ServicePkgProduct::getProductId).collect(Collectors.toList()); - } }