mirror of https://gitee.com/stylefeng/roses
parent
36064fae90
commit
b8e6290940
|
@ -24,6 +24,11 @@ public enum ApiResourceExceptionEnum implements AbstractExceptionEnum {
|
|||
*/
|
||||
OPERATIONS_RESOURCE_NODESNOT_ALLOWED(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + SystemConstants.SYSTEM_EXCEPTION_STEP_CODE + "02", "不允许对资源节点进行操作"),
|
||||
|
||||
/**
|
||||
* 不允许添加视图资源
|
||||
*/
|
||||
ADDING_VIEW_RESOURCES_NOT_ALLOWED(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + SystemConstants.SYSTEM_EXCEPTION_STEP_CODE + "03", "不允许添加视图资源"),
|
||||
|
||||
;
|
||||
|
||||
/**
|
||||
|
|
|
@ -23,14 +23,14 @@ public class ApiResourceRequest extends BaseRequest {
|
|||
/**
|
||||
* 接口信息主键
|
||||
*/
|
||||
@NotNull(message = "接口信息主键不能为空", groups = {detail.class, edit.class, delete.class, record.class})
|
||||
@NotNull(message = "接口信息主键不能为空", groups = {detail.class, reset.class, edit.class, delete.class, record.class})
|
||||
@ChineseDescription("接口信息主键")
|
||||
private Long apiResourceId;
|
||||
|
||||
/**
|
||||
* 资源分组数据主键
|
||||
*/
|
||||
@NotNull(message = "资源分组数据主键不能为空", groups = {add.class, edit.class})
|
||||
@NotNull(message = "资源分组数据主键不能为空", groups = {add.class, edit.class, reset.class})
|
||||
@ChineseDescription("资源分组数据主键")
|
||||
private Long groupId;
|
||||
|
||||
|
@ -64,7 +64,7 @@ public class ApiResourceRequest extends BaseRequest {
|
|||
/**
|
||||
* 资源唯一编码,关联sys_resource表的code
|
||||
*/
|
||||
@NotBlank(message = "资源唯一编码,关联sys_resource表的code不能为空", groups = {add.class, allField.class})
|
||||
@NotBlank(message = "资源唯一编码,关联sys_resource表的code不能为空", groups = {add.class, reset.class, allField.class})
|
||||
@ChineseDescription("资源唯一编码,关联sys_resource表的code")
|
||||
private String resourceCode;
|
||||
|
||||
|
@ -125,4 +125,11 @@ public class ApiResourceRequest extends BaseRequest {
|
|||
public @interface allField {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 重置
|
||||
*/
|
||||
public @interface reset {
|
||||
|
||||
}
|
||||
}
|
|
@ -109,6 +109,19 @@ public class ApiGroupController {
|
|||
return new SuccessResponseData(apiGroupTreeWrapperList);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取分组树
|
||||
*
|
||||
* @return {@link ResponseData}
|
||||
* @author majianguo
|
||||
* @date 2021/5/22 上午11:00
|
||||
**/
|
||||
@GetResource(name = "获取分组树", path = "/apiGroup/groupTree")
|
||||
public ResponseData groupTree(ApiGroupRequest apiGroupRequest) {
|
||||
List<ApiGroupTreeWrapper> apiGroupTreeWrapperList = apiGroupService.groupTree(apiGroupRequest);
|
||||
return new SuccessResponseData(apiGroupTreeWrapperList);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取树(平级)
|
||||
*
|
||||
|
|
|
@ -62,6 +62,18 @@ public class ApiResourceController {
|
|||
return new SuccessResponseData();
|
||||
}
|
||||
|
||||
/**
|
||||
* 重置
|
||||
*
|
||||
* @return {@link cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData}
|
||||
* @author majianguo
|
||||
* @date 2021/5/27 下午3:33
|
||||
**/
|
||||
@PostResource(name = "编辑", path = "/apiResource/reset")
|
||||
public ResponseData reset(@RequestBody @Validated(ApiResourceRequest.reset.class) ApiResourceRequest apiResourceRequest) {
|
||||
return new SuccessResponseData(apiResourceService.reset(apiResourceRequest));
|
||||
}
|
||||
|
||||
/**
|
||||
* 请求记录
|
||||
*
|
||||
|
@ -107,7 +119,6 @@ public class ApiResourceController {
|
|||
return new SuccessResponseData(apiResourceService.findPage(apiResourceRequest));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 查询该资源所有字段
|
||||
*
|
||||
|
|
|
@ -89,4 +89,13 @@ public interface ApiGroupService extends IService<ApiGroup> {
|
|||
* @date 2021/5/22 上午11:11
|
||||
**/
|
||||
List<ApiGroupTreeWrapper> peersTree(ApiGroupRequest apiGroupRequest);
|
||||
|
||||
/**
|
||||
* 获取分组树
|
||||
*
|
||||
* @return {@link List< ApiGroupTreeWrapper>}
|
||||
* @author majianguo
|
||||
* @date 2021/5/27 下午2:49
|
||||
**/
|
||||
List<ApiGroupTreeWrapper> groupTree(ApiGroupRequest apiGroupRequest);
|
||||
}
|
|
@ -83,9 +83,16 @@ public interface ApiResourceService extends IService<ApiResource> {
|
|||
/**
|
||||
* 查询该资源所有字段
|
||||
*
|
||||
* @return {@link List<cn.stylefeng.guns.modular.system.apiresourcefield.entity.ApiResourceField>}
|
||||
* @author majianguo
|
||||
* @date 2021/5/24 下午6:45
|
||||
**/
|
||||
List<ApiResourceField> allField(ApiResourceRequest apiResourceRequest);
|
||||
|
||||
/**
|
||||
* 重置
|
||||
*
|
||||
* @author majianguo
|
||||
* @date 2021/5/27 下午3:34
|
||||
**/
|
||||
ApiResource reset(ApiResourceRequest apiResourceRequest);
|
||||
}
|
|
@ -75,6 +75,10 @@ public class ApiGroupServiceImpl extends ServiceImpl<ApiGroupMapper, ApiGroup> i
|
|||
apiGroupLambdaQueryWrapper.like(ApiGroup::getGroupPids, SymbolConstant.LEFT_SQUARE_BRACKETS + apiGroup.getGroupId() + SymbolConstant.RIGHT_SQUARE_BRACKETS);
|
||||
List<ApiGroup> apiGroups = this.list(apiGroupLambdaQueryWrapper);
|
||||
|
||||
// 把分组本身加入进去
|
||||
apiGroups.add(apiGroup);
|
||||
|
||||
// 获取所有分组ID
|
||||
Set<Long> apiGroupIdSet = null;
|
||||
if (ObjectUtil.isNotEmpty(apiGroups)) {
|
||||
apiGroupIdSet = apiGroups.stream().map(ApiGroup::getGroupId).collect(Collectors.toSet());
|
||||
|
@ -158,6 +162,51 @@ public class ApiGroupServiceImpl extends ServiceImpl<ApiGroupMapper, ApiGroup> i
|
|||
|
||||
@Override
|
||||
public List<ApiGroupTreeWrapper> peersTree(ApiGroupRequest apiGroupRequest) {
|
||||
// 结果
|
||||
List<ApiGroupTreeWrapper> allApiGroupTreeWrapperList = new ArrayList<>();
|
||||
|
||||
// 查询所有分组
|
||||
LambdaQueryWrapper<ApiGroup> wrapper = new LambdaQueryWrapper<>();
|
||||
if (ObjectUtil.isNotEmpty(apiGroupRequest.getGroupId())) {
|
||||
wrapper.notLike(ApiGroup::getGroupPids, SymbolConstant.LEFT_SQUARE_BRACKETS + apiGroupRequest.getGroupId() + SymbolConstant.RIGHT_SQUARE_BRACKETS);
|
||||
wrapper.ne(ApiGroup::getGroupId, apiGroupRequest.getGroupId());
|
||||
}
|
||||
List<ApiGroup> apiGroups = this.list(wrapper);
|
||||
|
||||
if (ObjectUtil.isNotEmpty(apiGroups)) {
|
||||
for (ApiGroup apiGroup : apiGroups) {
|
||||
ApiGroupTreeWrapper item = new ApiGroupTreeWrapper();
|
||||
item.setId(apiGroup.getGroupId());
|
||||
item.setPid(apiGroup.getGroupPid());
|
||||
item.setName(apiGroup.getGroupName());
|
||||
item.setType(NodeTypeEnums.LEAF_NODE.getType());
|
||||
item.setSort(apiGroup.getGroupSort());
|
||||
item.setData(apiGroup);
|
||||
item.setSlotsValue();
|
||||
allApiGroupTreeWrapperList.add(item);
|
||||
}
|
||||
}
|
||||
|
||||
// 查询所有资源
|
||||
List<ApiResource> apiResourceList = this.apiResourceService.list();
|
||||
if (ObjectUtil.isNotEmpty(apiResourceList)) {
|
||||
for (ApiResource apiResource : apiResourceList) {
|
||||
ApiGroupTreeWrapper item = new ApiGroupTreeWrapper();
|
||||
item.setId(apiResource.getApiResourceId());
|
||||
item.setPid(apiResource.getGroupId());
|
||||
item.setName(apiResource.getApiAlias());
|
||||
item.setType(NodeTypeEnums.DATA_NODE.getType());
|
||||
item.setSort(apiResource.getResourceSort());
|
||||
item.setData(apiResource);
|
||||
item.setSlotsValue();
|
||||
allApiGroupTreeWrapperList.add(item);
|
||||
}
|
||||
}
|
||||
return allApiGroupTreeWrapperList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ApiGroupTreeWrapper> groupTree(ApiGroupRequest apiGroupRequest) {
|
||||
// 结果
|
||||
List<ApiGroupTreeWrapper> apiGroupTreeWrapperList = new ArrayList<>();
|
||||
|
||||
|
@ -183,22 +232,7 @@ public class ApiGroupServiceImpl extends ServiceImpl<ApiGroupMapper, ApiGroup> i
|
|||
}
|
||||
}
|
||||
|
||||
// 查询所有资源
|
||||
List<ApiResource> apiResourceList = this.apiResourceService.list();
|
||||
if (ObjectUtil.isNotEmpty(apiResourceList)) {
|
||||
for (ApiResource apiResource : apiResourceList) {
|
||||
ApiGroupTreeWrapper item = new ApiGroupTreeWrapper();
|
||||
item.setId(apiResource.getApiResourceId());
|
||||
item.setPid(apiResource.getGroupId());
|
||||
item.setName(apiResource.getApiAlias());
|
||||
item.setType(NodeTypeEnums.DATA_NODE.getType());
|
||||
item.setSort(apiResource.getResourceSort());
|
||||
item.setData(apiResource);
|
||||
item.setSlotsValue();
|
||||
apiGroupTreeWrapperList.add(item);
|
||||
}
|
||||
}
|
||||
return apiGroupTreeWrapperList;
|
||||
return this.createTree(apiGroupTreeWrapperList);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -27,6 +27,7 @@ import cn.stylefeng.roses.kernel.system.modular.resource.service.ApiResourceServ
|
|||
import cn.stylefeng.roses.kernel.system.modular.resource.service.SysResourceService;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.alibaba.fastjson.parser.Feature;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
|
@ -71,19 +72,26 @@ public class ApiResourceServiceImpl extends ServiceImpl<ApiResourceMapper, ApiRe
|
|||
|
||||
List<SysResource> resourceList = new ArrayList<>();
|
||||
|
||||
// 根据资源CODE查询资源信息
|
||||
// 资源查询条件
|
||||
LambdaQueryWrapper<SysResource> sysResourceLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
sysResourceLambdaQueryWrapper.eq(SysResource::getResourceCode, apiResourceRequest.getResourceCode());
|
||||
SysResource sysResources = sysResourceService.getOne(sysResourceLambdaQueryWrapper);
|
||||
|
||||
// 如果是控制器名称,则查询模块下的所有资源
|
||||
if (!apiResourceRequest.getResourceCode().contains("$")) {
|
||||
sysResourceLambdaQueryWrapper.clear();
|
||||
sysResourceLambdaQueryWrapper.eq(SysResource::getModularCode, apiResourceRequest.getResourceCode());
|
||||
sysResourceLambdaQueryWrapper.eq(SysResource::getViewFlag, YesOrNotEnum.N.getCode());
|
||||
List<SysResource> sysResourceList = sysResourceService.list(sysResourceLambdaQueryWrapper);
|
||||
resourceList.addAll(sysResourceList);
|
||||
} else {
|
||||
|
||||
// 根据资源CODE查询资源信息
|
||||
sysResourceLambdaQueryWrapper.eq(SysResource::getResourceCode, apiResourceRequest.getResourceCode());
|
||||
SysResource sysResources = sysResourceService.getOne(sysResourceLambdaQueryWrapper);
|
||||
|
||||
// 如果是视图就报错
|
||||
if (YesOrNotEnum.Y.getCode().equals(sysResources.getViewFlag())) {
|
||||
throw new SystemModularException(ApiResourceExceptionEnum.ADDING_VIEW_RESOURCES_NOT_ALLOWED);
|
||||
}
|
||||
|
||||
resourceList.add(sysResources);
|
||||
}
|
||||
|
||||
|
@ -115,7 +123,7 @@ public class ApiResourceServiceImpl extends ServiceImpl<ApiResourceMapper, ApiRe
|
|||
apiResource.setResourceCode(sysResource.getResourceCode());
|
||||
|
||||
// 设置排序
|
||||
if (ObjectUtil.isNotEmpty(apiResourceRequest.getResourceSort())) {
|
||||
if (ObjectUtil.isEmpty(apiResourceRequest.getResourceSort())) {
|
||||
index = index.add(BigDecimal.ONE);
|
||||
apiResource.setResourceSort(index);
|
||||
}
|
||||
|
@ -132,7 +140,7 @@ public class ApiResourceServiceImpl extends ServiceImpl<ApiResourceMapper, ApiRe
|
|||
// 处理所有请求字段
|
||||
if (ObjectUtil.isNotEmpty(fillResourceDetail.getParamFieldDescriptions())) {
|
||||
for (FieldMetadata fieldMetadata : fillResourceDetail.getParamFieldDescriptions()) {
|
||||
ApiResourceField conversion = this.conversion(apiResource.getApiResourceId(), fieldMetadata);
|
||||
ApiResourceField conversion = this.conversion(sysResource, apiResource.getApiResourceId(), fieldMetadata);
|
||||
conversion.setFieldLocation("request");
|
||||
apiResourceFieldList.add(conversion);
|
||||
}
|
||||
|
@ -141,7 +149,7 @@ public class ApiResourceServiceImpl extends ServiceImpl<ApiResourceMapper, ApiRe
|
|||
// 处理所有响应字段
|
||||
if (ObjectUtil.isNotEmpty(fillResourceDetail.getResponseFieldDescriptions())) {
|
||||
for (FieldMetadata fieldDescription : fillResourceDetail.getResponseFieldDescriptions()) {
|
||||
ApiResourceField conversion = this.conversion(apiResource.getApiResourceId(), fieldDescription);
|
||||
ApiResourceField conversion = this.conversion(sysResource, apiResource.getApiResourceId(), fieldDescription);
|
||||
conversion.setFieldLocation("response");
|
||||
apiResourceFieldList.add(conversion);
|
||||
}
|
||||
|
@ -167,6 +175,7 @@ public class ApiResourceServiceImpl extends ServiceImpl<ApiResourceMapper, ApiRe
|
|||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void edit(ApiResourceRequest apiResourceRequest) {
|
||||
|
||||
// 查询旧数据
|
||||
|
@ -283,14 +292,14 @@ public class ApiResourceServiceImpl extends ServiceImpl<ApiResourceMapper, ApiRe
|
|||
if (ObjectUtil.isNotEmpty(fillResourceDetail.getParamFieldDescriptions())) {
|
||||
// 处理所有请求字段
|
||||
for (FieldMetadata fieldMetadata : fillResourceDetail.getParamFieldDescriptions()) {
|
||||
ApiResourceField conversion = this.conversion(null, fieldMetadata);
|
||||
ApiResourceField conversion = this.conversion(sysResources, null, fieldMetadata);
|
||||
conversion.setFieldLocation("request");
|
||||
apiResourceFieldList.add(conversion);
|
||||
}
|
||||
|
||||
// 处理所有响应字段
|
||||
for (FieldMetadata fieldDescription : fillResourceDetail.getResponseFieldDescriptions()) {
|
||||
ApiResourceField conversion = this.conversion(null, fieldDescription);
|
||||
ApiResourceField conversion = this.conversion(sysResources, null, fieldDescription);
|
||||
conversion.setFieldLocation("response");
|
||||
apiResourceFieldList.add(conversion);
|
||||
}
|
||||
|
@ -298,6 +307,19 @@ public class ApiResourceServiceImpl extends ServiceImpl<ApiResourceMapper, ApiRe
|
|||
return apiResourceFieldList;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ApiResource reset(ApiResourceRequest apiResourceRequest) {
|
||||
// 删除原有的
|
||||
this.del(apiResourceRequest);
|
||||
|
||||
// 新增一个新的
|
||||
this.add(apiResourceRequest);
|
||||
|
||||
// 查询并返回结果
|
||||
return this.getById(apiResourceRequest.getApiResourceId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ApiResource> findList(ApiResourceRequest apiResourceRequest) {
|
||||
LambdaQueryWrapper<ApiResource> wrapper = this.createWrapper(apiResourceRequest);
|
||||
|
@ -355,13 +377,13 @@ public class ApiResourceServiceImpl extends ServiceImpl<ApiResourceMapper, ApiRe
|
|||
}
|
||||
|
||||
/**
|
||||
* 转换
|
||||
* 转换字段信息
|
||||
*
|
||||
* @return {@link ApiResourceField}
|
||||
* @author majianguo
|
||||
* @date 2021/5/22 下午2:44
|
||||
**/
|
||||
private ApiResourceField conversion(Long apiResourceId, FieldMetadata fieldMetadata) {
|
||||
private ApiResourceField conversion(SysResource sysResource, Long apiResourceId, FieldMetadata fieldMetadata) {
|
||||
ApiResourceField item = new ApiResourceField();
|
||||
item.setApiResourceId(apiResourceId);
|
||||
item.setFieldCode(fieldMetadata.getFieldName());
|
||||
|
@ -373,16 +395,43 @@ public class ApiResourceServiceImpl extends ServiceImpl<ApiResourceMapper, ApiRe
|
|||
}
|
||||
|
||||
// 是否必填
|
||||
Set<String> annotations = fieldMetadata.getAnnotations();
|
||||
if (ObjectUtil.isNotEmpty(annotations)) {
|
||||
for (String annotationName : annotations) {
|
||||
if ("NotBlank".equalsIgnoreCase(annotationName) || "NotNull".equalsIgnoreCase(annotationName)) {
|
||||
item.setFieldRequired(YesOrNotEnum.Y.getCode());
|
||||
}
|
||||
}
|
||||
}
|
||||
item.setFieldRequired(this.isRequired(sysResource, fieldMetadata) ? YesOrNotEnum.Y.getCode() : YesOrNotEnum.N.getCode());
|
||||
|
||||
// 字段校验消息
|
||||
item.setFieldValidationMsg(fieldMetadata.getValidationMessages());
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否必填
|
||||
*
|
||||
* @author majianguo
|
||||
* @date 2021/5/27 下午3:15
|
||||
**/
|
||||
private boolean isRequired(SysResource sysResource, FieldMetadata fieldMetadata) {
|
||||
Set<String> annotations = fieldMetadata.getAnnotations();
|
||||
if (ObjectUtil.isNotEmpty(annotations)) {
|
||||
// 资源校验注解
|
||||
Set<String> validateGroups = JSON.parseObject(sysResource.getValidateGroups(), Set.class, Feature.SupportAutoType);
|
||||
if (ObjectUtil.isNotEmpty(validateGroups)) {
|
||||
// 注解分组
|
||||
Map<String, Set<String>> groupValidationMessage = fieldMetadata.getGroupValidationMessage();
|
||||
for (String annotationName : annotations) {
|
||||
if ("NotBlank".equalsIgnoreCase(annotationName) || "NotNull".equalsIgnoreCase(annotationName)) {
|
||||
// 查询注解的所有分组,判断当前资源是否符合
|
||||
Set<String> annotationGroups = groupValidationMessage.keySet();
|
||||
for (String group : annotationGroups) {
|
||||
// 当前分组在资源校验注解中,则设置必填
|
||||
if (validateGroups.contains(group)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue