【7.1.1】【menu】增加菜单绑定资源的获取

pull/22/head
fengshuonan 2021-08-08 22:44:01 +08:00
parent 503842bfbc
commit 379fa63118
8 changed files with 188 additions and 21 deletions

View File

@ -0,0 +1,51 @@
/*
* Copyright [2020-2030] [https://www.stylefeng.cn]
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* GunsAPACHE LICENSE 2.0使
*
* 1.LICENSE
* 2.Guns
* 3.
* 4. https://gitee.com/stylefeng/guns
* 5. https://gitee.com/stylefeng/guns
* 6.
*/
package cn.stylefeng.roses.kernel.system.api.pojo.menu;
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.constraints.NotNull;
/**
*
*
* @author fengshuonan
* @date 2021/8/8 22:40
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class SysMenuResourceRequest extends BaseRequest {
/**
* id
*/
@NotNull(message = "业务id不能为空")
@ChineseDescription("业务id")
private Long businessId;
}

View File

@ -56,6 +56,13 @@
<version>${roses.version}</version>
</dependency>
<!--资源模块-->
<dependency>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>system-business-resource</artifactId>
<version>${roses.version}</version>
</dependency>
<!--web模块-->
<dependency>
<groupId>org.springframework.boot</groupId>

View File

@ -0,0 +1,65 @@
/*
* Copyright [2020-2030] [https://www.stylefeng.cn]
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* GunsAPACHE LICENSE 2.0使
*
* 1.LICENSE
* 2.Guns
* 3.
* 4. https://gitee.com/stylefeng/guns
* 5. https://gitee.com/stylefeng/guns
* 6.
*/
package cn.stylefeng.roses.kernel.system.modular.menu.controller;
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.system.api.pojo.menu.SysMenuResourceRequest;
import cn.stylefeng.roses.kernel.system.modular.menu.service.SysMenuResourceService;
import cn.stylefeng.roses.kernel.system.modular.resource.pojo.ResourceTreeNode;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
/**
*
*
* @author fengshuonan
* @date 2021/8/8 22:38
*/
@RestController
@ApiResource(name = "菜单资源控制器")
public class SysMenuResourceController {
@Resource
private SysMenuResourceService sysMenuResourceService;
/**
*
*
* @author fengshuonan
* @date 2021/8/8 22:38
*/
@GetResource(name = "获取菜单的资源分配列表", path = "/sysMenuResource/getMenuResourceList")
public ResponseData getMenuResourceList(@Validated SysMenuResourceRequest sysMenuResourceRequest) {
List<ResourceTreeNode> menuResourceTree = sysMenuResourceService.getMenuResourceTree(sysMenuResourceRequest.getBusinessId());
return new SuccessResponseData(menuResourceTree);
}
}

View File

@ -25,8 +25,11 @@
package cn.stylefeng.roses.kernel.system.modular.menu.service;
import cn.stylefeng.roses.kernel.system.modular.menu.entity.SysMenuResource;
import cn.stylefeng.roses.kernel.system.modular.resource.pojo.ResourceTreeNode;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
*
*
@ -35,5 +38,14 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface SysMenuResourceService extends IService<SysMenuResource> {
/**
*
*
* @param businessId idid
* @return
* @author fengshuonan
* @date 2021/8/8 21:56
*/
List<ResourceTreeNode> getMenuResourceTree(Long businessId);
}

View File

@ -27,9 +27,16 @@ package cn.stylefeng.roses.kernel.system.modular.menu.service.impl;
import cn.stylefeng.roses.kernel.system.modular.menu.entity.SysMenuResource;
import cn.stylefeng.roses.kernel.system.modular.menu.mapper.SysMenuResourceMapper;
import cn.stylefeng.roses.kernel.system.modular.menu.service.SysMenuResourceService;
import cn.stylefeng.roses.kernel.system.modular.resource.pojo.ResourceTreeNode;
import cn.stylefeng.roses.kernel.system.modular.resource.service.SysResourceService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;
/**
*
*
@ -39,4 +46,17 @@ import org.springframework.stereotype.Service;
@Service
public class SysMenuResourceServiceImpl extends ServiceImpl<SysMenuResourceMapper, SysMenuResource> implements SysMenuResourceService {
@Resource
private SysResourceService sysResourceService;
@Override
public List<ResourceTreeNode> getMenuResourceTree(Long businessId) {
LambdaQueryWrapper<SysMenuResource> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SysMenuResource::getBusinessId, businessId);
List<SysMenuResource> list = this.list(wrapper);
List<String> resourceCodes = list.stream().map(SysMenuResource::getResourceCode).collect(Collectors.toList());
return sysResourceService.getResourceList(resourceCodes, true);
}
}

View File

@ -31,7 +31,6 @@ 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;
@ -39,7 +38,6 @@ 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;
@ -92,7 +90,7 @@ public class ResourceController {
*/
@GetResource(name = "Layui版本--获取资源树列表,用于角色分配接口权限", path = "/resource/getRoleResourceTree", responseClass = ResourceTreeNode.class)
public List<ResourceTreeNode> getLateralTree(SysRoleRequest sysRoleRequest) {
return sysResourceService.getResourceTree(sysRoleRequest.getRoleId(), false);
return sysResourceService.getRoleResourceTree(sysRoleRequest.getRoleId(), false);
}
/**
@ -103,7 +101,7 @@ public class ResourceController {
*/
@GetResource(name = "AntdVue版本--获取资源树列表,用于角色分配接口权限", path = "/resource/getRoleResourceTreeAntdv", responseClass = ResourceTreeNode.class)
public ResponseData getLateralTreeChildren(SysRoleRequest sysRoleRequest) {
List<ResourceTreeNode> resourceLateralTree = sysResourceService.getResourceTree(sysRoleRequest.getRoleId(), true);
List<ResourceTreeNode> resourceLateralTree = sysResourceService.getRoleResourceTree(sysRoleRequest.getRoleId(), true);
return new SuccessResponseData(resourceLateralTree);
}

