diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/FeatureResourceApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/FeatureResourceApi.java index ea6f8f0d..e7867591 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/FeatureResourceApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/FeatureResourceApi.java @@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.RequestParam; import javax.validation.Valid; import java.util.List; +import java.util.Map; /** * 功能资源API接口 @@ -59,4 +60,8 @@ public interface FeatureResourceApi { /** 从基准环境查询功能资源树 **/ @PostMapping("/api/featureResource/getBaseTree") ApiResult> getBaseTree(@RequestBody @Valid GetFeatureResourceTreeReq req); + + /** 通过featureResourceIds查询对应的featureCode **/ + @PostMapping("/api/featureResource/listFeatureCodeByFeatureResourceIds") + ApiResult> listFeatureCodeByFeatureResourceIds(@RequestParam List featureResourceIds); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/FeatureResourceController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/FeatureResourceController.java index ef63b95b..86035395 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/FeatureResourceController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/FeatureResourceController.java @@ -15,6 +15,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RestController; import java.util.List; +import java.util.Map; /** * 功能资源接口实现 @@ -85,4 +86,9 @@ public class FeatureResourceController implements FeatureResourceApi { public ApiResult> getBaseTree(GetFeatureResourceTreeReq req) { return ApiResult.ok(featureResourceSyncService.getBaseTree(req)); } + + @Override + public ApiResult> listFeatureCodeByFeatureResourceIds(List featureResourceIds) { + return ApiResult.ok(featureResourceSyncService.listFeatureCodeByFeatureResourceIds(featureResourceIds)); + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/FeatureResourceSyncService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/FeatureResourceSyncService.java index 875cb911..f3ccccb2 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/FeatureResourceSyncService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/FeatureResourceSyncService.java @@ -5,6 +5,7 @@ import cn.axzo.tyr.client.model.req.ResourceSyncReq; import cn.axzo.tyr.client.model.res.FeatureResourceTreeNode; import java.util.List; +import java.util.Map; /** * 功能资源同步服务 @@ -20,4 +21,6 @@ public interface FeatureResourceSyncService { void syncFromBase(ResourceSyncReq req); List getBaseTree(GetFeatureResourceTreeReq req); + + Map listFeatureCodeByFeatureResourceIds(List featureResourceIds); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/FeatureResourceSyncServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/FeatureResourceSyncServiceImpl.java index 315b774e..2cc68b24 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/FeatureResourceSyncServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/FeatureResourceSyncServiceImpl.java @@ -9,18 +9,13 @@ import cn.axzo.tyr.client.model.req.GetFeatureResourceTreeReq; import cn.axzo.tyr.client.model.req.ResourceSyncReq; import cn.axzo.tyr.client.model.res.FeatureResourceTreeNode; import cn.axzo.tyr.server.inner.feign.BaseFeatureResourceApi; -import cn.axzo.tyr.server.repository.dao.SaasFeatureResourceDao; -import cn.axzo.tyr.server.repository.dao.SaasPgroupPermissionRelationDao; -import cn.axzo.tyr.server.repository.dao.SaasPgroupRoleRelationDao; -import cn.axzo.tyr.server.repository.dao.SaasRoleDao; -import cn.axzo.tyr.server.repository.entity.SaasFeatureResource; -import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation; -import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation; -import cn.axzo.tyr.server.repository.entity.SaasRole; +import cn.axzo.tyr.server.repository.dao.*; +import cn.axzo.tyr.server.repository.entity.*; import cn.axzo.tyr.server.service.FeatureResourceSyncService; import cn.axzo.tyr.server.util.RpcInternalUtil; import cn.hutool.core.collection.CollectionUtil; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; @@ -33,6 +28,7 @@ import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutorService; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -59,6 +55,8 @@ public class FeatureResourceSyncServiceImpl implements FeatureResourceSyncServic private final SaasPgroupPermissionRelationDao saasPgroupPermissionRelationDao; + private final SaasPageElementFeatureResourceRelationDao saasPageElementFeatureResourceRelationDao; + @Qualifier("asyncExecutor") @Autowired private ExecutorService asyncExecutor; @@ -128,6 +126,30 @@ public class FeatureResourceSyncServiceImpl implements FeatureResourceSyncServic "get resource tree from base env", req).getData(); } + @Override + public Map listFeatureCodeByFeatureResourceIds(List featureResourceIds) { + if (CollectionUtils.isEmpty(featureResourceIds)) { + return Maps.newHashMap(); + } + List resources = featureResourceDao.lambdaQuery() + .in(SaasFeatureResource::getId, featureResourceIds) + .list(); + if (CollectionUtils.isEmpty(resources)) { + return Maps.newHashMap(); + } + Map relationMap = saasPageElementFeatureResourceRelationDao.listByUniCodeAndTerminal(resources.stream().map(SaasFeatureResource::getUniCode).distinct().collect(Collectors.toList()), + resources.get(0).getTerminal(), null).stream().collect(Collectors.toMap(SaasPageElementFeatureResourceRelation::getFeatureResourceUniCode, Function.identity(), (v1, v2) -> v1)); + + Map featureResourceIdCodeMap = Maps.newHashMap(); + resources.forEach(e -> { + SaasPageElementFeatureResourceRelation relation = relationMap.get(e.getUniCode()); + if (Objects.nonNull(relation)) { + featureResourceIdCodeMap.put(e.getId(), relation.getPageElementCode()); + } + }); + return featureResourceIdCodeMap; + } + private void syncResourceProcess(List syncList, Map codeCache, Long operatorId) { for (FeatureResourceTreeNode treeNode : syncList) {