From cb6f3e9aa01de0333abeb9dfd8669abf57b4bdb1 Mon Sep 17 00:00:00 2001
From: fengshuonan <sn93@qq.com>
Date: Tue, 10 Aug 2021 18:50:48 +0800
Subject: [PATCH] =?UTF-8?q?=E3=80=907.1.1=E3=80=91=E3=80=90role=E3=80=91?=
 =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=A7=92=E8=89=B2=E7=BB=91=E5=AE=9A=E6=8E=A5?=
 =?UTF-8?q?=E5=8F=A3=EF=BC=8C=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../api/pojo/role/request/SysRoleRequest.java | 21 ++++++++++++++-
 .../role/controller/SysRoleController.java    | 12 +++++++++
 .../role/service/SysRoleResourceService.java  | 10 ++++++-
 .../impl/SysRoleResourceServiceImpl.java      | 27 +++++++++++++++++++
 4 files changed, 68 insertions(+), 2 deletions(-)

diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/pojo/role/request/SysRoleRequest.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/pojo/role/request/SysRoleRequest.java
index dce804452..eef112cf7 100644
--- a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/pojo/role/request/SysRoleRequest.java
+++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/pojo/role/request/SysRoleRequest.java
@@ -49,7 +49,7 @@ public class SysRoleRequest extends BaseRequest {
     /**
      * 主键
      */
-    @NotNull(message = "roleId不能为空", groups = {edit.class, delete.class, detail.class, updateStatus.class, grantResource.class, grantDataScope.class, grantMenuButton.class})
+    @NotNull(message = "roleId不能为空", groups = {edit.class, delete.class, detail.class, updateStatus.class, grantResource.class, grantResourceV2.class, grantDataScope.class, grantMenuButton.class})
     @ChineseDescription("主键")
     private Long roleId;
 
@@ -120,6 +120,18 @@ public class SysRoleRequest extends BaseRequest {
     @ChineseDescription("授权资源")
     private List<String> grantResourceList;
 
+    /**
+     * 授权资源,模块组包含的所有资源
+     */
+    @ChineseDescription("授权资源,模块组包含的所有资源")
+    private List<String> modularTotalResource;
+
+    /**
+     * 授权资源,模块组选中的资源
+     */
+    @ChineseDescription("授权资源,模块组选中的资源")
+    private List<String> selectedResource;
+
     /**
      * 授权数据
      */
@@ -154,6 +166,13 @@ public class SysRoleRequest extends BaseRequest {
 
     }
 
+    /**
+     * 参数校验分组:授权资源
+     */
+    public @interface grantResourceV2 {
+
+    }
+
     /**
      * 参数校验分组:授权数据
      */
diff --git a/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/controller/SysRoleController.java b/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/controller/SysRoleController.java
index 59044f025..59fd3460a 100644
--- a/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/controller/SysRoleController.java
+++ b/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/controller/SysRoleController.java
@@ -128,6 +128,18 @@ public class SysRoleController {
         return new SuccessResponseData();
     }
 
+    /**
+     * 角色绑定接口数据
+     *
+     * @author fengshuonan
+     * @date 2021/8/10 18:23
+     */
+    @PostResource(name = "角色绑定接口数据V2", path = "/sysRole/grantResourceV2")
+    public ResponseData grantResourceV2(@RequestBody @Validated(SysRoleRequest.grantResourceV2.class) SysRoleRequest sysRoleRequest) {
+        sysRoleResourceService.grantResourceV2(sysRoleRequest);
+        return new SuccessResponseData();
+    }
+
     /**
      * 角色授权菜单和按钮
      *
diff --git a/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/service/SysRoleResourceService.java b/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/service/SysRoleResourceService.java
index 56ccde461..e7670c4c9 100644
--- a/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/service/SysRoleResourceService.java
+++ b/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/service/SysRoleResourceService.java
@@ -24,8 +24,8 @@
  */
 package cn.stylefeng.roses.kernel.system.modular.role.service;
 
-import cn.stylefeng.roses.kernel.system.modular.role.entity.SysRoleResource;
 import cn.stylefeng.roses.kernel.system.api.pojo.role.request.SysRoleRequest;
+import cn.stylefeng.roses.kernel.system.modular.role.entity.SysRoleResource;
 import com.baomidou.mybatisplus.extension.service.IService;
 
 import java.util.List;
@@ -47,6 +47,14 @@ public interface SysRoleResourceService extends IService<SysRoleResource> {
      */
     void grantResource(SysRoleRequest sysRoleRequest);
 
+    /**
+     * 角色授权接口资源
+     *
+     * @author fengshuonan
+     * @date 2021/8/10 18:28
+     */
+    void grantResourceV2(SysRoleRequest sysRoleRequest);
+
     /**
      * 根据资源id集合删除角色关联的资源
      *
diff --git a/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/service/impl/SysRoleResourceServiceImpl.java b/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/service/impl/SysRoleResourceServiceImpl.java
index 96b86ce33..2c7e5ee3d 100644
--- a/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/service/impl/SysRoleResourceServiceImpl.java
+++ b/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/service/impl/SysRoleResourceServiceImpl.java
@@ -24,12 +24,14 @@
  */
 package cn.stylefeng.roses.kernel.system.modular.role.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import cn.stylefeng.roses.kernel.cache.api.CacheOperatorApi;
 import cn.stylefeng.roses.kernel.system.api.pojo.role.request.SysRoleRequest;
 import cn.stylefeng.roses.kernel.system.modular.role.entity.SysRoleResource;
 import cn.stylefeng.roses.kernel.system.modular.role.mapper.SysRoleResourceMapper;
 import cn.stylefeng.roses.kernel.system.modular.role.service.SysRoleResourceService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -79,6 +81,31 @@ public class SysRoleResourceServiceImpl extends ServiceImpl<SysRoleResourceMappe
         this.saveBatch(sysRoleResources);
     }
 
+    @Override
+    public void grantResourceV2(SysRoleRequest sysRoleRequest) {
+        // 先将该业务下,模块下的所有资源删除掉
+        List<String> modularTotalResource = sysRoleRequest.getModularTotalResource();
+        if (ObjectUtil.isNotEmpty(modularTotalResource)) {
+            LambdaUpdateWrapper<SysRoleResource> wrapper = new LambdaUpdateWrapper<>();
+            wrapper.in(SysRoleResource::getResourceCode, modularTotalResource);
+            wrapper.eq(SysRoleResource::getRoleId, sysRoleRequest.getRoleId());
+            this.remove(wrapper);
+        }
+
+        // 再将该业务下,需要绑定的资源添加上
+        List<String> selectedResource = sysRoleRequest.getSelectedResource();
+        if (ObjectUtil.isNotEmpty(selectedResource)) {
+            ArrayList<SysRoleResource> menuResources = new ArrayList<>();
+            for (String resourceCode : selectedResource) {
+                SysRoleResource sysRoleResource = new SysRoleResource();
+                sysRoleResource.setRoleId(sysRoleRequest.getRoleId());
+                sysRoleResource.setResourceCode(resourceCode);
+                menuResources.add(sysRoleResource);
+            }
+            this.saveBatch(menuResources, menuResources.size());
+        }
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void deleteRoleResourceListByResourceIds(List<Long> resourceIds) {