From 3dbfb140784a08fb3e01904f51ea250674fb3d5d Mon Sep 17 00:00:00 2001 From: luofu Date: Wed, 31 Jan 2024 16:14:48 +0800 Subject: [PATCH] =?UTF-8?q?feat(REQ-2046):=20=E6=96=B0=E5=A2=9E=E9=80=9A?= =?UTF-8?q?=E8=BF=87appItemId=E6=9F=A5=E8=AF=A2featureId=E7=9A=84=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tyr/client/feign/TyrSaasFeatureApi.java | 13 +++++++ .../permission/TyrSaasFeatureController.java | 8 +++++ .../server/service/SaasFeatureService.java | 11 ++++++ .../service/impl/SaasFeatureServiceImpl.java | 34 ++++++++++++++++++- 4 files changed, 65 insertions(+), 1 deletion(-) diff --git a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasFeatureApi.java b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasFeatureApi.java index e0c32ff6..f4b68dab 100644 --- a/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasFeatureApi.java +++ b/tyr-api/src/main/java/cn/axzo/tyr/client/feign/TyrSaasFeatureApi.java @@ -7,6 +7,10 @@ import org.springframework.cloud.openfeign.FeignClient; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.Collection; +import java.util.List; /** * @author honghao.zhang @@ -17,4 +21,13 @@ public interface TyrSaasFeatureApi { @PostMapping("/api/saasFeature/permission/codes") ApiResult listPermissionCodes(@RequestBody @Validated FeaturePermissionReq req); + + /** + * 通过 {@code appItemId} 获取 {@code featureId} + * + * @param appItemIds 应用子级条目id集合 + * @return {@code featureId} 列表 + */ + @PostMapping("/api/saasFeature/featureId/list") + ApiResult> listAppFeatureIds(@RequestParam("appItemIds") Collection appItemIds); } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/TyrSaasFeatureController.java b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/TyrSaasFeatureController.java index c39d2ef0..5a45f492 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/TyrSaasFeatureController.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/controller/permission/TyrSaasFeatureController.java @@ -9,6 +9,9 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RestController; +import java.util.Collection; +import java.util.List; + /** * @author honghao.zhang * @since 2023/10/18 18:30 @@ -24,4 +27,9 @@ public class TyrSaasFeatureController implements TyrSaasFeatureApi { public ApiResult listPermissionCodes(FeaturePermissionReq req) { return ApiResult.ok(saasFeatureService.listPermissionCodes(req)); } + + @Override + public ApiResult> listAppFeatureIds(Collection appItemIds) { + return ApiResult.ok(saasFeatureService.listAppFeatureIds(appItemIds)); + } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasFeatureService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasFeatureService.java index 960381ef..6ad3ba93 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasFeatureService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasFeatureService.java @@ -3,6 +3,9 @@ package cn.axzo.tyr.server.service; import cn.axzo.tyr.client.model.req.FeaturePermissionReq; import cn.axzo.tyr.client.model.res.FeaturePermissionRes; +import java.util.Collection; +import java.util.List; + /** * @author honghao.zhang * @since 2023/10/18 18:25 @@ -10,4 +13,12 @@ import cn.axzo.tyr.client.model.res.FeaturePermissionRes; public interface SaasFeatureService { FeaturePermissionRes listPermissionCodes(FeaturePermissionReq req); + + /** + * 通过 {@code appItemId} 获取 {@code featureId} + * + * @param appItemIds 应用子级条目id集合 + * @return {@code featureId} 列表 + */ + List listAppFeatureIds(Collection appItemIds); } 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 2953e1f4..23d02579 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,21 +1,28 @@ package cn.axzo.tyr.server.service.impl; +import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum; import cn.axzo.tyr.client.model.enums.IdentityType; import cn.axzo.tyr.client.model.req.FeaturePermissionReq; import cn.axzo.tyr.client.model.req.IdentityAuthReq; import cn.axzo.tyr.client.model.res.FeaturePermissionRes; import cn.axzo.tyr.client.model.res.IdentityAuthRes; +import cn.axzo.tyr.server.repository.dao.SaasFeatureDao; +import cn.axzo.tyr.server.repository.entity.SaasFeature; import cn.axzo.tyr.server.service.SaasFeatureService; import cn.axzo.tyr.server.service.TyrSaasAuthService; import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.StrUtil; +import cn.hutool.core.util.NumberUtil; import com.google.common.collect.Lists; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; +import java.util.Collection; +import java.util.Collections; import java.util.List; +import java.util.function.Predicate; import java.util.stream.Collectors; /** @@ -27,6 +34,7 @@ import java.util.stream.Collectors; @RequiredArgsConstructor public class SaasFeatureServiceImpl implements SaasFeatureService { + private final SaasFeatureDao saasFeatureDao; private final TyrSaasAuthService tyrSaasAuthService; @Override @@ -58,4 +66,28 @@ public class SaasFeatureServiceImpl implements SaasFeatureService { return featurePermissionRes; } + @Override + public List listAppFeatureIds(Collection appItemIds) { + if (CollectionUtils.isEmpty(appItemIds)) { + log.info("appItemIds is empty."); + return Collections.emptyList(); + } + List saasFeatures = saasFeatureDao.lambdaQuery() + .in(SaasFeature::getLinkType, Lists.newArrayList(LINK_TYPE_UNIAPP, LINK_TYPE_NATIVE)) + .in(SaasFeature::getIsDelete, TableIsDeleteEnum.NORMAL.value) + .list(); + return saasFeatures.stream() + .filter(UNI_APP_ITEM_ID_FILTER) + .filter(e -> appItemIds.contains(Long.parseLong(e.getMicroAppItemId()))) + .map(SaasFeature::getId) + .collect(Collectors.toList()); + } + + // 小程序 + private static final Integer LINK_TYPE_UNIAPP = 2; + // 原生 + private static final Integer LINK_TYPE_NATIVE = 4; + + private static final Predicate UNI_APP_ITEM_ID_FILTER = e -> + StringUtils.hasText(e.getMicroAppItemId()) && NumberUtil.isNumber(e.getMicroAppItemId().trim()); }