新增接收外部接口资源接口

pull/22/head
rays 2021-06-08 18:32:52 +08:00
parent 1c4ee149c1
commit e4022ecc3f
5 changed files with 207 additions and 12 deletions

View File

@ -0,0 +1,38 @@
package cn.stylefeng.roses.kernel.system.api.pojo.resource;
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
*
*
* @author majianguo
* @date 2021/6/8 2:33
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class ExternalResourceRequest extends BaseRequest {
/**
* code
*/
@NotNull(message = "资源所属应用CODE不能为空", groups = {add.class})
@ChineseDescription("资源所属应用CODE")
private String appCode;
/**
*
*/
@Valid
@NotNull(message = "资源列表不能为空", groups = {add.class})
@ChineseDescription("资源列表")
private List<ResourceRequest> resourceRequestList;
}

View File

@ -26,6 +26,8 @@ package cn.stylefeng.roses.kernel.system.api.pojo.resource;
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest; import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription; import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
@ -43,18 +45,18 @@ public class ResourceRequest extends BaseRequest {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/**
* id
*/
@ChineseDescription("资源id")
private Long resourceId;
/** /**
* *
*/ */
@ChineseDescription("应用编码") @ChineseDescription("应用编码")
private String appCode; private String appCode;
/**
*
*/
@ChineseDescription("资源名称")
private String resourceName;
/** /**
* *
*/ */
@ -63,11 +65,104 @@ public class ResourceRequest extends BaseRequest {
private String resourceCode; private String resourceCode;
/** /**
* *
*/ */
@ChineseDescription("资源地址") @ChineseDescription("资源名称")
private String resourceName;
/**
*
*/
@ChineseDescription("项目编码")
private String projectCode;
/**
*
*/
@ChineseDescription("类名称")
private String className;
/**
*
*/
@ChineseDescription("方法名称")
private String methodName;
/**
*
*/
@ChineseDescription("资源模块编码")
private String modularCode;
/**
*
*/
@ChineseDescription("资源模块名称")
private String modularName;
/**
* ip
*/
@ChineseDescription("资源初始化的服务器ip地址")
private String ipAddress;
/**
* Y-N-
* url '/view'
* htmljson
*
*/
@ChineseDescription("是否是视图类型")
private String viewFlag;
/**
* url
*/
@ChineseDescription("资源url")
private String url; private String url;
/**
* http
*/
@ChineseDescription("http请求方法")
private String httpMethod;
/**
* Y-N-
*/
@ChineseDescription("是否需要登录Y-是N-否")
private String requiredLoginFlag;
/**
* Y-N-
*/
@ChineseDescription("是否需要鉴权Y-是N-否")
private String requiredPermissionFlag;
/**
*
* <p>
* json
*/
@ChineseDescription("需要进行参数校验的分组")
private String validateGroups;
/**
*
* <p>
* json
*/
@ChineseDescription("接口参数的字段描述")
private String paramFieldDescriptions;
/**
*
* <p>
* json
*/
@ChineseDescription("接口返回结果的字段描述")
private String responseFieldDescriptions;
/** /**
* Y-N- * Y-N-
*/ */

View File

@ -24,19 +24,27 @@
*/ */
package cn.stylefeng.roses.kernel.system.modular.resource.controller; package cn.stylefeng.roses.kernel.system.modular.resource.controller;
import cn.hutool.core.codec.Base64Decoder;
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.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.scanner.api.annotation.ApiResource; import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource;
import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource;
import cn.stylefeng.roses.kernel.scanner.api.annotation.PostResource;
import cn.stylefeng.roses.kernel.system.api.pojo.resource.ApiGroupRequest;
import cn.stylefeng.roses.kernel.system.api.pojo.resource.ExternalResourceRequest;
import cn.stylefeng.roses.kernel.system.api.pojo.resource.ResourceRequest; import cn.stylefeng.roses.kernel.system.api.pojo.resource.ResourceRequest;
import cn.stylefeng.roses.kernel.system.api.pojo.role.request.SysRoleRequest; import cn.stylefeng.roses.kernel.system.api.pojo.role.request.SysRoleRequest;
import cn.stylefeng.roses.kernel.system.modular.resource.entity.SysResource; import cn.stylefeng.roses.kernel.system.modular.resource.entity.SysResource;
import cn.stylefeng.roses.kernel.system.modular.resource.pojo.ResourceTreeNode; import cn.stylefeng.roses.kernel.system.modular.resource.pojo.ResourceTreeNode;
import cn.stylefeng.roses.kernel.system.modular.resource.service.SysResourceService; import cn.stylefeng.roses.kernel.system.modular.resource.service.SysResourceService;
import com.alibaba.fastjson.JSON;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.nio.charset.StandardCharsets;
import java.util.List; import java.util.List;
/** /**
@ -58,7 +66,7 @@ public class ResourceController {
* @author fengshuonan * @author fengshuonan
* @date 2020/11/24 19:47 * @date 2020/11/24 19:47
*/ */
@GetResource(name = "获取资源列表", path = "/resource/pageList",responseClass = SysResource.class) @GetResource(name = "获取资源列表", path = "/resource/pageList", responseClass = SysResource.class)
public ResponseData pageList(ResourceRequest resourceRequest) { public ResponseData pageList(ResourceRequest resourceRequest) {
PageResult<SysResource> result = this.sysResourceService.findPage(resourceRequest); PageResult<SysResource> result = this.sysResourceService.findPage(resourceRequest);
return new SuccessResponseData(result); return new SuccessResponseData(result);
@ -70,7 +78,7 @@ public class ResourceController {
* @author fengshuonan * @author fengshuonan
* @date 2020/11/24 19:51 * @date 2020/11/24 19:51
*/ */
@GetResource(name = "获取资源下拉列表", path = "/resource/getMenuResourceList",responseClass = SysResource.class) @GetResource(name = "获取资源下拉列表", path = "/resource/getMenuResourceList", responseClass = SysResource.class)
public ResponseData getMenuResourceList(ResourceRequest resourceRequest) { public ResponseData getMenuResourceList(ResourceRequest resourceRequest) {
List<SysResource> menuResourceList = this.sysResourceService.findList(resourceRequest); List<SysResource> menuResourceList = this.sysResourceService.findList(resourceRequest);
return new SuccessResponseData(menuResourceList); return new SuccessResponseData(menuResourceList);
@ -82,7 +90,7 @@ public class ResourceController {
* @author majianguo * @author majianguo
* @date 2021/1/9 15:07 * @date 2021/1/9 15:07
*/ */
@GetResource(name = "Layui版本--获取资源树列表,用于角色分配接口权限", path = "/resource/getRoleResourceTree",responseClass = ResourceTreeNode.class) @GetResource(name = "Layui版本--获取资源树列表,用于角色分配接口权限", path = "/resource/getRoleResourceTree", responseClass = ResourceTreeNode.class)
public List<ResourceTreeNode> getLateralTree(SysRoleRequest sysRoleRequest) { public List<ResourceTreeNode> getLateralTree(SysRoleRequest sysRoleRequest) {
return sysResourceService.getResourceTree(sysRoleRequest.getRoleId(), false); return sysResourceService.getResourceTree(sysRoleRequest.getRoleId(), false);
} }
@ -93,10 +101,24 @@ public class ResourceController {
* @author majianguo * @author majianguo
* @date 2021/1/9 15:07 * @date 2021/1/9 15:07
*/ */
@GetResource(name = "AntdVue版本--获取资源树列表,用于角色分配接口权限", path = "/resource/getRoleResourceTreeAntdv",responseClass = ResourceTreeNode.class) @GetResource(name = "AntdVue版本--获取资源树列表,用于角色分配接口权限", path = "/resource/getRoleResourceTreeAntdv", responseClass = ResourceTreeNode.class)
public ResponseData getLateralTreeChildren(SysRoleRequest sysRoleRequest) { public ResponseData getLateralTreeChildren(SysRoleRequest sysRoleRequest) {
List<ResourceTreeNode> resourceLateralTree = sysResourceService.getResourceTree(sysRoleRequest.getRoleId(), true); List<ResourceTreeNode> resourceLateralTree = sysResourceService.getResourceTree(sysRoleRequest.getRoleId(), true);
return new SuccessResponseData(resourceLateralTree); return new SuccessResponseData(resourceLateralTree);
} }
/**
*
*
* @return {@link cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData}
* @author majianguo
* @date 2021/6/8 2:30
**/
@PostResource(name = "添加外部资源", path = "/resource/addExternalResource", requiredPermission = false, requiredLogin = false)
public ResponseData addExternalResource(@RequestBody String base64Data) {
String jsonStr = new String(Base64Decoder.decode(base64Data), StandardCharsets.UTF_8);
sysResourceService.addExternalResource(JSON.parseObject(jsonStr, ExternalResourceRequest.class));
return new SuccessResponseData();
}
} }

View File

@ -26,6 +26,7 @@ package cn.stylefeng.roses.kernel.system.modular.resource.service;
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.scanner.api.pojo.resource.ResourceDefinition; import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.ResourceDefinition;
import cn.stylefeng.roses.kernel.system.api.pojo.resource.ExternalResourceRequest;
import cn.stylefeng.roses.kernel.system.api.pojo.resource.LayuiApiResourceTreeNode; import cn.stylefeng.roses.kernel.system.api.pojo.resource.LayuiApiResourceTreeNode;
import cn.stylefeng.roses.kernel.system.api.pojo.resource.ResourceRequest; import cn.stylefeng.roses.kernel.system.api.pojo.resource.ResourceRequest;
import cn.stylefeng.roses.kernel.system.modular.resource.entity.SysResource; import cn.stylefeng.roses.kernel.system.modular.resource.entity.SysResource;
@ -102,4 +103,11 @@ public interface SysResourceService extends IService<SysResource> {
*/ */
void deleteResourceByProjectCode(String projectCode); void deleteResourceByProjectCode(String projectCode);
/**
*
*
* @author majianguo
* @date 2021/6/8 2:40
**/
void addExternalResource(ExternalResourceRequest externalResourceRequest);
} }

View File

@ -24,6 +24,7 @@
*/ */
package cn.stylefeng.roses.kernel.system.modular.resource.service.impl; package cn.stylefeng.roses.kernel.system.modular.resource.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.stylefeng.roses.kernel.auth.api.LoginUserApi; import cn.stylefeng.roses.kernel.auth.api.LoginUserApi;
import cn.stylefeng.roses.kernel.auth.api.context.LoginContext; import cn.stylefeng.roses.kernel.auth.api.context.LoginContext;
@ -42,6 +43,7 @@ import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.ResourceDefinition;
import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.ResourceUrlParam; import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.ResourceUrlParam;
import cn.stylefeng.roses.kernel.system.api.ResourceServiceApi; import cn.stylefeng.roses.kernel.system.api.ResourceServiceApi;
import cn.stylefeng.roses.kernel.system.api.RoleServiceApi; import cn.stylefeng.roses.kernel.system.api.RoleServiceApi;
import cn.stylefeng.roses.kernel.system.api.pojo.resource.ExternalResourceRequest;
import cn.stylefeng.roses.kernel.system.api.pojo.resource.LayuiApiResourceTreeNode; import cn.stylefeng.roses.kernel.system.api.pojo.resource.LayuiApiResourceTreeNode;
import cn.stylefeng.roses.kernel.system.api.pojo.resource.ResourceRequest; import cn.stylefeng.roses.kernel.system.api.pojo.resource.ResourceRequest;
import cn.stylefeng.roses.kernel.system.api.pojo.role.dto.SysRoleResourceDTO; import cn.stylefeng.roses.kernel.system.api.pojo.role.dto.SysRoleResourceDTO;
@ -236,6 +238,36 @@ public class SysResourceServiceImpl extends ServiceImpl<SysResourceMapper, SysRe
this.remove(wrapper); this.remove(wrapper);
} }
@Override
@Transactional(rollbackFor = Exception.class)
public void addExternalResource(ExternalResourceRequest externalResourceRequest) {
if (ObjectUtil.isNotEmpty(externalResourceRequest.getResourceRequestList())) {
String appCode = externalResourceRequest.getResourceRequestList().get(0).getAppCode();
// 删除本app下的所有资源
LambdaQueryWrapper<SysResource> sysResourceLambdaQueryWrapper = new LambdaQueryWrapper<>();
sysResourceLambdaQueryWrapper.eq(SysResource::getAppCode, appCode);
this.remove(sysResourceLambdaQueryWrapper);
// 添加新的资源
List<SysResource> sysResources = externalResourceRequest.getResourceRequestList().stream().map(item -> {
SysResource sysResource = BeanUtil.toBean(item, SysResource.class);
if (ObjectUtil.isEmpty(sysResource.getViewFlag())) {
sysResource.setViewFlag(YesOrNotEnum.N.getCode());
}
// 处理JSON序列号类型
if (ObjectUtil.isNotEmpty(sysResource.getParamFieldDescriptions())) {
sysResource.setParamFieldDescriptions(sysResource.getParamFieldDescriptions().replaceAll("com.sedinbj.kernel.resource.api.pojo.resource.FieldMetadata", "cn.stylefeng.roses.kernel.scanner.api.pojo.resource.FieldMetadata"));
}
if (ObjectUtil.isNotEmpty(sysResource.getResponseFieldDescriptions())) {
sysResource.setResponseFieldDescriptions(sysResource.getResponseFieldDescriptions().replaceAll("com.sedinbj.kernel.resource.api.pojo.resource.FieldMetadata", "cn.stylefeng.roses.kernel.scanner.api.pojo.resource.FieldMetadata"));
}
return sysResource;
}).collect(Collectors.toList());
this.saveBatch(sysResources);
}
}
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void reportResources(@RequestBody ReportResourceParam reportResourceReq) { public void reportResources(@RequestBody ReportResourceParam reportResourceReq) {