浏览代码

根据角色权限查找人员优化

wangliang 2 年之前
父节点
当前提交
3eaceabcca

+ 5 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/result/RoleResult.java

@@ -32,6 +32,11 @@ public class RoleResult implements Serializable {
 
     }
 
+    public RoleResult(Long roleId, String roleName) {
+        this.roleId = roleId;
+        this.roleName = roleName;
+    }
+
     public RoleResult(Long roleId, String roleName, RoleSourceEnum roleSource) {
         this.roleId = roleId;
         this.roleName = roleName;

+ 10 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/result/SysUserResult.java

@@ -38,6 +38,16 @@ public class SysUserResult implements Serializable {
     @ApiModelProperty(value = "角色信息集合")
     private List<RoleResult> roleResultList;
 
+    @ApiModelProperty(value = "角色id集合")
+    private String roleIds;
+
+    public String getRoleIds() {
+        return roleIds;
+    }
+
+    public void setRoleIds(String roleIds) {
+        this.roleIds = roleIds;
+    }
 
     public Long getId() {
         return id;

+ 11 - 5
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/userPush/SpecialPrivilegeEnum.java

@@ -6,22 +6,24 @@ package com.qmth.teachcloud.common.enums.userPush;
  * @Date: 2021-10-27
  */
 public enum SpecialPrivilegeEnum {
-    SUBJECT_HEADER("科组长权限","SubjectHeader","S_", 4),
-    MARKER("评卷员权限","Marker","M_", 5),
-    COMPOSITE("复合权限","Composite",null, 0),
-    UNIDENTIFIED("无特殊权限","Unidentified",null, 0);
+    SUBJECT_HEADER("科组长权限", "SubjectHeader", "S_", 4, "6"),
+    MARKER("评卷员权限", "Marker", "M_", 5, "5"),
+    COMPOSITE("复合权限", "Composite", null, 0, "5,6"),
+    UNIDENTIFIED("无特殊权限", "Unidentified", null, 0, null);
 
-    SpecialPrivilegeEnum(String title, String id, String prefix, int value) {
+    SpecialPrivilegeEnum(String title, String id, String prefix, int value, String roleId) {
         this.title = title;
         this.id = id;
         this.prefix = prefix;
         this.value = value;
+        this.roleId = roleId;
     }
 
     private final String title;
     private final String id;
     private final String prefix;
     private final int value;
+    private final String roleId;
 
     public String getTitle() {
         return title;
@@ -38,4 +40,8 @@ public enum SpecialPrivilegeEnum {
     public int getValue() {
         return value;
     }
+
+    public String getRoleId() {
+        return roleId;
+    }
 }

+ 9 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/mapper/SysUserMapper.java

@@ -115,4 +115,13 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
     List<CloudUserPushStatusDto> findCloudUserPushStatus(@Param("userId") Long userId, @Param("schoolId") Long schoolId);
 
     List<UserExportDto> listExportData(@Param("schoolId") Long schoolId, @Param("userInfo") String userInfo, @Param("orgId") Long orgId, @Param("roleId") String roleId, @Param("enable") Boolean enable);
+
+    /**
+     * 根据角色权限类型查询用户
+     *
+     * @param schoolId
+     * @param roleIds
+     * @return
+     */
+    List<SysUserResult> findSysUserResultListNew(@Param("schoolId") Long schoolId, @Param("roleIds") Set<Long> roleIds);
 }

+ 9 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysUserService.java

@@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.teachcloud.common.bean.dto.BlurryUserDto;
 import com.qmth.teachcloud.common.bean.dto.LoginDto;
 import com.qmth.teachcloud.common.bean.dto.UserDto;
-import com.qmth.teachcloud.common.bean.dto.UserExportDto;
 import com.qmth.teachcloud.common.bean.params.ApproveUserResult;
 import com.qmth.teachcloud.common.bean.params.UserSaveParams;
 import com.qmth.teachcloud.common.bean.params.UserSaveReportParams;
@@ -265,4 +264,13 @@ public interface SysUserService extends IService<SysUser> {
     boolean remove(Long id) throws NoSuchAlgorithmException;
 
     void exportData(HttpServletResponse response, String userInfo, Long orgId, String roleId, Boolean enable) throws Exception;
+
+    /**
+     * 根据角色权限类型查询用户
+     *
+     * @param schoolId
+     * @param specialPrivilegeEnum
+     * @return
+     */
+    List<SysUserResult> findSysUserResultListNew(Long schoolId, SpecialPrivilegeEnum specialPrivilegeEnum);
 }

+ 33 - 17
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysOrgServiceImpl.java

@@ -8,6 +8,7 @@ import com.qmth.teachcloud.common.bean.dto.OrgDto;
 import com.qmth.teachcloud.common.bean.dto.excel.DescribeImportDto;
 import com.qmth.teachcloud.common.bean.dto.excel.SysOrgImportDto;
 import com.qmth.teachcloud.common.bean.params.UserSaveParams;
+import com.qmth.teachcloud.common.bean.result.RoleResult;
 import com.qmth.teachcloud.common.bean.result.SysUserResult;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.SysOrg;
@@ -27,6 +28,7 @@ import com.qmth.teachcloud.common.util.ExcelUtil;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.dao.DuplicateKeyException;
 import org.springframework.stereotype.Service;
@@ -65,24 +67,38 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
     @Override
     public List<OrgDto> listOrgTree(SpecialPrivilegeEnum specialPrivilegeEnum, boolean withoutPrintingRoom) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
-        List<SysUserResult> sysUserResultList = sysUserService.findSysUserResultList();
-        List<SysUserResult> finalSysUserResultList = sysUserResultList.stream()
-                .filter(e -> {
-                    if (Objects.isNull(specialPrivilegeEnum)) {
-                        return true;
-                    } else {
-                        // 用户特殊权限
-                        SpecialPrivilegeEnum userP = sysUserService.findUserSpecialPrivilegeByUserId(e.getId(), schoolId);
-                        // 如果用户是复合权限,条件为复合、评卷员、科组长都可以
-                        if (SpecialPrivilegeEnum.COMPOSITE.equals(userP)) {
-                            return SpecialPrivilegeEnum.COMPOSITE.equals(specialPrivilegeEnum) || SpecialPrivilegeEnum.MARKER.equals(specialPrivilegeEnum) || SpecialPrivilegeEnum.SUBJECT_HEADER.equals(specialPrivilegeEnum);
-                        } else {
-                            // 如果用户不是复合条件,用户权限和条件权限对应
-                            return specialPrivilegeEnum.equals(userP);
-                        }
+//        List<SysUserResult> sysUserResultList = sysUserService.findSysUserResultList();
+//        List<SysUserResult> finalSysUserResultList = sysUserResultList.stream()
+//                .filter(e -> {
+//                    if (Objects.isNull(specialPrivilegeEnum)) {
+//                        return true;
+//                    } else {
+//                        // 用户特殊权限
+//                        SpecialPrivilegeEnum userP = sysUserService.findUserSpecialPrivilegeByUserId(e.getId(), schoolId);
+//                        // 如果用户是复合权限,条件为复合、评卷员、科组长都可以
+//                        if (SpecialPrivilegeEnum.COMPOSITE.equals(userP)) {
+//                            return SpecialPrivilegeEnum.COMPOSITE.equals(specialPrivilegeEnum) || SpecialPrivilegeEnum.MARKER.equals(specialPrivilegeEnum) || SpecialPrivilegeEnum.SUBJECT_HEADER.equals(specialPrivilegeEnum);
+//                        } else {
+//                            // 如果用户不是复合条件,用户权限和条件权限对应
+//                            return specialPrivilegeEnum.equals(userP);
+//                        }
+//                    }
+//                }).collect(Collectors.toList());
+
+        List<SysUserResult> finalSysUserResultList = sysUserService.findSysUserResultListNew(schoolId, specialPrivilegeEnum);
+        if (!CollectionUtils.isEmpty(finalSysUserResultList)) {
+            finalSysUserResultList.forEach(e -> {
+                if (Objects.nonNull(e.getRoleIds())) {
+                    String[] roldIds = StringUtils.split(e.getRoleIds(), ";");
+                    List<RoleResult> roleResultList = new ArrayList<>(roldIds.length);
+                    for (int y = 0; y < roldIds.length; y++) {
+                        String[] strs = StringUtils.split(roldIds[y], ",");
+                        roleResultList.add(new RoleResult(Long.parseLong(strs[0]), strs[1]));
                     }
-                }).collect(Collectors.toList());
-
+                    e.setRoleResultList(roleResultList);
+                }
+            });
+        }
         List<OrgDto> orgList = this.listOrgAll(schoolId);
         if (withoutPrintingRoom) {
             orgList = orgList.stream().filter(e -> !OrgTypeEnum.PRINTING_HOUSE.name().equals(e.getType())).collect(Collectors.toList());

+ 21 - 8
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysUserServiceImpl.java

@@ -15,7 +15,6 @@ import com.qmth.teachcloud.common.bean.params.ApproveUserResult;
 import com.qmth.teachcloud.common.bean.params.UserSaveParams;
 import com.qmth.teachcloud.common.bean.params.UserSaveReportParams;
 import com.qmth.teachcloud.common.bean.result.*;
-import com.qmth.teachcloud.common.config.DictionaryConfig;
 import com.qmth.teachcloud.common.contant.SpringContextHolder;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.*;
@@ -24,7 +23,6 @@ import com.qmth.teachcloud.common.enums.userPush.SpecialPrivilegeEnum;
 import com.qmth.teachcloud.common.enums.userPush.UserPushResultEnum;
 import com.qmth.teachcloud.common.mapper.SysUserMapper;
 import com.qmth.teachcloud.common.service.*;
-import com.qmth.teachcloud.common.sync.CloudMarkingTaskUtils;
 import com.qmth.teachcloud.common.util.Base64Util;
 import com.qmth.teachcloud.common.util.ExcelUtil;
 import com.qmth.teachcloud.common.util.ResultUtil;
@@ -84,18 +82,12 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     @Resource
     SysUserService sysUserService;
 
-    @Resource
-    DictionaryConfig dictionaryConfig;
-
     @Resource
     BasicSchoolService basicSchoolService;
 
     @Resource
     TeachcloudCommonService teachcloudCommonService;
 
-    @Resource
-    CloudMarkingTaskUtils stmmsUtils;
-
     @Resource
     SysRoleGroupMemberService sysRoleGroupMemberService;
 
@@ -1090,6 +1082,27 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         ExcelUtil.excelExport("用户数据", UserExportDto.class, userExportDtos, response);
     }
 
+    /**
+     * 根据角色权限类型查询用户
+     *
+     * @param schoolId
+     * @param specialPrivilegeEnum
+     * @return
+     */
+    @Override
+    public List<SysUserResult> findSysUserResultListNew(Long schoolId, SpecialPrivilegeEnum specialPrivilegeEnum) {
+        Set<Long> roleIds = null;
+        if (Objects.nonNull(specialPrivilegeEnum)) {
+            roleIds = new HashSet<>();
+            String roleId = specialPrivilegeEnum.getRoleId();
+            String[] strs = StringUtils.split(roleId, ",");
+            for (int i = 0; i < strs.length; i++) {
+                roleIds.add(Long.parseLong(strs[i]));
+            }
+        }
+        return sysUserMapper.findSysUserResultListNew(schoolId, roleIds);
+    }
+
     /**
      * 批量处理用户信息帮助类
      *

+ 36 - 0
teachcloud-common/src/main/resources/mapper/SysUserMapper.xml

@@ -413,4 +413,40 @@
         order by a.create_time desc
     </select>
 
+    <select id="findSysUserResultListNew" resultType="com.qmth.teachcloud.common.bean.result.SysUserResult">
+        select
+        su.id as id,
+        su.login_name as loginName,
+        su.real_name as realName,
+        su.mobile_number as mobileNumber,
+        so.id as orgId,
+        group_concat(CONCAT(sr.id, ",", sr.name) SEPARATOR ';') as roleIds
+        from
+        sys_user su
+        join sys_org so on
+        so.id = su.org_id
+        join sys_user_role sur on
+        sur.user_id = su.id
+        join sys_role sr on
+        sr.id = sur.role_id
+        <where>
+            <if test="schoolId != null and schoolId != ''">
+                and su.school_id = #{schoolId}
+            </if>
+            <if test="roleIds != null and roleIds != '' and roleIds.size > 0">
+                AND sr.id IN
+                <foreach collection="roleIds" item="item" index="index" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+        group by
+        su.id,
+        su.login_name,
+        su.real_name,
+        su.mobile_number,
+        so.id
+        order by
+        su.login_name
+    </select>
 </mapper>