tanzhongran před 4 roky
rodič
revize
b9958feefd
17 změnil soubory, kde provedl 499 přidání a 76 odebrání
  1. 3 3
      abi-cloud-qr-platform-common/src/main/java/com/abi/task/common/tablestore/TableStorePlusUtils.java
  2. 25 0
      abi-cloud-qr-platform-common/src/main/java/com/abi/task/common/utils/ICollectionUtil.java
  3. 4 6
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/controller/console/RoleManagerController.java
  4. 3 0
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/entity/UserRole.java
  5. 25 0
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/mapper/UserRoleMapper.java
  6. 33 0
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/vo/result/ListRoleVO.java
  7. 5 4
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/GetRoleInfoReq.java
  8. 6 4
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/ListRoleReq.java
  9. 15 2
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/UpdateRoleReq.java
  10. 14 14
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/res/GetRoleInfoRes.java
  11. 3 17
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/res/ListResourceRes.java
  12. 28 8
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/res/ListRoleRes.java
  13. 32 2
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/RoleManagerService.java
  14. 45 0
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/UserResourceService.java
  15. 85 15
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/RoleManagerServiceImpl.java
  16. 126 0
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/UserResourceServiceImpl.java
  17. 47 1
      abi-cloud-qr-platform-server/src/main/resources/dao/mapper/UserRoleMapper.xml

+ 3 - 3
abi-cloud-qr-platform-common/src/main/java/com/abi/task/common/tablestore/TableStorePlusUtils.java

@@ -7,13 +7,13 @@ import com.abi.task.common.tablestore.common.TableStore;
 import com.abi.task.common.tablestore.common.TableStoreEntity;
 import com.abi.task.common.utils.IStringUtil;
 import com.abi.task.common.utils.TableStoreUtils;
-import com.alicloud.openservices.tablestore.model.*;
+import com.alicloud.openservices.tablestore.model.Column;
+import com.alicloud.openservices.tablestore.model.ColumnValue;
+import com.alicloud.openservices.tablestore.model.Row;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
-import sun.security.provider.certpath.SunCertPathBuilderException;
 
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;

+ 25 - 0
abi-cloud-qr-platform-common/src/main/java/com/abi/task/common/utils/ICollectionUtil.java

@@ -0,0 +1,25 @@
+package com.abi.task.common.utils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 集合工具类
+ * @author AndyTan
+ */
+public class ICollectionUtil {
+
+    /**
+     * 获取主列表与子列表的差集,即main-sub
+     * @param mainList
+     * @param subList
+     * @param <T>
+     * @return
+     */
+    public static <T> List<T> differenceList(List<T> mainList,List<T> subList){
+        List<T> tempList = new ArrayList<>(mainList);
+        tempList.removeAll(new ArrayList<>(subList));
+        return tempList;
+    }
+
+}

+ 4 - 6
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/controller/console/RoleManagerController.java

@@ -11,10 +11,7 @@ import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * <p>
@@ -26,6 +23,7 @@ import org.springframework.web.bind.annotation.RestController;
 @Slf4j
 @RestController
 @Api(tags = "角色管理")
