Переглянути джерело

feat: 用户管理查询/角色查询

lixuesong 1 рік тому
батько
коміт
5cdd92a6a2

+ 6 - 1
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/dto/UserDTO.java

@@ -3,9 +3,9 @@ package com.qunzhixinxi.hnqz.admin.api.dto;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import rx.Subscription;
 
 import java.util.List;
+import java.util.Set;
 
 /**
  * @author hnqz
@@ -58,4 +58,9 @@ public class UserDTO extends SysUser {
 	 */
 	private List<Integer> parentIdList;
 
+	/**
+	 * csm用户id
+	 */
+	private Set<Integer> csmUserIdList;
+
 }

+ 5 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/SysRoleController.java

@@ -174,7 +174,8 @@ public class SysRoleController {
 			List<Integer> CROAdmin = Stream.of(7,9,10).collect(Collectors.toList());
 			List<Integer> HCPAdmin = Stream.of(7,11,13).collect(Collectors.toList());
 			List<Integer> CFOAdmin = Stream.of(7).collect(Collectors.toList());
-			List<Integer> bcLeaderAdmin = Stream.of(3, 4, 5, 6, 7, 9, 10, 11, 13, 19, 31, 35).collect(Collectors.toList());
+			List<Integer> bcLeaderAdmin = Stream.of(3, 4, 5, 6, 7, 9, 10, 11, 13, 19, 31, 34, 35).collect(Collectors.toList());
+			List<Integer> csmAdmin = Stream.of(3, 4, 5, 6, 7, 9, 10, 11, 13, 19, 31, 34).collect(Collectors.toList());
 
 			Set<Integer> queryRoleIdSet = new HashSet<>();
 
@@ -195,6 +196,9 @@ public class SysRoleController {
 					case 11:
 						queryRoleIdSet.addAll(HCPAdmin);
 						break;
+					case 19:
+						queryRoleIdSet.addAll(csmAdmin);
+						break;
 					case 35:
 						queryRoleIdSet.addAll(bcLeaderAdmin);
 						break;

+ 32 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/SysUserServiceImpl.java

@@ -72,6 +72,7 @@ import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.temporal.ChronoUnit;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -1129,6 +1130,14 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 		if (SecurityUtils.getRoles().contains(1) || SecurityUtils.getRoles().contains(2)) {
 			return baseMapper.getUserVosPage(page, userDTO, new DataScope());
 		} else if (SecurityUtils.getRoles().contains(19)) {
+			Integer userId = SecurityUtils.getUser().getId();
+			// CSM只能查看自己维护的企业下的用户, 以及下属维护的企业下的用户
+			Set<Integer> userIdList = new HashSet<>();
+			userIdList.add(userId);
+			// 递归查询下属关联的userId
+			AtomicInteger limitCount = new AtomicInteger(10);
+			this.recurseCsmLowerUserId(userIdList, userIdList, limitCount);
+			userDTO.setCsmUserIdList(userIdList);
 			return baseMapper.getUserVosPage(page, userDTO, new DataScope());
 		} else if (SecurityUtils.getRoles().contains(35)) {
 			// BC总负责人数据权限
@@ -1210,6 +1219,29 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 		return page1;
 	}
 
+
+	/**
+	 * 递归查询CSM所有下级的用户ID
+	 *
+	 * @param allIds     所有ID
+	 * @param parentIds  父级ID
+	 * @param limitCount 递归次数限制
+	 */
+	private void recurseCsmLowerUserId(Set<Integer> allIds, Set<Integer> parentIds, AtomicInteger limitCount) {
+		// 限制调用次数
+		if (limitCount.decrementAndGet() <= 0) {
+			return;
+		}
+
+		List<SysCsmUserRelation> csmUserRelations = sysCsmUserRelationMapper.selectList(Wrappers.<SysCsmUserRelation>lambdaQuery()
+				.in(SysCsmUserRelation::getParentId, parentIds));
+		if (CollUtil.isNotEmpty(csmUserRelations)) {
+			Set<Integer> userIds = csmUserRelations.stream().map(SysCsmUserRelation::getUserId).collect(Collectors.toSet());
+			this.recurseCsmLowerUserId(allIds, userIds, limitCount);
+			allIds.addAll(userIds);
+		}
+	}
+
 	/**
 	 * 通过ID查询用户信息
 	 *

+ 10 - 0
hnqz-upms/hnqz-upms-biz/src/main/resources/mapper/SysUserMapper.xml

@@ -470,6 +470,9 @@
 		LEFT JOIN sys_user_role  ur ON ur.user_id = u.user_id
 		LEFT JOIN sys_role  r ON r.role_id = ur.role_id
 		LEFT JOIN sys_dept_sub s ON s.dept_id = u.dept_id and s.enable_flag = '1'
+		<if test="query.csmUserIdList != null and query.csmUserIdList.size() > 0">
+			left join sys_dept_csm dc on dc.dept_id=u.dept_id
+		</if>
 		<where>
 			u.del_flag = '0'
 			<if test="query.username != null and query.username != ''">
@@ -525,6 +528,13 @@
 				</foreach>
 				)
 			</if>
+			<if test="query.csmUserIdList != null and query.csmUserIdList.size() > 0">
+				and dc.user_id in (
+				<foreach collection="query.csmUserIdList" item="userId" index="index" separator=",">
+					#{userId}
+				</foreach>
+				)
+			</if>
 			AND <![CDATA[ u.username<>'admin']]>
 		</where>
 		ORDER BY u.create_time DESC