소스 검색

:egg: 新增复杂条件的用户分页查询示例

smallchill 5 년 전
부모
커밋
a4bc8756e3

+ 27 - 3
src/main/java/org/springblade/common/cache/SysCache.java

@@ -37,12 +37,14 @@ public class SysCache {
 	private static final String MENU_ID = "menu:id:";
 	private static final String DEPT_ID = "dept:id:";
 	private static final String DEPT_NAME = "dept:name:";
+	private static final String DEPT_NAME_FUZZY = "dept:nameFuzzy:";
 	private static final String DEPT_NAME_ID = "deptName:id:";
 	private static final String DEPT_NAMES_ID = "deptNames:id:";
 	private static final String DEPT_CHILD_ID = "deptChild:id:";
 	private static final String DEPT_CHILDIDS_ID = "deptChildIds:id:";
 	private static final String POST_ID = "post:id:";
 	private static final String POST_NAME = "post:name:";
+	private static final String POST_NAME_FUZZY = "post:nameFuzzy:";
 	private static final String POST_NAME_ID = "postName:id:";
 	private static final String POST_NAMES_ID = "postNames:id:";
 	private static final String ROLE_ID = "role:id:";
@@ -72,7 +74,7 @@ public class SysCache {
 	 * 获取菜单
 	 *
 	 * @param id 主键
-	 * @return
+	 * @return 菜单
 	 */
 	public static Menu getMenu(Long id) {
 		return CacheUtil.get(SYS_CACHE, MENU_ID, id, () -> menuService.getById(id));
@@ -82,7 +84,7 @@ public class SysCache {
 	 * 获取部门
 	 *
 	 * @param id 主键
-	 * @return
+	 * @return 部门
 	 */
 	public static Dept getDept(Long id) {
 		return CacheUtil.get(SYS_CACHE, DEPT_ID, id, () -> deptService.getById(id));
@@ -93,12 +95,23 @@ public class SysCache {
 	 *
 	 * @param tenantId  租户id
 	 * @param deptNames 部门名
-	 * @return
+	 * @return 部门id
 	 */
 	public static String getDeptIds(String tenantId, String deptNames) {
 		return CacheUtil.get(SYS_CACHE, DEPT_NAME, tenantId + StringPool.DASH + deptNames, () -> deptService.getDeptIds(tenantId, deptNames));
 	}
 
+	/**
+	 * 获取部门id
+	 *
+	 * @param tenantId  租户id
+	 * @param deptNames 部门名模糊查询
+	 * @return 部门id
+	 */
+	public static String getDeptIdsByFuzzy(String tenantId, String deptNames) {
+		return CacheUtil.get(SYS_CACHE, DEPT_NAME_FUZZY, tenantId + StringPool.DASH + deptNames, () -> deptService.getDeptIdsByFuzzy(tenantId, deptNames));
+	}
+
 	/**
 	 * 获取部门名
 	 *
@@ -175,6 +188,17 @@ public class SysCache {
 		return CacheUtil.get(SYS_CACHE, POST_NAME, tenantId + StringPool.DASH + postNames, () -> postService.getPostIds(tenantId, postNames));
 	}
 
+	/**
+	 * 获取岗位id
+	 *
+	 * @param tenantId  租户id
+	 * @param postNames 岗位名模糊查询
+	 * @return
+	 */
+	public static String getPostIdsByFuzzy(String tenantId, String postNames) {
+		return CacheUtil.get(SYS_CACHE, POST_NAME_FUZZY, tenantId + StringPool.DASH + postNames, () -> postService.getPostIdsByFuzzy(tenantId, postNames));
+	}
+
 	/**
 	 * 获取岗位名
 	 *

+ 18 - 0
src/main/java/org/springblade/modules/system/controller/UserController.java

@@ -294,4 +294,22 @@ public class UserController {
 		return R.data(userService.platformDetail(user));
 	}
 
+
+	/**
+	 * 用户列表查询
+	 */
+	@ApiImplicitParams({
+		@ApiImplicitParam(name = "name", value = "人员姓名", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "deptName", value = "部门名称", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "postName", value = "职位名称", paramType = "query", dataType = "string"),
+		@ApiImplicitParam(name = "current", value = "当前页数", paramType = "query", dataType = "int"),
+		@ApiImplicitParam(name = "size", value = "每页数量", paramType = "query", dataType = "int")
+	})
+	@ApiOperationSupport(order = 18)
+	@ApiOperation(value = "用户列表查询", notes = "用户列表查询")
+	@GetMapping("/user-search")
+	public R<IPage<UserVO>> userSearch(@ApiIgnore UserVO user, @ApiIgnore Query query) {
+		return R.data(userService.selectUserSearch(user, query));
+	}
+
 }

+ 9 - 0
src/main/java/org/springblade/modules/system/service/IDeptService.java

@@ -66,6 +66,15 @@ public interface IDeptService extends IService<Dept> {
 	 */
 	String getDeptIds(String tenantId, String deptNames);
 
+	/**
+	 * 获取部门ID
+	 *
+	 * @param tenantId
+	 * @param deptNames
+	 * @return
+	 */
+	String getDeptIdsByFuzzy(String tenantId, String deptNames);
+
 	/**
 	 * 获取部门名
 	 *

+ 9 - 0
src/main/java/org/springblade/modules/system/service/IPostService.java

@@ -48,6 +48,15 @@ public interface IPostService extends BaseService<Post> {
 	 */
 	String getPostIds(String tenantId, String postNames);
 
+	/**
+	 * 获取岗位ID
+	 *
+	 * @param tenantId
+	 * @param postNames
+	 * @return
+	 */
+	String getPostIdsByFuzzy(String tenantId, String postNames);
+
 	/**
 	 * 获取岗位名
 	 *

+ 10 - 0
src/main/java/org/springblade/modules/system/service/IUserService.java

@@ -20,6 +20,7 @@ package org.springblade.modules.system.service;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.core.mp.base.BaseService;
+import org.springblade.core.mp.support.Query;
 import org.springblade.modules.auth.enums.UserEnum;
 import org.springblade.modules.system.entity.User;
 import org.springblade.modules.system.entity.UserInfo;
@@ -71,6 +72,15 @@ public interface IUserService extends BaseService<User> {
 	 */
 	IPage<User> selectUserPage(IPage<User> page, User user, Long deptId, String tenantId);
 
+	/**
+	 * 自定义分页
+	 *
+	 * @param user
+	 * @param query
+	 * @return
+	 */
+	IPage<UserVO> selectUserSearch(UserVO user, Query query);
+
 	/**
 	 * 根据账号获取用户
 	 *

+ 15 - 0
src/main/java/org/springblade/modules/system/service/impl/DeptServiceImpl.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.modules.system.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springblade.common.cache.SysCache;
@@ -96,6 +97,20 @@ public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements ID
 		return null;
 	}
 
+	@Override
+	public String getDeptIdsByFuzzy(String tenantId, String deptNames) {
+		LambdaQueryWrapper<Dept> queryWrapper = Wrappers.<Dept>query().lambda().eq(Dept::getTenantId, tenantId);
+		queryWrapper.and(wrapper -> {
+			List<String> names = Func.toStrList(deptNames);
+			names.forEach(name -> wrapper.like(Dept::getDeptName, name).or());
+		});
+		List<Dept> deptList = baseMapper.selectList(queryWrapper);
+		if (deptList != null && deptList.size() > 0) {
+			return deptList.stream().map(dept -> Func.toStr(dept.getId())).distinct().collect(Collectors.joining(","));
+		}
+		return null;
+	}
+
 	@Override
 	public List<String> getDeptNames(String deptIds) {
 		return baseMapper.getDeptNames(Func.toLongArray(deptIds));

+ 15 - 0
src/main/java/org/springblade/modules/system/service/impl/PostServiceImpl.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.modules.system.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import org.springblade.core.mp.base.BaseServiceImpl;
@@ -51,6 +52,20 @@ public class PostServiceImpl extends BaseServiceImpl<PostMapper, Post> implement
 		return null;
 	}
 
+	@Override
+	public String getPostIdsByFuzzy(String tenantId, String postNames) {
+		LambdaQueryWrapper<Post> queryWrapper = Wrappers.<Post>query().lambda().eq(Post::getTenantId, tenantId);
+		queryWrapper.and(wrapper -> {
+			List<String> names = Func.toStrList(postNames);
+			names.forEach(name -> wrapper.like(Post::getPostName, name).or());
+		});
+		List<Post> postList = baseMapper.selectList(queryWrapper);
+		if (postList != null && postList.size() > 0) {
+			return postList.stream().map(post -> Func.toStr(post.getId())).distinct().collect(Collectors.joining(","));
+		}
+		return null;
+	}
+
 	@Override
 	public List<String> getPostNames(String postIds) {
 		return baseMapper.getPostNames(Func.toLongArray(postIds));

+ 30 - 0
src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java

@@ -18,6 +18,7 @@ package org.springblade.modules.system.service.impl;
 
 
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
@@ -31,6 +32,7 @@ import org.springblade.common.enums.DictEnum;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tenant.BladeTenantProperties;
 import org.springblade.core.tool.constant.BladeConstant;
@@ -143,6 +145,34 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
 		return page.setRecords(baseMapper.selectUserPage(page, user, deptIdList, tenantId));
 	}
 
+	@Override
+	public IPage<UserVO> selectUserSearch(UserVO user, Query query) {
+		LambdaQueryWrapper<User> queryWrapper = Wrappers.<User>query().lambda();
+		if (StringUtil.isNotBlank(user.getName())) {
+			queryWrapper.like(User::getName, user.getName());
+		}
+		if (StringUtil.isNotBlank(user.getDeptName())) {
+			String deptIds = SysCache.getDeptIdsByFuzzy(AuthUtil.getTenantId(), user.getDeptName());
+			if (StringUtil.isNotBlank(deptIds)) {
+				queryWrapper.and(wrapper -> {
+					List<String> ids = Func.toStrList(deptIds);
+					ids.forEach(id -> wrapper.like(User::getDeptId, id).or());
+				});
+			}
+		}
+		if (StringUtil.isNotBlank(user.getPostName())) {
+			String postIds = SysCache.getPostIdsByFuzzy(AuthUtil.getTenantId(), user.getPostName());
+			if (StringUtil.isNotBlank(postIds)) {
+				queryWrapper.and(wrapper -> {
+					List<String> ids = Func.toStrList(postIds);
+					ids.forEach(id -> wrapper.like(User::getPostId, id).or());
+				});
+			}
+		}
+		IPage<User> pages = this.page(Condition.getPage(query), queryWrapper);
+		return UserWrapper.build().pageVO(pages);
+	}
+
 	@Override
 	public User userByAccount(String tenantId, String account) {
 		return baseMapper.selectOne(Wrappers.<User>query().lambda().eq(User::getTenantId, tenantId).eq(User::getAccount, account).eq(User::getIsDeleted, BladeConstant.DB_NOT_DELETED));