feat:(REQ-2699) 支持查询页面元素时查询菜单信息

This commit is contained in:
lilong 2024-08-10 09:51:47 +08:00
parent dfec87ee3b
commit 2b3d7e5219
5 changed files with 76 additions and 5 deletions

View File

@ -1,5 +1,6 @@
package cn.axzo.tyr.client.feign;
import cn.axzo.framework.domain.page.Page;
import cn.axzo.framework.domain.web.result.ApiPageResult;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.tyr.client.model.req.*;
@ -41,4 +42,7 @@ public interface PageElementApi {
/** 根据用户传入的页面code查询用户有权限的元素code **/
@PostMapping("/api/pageElement/getUserHasPermissionPageElement")
ApiResult<GetUserHasPermissionPageElementResp> getUserHasPermissionPageElement(@RequestBody @Valid GetUserHasPermissionPageElementReq req);
@PostMapping("/api/pageElement/list")
ApiResult<List<PageElementResp>> list(PageElementReq param);
}

View File

@ -31,4 +31,7 @@ public class PageElementReq implements IPageReq {
@CriteriaField(field = "code", operator = Operator.IN)
private Set<String> codes;
@CriteriaField(ignore = true)
private Boolean needFeatureSource;
}

View File

@ -71,4 +71,9 @@ public class PageElementResp {
* 子元素只包含一级
*/
private List<PageElementResp> children;
/**
* 元素对应的菜单信息可能会存在多个
*/
private List<SaasFeatureResourceResp> featureResources;
}

View File

@ -3,7 +3,12 @@ package cn.axzo.tyr.server.controller.permission;
import cn.axzo.framework.domain.web.result.ApiPageResult;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.tyr.client.feign.PageElementApi;
import cn.axzo.tyr.client.model.req.*;
import cn.axzo.tyr.client.model.req.GetPageElementReq;
import cn.axzo.tyr.client.model.req.GetUserHasPermissionPageElementReq;
import cn.axzo.tyr.client.model.req.ModifyPageElementRelationDTO;
import cn.axzo.tyr.client.model.req.PageElementReportReq;
import cn.axzo.tyr.client.model.req.PageElementReq;
import cn.axzo.tyr.client.model.req.PageQueryElementReq;
import cn.axzo.tyr.client.model.res.GetUserHasPermissionPageElementResp;
import cn.axzo.tyr.client.model.res.PageElementResp;
import cn.axzo.tyr.server.service.SaasPageElementService;
@ -51,4 +56,9 @@ public class PageElementController implements PageElementApi {
public ApiResult<GetUserHasPermissionPageElementResp> getUserHasPermissionPageElement(GetUserHasPermissionPageElementReq req) {
return ApiResult.ok(saasPageElementService.getUserHasPermissionPageElement(req));
}
@Override
public ApiResult<List<PageElementResp>> list(PageElementReq param) {
return ApiResult.ok(saasPageElementService.list(param));
}
}

View File