View File

@ -66,14 +66,24 @@ public interface SysResourceService extends IService<SysResource> {
List<SysResource> findList(ResourceRequest resourceRequest);
/**
*
*
*
* @param roleId id
* @param treeBuildFlag true-false-
* @author majianguo
* @date 2021/1/9 15:08
*/
List<ResourceTreeNode> getResourceTree(Long roleId, Boolean treeBuildFlag);
List<ResourceTreeNode> getRoleResourceTree(Long roleId, Boolean treeBuildFlag);
/**
*
*
* @param resourceCodes
* @param treeBuildFlag
* @author fengshuonan
* @date 2021/8/8 22:24
*/
List<ResourceTreeNode> getResourceList(List<String> resourceCodes, Boolean treeBuildFlag);
/**
* api

View File

@ -111,8 +111,22 @@ public class SysResourceServiceImpl extends ServiceImpl<SysResourceMapper, SysRe
}
@Override
public List<ResourceTreeNode> getResourceTree(Long roleId, Boolean treeBuildFlag) {
public List<ResourceTreeNode> getRoleResourceTree(Long roleId, Boolean treeBuildFlag) {
// 查询当前角色已有的接口
List<SysRoleResourceDTO> resourceList = roleServiceApi.getRoleResourceList(Collections.singletonList(roleId));
// 该角色已拥有权限
List<String> alreadyList = new ArrayList<>();
for (SysRoleResourceDTO sysRoleResponse : resourceList) {
alreadyList.add(sysRoleResponse.getResourceCode());
}
return this.getResourceList(alreadyList, treeBuildFlag);
}
@Override
public List<ResourceTreeNode> getResourceList(List<String> resourceCodes, Boolean treeBuildFlag) {
List<ResourceTreeNode> res = new ArrayList<>();
// 获取所有的资源
@ -134,15 +148,6 @@ public class SysResourceServiceImpl extends ServiceImpl<SysResourceMapper, SysRe
List<SysResource> allResource = this.list(sysResourceLambdaQueryWrapper);
// 查询当前角色已有的接口
List<SysRoleResourceDTO> resourceList = roleServiceApi.getRoleResourceList(Collections.singletonList(roleId));
// 该角色已拥有权限
Map<String, SysRoleResourceDTO> alreadyHave = new HashMap<>(resourceList.size());
for (SysRoleResourceDTO sysRoleResponse : resourceList) {
alreadyHave.put(sysRoleResponse.getResourceCode(), sysRoleResponse);
}
// 根据模块名称把资源分类
Map<String, List<SysResource>> modularMap = new HashMap<>();
for (SysResource sysResource : allResource) {
@ -170,8 +175,7 @@ public class SysResourceServiceImpl extends ServiceImpl<SysResourceMapper, SysRe
for (SysResource resource : entry.getValue()) {
ResourceTreeNode subItem = new ResourceTreeNode();
// 判断是否已经拥有
SysRoleResourceDTO resourceResponse = alreadyHave.get(resource.getResourceCode());
if (ObjectUtil.isEmpty(resourceResponse)) {
if (!resourceCodes.contains(resource.getResourceCode())) {
subItem.setChecked(false);
} else {
// 让父类也选择
@ -206,9 +210,9 @@ public class SysResourceServiceImpl extends ServiceImpl<SysResourceMapper, SysRe
// 查询条件
if (ObjectUtil.isNotEmpty(resourceRequest.getResourceName())) {
sysResourceLambdaQueryWrapper
.like(SysResource::getUrl, resourceRequest.getResourceName())
.or()
.like(SysResource::getResourceName, resourceRequest.getResourceName());
.like(SysResource::getUrl, resourceRequest.getResourceName())
.or()
.like(SysResource::getResourceName, resourceRequest.getResourceName());
}
List<SysResource> allResource = this.list(sysResourceLambdaQueryWrapper);