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 93f5f820..6e968ccb 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 @@ -57,5 +57,5 @@ public interface FeatureResourceApi { /** 菜单详情 **/ @PostMapping("/api/featureResource/detail") - ApiResult detail(@RequestParam Long featureId); + ApiResult detail(@RequestParam Long featureId); } 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 3aa30cc9..211c74b8 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 @@ -76,8 +76,8 @@ public class FeatureResourceController implements FeatureResourceApi { } @Override - public ApiResult detail(Long featureId) { - return null; + public ApiResult detail(Long featureId) { + return ApiResult.ok(featureResourceService.getTreeFeatureDescendant(featureId)); } @Override diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/model/convert/SaasFeatureResourceConvert.java b/tyr-server/src/main/java/cn/axzo/tyr/server/model/convert/SaasFeatureResourceConvert.java new file mode 100644 index 00000000..5c55d117 --- /dev/null +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/model/convert/SaasFeatureResourceConvert.java @@ -0,0 +1,15 @@ +package cn.axzo.tyr.server.model.convert; + +import cn.axzo.maokai.api.vo.request.UpdateNodeWorkerReq; +import cn.axzo.tyr.client.model.res.FeatureResourceTreeNode; +import cn.axzo.tyr.server.repository.entity.SaasFeatureResource; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +@Mapper +public interface SaasFeatureResourceConvert { + + SaasFeatureResourceConvert INSTANCE = Mappers.getMapper(SaasFeatureResourceConvert.class); + + FeatureResourceTreeNode convert(SaasFeatureResource req); +} diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasFeatureResourceService.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasFeatureResourceService.java index f14a04c0..be5730ee 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasFeatureResourceService.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/SaasFeatureResourceService.java @@ -23,6 +23,8 @@ public interface SaasFeatureResourceService { /**递归的**/ List listDescendant(Long featureId); + FeatureResourceTreeNode getTreeFeatureDescendant(Long featureId); + /**删除指定菜单**/ void deleteMenuFeature(Long featureId, Long operatorId); diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasFeatureResourceServiceImpl.java b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasFeatureResourceServiceImpl.java index e9a8d636..47b00aa1 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasFeatureResourceServiceImpl.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/service/impl/SaasFeatureResourceServiceImpl.java @@ -1,5 +1,6 @@ package cn.axzo.tyr.server.service.impl; +import cn.axzo.basics.auth.vo.resp.SaasFeatureTreeResp; import cn.axzo.basics.common.BeanMapper; import cn.axzo.basics.common.util.StopWatchUtil; import cn.axzo.basics.common.util.TreeUtil; @@ -15,6 +16,7 @@ import cn.axzo.tyr.client.model.res.FeatureResourceDTO; import cn.axzo.tyr.client.model.res.FeatureResourceTreeNode; import cn.axzo.tyr.server.model.ResourcePermission; import cn.axzo.tyr.server.model.ResourcePermissionQueryDTO; +import cn.axzo.tyr.server.model.convert.SaasFeatureResourceConvert; import cn.axzo.tyr.server.repository.dao.SaasFeatureResourceDao; import cn.axzo.tyr.server.repository.entity.SaasFeatureResource; import cn.axzo.tyr.server.service.SaasFeatureResourceService; @@ -30,6 +32,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.Collections; import java.util.Comparator; @@ -158,6 +161,23 @@ public class SaasFeatureResourceServiceImpl implements SaasFeatureResourceServic } @Override + public FeatureResourceTreeNode getTreeFeatureDescendant(Long featureId) { + List descendants = featureResourceDao.lambdaQuery() + .eq(BaseEntity::getIsDelete,0) + .apply("FIND_IN_SET('" + featureId + "', path)") + .list(); + if (CollectionUtil.isEmpty(descendants)) { + return null; + } + List treeList = TreeUtil.buildTree(descendants.stream() + .map(SaasFeatureResourceConvert.INSTANCE::convert) + .sorted(Comparator.comparing(FeatureResourceDTO::getDisplayOrder)) + .collect(Collectors.toList())); + return treeList.get(0); + } + + @Override + @Transactional(rollbackFor = Exception.class) @CacheEvict(value = SaasFeatureResourceCacheService.CACHE_FEATURE_RESOURCE_TREE,allEntries = true) public void saveOrUpdateMenu(FeatureResourceTreeSaveReq req) { SaasFeatureResource baseResource = BeanMapper.copyBean(req, SaasFeatureResource.class); @@ -180,7 +200,7 @@ public class SaasFeatureResourceServiceImpl implements SaasFeatureResourceServic List components = req.getComponentSaveReqList(); for (int i = 0; i < components.size(); i++) { FeatureComponentSaveReq childComponent = components.get(i); - if (childComponent.getParentId() != null) { + if (childComponent.getParentId() == null) { childComponent.setParentId(baseResource.getId()); } // 递归新增修改删除子节点 @@ -209,9 +229,6 @@ public class SaasFeatureResourceServiceImpl implements SaasFeatureResourceServic } else { saasFeatureResource.setCreateBy(operatorId); newResource(saasFeatureResource, parentPath); -// featureResourceDao.save(saasFeatureResource); -// saasFeatureResource.setPath(parentPath + "," + saasFeatureResource.getId()); -// featureResourceDao.updateById(saasFeatureResource); } List children = featureComponentSaveReq.getChildren(); @@ -357,4 +374,6 @@ public class SaasFeatureResourceServiceImpl implements SaasFeatureResourceServic return rootNodes; } + + }