+@RequestMapping("role")
 public class RoleManagerController {
 
     @Autowired
@@ -69,9 +67,9 @@ public class RoleManagerController {
 
     @ApiOperation("查询当前用户能看到的资源")
     @GetMapping("listResource")
-    public BaseResponse<ListResourceRes> listResource(@Validated ListResourceReq listResourceReq) throws Exception{
+    public BaseResponse<ListResourceRes> listResource() throws Exception{
         //查询当前用户能看到的资源
-        ListResourceRes  result = roleManagerService.listResource(listResourceReq);
+        ListResourceRes  result = roleManagerService.listResource();
         //包装出参
         return BaseResponse.create(result);
     }

+ 3 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/entity/UserRole.java

@@ -55,6 +55,9 @@ public class UserRole {
     @ApiModelProperty(value = "上级角色code")
     private String parentRoleCode;
 
+    @ApiModelProperty(value = "是否启用")
+    private Integer isEnable;
+
 	@ApiModelProperty(value = "创建时间")
     private LocalDateTime createTime;
 

+ 25 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/mapper/UserRoleMapper.java

@@ -1,7 +1,14 @@
 package com.abi.qms.platform.dao.mapper;
 
+import com.abi.qms.platform.dao.entity.UserInfo;
 import com.abi.qms.platform.dao.entity.UserRole;
+import com.abi.qms.platform.dao.vo.result.ListRoleVO;
+import com.abi.qms.platform.dto.req.ListRoleReq;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -12,4 +19,22 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface UserRoleMapper extends BaseMapper<UserRole> {
 
+    /**
+     * 查询某个角色下的角色 列表
+     * @param roleCode
+     * @return
+     */
+    IPage<ListRoleVO> listRoleFromRootRoleCode(IPage<ListRoleVO> page,@Param("param")ListRoleReq req,
+                                               @Param("roleCode") String roleCode,
+                                               @Param("roleLevel")Integer roleLevel);
+
+    Long countList(@Param("roleCode")String roleCode);
+
+
+
+
+
+
+
+
 }

+ 33 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/vo/result/ListRoleVO.java

@@ -0,0 +1,33 @@
+package com.abi.qms.platform.dao.vo.result;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 角色查询出参
+ * @author AndyTan
+ */
+@Data
+public class ListRoleVO {
+
+    @ApiModelProperty(value = "角色code")
+    private String roleCode;
+
+    @ApiModelProperty(value = "角色名")
+    private String roleName;
+
+    @ApiModelProperty(value = "角色描述")
+    private String roleDesc;
+
+    @ApiModelProperty(value = "父角色名")
+    private String parentRoleName;
+
+    @ApiModelProperty(value = "是否启用")
+    private Integer isEnable;
+
+    @ApiModelProperty(value = "更新时间")
+    private LocalDateTime updateTime;
+
+}

+ 5 - 4
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/GetRoleInfoReq.java

@@ -3,6 +3,8 @@ package com.abi.qms.platform.dto.req;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+
+import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 
 /**
@@ -13,9 +15,8 @@ import java.io.Serializable;
 @ApiModel
 public class GetRoleInfoReq implements Serializable {
 
-  @ApiModelProperty("xxxID")
-  private String xxxId;
-
-
+  @NotNull(message = "角色code为空")
+  @ApiModelProperty(value = "角色code")
+  private String roleCode;
 
 }

+ 6 - 4
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/ListRoleReq.java

@@ -1,5 +1,6 @@
 package com.abi.qms.platform.dto.req;
 
+import com.abi.task.common.api.base.PageReq;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -11,11 +12,12 @@ import java.io.Serializable;
  */
 @Data
 @ApiModel
-public class ListRoleReq implements Serializable {
-
-  @ApiModelProperty("xxxID")
-  private String xxxId;
+public class ListRoleReq extends PageReq implements Serializable {
 
+  @ApiModelProperty(value = "角色name")
+  private String roleName;
 
+  @ApiModelProperty(value = "是否启用")
+  private Integer isEnable;
 
 }

+ 15 - 2
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/UpdateRoleReq.java

@@ -3,7 +3,10 @@ package com.abi.qms.platform.dto.req;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+
+import javax.validation.constraints.NotNull;
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * @author:Andy.Tan
@@ -13,9 +16,19 @@ import java.io.Serializable;
 @ApiModel
 public class UpdateRoleReq implements Serializable {
 
-  @ApiModelProperty("xxxID")
-  private String xxxId;
+  @NotNull(message = "角色code为空")
+  @ApiModelProperty(value = "角色code")
+  private String roleCode;
+
+  @NotNull(message = "角色名称为空")
+  @ApiModelProperty(value = "角色name")
+  private String roleName;
+
+  @ApiModelProperty(value = "角色描述")
+  private String roleDesc;
 
+  @ApiModelProperty(value = "资源列表")
+  private List<String> resourceCodeList;
 
 
 }

+ 14 - 14
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/res/GetRoleInfoRes.java

@@ -1,5 +1,7 @@
 package com.abi.qms.platform.dto.res;
 
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -8,6 +10,7 @@ import lombok.NoArgsConstructor;
 import lombok.ToString;
 
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * @author:Andy.Tan
@@ -17,22 +20,19 @@ import java.io.Serializable;
 @ApiModel
 public class GetRoleInfoRes implements Serializable {
 
-  @ApiModelProperty("xxxID")
-  private String xxxId;
+  @ApiModelProperty(value = "角色code")
+  private String roleCode;
 
-  /**
-     * XXX
-     */
-    @Data
-    @NoArgsConstructor
-    @AllArgsConstructor
-    @ToString
-    @ApiModel(value = "GetRoleInfoRes_XxxBean")
-    public static class Xxx implements Serializable {
+  @ApiModelProperty(value = "上级角色code")
+  private String parentRoleCode;
 
-      @ApiModelProperty("xxx")
-      private String xxx;
+  @ApiModelProperty(value = "角色name")
+  private String roleName;
 
-    }
+  @ApiModelProperty(value = "角色描述")
+  private String roleDesc;
+
+  @ApiModelProperty("资源code列表")
+  List<String> resourceCodeList;
 
 }

+ 3 - 17
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/res/ListResourceRes.java

@@ -8,6 +8,7 @@ import lombok.NoArgsConstructor;
 import lombok.ToString;
 
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * @author:Andy.Tan
@@ -17,22 +18,7 @@ import java.io.Serializable;
 @ApiModel
 public class ListResourceRes implements Serializable {
 
-  @ApiModelProperty("xxxID")
-  private String xxxId;
-
-  /**
-     * XXX
-     */
-    @Data
-    @NoArgsConstructor
-    @AllArgsConstructor
-    @ToString
-    @ApiModel(value = "ListResourceRes_XxxBean")
-    public static class Xxx implements Serializable {
-
-      @ApiModelProperty("xxx")
-      private String xxx;
-
-    }
+  @ApiModelProperty("用户名下的角色code列表")
+  private List<String> roleCodeList;
 
 }

+ 28 - 8
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/res/ListRoleRes.java

@@ -8,6 +8,8 @@ import lombok.NoArgsConstructor;
 import lombok.ToString;
 
 import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
 
 /**
  * @author:Andy.Tan
@@ -17,21 +19,39 @@ import java.io.Serializable;
 @ApiModel
 public class ListRoleRes implements Serializable {
 
-  @ApiModelProperty("xxxID")
-  private String xxxId;
+  @ApiModelProperty("角色列表")
+  private List<RoleBean> roleBeanList;
 
-  /**
-     * XXX
+    /**
+     * 角色
      */
     @Data
     @NoArgsConstructor
     @AllArgsConstructor
     @ToString
-    @ApiModel(value = "ListRoleRes_XxxBean")
-    public static class Xxx implements Serializable {
+    @ApiModel(value = "ListRoleRes_RoleBean")
+    public static class RoleBean implements Serializable {
 
-      @ApiModelProperty("xxx")
-      private String xxx;
+      @ApiModelProperty(value = "角色code")
+      private String roleCode;
+
+      @ApiModelProperty(value = "角色名")
+      private String roleName;
+
+      @ApiModelProperty(value = "角色描述")
+      private String roleDesc;
+
+      @ApiModelProperty(value = "父角色名")
+      private String parentRoleName;
+
+      @ApiModelProperty(value = "是否启用")
+      private Integer isEnable;
+
+      @ApiModelProperty(value = "关联用户数")
+      private Long userCount;
+
+      @ApiModelProperty(value = "更新时间")
+      private LocalDateTime updateTime;
 
     }
 

+ 32 - 2
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/RoleManagerService.java

@@ -1,12 +1,15 @@
 package com.abi.qms.platform.service;
 
 
+import com.abi.qms.platform.dao.entity.UserResource;
 import com.abi.qms.platform.dao.entity.UserRole;
 import com.abi.qms.platform.dto.req.*;
 import com.abi.qms.platform.dto.res.GetRoleInfoRes;
 import com.abi.qms.platform.dto.res.ListResourceRes;
 import com.abi.qms.platform.dto.res.ListRoleRes;
 
+import java.util.List;
+
 /**
  * <p>
  * 角色管理
@@ -23,18 +26,45 @@ public interface RoleManagerService{
      */
     void createRole(CreateRoleReq createRoleReq) throws Exception;
 
+    /**
+     * 修改角色
+     * @param updateRoleReq
+     * @throws Exception
+     */
     void updateRole(UpdateRoleReq updateRoleReq) throws Exception;
 
+    /**
+     * 查询单个角色信息
+     * @param getRoleInfoReq
+     * @return
+     * @throws Exception
+     */
     GetRoleInfoRes getRoleInfo(GetRoleInfoReq getRoleInfoReq) throws Exception;
 
+    /**
+     * 查询角色列表
+     * @param listRoleReq
+     * @return
+     * @throws Exception
+     */
     ListRoleRes listRole(ListRoleReq listRoleReq) throws Exception;
 
-    ListResourceRes listResource(ListResourceReq listResourceReq) throws Exception;
+    /**
+     * 查询当前用户能看到的资源
+     * @param listResourceReq
+     * @return
+     * @throws Exception
+     */
+    ListResourceRes listResource() throws Exception;
 
     /**
      * 角色code查询角色信息
      * @param roleCode
      * @return
      */
-    public UserRole getRoleByCode(String roleCode);
+    UserRole getRoleByCode(String roleCode);
+
+
+
+
 }

+ 45 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/UserResourceService.java

@@ -0,0 +1,45 @@
+package com.abi.qms.platform.service;
+
+import com.abi.qms.platform.dao.entity.UserResource;
+
+import java.util.List;
+
+/**
+ * 页面资源管理
+ * @author Andy.Tan
+ */
+public interface UserResourceService {
+
+    /**
+     * 通过resourceCode列表查询resource对象列表
+     * @param codeList
+     * @return
+     */
+    List<UserResource> listUserResourceByCodes(List<String> codeList);
+
+    /**
+     * 通过资源code获取资源对象
+     * @param resourceCode
+     * @return
+     */
+    UserResource getUserResourceByCode(String resourceCode);
+
+    /**
+     * 保存角色资源
+     * @param roleCode
+     * @param resourceCodeList
+     */
+    void saveUserResourceMapping(String roleCode,List<String> resourceCodeList);
+
+    /**
+     * 查询角色名下所有资源
+     * @param roleCode
+     * @return
+     */
+    List<String> listResourceByRoleCode(String roleCode);
+
+
+
+
+
+}

+ 85 - 15
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/RoleManagerServiceImpl.java

@@ -1,20 +1,31 @@
 package com.abi.qms.platform.service.impl;
 
+import com.abi.qms.platform.dao.entity.UserInfo;
 import com.abi.qms.platform.dao.entity.UserRole;
 import com.abi.qms.platform.dao.enums.RoleLevelEnum;
 import com.abi.qms.platform.dao.mapper.UserMappingRoleResourceMapper;
 import com.abi.qms.platform.dao.mapper.UserRoleMapper;
+import com.abi.qms.platform.dao.vo.result.ListRoleVO;
 import com.abi.qms.platform.dto.req.*;
 import com.abi.qms.platform.dto.res.GetRoleInfoRes;
 import com.abi.qms.platform.dto.res.ListResourceRes;
 import com.abi.qms.platform.dto.res.ListRoleRes;
+import com.abi.qms.platform.infrastructure.util.AssertUtil;
+import com.abi.qms.platform.infrastructure.util.PageUtil;
+import com.abi.qms.platform.infrastructure.util.UserUtil;
 import com.abi.qms.platform.service.RoleManagerService;
+import com.abi.qms.platform.service.UserResourceService;
 import com.abi.task.common.api.exception.BusinessException;
+import com.abi.task.common.utils.PojoConverterUtils;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * <p>
  * 角色管理
@@ -31,6 +42,12 @@ public class RoleManagerServiceImpl implements RoleManagerService {
     @Autowired
     private UserMappingRoleResourceMapper userMappingRoleResourceMapper;
 
+    @Autowired
+    private UserResourceService userResourceService;
+
+    @Autowired
+    private UserUtil userUtil;
+
 
     /**
      * 创建角色
@@ -57,10 +74,11 @@ public class RoleManagerServiceImpl implements RoleManagerService {
         userRoleMapper.updateById(userRole);
 
         //4-放入角色资源mapping
+        userResourceService.saveUserResourceMapping(userRole.getRoleCode(),req.getResourceCodeList());
+    }
 
 
 
-    }
 
     /**
      * 构造角色code
@@ -104,36 +122,84 @@ public class RoleManagerServiceImpl implements RoleManagerService {
      * 修改角色
      **/
     @Override
-    public void updateRole(UpdateRoleReq updateRoleReq) {
-        //TODO
-        
+    public void updateRole(UpdateRoleReq req) {
+        //1-查询角色信息
+        UserRole userRole = getRoleByCode(req.getRoleCode());
+        AssertUtil.isNull(userRole,"角色不存在");
+
+        //2-修改角色信息
+        userRole.setRoleName(req.getRoleName());
+        userRole.setRoleDesc(req.getRoleDesc());
+        userRoleMapper.updateById(userRole);
+
+        //3-放入角色资源mapping
+        userResourceService.saveUserResourceMapping(userRole.getRoleCode(),req.getResourceCodeList());
     }
 
     /**
      * 查询单个角色信息
      **/
     @Override
-    public GetRoleInfoRes getRoleInfo(GetRoleInfoReq getRoleInfoReq) {
-        //TODO
-        return null;
+    public GetRoleInfoRes getRoleInfo(GetRoleInfoReq req) {
+        //1-查询角色信息
+        UserRole userRole = getRoleByCode(req.getRoleCode());
+        AssertUtil.isNull(userRole,"角色不存在");
+
+        //2-角色资源列表(仅最底层那一级别的资源)
+        List<String> resourceCodeList = userResourceService.listResourceByRoleCode(userRole.getRoleCode());
+
+        //构造出参
+        GetRoleInfoRes res = PojoConverterUtils.copy(userRole,GetRoleInfoRes.class);
+        res.setResourceCodeList(resourceCodeList);
+
+        return res;
     }
 
     /**
      * 查询角色列表
      **/
     @Override
-    public ListRoleRes listRole(ListRoleReq listRoleReq) {
-        //TODO
-        return null;
+    public ListRoleRes listRole(ListRoleReq req) {
+        //获取当前登录的用户
+        UserInfo user = userUtil.getUser();
+        //获取当前用户的角色
+        UserRole role = getRoleByCode(user.getRoleCode());
+
+        //1-查询角色信息
+        IPage<ListRoleVO> roleVOPage = userRoleMapper.listRoleFromRootRoleCode(PageUtil.createPage(req),req, role.getRoleCode(), role.getRoleLevel());
+        List<ListRoleVO> roleVOList = roleVOPage.getRecords();
+
+        //2-循环补充该角色有多少用户
+        List<ListRoleRes.RoleBean> roleBeanList = PojoConverterUtils.copyList(roleVOList, ListRoleRes.RoleBean.class);
+        for(ListRoleRes.RoleBean roleBean:roleBeanList){
+            Long userCount = userRoleMapper.countList(roleBean.getRoleCode());
+            roleBean.setUserCount(userCount);
+        }
+
+        //构造出参
+        ListRoleRes res = new ListRoleRes();
+        res.setRoleBeanList(roleBeanList);
+
+        return res;
     }
 
     /**
      * 查询当前用户能看到的资源
      **/
     @Override
-    public ListResourceRes listResource(ListResourceReq listResourceReq) {
-        //TODO
-        return null;
+    public ListResourceRes listResource() {
+        //获取当前登录的用户
+        UserInfo user = userUtil.getUser();
+        //获取当前用户的角色
+        UserRole role = getRoleByCode(user.getRoleCode());
+
+        //1-查询角色下所有资源
+        List<String> roleCodeList = userResourceService.listResourceByRoleCode(role.getRoleCode());
+
+        ListResourceRes res = new ListResourceRes();
+        res.setRoleCodeList(roleCodeList);
+
+        return res;
     }
 
     /**
@@ -146,8 +212,12 @@ public class RoleManagerServiceImpl implements RoleManagerService {
         QueryWrapper<UserRole> userRoleQw = new QueryWrapper<>();
         userRoleQw.eq("role_code",roleCode);
         userRoleQw.eq("is_delete",0);
-        UserRole userRole = userRoleMapper.selectOne(userRoleQw);
+        List<UserRole> userRoleList = userRoleMapper.selectList(userRoleQw);
+        if(CollectionUtils.isEmpty(userRoleList)){
+            return null;
+        }
 
-        return userRole;
+        return userRoleList.get(0);
     }
+
 }

+ 126 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/UserResourceServiceImpl.java

@@ -0,0 +1,126 @@
+package com.abi.qms.platform.service.impl;
+
+import com.abi.qms.platform.dao.entity.UserMappingRoleResource;
+import com.abi.qms.platform.dao.entity.UserResource;
+import com.abi.qms.platform.dao.mapper.UserMappingRoleResourceMapper;
+import com.abi.qms.platform.dao.mapper.UserResourceMapper;
+import com.abi.qms.platform.service.UserResourceService;
+import com.abi.task.common.utils.ICollectionUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 页面资源管理
+ * @author Andy.Tan
+ */
+@Service
+public class UserResourceServiceImpl extends ServiceImpl<UserMappingRoleResourceMapper, UserMappingRoleResource> implements UserResourceService {
+
+    @Autowired
+    private UserResourceMapper userResourceMapper;
+
+    @Autowired
+    private UserMappingRoleResourceMapper userMappingRoleResourceMapper;
+
+    /**
+     * 通过resourceCode列表查询resource对象列表
+     * @param codeList
+     * @return
+     */
+    @Override
+    public List<UserResource> listUserResourceByCodes(List<String> codeList) {
+        QueryWrapper<UserResource> userResourceQw = new QueryWrapper<>();
+        userResourceQw.in("resource_code",codeList);
+        userResourceQw.eq("is_delete",0);
+        List<UserResource> userResourceList = userResourceMapper.selectList(userResourceQw);
+
+        return userResourceList;
+    }
+
+    /**
+     * 通过资源code获取资源对象
+     * @param resourceCode
+     * @return
+     */
+    @Override
+    public UserResource getUserResourceByCode(String resourceCode) {
+        QueryWrapper<UserResource> userResourceQw = new QueryWrapper<>();
+        userResourceQw.eq("resource_code",resourceCode);
+        userResourceQw.eq("is_delete",0);
+        UserResource userResource = userResourceMapper.selectOne(userResourceQw);
+
+        return userResource;
+    }
+
+    /**
+     * 保存角色资源
+     * @param roleCode
+     * @param resourceCodeList
+     */
+    @Override
+    public void saveUserResourceMapping(String roleCode, List<String> resourceCodeList) {
+
+        //1-查询用户现有资源列表
+        List<String> curResoutceCodeList = listResourceByRoleCode(roleCode);
+
+        //2-比较用户现有资源与入参传入的目标资源,整理出-->需删除资源 and 需增加资源
+        List<String> needDeleteResourceList = ICollectionUtil.differenceList(curResoutceCodeList, resourceCodeList);
+        List<String> needAddResourceList = ICollectionUtil.differenceList(resourceCodeList, curResoutceCodeList);
+
+        //3-批量删除需删除资源
+        if(CollectionUtils.isNotEmpty(needDeleteResourceList)){
+            UpdateWrapper<UserMappingRoleResource> userMappingRoleResourceUw = new UpdateWrapper<>();
+            userMappingRoleResourceUw
+                    //where
+                    .eq("role_code",roleCode)
+                    .in("resource_code",needDeleteResourceList)
+                    //set
+                    .set("is_delete",1);
+            userMappingRoleResourceMapper.update(null,userMappingRoleResourceUw);
+        }
+
+        //4-批量添加需增加资源
+        if(CollectionUtils.isNotEmpty(needAddResourceList)){
+            //先查询对象列表
+            List<UserResource> needAddResourceEntityList = listUserResourceByCodes(needAddResourceList);
+            //构造待添加的mapping对象列表
+            List<UserMappingRoleResource> roleResourceList = new ArrayList<>();
+            for(UserResource resource:needAddResourceEntityList){
+                UserMappingRoleResource roleResource = new UserMappingRoleResource();
+                roleResource.setRoleCode(roleCode);
+                roleResource.setResourceCode(resource.getResourceCode());
+                roleResource.setResourceName(resource.getResourceName());
+                roleResourceList.add(roleResource);
+            }
+            //批量保存
+            saveBatch(roleResourceList);
+        }
+    }
+
+    /**
+     * 查询角色名下所有资源
+     * @param roleCode
+     * @return
+     */
+    @Override
+    public List<String> listResourceByRoleCode(String roleCode) {
+        //1-查询角色的关联资源
+        QueryWrapper<UserMappingRoleResource> userMappingRoleResourceQw = new QueryWrapper<>();
+        userMappingRoleResourceQw.eq("role_code",roleCode);
+        userMappingRoleResourceQw.eq("is_delete",0);
+        List<UserMappingRoleResource> userMappingRoleResourceList = userMappingRoleResourceMapper.selectList(userMappingRoleResourceQw);
+
+        //2-转化出参
+        List<String> resourceCodeList = userMappingRoleResourceList.stream().map(map -> map.getResourceCode()).collect(Collectors.toList());
+
+        return resourceCodeList;
+    }
+}

+ 47 - 1
abi-cloud-qr-platform-server/src/main/resources/dao/mapper/UserRoleMapper.xml

@@ -15,6 +15,7 @@
         <result column="L3_ROLE_CODE" property="l3RoleCode" />
         <result column="L4_ROLE_CODE" property="l4RoleCode" />
         <result column="L5_ROLE_CODE" property="l5RoleCode" />
+        <result column="is_enable" property="isEnable" />
         <result column="CREATE_TIME" property="createTime" />
         <result column="CREATE_BY" property="createBy" />
         <result column="UPDATE_TIME" property="updateTime" />
@@ -23,7 +24,52 @@
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        ID, ROLE_CODE, ROLE_NAME, ROLE_DESC, ROLE_LEVEL, L1_ROLE_CODE, L2_ROLE_CODE, L3_ROLE_CODE, L4_ROLE_CODE, L5_ROLE_CODE, CREATE_TIME, CREATE_BY, UPDATE_TIME, IS_DELETE
+        ID, ROLE_CODE, ROLE_NAME, ROLE_DESC, ROLE_LEVEL, L1_ROLE_CODE, L2_ROLE_CODE, L3_ROLE_CODE, L4_ROLE_CODE, L5_ROLE_CODE, is_enable, CREATE_TIME, CREATE_BY, UPDATE_TIME, IS_DELETE
     </sql>
 
+    <select id="listRoleFromRootRoleCode" resultType="com.abi.qms.platform.dao.vo.result.ListRoleVO">
+        select r.role_code,r.role_name,r.role_desc,
+            pr.role_name as parent_role_name,
+            r.is_enable,r.update_time
+        from user_role r
+            inner join user_role pr on pr.role_code=r.parent_role_code
+        <where>
+            <if test="param.roleName!=null and param.roleName!=''">
+                and r.role_name=#{param.roleName}
+            </if>
+            <if test="param.isEnable!=null and param.isEnable!=''">
+                and r.is_enable=#{param.isEnable}
+            </if>
+            <!-- 仅可以查看当前角色树下的角色 -->
+            <if test="roleLevel==1">
+                and r.l1_role_code=#{roleCode}
+            </if>
+            <if test="roleLevel==2">
+                and r.l2_role_code=#{roleCode}
+            </if>
+            <if test="roleLevel==3">
+                and r.l3_role_code=#{roleCode}
+            </if>
+            <if test="roleLevel==4">
+                and r.l4_role_code=#{roleCode}
+            </if>
+            <if test="roleLevel==5">
+                and r.l5_role_code=#{roleCode}
+            </if>
+        </where>
+    </select>
+
+
+    <select id="countList" resultType="long">
+        select IFNULL(count(distinct user_id),0) as user_count
+        from user_mapping_info_role
+        where role_code=#{roleCode}
+            and is_delete=0
+    </select>
+
+
+
+
+
+
 </mapper>