@ -19,13 +19,16 @@ import cn.axzo.tyr.client.model.req.GetPageElementReq;
import cn.axzo.tyr.client.model.req.GetUserHasPermissionPageElementReq;
import cn.axzo.tyr.client.model.req.IdentityAuthReq;
import cn.axzo.tyr.client.model.req.ModifyPageElementRelationDTO;
import cn.axzo.tyr.client.model.req.PageElementFeatureResourceRelationReq;
import cn.axzo.tyr.client.model.req.PageElementReportReq;
import cn.axzo.tyr.client.model.req.PageElementReq;
import cn.axzo.tyr.client.model.req.PageQueryElementReq;
import cn.axzo.tyr.client.model.req.PageSaasFeatureResourceReq;
import cn.axzo.tyr.client.model.res.GetUserHasPermissionPageElementResp;
import cn.axzo.tyr.client.model.res.IdentityAuthRes;
import cn.axzo.tyr.client.model.res.PageElementBasicDTO;
import cn.axzo.tyr.client.model.res.PageElementResp;
import cn.axzo.tyr.client.model.res.SaasFeatureResourceResp;
import cn.axzo.tyr.server.config.MqProducer;
import cn.axzo.tyr.server.event.payload.PageElementFeatureResourceUpsertPayload;
import cn.axzo.tyr.server.model.RelationOperateLogResourceBindElementDO;
@ -37,6 +40,8 @@ import cn.axzo.tyr.server.repository.entity.SaasPageElement;
import cn.axzo.tyr.server.repository.entity.SaasPageElementFeatureResourceRelation;
import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelationOperateLog;
import cn.axzo.tyr.server.repository.mapper.SaasPageElementMapper;
import cn.axzo.tyr.server.service.SaasFeatureResourceService;
import cn.axzo.tyr.server.service.SaasPageElementFeatureResourceRelationService;
import cn.axzo.tyr.server.service.SaasPageElementService;
import cn.axzo.tyr.server.service.SaasPgroupPermissionRelationOperateLogService;
import cn.axzo.tyr.server.service.TyrSaasAuthService;
@ -53,6 +58,7 @@ import com.google.common.collect.Maps;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.MDC;
import org.springframework.beans.BeanUtils;
@ -84,8 +90,7 @@ import static cn.axzo.tyr.server.event.inner.EventTypeEnum.PAGE_ELEMENT_FEATURE_
@Slf4j
@Service
@RequiredArgsConstructor
public class SaasPageElementServiceImpl
extends ServiceImpl<SaasPageElementMapper, SaasPageElement>
public class SaasPageElementServiceImpl extends ServiceImpl<SaasPageElementMapper, SaasPageElement>
implements SaasPageElementService {
private final SaasPageElementDao saasPageElementDao;
@ -95,6 +100,8 @@ public class SaasPageElementServiceImpl
private final SaasPgroupPermissionRelationOperateLogService saasPgroupPermissionRelationOperateLogService;
private final UserProfileServiceApi userProfileServiceApi;
private final MqProducer mqProducer;
private final SaasFeatureResourceService saasFeatureResourceService;
private final SaasPageElementFeatureResourceRelationService saasPageElementFeatureResourceRelationService;
@Qualifier("asyncExecutor")
@Autowired
@ -491,13 +498,55 @@ public class SaasPageElementServiceImpl
IPage<SaasPageElement> page = this.page(PageConverter.toMybatis(param, SaasPageElement.class), wrapper);
return PageConverter.toResp(page, this::from);
Map<String, List<SaasFeatureResourceResp>> featureResources = listFeatureResource(page.getRecords(), param);
return PageConverter.toResp(page, e -> from(e, featureResources));
}
private PageElementResp from(SaasPageElement saasPageElement) {
private PageElementResp from(SaasPageElement saasPageElement,
Map<String, List<SaasFeatureResourceResp>> featureResources) {
PageElementResp pageElementResp = PageElementResp.builder().build();
BeanUtils.copyProperties(saasPageElement, pageElementResp);
pageElementResp.setFeatureResources(featureResources.get(saasPageElement.getCode()));
return pageElementResp;
}
private Map<String, List<SaasFeatureResourceResp>> listFeatureResource(List<SaasPageElement> pageElements,
PageElementReq param) {
if (CollectionUtils.isEmpty(pageElements) || BooleanUtils.isNotTrue(param.getNeedFeatureSource())) {
return Collections.emptyMap();
}
Set<String> pageElementCodes = pageElements.stream()
.map(SaasPageElement::getCode)
.collect(Collectors.toSet());
PageElementFeatureResourceRelationReq elementFeatureResourceRelationReq = PageElementFeatureResourceRelationReq
.builder()
.pageElementCodes(pageElementCodes)
.build();
List<SaasPageElementFeatureResourceRelation> elementFeatureResourceRelations = saasPageElementFeatureResourceRelationService.list(elementFeatureResourceRelationReq);
Set<String> uniCodes = elementFeatureResourceRelations.stream()
.map(SaasPageElementFeatureResourceRelation::getFeatureResourceUniCode)
.collect(Collectors.toSet());
if (CollectionUtils.isEmpty(uniCodes)) {
return Collections.emptyMap();
}
PageSaasFeatureResourceReq pageSaasFeatureResourceReq = PageSaasFeatureResourceReq
.builder()
.uniCodes(uniCodes)
.build();
Map<String, SaasFeatureResourceResp> featureResources = saasFeatureResourceService.list(pageSaasFeatureResourceReq).stream()
.collect(Collectors.toMap(SaasFeatureResourceResp::getUniCode, Function.identity()));
return elementFeatureResourceRelations.stream()
.collect(Collectors.groupingBy(SaasPageElementFeatureResourceRelation::getPageElementCode,
Collectors.mapping(e -> featureResources.get(e.getFeatureResourceUniCode()), Collectors.toList())));
}
}