diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/resource/LayuiApiResourceTreeNode.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/resource/LayuiApiResourceTreeNode.java new file mode 100644 index 000000000..2505a2be2 --- /dev/null +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/resource/LayuiApiResourceTreeNode.java @@ -0,0 +1,65 @@ +package cn.stylefeng.roses.kernel.system.pojo.resource; + +import cn.stylefeng.roses.kernel.rule.abstracts.AbstractTreeNode; +import lombok.Data; + +import java.util.List; + +/** + * 用于渲染api资源树(layui插件) + * + * @author fengshuonan + * @date 2021/1/14 21:51 + */ +@Data +public class LayuiApiResourceTreeNode implements AbstractTreeNode { + + /** + * 资源的上级编码 + */ + private String parentId; + + /** + * 节点名称 + */ + private String title; + + /** + * 资源的编码 + */ + private String id; + + /** + * 是否展开状态 不展开-false 展开-true + */ + private Boolean spread = false; + + /** + * 是否是资源标识 + *

+ * true-是资源标识 + * false-虚拟节点,不是一个具体资源 + */ + private Boolean resourceFlag; + + /** + * 子节点的集合 + */ + private List children; + + @Override + public String getNodeId() { + return this.id; + } + + @Override + public String getNodeParentId() { + return this.parentId; + } + + @Override + public void setChildrenNodes(List childrenNodes) { + this.children = childrenNodes; + } + +} diff --git a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/controller/ApiController.java b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/controller/ApiController.java new file mode 100644 index 000000000..c854e4d7e --- /dev/null +++ b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/controller/ApiController.java @@ -0,0 +1,55 @@ +package cn.stylefeng.roses.kernel.resource.modular.controller; + +import cn.stylefeng.roses.kernel.resource.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.resource.api.annotation.GetResource; +import cn.stylefeng.roses.kernel.resource.api.pojo.resource.ResourceDefinition; +import cn.stylefeng.roses.kernel.resource.modular.service.SysResourceService; +import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest; +import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData; +import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData; +import cn.stylefeng.roses.kernel.system.pojo.resource.LayuiApiResourceTreeNode; +import cn.stylefeng.roses.kernel.system.pojo.resource.request.ResourceRequest; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 资源管理控制器 + * + * @author fengshuonan + * @date 2020/11/24 19:47 + */ +@RestController +@ApiResource(name = "API接口管理") +public class ApiController { + + @Resource + private SysResourceService sysResourceService; + + /** + * 获取资源树列表,用于接口文档页面 + * + * @author fengshuonan + * @date 2020/12/18 15:50 + */ + @GetResource(name = "获取接口树列表(用于接口文档页面)", path = "/resource/getTree", requiredLogin = false) + public ResponseData getTree() { + List resourceTree = sysResourceService.getResourceTree(); + return new SuccessResponseData(resourceTree); + } + + /** + * 获取接口详情 + * + * @author fengshuonan + * @date 2020/12/18 15:50 + */ + @GetResource(name = "获取API详情(用于接口文档页面)", path = "/resource/getDetail", requiredLogin = false) + public ResponseData getResourceDetail(@Validated(BaseRequest.detail.class) ResourceRequest resourceRequest) { + ResourceDefinition resourceDetail = sysResourceService.getResourceDetail(resourceRequest); + return new SuccessResponseData(resourceDetail); + } + +} diff --git a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/controller/ResourceController.java b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/controller/ResourceController.java index bd9fa8c34..48fe46ea0 100644 --- a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/controller/ResourceController.java +++ b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/controller/ResourceController.java @@ -3,16 +3,13 @@ package cn.stylefeng.roses.kernel.resource.modular.controller; import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; import cn.stylefeng.roses.kernel.resource.api.annotation.ApiResource; import cn.stylefeng.roses.kernel.resource.api.annotation.GetResource; -import cn.stylefeng.roses.kernel.resource.api.pojo.resource.ResourceDefinition; import cn.stylefeng.roses.kernel.resource.modular.entity.SysResource; import cn.stylefeng.roses.kernel.resource.modular.pojo.ResourceTreeNode; import cn.stylefeng.roses.kernel.resource.modular.service.SysResourceService; -import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest; import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData; import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData; import cn.stylefeng.roses.kernel.system.pojo.resource.request.ResourceRequest; import cn.stylefeng.roses.kernel.system.pojo.role.request.SysRoleRequest; -import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; @@ -55,18 +52,6 @@ public class ResourceController { return new SuccessResponseData(menuResourceList); } - /** - * 获取资源树列表,用于接口文档页面 - * - * @author fengshuonan - * @date 2020/12/18 15:50 - */ - @GetResource(name = "获取资源树列表,用于接口文档页面", path = "/resource/getTree", requiredLogin = false, requiredPermission = false) - public ResponseData getTree() { - List resourceTree = sysResourceService.getResourceTree(); - return new SuccessResponseData(resourceTree); - } - /** * 获取资源平级树列表,用于分配接口权限(适用于layui版本) * @@ -90,16 +75,4 @@ public class ResourceController { return new SuccessResponseData(resourceLateralTree); } - /** - * 获取接口详情 - * - * @author fengshuonan - * @date 2020/12/18 15:50 - */ - @GetResource(name = "获取接口详情", path = "/resource/getDetail", requiredLogin = false, requiredPermission = false) - public ResponseData getResourceDetail(@Validated(BaseRequest.detail.class) ResourceRequest resourceRequest) { - ResourceDefinition resourceDetail = sysResourceService.getResourceDetail(resourceRequest); - return new SuccessResponseData(resourceDetail); - } - } diff --git a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/service/SysResourceService.java b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/service/SysResourceService.java index 5a52523cd..c3d6f72ff 100644 --- a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/service/SysResourceService.java +++ b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/service/SysResourceService.java @@ -4,6 +4,7 @@ import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; import cn.stylefeng.roses.kernel.resource.api.pojo.resource.ResourceDefinition; import cn.stylefeng.roses.kernel.resource.modular.entity.SysResource; import cn.stylefeng.roses.kernel.resource.modular.pojo.ResourceTreeNode; +import cn.stylefeng.roses.kernel.system.pojo.resource.LayuiApiResourceTreeNode; import cn.stylefeng.roses.kernel.system.pojo.resource.request.ResourceRequest; import com.baomidou.mybatisplus.extension.service.IService; @@ -55,7 +56,7 @@ public interface SysResourceService extends IService { * @author fengshuonan * @date 2020/12/18 15:06 */ - List getResourceTree(); + List getResourceTree(); /** * 获取资源的详情 diff --git a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/service/impl/SysResourceServiceImpl.java b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/service/impl/SysResourceServiceImpl.java index e9f830a0e..ae30ca388 100644 --- a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/service/impl/SysResourceServiceImpl.java +++ b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/service/impl/SysResourceServiceImpl.java @@ -24,6 +24,7 @@ import cn.stylefeng.roses.kernel.rule.factory.DefaultTreeBuildFactory; import cn.stylefeng.roses.kernel.system.ResourceServiceApi; import cn.stylefeng.roses.kernel.system.RoleServiceApi; import cn.stylefeng.roses.kernel.system.UserServiceApi; +import cn.stylefeng.roses.kernel.system.pojo.resource.LayuiApiResourceTreeNode; import cn.stylefeng.roses.kernel.system.pojo.resource.request.ResourceRequest; import cn.stylefeng.roses.kernel.system.pojo.role.response.SysRoleResourceResponse; import cn.stylefeng.roses.kernel.system.pojo.user.SysUserResponse; @@ -96,7 +97,7 @@ public class SysResourceServiceImpl extends ServiceImpl getResourceTree() { + public List getResourceTree() { // 1. 获取所有的资源 LambdaQueryWrapper sysResourceLambdaQueryWrapper = new LambdaQueryWrapper<>(); @@ -104,7 +105,7 @@ public class SysResourceServiceImpl extends ServiceImpl allResource = this.list(sysResourceLambdaQueryWrapper); // 2. 按应用和模块编码设置map - Map>> appModularResources = divideResources(allResource); + Map>> appModularResources = divideResources(allResource); // 3. 创建模块code和模块name的映射 Map modularCodeName = createModularCodeName(allResource); @@ -335,13 +336,13 @@ public class SysResourceServiceImpl extends ServiceImpl>> divideResources(List sysResources) { - HashMap>> appModularResources = new HashMap<>(); + private Map>> divideResources(List sysResources) { + HashMap>> appModularResources = new HashMap<>(); for (SysResource sysResource : sysResources) { // 查询应用下有无资源 String appCode = sysResource.getAppCode(); - Map> modularResource = appModularResources.get(appCode); + Map> modularResource = appModularResources.get(appCode); // 该应用下没资源就创建一个map if (modularResource == null) { @@ -349,17 +350,18 @@ public class SysResourceServiceImpl extends ServiceImpl resourceTreeNodes = modularResource.get(sysResource.getModularCode()); + List resourceTreeNodes = modularResource.get(sysResource.getModularCode()); if (resourceTreeNodes == null) { resourceTreeNodes = new ArrayList<>(); } // 将当前资源放入资源集合 - ResourceTreeNode resourceTreeNode = new ResourceTreeNode(); + LayuiApiResourceTreeNode resourceTreeNode = new LayuiApiResourceTreeNode(); resourceTreeNode.setResourceFlag(true); - resourceTreeNode.setNodeName(sysResource.getUrl() + "(" + sysResource.getResourceName() + ")"); - resourceTreeNode.setCode(sysResource.getResourceCode()); - resourceTreeNode.setParentCode(sysResource.getModularCode()); + resourceTreeNode.setTitle(sysResource.getResourceName()); + resourceTreeNode.setId(sysResource.getResourceCode()); + resourceTreeNode.setParentId(sysResource.getModularCode()); + resourceTreeNode.setSpread(false); resourceTreeNodes.add(resourceTreeNode); modularResource.put(sysResource.getModularCode(), resourceTreeNodes); @@ -388,31 +390,33 @@ public class SysResourceServiceImpl extends ServiceImpl createResourceTree(Map>> appModularResources, Map modularCodeName) { + private List createResourceTree(Map>> appModularResources, Map modularCodeName) { - List finalTree = new ArrayList<>(); + List finalTree = new ArrayList<>(); // 按应用遍历应用模块资源集合 for (String appName : appModularResources.keySet()) { // 创建当前应用节点 - ResourceTreeNode appNode = new ResourceTreeNode(); - appNode.setCode(appName); - appNode.setNodeName(appName); + LayuiApiResourceTreeNode appNode = new LayuiApiResourceTreeNode(); + appNode.setId(appName); + appNode.setTitle(appName); + appNode.setSpread(true); appNode.setResourceFlag(false); - appNode.setParentCode(TreeConstants.DEFAULT_PARENT_ID.toString()); + appNode.setParentId(TreeConstants.DEFAULT_PARENT_ID.toString()); // 遍历当前应用下的模块资源 - Map> modularResources = appModularResources.get(appName); + Map> modularResources = appModularResources.get(appName); // 创建模块节点 - ArrayList modularNodes = new ArrayList<>(); + ArrayList modularNodes = new ArrayList<>(); for (String modularCode : modularResources.keySet()) { - ResourceTreeNode modularNode = new ResourceTreeNode(); - modularNode.setCode(modularCode); - modularNode.setNodeName(modularCodeName.get(modularCode)); + LayuiApiResourceTreeNode modularNode = new LayuiApiResourceTreeNode(); + modularNode.setId(modularCode); + modularNode.setTitle(modularCodeName.get(modularCode)); + modularNode.setParentId(appName); + modularNode.setSpread(false); modularNode.setResourceFlag(false); - modularNode.setParentCode(appName); modularNode.setChildren(modularResources.get(modularCode)); modularNodes.add(modularNode); }