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

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.scanner.api.annotation.field.ChineseDescription;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -43,18 +45,18 @@ public class ResourceRequest extends BaseRequest {
private static final long serialVersionUID = 1L;
/**
* id
*/
@ChineseDescription("资源id")
private Long resourceId;
/**
*
*/
@ChineseDescription("应用编码")
private String appCode;
/**
*
*/
@ChineseDescription("资源名称")
private String resourceName;
/**
*
*/
@ -63,11 +65,104 @@ public class ResourceRequest extends BaseRequest {
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;
/**
* 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-
*/

View File

@ -24,19 +24,27 @@
*/
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.rule.pojo.response.ResponseData;
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.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.role.request.SysRoleRequest;
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.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 javax.annotation.Resource;
import java.nio.charset.StandardCharsets;
import java.util.List;
/**
@ -99,4 +107,18 @@ public class ResourceController {
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.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.ResourceRequest;
import cn.stylefeng.roses.kernel.system.modular.resource.entity.SysResource;
@ -102,4 +103,11 @@ public interface SysResourceService extends IService<SysResource> {
*/
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;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.stylefeng.roses.kernel.auth.api.LoginUserApi;
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.system.api.ResourceServiceApi;
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.ResourceRequest;
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);
}
@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
@Transactional(rollbackFor = Exception.class)
public void reportResources(@RequestBody ReportResourceParam reportResourceReq) {