mirror of https://gitee.com/stylefeng/roses
【api】优化生成api接口的两个接口
parent
a802e41c31
commit
504aa0d1ed
|
@ -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;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否是资源标识
|
||||||
|
* <p>
|
||||||
|
* true-是资源标识
|
||||||
|
* false-虚拟节点,不是一个具体资源
|
||||||
|
*/
|
||||||
|
private Boolean resourceFlag;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 子节点的集合
|
||||||
|
*/
|
||||||
|
private List<LayuiApiResourceTreeNode> children;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getNodeId() {
|
||||||
|
return this.id;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getNodeParentId() {
|
||||||
|
return this.parentId;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setChildrenNodes(List childrenNodes) {
|
||||||
|
this.children = childrenNodes;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -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<LayuiApiResourceTreeNode> 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -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.db.api.pojo.page.PageResult;
|
||||||
import cn.stylefeng.roses.kernel.resource.api.annotation.ApiResource;
|
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.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.entity.SysResource;
|
||||||
import cn.stylefeng.roses.kernel.resource.modular.pojo.ResourceTreeNode;
|
import cn.stylefeng.roses.kernel.resource.modular.pojo.ResourceTreeNode;
|
||||||
import cn.stylefeng.roses.kernel.resource.modular.service.SysResourceService;
|
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.ResponseData;
|
||||||
import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData;
|
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.resource.request.ResourceRequest;
|
||||||
import cn.stylefeng.roses.kernel.system.pojo.role.request.SysRoleRequest;
|
import cn.stylefeng.roses.kernel.system.pojo.role.request.SysRoleRequest;
|
||||||
import org.springframework.validation.annotation.Validated;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
@ -55,18 +52,6 @@ public class ResourceController {
|
||||||
return new SuccessResponseData(menuResourceList);
|
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<ResourceTreeNode> resourceTree = sysResourceService.getResourceTree();
|
|
||||||
return new SuccessResponseData(resourceTree);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取资源平级树列表,用于分配接口权限(适用于layui版本)
|
* 获取资源平级树列表,用于分配接口权限(适用于layui版本)
|
||||||
*
|
*
|
||||||
|
@ -90,16 +75,4 @@ public class ResourceController {
|
||||||
return new SuccessResponseData(resourceLateralTree);
|
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.api.pojo.resource.ResourceDefinition;
|
||||||
import cn.stylefeng.roses.kernel.resource.modular.entity.SysResource;
|
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.pojo.ResourceTreeNode;
|
||||||
|
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.resource.request.ResourceRequest;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
|
||||||
|
@ -55,7 +56,7 @@ public interface SysResourceService extends IService<SysResource> {
|
||||||
* @author fengshuonan
|
* @author fengshuonan
|
||||||
* @date 2020/12/18 15:06
|
* @date 2020/12/18 15:06
|
||||||
*/
|
*/
|
||||||
List<ResourceTreeNode> getResourceTree();
|
List<LayuiApiResourceTreeNode> getResourceTree();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取资源的详情
|
* 获取资源的详情
|
||||||
|
|
|
@ -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.ResourceServiceApi;
|
||||||
import cn.stylefeng.roses.kernel.system.RoleServiceApi;
|
import cn.stylefeng.roses.kernel.system.RoleServiceApi;
|
||||||
import cn.stylefeng.roses.kernel.system.UserServiceApi;
|
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.resource.request.ResourceRequest;
|
||||||
import cn.stylefeng.roses.kernel.system.pojo.role.response.SysRoleResourceResponse;
|
import cn.stylefeng.roses.kernel.system.pojo.role.response.SysRoleResourceResponse;
|
||||||
import cn.stylefeng.roses.kernel.system.pojo.user.SysUserResponse;
|
import cn.stylefeng.roses.kernel.system.pojo.user.SysUserResponse;
|
||||||
|
@ -96,7 +97,7 @@ public class SysResourceServiceImpl extends ServiceImpl<SysResourceMapper, SysRe
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<ResourceTreeNode> getResourceTree() {
|
public List<LayuiApiResourceTreeNode> getResourceTree() {
|
||||||
|
|
||||||
// 1. 获取所有的资源
|
// 1. 获取所有的资源
|
||||||
LambdaQueryWrapper<SysResource> sysResourceLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<SysResource> sysResourceLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
@ -104,7 +105,7 @@ public class SysResourceServiceImpl extends ServiceImpl<SysResourceMapper, SysRe
|
||||||
List<SysResource> allResource = this.list(sysResourceLambdaQueryWrapper);
|
List<SysResource> allResource = this.list(sysResourceLambdaQueryWrapper);
|
||||||
|
|
||||||
// 2. 按应用和模块编码设置map
|
// 2. 按应用和模块编码设置map
|
||||||
Map<String, Map<String, List<ResourceTreeNode>>> appModularResources = divideResources(allResource);
|
Map<String, Map<String, List<LayuiApiResourceTreeNode>>> appModularResources = divideResources(allResource);
|
||||||
|
|
||||||
// 3. 创建模块code和模块name的映射
|
// 3. 创建模块code和模块name的映射
|
||||||
Map<String, String> modularCodeName = createModularCodeName(allResource);
|
Map<String, String> modularCodeName = createModularCodeName(allResource);
|
||||||
|
@ -335,13 +336,13 @@ public class SysResourceServiceImpl extends ServiceImpl<SysResourceMapper, SysRe
|
||||||
* @author fengshuonan
|
* @author fengshuonan
|
||||||
* @date 2020/12/18 15:34
|
* @date 2020/12/18 15:34
|
||||||
*/
|
*/
|
||||||
private Map<String, Map<String, List<ResourceTreeNode>>> divideResources(List<SysResource> sysResources) {
|
private Map<String, Map<String, List<LayuiApiResourceTreeNode>>> divideResources(List<SysResource> sysResources) {
|
||||||
HashMap<String, Map<String, List<ResourceTreeNode>>> appModularResources = new HashMap<>();
|
HashMap<String, Map<String, List<LayuiApiResourceTreeNode>>> appModularResources = new HashMap<>();
|
||||||
for (SysResource sysResource : sysResources) {
|
for (SysResource sysResource : sysResources) {
|
||||||
|
|
||||||
// 查询应用下有无资源
|
// 查询应用下有无资源
|
||||||
String appCode = sysResource.getAppCode();
|
String appCode = sysResource.getAppCode();
|
||||||
Map<String, List<ResourceTreeNode>> modularResource = appModularResources.get(appCode);
|
Map<String, List<LayuiApiResourceTreeNode>> modularResource = appModularResources.get(appCode);
|
||||||
|
|
||||||
// 该应用下没资源就创建一个map
|
// 该应用下没资源就创建一个map
|
||||||
if (modularResource == null) {
|
if (modularResource == null) {
|
||||||
|
@ -349,17 +350,18 @@ public class SysResourceServiceImpl extends ServiceImpl<SysResourceMapper, SysRe
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询当前资源的模块,有没有在appModularResources存在
|
// 查询当前资源的模块,有没有在appModularResources存在
|
||||||
List<ResourceTreeNode> resourceTreeNodes = modularResource.get(sysResource.getModularCode());
|
List<LayuiApiResourceTreeNode> resourceTreeNodes = modularResource.get(sysResource.getModularCode());
|
||||||
if (resourceTreeNodes == null) {
|
if (resourceTreeNodes == null) {
|
||||||
resourceTreeNodes = new ArrayList<>();
|
resourceTreeNodes = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 将当前资源放入资源集合
|
// 将当前资源放入资源集合
|
||||||
ResourceTreeNode resourceTreeNode = new ResourceTreeNode();
|
LayuiApiResourceTreeNode resourceTreeNode = new LayuiApiResourceTreeNode();
|
||||||
resourceTreeNode.setResourceFlag(true);
|
resourceTreeNode.setResourceFlag(true);
|
||||||
resourceTreeNode.setNodeName(sysResource.getUrl() + "(" + sysResource.getResourceName() + ")");
|
resourceTreeNode.setTitle(sysResource.getResourceName());
|
||||||
resourceTreeNode.setCode(sysResource.getResourceCode());
|
resourceTreeNode.setId(sysResource.getResourceCode());
|
||||||
resourceTreeNode.setParentCode(sysResource.getModularCode());
|
resourceTreeNode.setParentId(sysResource.getModularCode());
|
||||||
|
resourceTreeNode.setSpread(false);
|
||||||
resourceTreeNodes.add(resourceTreeNode);
|
resourceTreeNodes.add(resourceTreeNode);
|
||||||
|
|
||||||
modularResource.put(sysResource.getModularCode(), resourceTreeNodes);
|
modularResource.put(sysResource.getModularCode(), resourceTreeNodes);
|
||||||
|
@ -388,31 +390,33 @@ public class SysResourceServiceImpl extends ServiceImpl<SysResourceMapper, SysRe
|
||||||
* @author fengshuonan
|
* @author fengshuonan
|
||||||
* @date 2020/12/18 15:45
|
* @date 2020/12/18 15:45
|
||||||
*/
|
*/
|
||||||
private List<ResourceTreeNode> createResourceTree(Map<String, Map<String, List<ResourceTreeNode>>> appModularResources, Map<String, String> modularCodeName) {
|
private List<LayuiApiResourceTreeNode> createResourceTree(Map<String, Map<String, List<LayuiApiResourceTreeNode>>> appModularResources, Map<String, String> modularCodeName) {
|
||||||
|
|
||||||
List<ResourceTreeNode> finalTree = new ArrayList<>();
|
List<LayuiApiResourceTreeNode> finalTree = new ArrayList<>();
|
||||||
|
|
||||||
// 按应用遍历应用模块资源集合
|
// 按应用遍历应用模块资源集合
|
||||||
for (String appName : appModularResources.keySet()) {
|
for (String appName : appModularResources.keySet()) {
|
||||||
|
|
||||||
// 创建当前应用节点
|
// 创建当前应用节点
|
||||||
ResourceTreeNode appNode = new ResourceTreeNode();
|
LayuiApiResourceTreeNode appNode = new LayuiApiResourceTreeNode();
|
||||||
appNode.setCode(appName);
|
appNode.setId(appName);
|
||||||
appNode.setNodeName(appName);
|
appNode.setTitle(appName);
|
||||||
|
appNode.setSpread(true);
|
||||||
appNode.setResourceFlag(false);
|
appNode.setResourceFlag(false);
|
||||||
appNode.setParentCode(TreeConstants.DEFAULT_PARENT_ID.toString());
|
appNode.setParentId(TreeConstants.DEFAULT_PARENT_ID.toString());
|
||||||
|
|
||||||
// 遍历当前应用下的模块资源
|
// 遍历当前应用下的模块资源
|
||||||
Map<String, List<ResourceTreeNode>> modularResources = appModularResources.get(appName);
|
Map<String, List<LayuiApiResourceTreeNode>> modularResources = appModularResources.get(appName);
|
||||||
|
|
||||||
// 创建模块节点
|
// 创建模块节点
|
||||||
ArrayList<ResourceTreeNode> modularNodes = new ArrayList<>();
|
ArrayList<LayuiApiResourceTreeNode> modularNodes = new ArrayList<>();
|
||||||
for (String modularCode : modularResources.keySet()) {
|
for (String modularCode : modularResources.keySet()) {
|
||||||
ResourceTreeNode modularNode = new ResourceTreeNode();
|
LayuiApiResourceTreeNode modularNode = new LayuiApiResourceTreeNode();
|
||||||
modularNode.setCode(modularCode);
|
modularNode.setId(modularCode);
|
||||||
modularNode.setNodeName(modularCodeName.get(modularCode));
|
modularNode.setTitle(modularCodeName.get(modularCode));
|
||||||
|
modularNode.setParentId(appName);
|
||||||
|
modularNode.setSpread(false);
|
||||||
modularNode.setResourceFlag(false);
|
modularNode.setResourceFlag(false);
|
||||||
modularNode.setParentCode(appName);
|
|
||||||
modularNode.setChildren(modularResources.get(modularCode));
|
modularNode.setChildren(modularResources.get(modularCode));
|
||||||
modularNodes.add(modularNode);
|
modularNodes.add(modularNode);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue