【api】优化生成api接口的两个接口

pull/3/head
fengshuonan 2021-01-14 23:24:38 +08:00
parent a802e41c31
commit 504aa0d1ed
5 changed files with 148 additions and 50 deletions

View File

@ -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;
/**
* apilayui
*
* @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;
}
}

View File

@ -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);
}
}

View File

@ -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);
}
} }

View File

@ -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();
/** /**
* *

View File

@ -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);
} }