feat: (hotfix/20241021) 优化菜单节点详情接口,提高接口性能

This commit is contained in:
lilong 2024-10-21 15:47:34 +08:00
parent 3e80c801c9
commit f3efb695e9
2 changed files with 28 additions and 6 deletions

View File

@ -22,4 +22,8 @@ public class DetailFeatureResourceReq {
* 资源类型1-菜单 2-页面 3-应用入口 4-组件;5-root节点
*/
private Integer featureType;
private Boolean needChildren;
private Boolean needPageElement;
}

View File

@ -41,6 +41,7 @@ import cn.axzo.tyr.server.model.convert.SaasFeatureResourceConvert;
import cn.axzo.tyr.server.repository.dao.SaasFeatureDao;
import cn.axzo.tyr.server.repository.dao.SaasFeatureResourceDao;
import cn.axzo.tyr.server.repository.dao.SaasPgroupRoleRelationDao;
import cn.axzo.tyr.server.repository.entity.ProductModule;
import cn.axzo.tyr.server.repository.entity.SaasFeature;
import cn.axzo.tyr.server.repository.entity.SaasFeatureResource;
import cn.axzo.tyr.server.repository.entity.SaasPageElementFeatureResourceRelation;
@ -57,8 +58,11 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.lang.Pair;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
@ -298,11 +302,19 @@ public class SaasFeatureResourceServiceImpl extends ServiceImpl<SaasFeatureResou
@Override
public FeatureResourceTreeNode getTreeFeatureDescendant(DetailFeatureResourceReq param) {
List<SaasFeatureResource> descendants = featureResourceDao.lambdaQuery()
LambdaQueryChainWrapper<SaasFeatureResource> wrapper = featureResourceDao.lambdaQuery()
.eq(BaseEntity::getIsDelete,0)
.eq(ObjectUtil.isNotNull(param.getFeatureType()), SaasFeatureResource::getFeatureType, param.getFeatureType())
.apply("FIND_IN_SET('" + param.getFeatureId() + "', path)")
.list();
.eq(ObjectUtil.isNotNull(param.getFeatureType()), SaasFeatureResource::getFeatureType, param.getFeatureType());
if (BooleanUtils.isTrue(param.getNeedChildren())) {
wrapper.apply("FIND_IN_SET('" + param.getFeatureId() + "', path)");
} else {
wrapper.eq(BaseEntity::getId, param.getFeatureId());
}
List<SaasFeatureResource> descendants = wrapper.list();
if (CollectionUtil.isEmpty(descendants)) {
return null;
}
@ -322,7 +334,7 @@ public class SaasFeatureResourceServiceImpl extends ServiceImpl<SaasFeatureResou
FeatureResourceTreeNode featureResourceTreeNode = treeList.get(0);
List<String> allUniCodes = descendants.stream().map(SaasFeatureResource::getUniCode).filter(StringUtils::isNotBlank).collect(Collectors.toList());
fillPageElement2PageFeatureResource(treeList, allUniCodes);
fillPageElement2PageFeatureResource(treeList, allUniCodes, param);
return featureResourceTreeNode;
}
@ -801,7 +813,13 @@ public class SaasFeatureResourceServiceImpl extends ServiceImpl<SaasFeatureResou
return parent.getPath();
}
private void fillPageElement2PageFeatureResource(List<FeatureResourceTreeNode> featureResourceTreeNodes, List<String> allUniCodes) {
private void fillPageElement2PageFeatureResource(List<FeatureResourceTreeNode> featureResourceTreeNodes,
List<String> allUniCodes,
DetailFeatureResourceReq detailFeatureResourceReq) {
if (BooleanUtils.isNotTrue(detailFeatureResourceReq.getNeedPageElement())) {
return;
}
Map<String, List<PageElementBasicDTO>> uniCodeElementsMap = saasPageElementService.getByTerminalAndUniCodes(featureResourceTreeNodes.get(0).getTerminal(), allUniCodes)
.stream().collect(Collectors.groupingBy(PageElementBasicDTO::getUniCode));