|
|
@ -59,47 +59,79 @@ public class AdminUserDetailServiceImpl extends ServiceImpl<IUserDetailMapper, U |
|
|
|
@Override |
|
|
|
public PageInfo<UserVo> listFixUser(int pageNum, int pageSize, UserQueryDto userQueryDto) { |
|
|
|
// |
|
|
|
// // 如果没有有效用户,返回空分页结果 |
|
|
|
// if (CollectionUtils.isEmpty(validUserIds)) { |
|
|
|
// return emptyPageInfo(pageNum, pageSize); |
|
|
|
// } |
|
|
|
// |
|
|
|
// // 2. 构建用户表查询条件 |
|
|
|
// 1. 查询有效的用户详情记录(过滤掉 is_del = 1 的记录) |
|
|
|
// 1. 先根据User表的条件查询出符合条件的用户ID列表 |
|
|
|
// LambdaQueryWrapper<User> userWrapper = new LambdaQueryWrapper<>(); |
|
|
|
// userWrapper.in(User::getId, validUserIds); // 限定在有效用户范围内 |
|
|
|
// userWrapper.eq(User::getIsDel, 0); // 未删除的用户 |
|
|
|
// |
|
|
|
// // 添加动态查询条件 |
|
|
|
// // 添加User表的动态查询条件 |
|
|
|
// if (StringUtils.isNotBlank(userQueryDto.getUsername())) { |
|
|
|
// userWrapper.like(User::getUsername, userQueryDto.getUsername()); |
|
|
|
// } |
|
|
|
// if (StringUtils.isNotBlank(userQueryDto.getJwcode())) { |
|
|
|
// userWrapper.like(User::getJwcode, userQueryDto.getJwcode()); // 注意字段名是否匹配 |
|
|
|
// userWrapper.like(User::getJwcode, userQueryDto.getJwcode()); |
|
|
|
// } |
|
|
|
// |
|
|
|
// // 只查询ID字段,提高效率 |
|
|
|
// userWrapper.select(User::getId); |
|
|
|
// List<Long> userIds = adminUserMapper.selectList(userWrapper) |
|
|
|
// .stream() |
|
|
|
// .map(User::getId) |
|
|
|
// .collect(Collectors.toList()); |
|
|
|
// |
|
|
|
// // 如果没有符合条件的用户,直接返回空结果 |
|
|
|
// if (CollectionUtils.isEmpty(userIds)) { |
|
|
|
// return emptyPageInfo(pageNum, pageSize); |
|
|
|
// } |
|
|
|
// |
|
|
|
// // 2. 查询UserDetail表(基于上一步获取的用户ID列表) |
|
|
|
// LambdaQueryWrapper<UserDetail> detailWrapper = new LambdaQueryWrapper<>(); |
|
|
|
// detailWrapper.in(UserDetail::getUserId, userIds); // 只查询符合条件的用户ID |
|
|
|
// detailWrapper.eq(UserDetail::getIsDel, 0); // 未删除的记录 |
|
|
|
// |
|
|
|
// // 3. 执行分页查询 |
|
|
|
// Page<User> page = new Page<>(pageNum, pageSize); |
|
|
|
// Page<User> userPage = adminUserMapper.selectPage(page, userWrapper); |
|
|
|
// Page<UserDetail> detailPage = new Page<>(pageNum, pageSize); |
|
|
|
// Page<UserDetail> detailPageResult = adminUserDetailMapper.selectPage(detailPage, detailWrapper); |
|
|
|
// |
|
|
|
// // 4. 如果没有数据,返回空分页结果 |
|
|
|
// if (CollectionUtils.isEmpty(detailPageResult.getRecords())) { |
|
|
|
// return emptyPageInfo(pageNum, pageSize); |
|
|
|
// } |
|
|
|
// |
|
|
|
// // 4. 转换为VO对象 |
|
|
|
// List<UserVo> userVoList = userPage.getRecords().stream() |
|
|
|
// .map(user -> { |
|
|
|
// // 5. 批量获取关联的User信息(使用之前查询过的ID列表,避免重复查询) |
|
|
|
// Map<Long, User> userMap = adminUserMapper.selectBatchIds(userIds).stream() |
|
|
|
// .collect(Collectors.toMap(User::getId, Function.identity())); |
|
|
|
// |
|
|
|
// // 6. 构建VO对象 |
|
|
|
// List<UserVo> userVoList = detailPageResult.getRecords().stream() |
|
|
|
// .map(detail -> { |
|
|
|
// UserVo vo = new UserVo(); |
|
|
|
// // 这里做属性拷贝,可以使用BeanUtils或MapStruct等工具 |
|
|
|
// vo.setId(user.getId()); |
|
|
|
// vo.setUsername(user.getUsername()); |
|
|
|
// // ...其他字段拷贝 |
|
|
|
// vo.setId(detail.getId()); // 这里使用user_detail表的ID |
|
|
|
// |
|
|
|
// // 设置User表的信息 |
|
|
|
// User user = userMap.get(detail.getUserId()); |
|
|
|
// if (user != null) { |
|
|
|
// vo.setUsername(user.getUsername()); |
|
|
|
// vo.setJwcode(user.getJwcode()); |
|
|
|
// // 其他需要从User表获取的字段... |
|
|
|
// } |
|
|
|
// return vo; |
|
|
|
// }) |
|
|
|
// .collect(Collectors.toList()); |
|
|
|
// |
|
|
|
// // 5. 构建分页结果 |
|
|
|
// return PageInfo.of(userPage, userVoList); |
|
|
|
|
|
|
|
// 1. 查询有效的用户详情记录(过滤掉 is_del = 1 的记录) |
|
|
|
// // 7. 构建分页结果 |
|
|
|
// return PageInfo.of(detailPageResult, userVoList); |
|
|
|
// 1. 构建UserDetail查询条件 |
|
|
|
LambdaQueryWrapper<UserDetail> detailWrapper = new LambdaQueryWrapper<>(); |
|
|
|
detailWrapper.eq(UserDetail::getIsDel, 0); // 未删除的记录 |
|
|
|
|
|
|
|
// 2. 执行分页查询(直接查询UserDetail表) |
|
|
|
// 添加gradeId条件 |
|
|
|
if (userQueryDto.getGradeId() != null) { |
|
|
|
detailWrapper.eq(UserDetail::getGradeId, userQueryDto.getGradeId()); |
|
|
|
} |
|
|
|
|
|
|
|
// 2. 执行分页查询UserDetail表 |
|
|
|
Page<UserDetail> detailPage = new Page<>(pageNum, pageSize); |
|
|
|
Page<UserDetail> detailPageResult = adminUserDetailMapper.selectPage(detailPage, detailWrapper); |
|
|
|
|
|
|
@ -108,19 +140,45 @@ public class AdminUserDetailServiceImpl extends ServiceImpl<IUserDetailMapper, U |
|
|
|
return emptyPageInfo(pageNum, pageSize); |
|
|
|
} |
|
|
|
|
|
|
|
// 4. 批量获取关联的User信息 |
|
|
|
// 4. 获取所有关联的用户ID |
|
|
|
List<Long> userIds = detailPageResult.getRecords().stream() |
|
|
|
.map(UserDetail::getUserId) |
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
|
|
Map<Long, User> userMap = adminUserMapper.selectBatchIds(userIds).stream() |
|
|
|
// 5. 构建User表查询条件(包含username和jwcode条件) |
|
|
|
LambdaQueryWrapper<User> userWrapper = new LambdaQueryWrapper<>(); |
|
|
|
userWrapper.eq(User::getIsDel, 0) // 未删除的用户 |
|
|
|
.in(User::getId, userIds); // 限制在分页查询到的用户范围内 |
|
|
|
|
|
|
|
// 添加User表的动态查询条件 |
|
|
|
if (StringUtils.isNotBlank(userQueryDto.getUsername())) { |
|
|
|
userWrapper.like(User::getUsername, userQueryDto.getUsername()); |
|
|
|
} |
|
|
|
if (StringUtils.isNotBlank(userQueryDto.getJwcode())) { |
|
|
|
userWrapper.like(User::getJwcode, userQueryDto.getJwcode()); |
|
|
|
} |
|
|
|
|
|
|
|
// 6. 查询符合条件的User信息 |
|
|
|
Map<Long, User> userMap = adminUserMapper.selectList(userWrapper) |
|
|
|
.stream() |
|
|
|
.collect(Collectors.toMap(User::getId, Function.identity())); |
|
|
|
|
|
|
|
// 5. 构建VO对象 |
|
|
|
List<UserVo> userVoList = detailPageResult.getRecords().stream() |
|
|
|
// 7. 过滤掉UserDetail中没有对应User的记录 |
|
|
|
List<UserDetail> validDetails = detailPageResult.getRecords().stream() |
|
|
|
.filter(detail -> userMap.containsKey(detail.getUserId())) |
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
|
|
// 8. 如果没有有效数据,返回空分页结果 |
|
|
|
if (CollectionUtils.isEmpty(validDetails)) { |
|
|
|
return emptyPageInfo(pageNum, pageSize); |
|
|
|
} |
|
|
|
|
|
|
|
// 9. 构建VO对象 |
|
|
|
List<UserVo> userVoList = validDetails.stream() |
|
|
|
.map(detail -> { |
|
|
|
UserVo vo = new UserVo(); |
|
|
|
vo.setId(detail.getId()); // 这里使用user_detail表的ID |
|
|
|
vo.setId(detail.getId()); // 使用user_detail表的ID |
|
|
|
// vo.se(detail.getGradeId()); // 设置gradeId |
|
|
|
|
|
|
|
// 设置User表的信息 |
|
|
|
User user = userMap.get(detail.getUserId()); |
|
|
@ -133,10 +191,15 @@ public class AdminUserDetailServiceImpl extends ServiceImpl<IUserDetailMapper, U |
|
|
|
}) |
|
|
|
.collect(Collectors.toList()); |
|
|
|
|
|
|
|
// 6. 构建分页结果 |
|
|
|
return PageInfo.of(detailPageResult, userVoList); |
|
|
|
// 10. 重新构建分页结果 |
|
|
|
PageInfo<UserVo> pageInfo = PageInfo.of(detailPageResult, userVoList); |
|
|
|
pageInfo.setList(userVoList); |
|
|
|
pageInfo.setTotal(userVoList.size()); // 修正总数 |
|
|
|
|
|
|
|
return pageInfo; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 返回空分页结果的辅助方法 |
|
|
|
private <T> PageInfo<T> emptyPageInfo(int pageNum, int pageSize) { |
|
|
|
PageInfo<T> pageInfo = new PageInfo<>(); |
|
|
|