|
|
@@ -69,12 +69,12 @@ public class UserWebExpireTimeServiceImpl implements UserWebExpireTimeService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void deleteUserWebExpireTimeListByIds(List<Long> ids) {
|
|
|
+ public void deleteUserWebExpireTimeListByIds(List<Long> ids) {
|
|
|
// 校验存在
|
|
|
validateUserWebExpireTimeExists(ids);
|
|
|
- // 删除
|
|
|
+ // 批量删除
|
|
|
userWebExpireTimeMapper.deleteByIds(ids);
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
private void validateUserWebExpireTimeExists(List<Long> ids) {
|
|
|
List<UserWebExpireTimeDO> list = userWebExpireTimeMapper.selectByIds(ids);
|
|
|
@@ -96,92 +96,58 @@ public class UserWebExpireTimeServiceImpl implements UserWebExpireTimeService {
|
|
|
|
|
|
@Override
|
|
|
public PageResult<UserWebExpireTimeRespVO> getUserWebExpireTimePage(UserWebExpireTimePageReqVO pageReqVO) {
|
|
|
- // 1. 首先查询所有符合条件的数据(不分页),因为需要进行内存筛选
|
|
|
- // 临时保存分页参数,查询完后恢复
|
|
|
+ // 暂存分页参数,查询全部数据后用于内存分页(需关联用户和租户信息进行筛选)
|
|
|
Integer originalPageSize = pageReqVO.getPageSize();
|
|
|
Integer originalPageNo = pageReqVO.getPageNo();
|
|
|
-
|
|
|
- // 设置不分页,查询所有数据
|
|
|
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
|
|
- PageResult<UserWebExpireTimeDO> userWebExpireTimeDOPageResult = userWebExpireTimeMapper.selectPage(pageReqVO);
|
|
|
- List<UserWebExpireTimeDO> list = userWebExpireTimeDOPageResult.getList();
|
|
|
-
|
|
|
- // 恢复分页参数
|
|
|
+ List<UserWebExpireTimeDO> list = userWebExpireTimeMapper.selectPage(pageReqVO).getList();
|
|
|
pageReqVO.setPageSize(originalPageSize);
|
|
|
pageReqVO.setPageNo(originalPageNo);
|
|
|
|
|
|
- // 2. 转换为RespVO并填充关联数据
|
|
|
- // 取所有用户ID
|
|
|
+ // 批量查询关联的用户和租户信息,避免N+1问题
|
|
|
Set<Long> userIdSet = list.stream().map(UserWebExpireTimeDO::getUserId).filter(Objects::nonNull).collect(Collectors.toSet());
|
|
|
- List<AdminUserDO> userList = userIdSet.isEmpty() ? Collections.emptyList() : TenantUtils.executeIgnore(() ->
|
|
|
- userMapper.selectBatchIds(userIdSet)
|
|
|
- );
|
|
|
+ List<AdminUserDO> userList = userIdSet.isEmpty() ? Collections.emptyList() : TenantUtils.executeIgnore(() -> userMapper.selectBatchIds(userIdSet));
|
|
|
Map<Long, String> userMap = userList.stream().collect(Collectors.toMap(AdminUserDO::getId, AdminUserDO::getNickname));
|
|
|
+ Map<Long, AdminUserDO> userDoMap = userList.stream().collect(Collectors.toMap(AdminUserDO::getId, u -> u));
|
|
|
|
|
|
- // 取所有租户ID
|
|
|
Set<Long> tenantIdSet = userList.stream().map(AdminUserDO::getTenantId).filter(Objects::nonNull).collect(Collectors.toSet());
|
|
|
- List<TenantDO> tenantList = tenantIdSet.isEmpty() ? Collections.emptyList() : TenantUtils.executeIgnore(() ->
|
|
|
- tenantMapper.selectBatchIds(tenantIdSet)
|
|
|
- );
|
|
|
+ List<TenantDO> tenantList = tenantIdSet.isEmpty() ? Collections.emptyList() : TenantUtils.executeIgnore(() -> tenantMapper.selectBatchIds(tenantIdSet));
|
|
|
Map<Long, String> tenantMap = tenantList.stream().collect(Collectors.toMap(TenantDO::getId, TenantDO::getName));
|
|
|
|
|
|
- // 转换为RespVO
|
|
|
- List<UserWebExpireTimeRespVO> respVOList = list.stream().map(userWebExpireTime -> {
|
|
|
- UserWebExpireTimeRespVO respVO = BeanUtils.toBean(userWebExpireTime, UserWebExpireTimeRespVO.class);
|
|
|
-
|
|
|
- // 填充用户名
|
|
|
- if (userWebExpireTime.getUserId() != null) {
|
|
|
- respVO.setUserName(userMap.get(userWebExpireTime.getUserId()));
|
|
|
- // 填充租户名称
|
|
|
- AdminUserDO user = userList.stream().filter(u -> u.getId().equals(userWebExpireTime.getUserId())).findFirst().orElse(null);
|
|
|
+ // 转换为RespVO并填充用户名、租户名
|
|
|
+ List<UserWebExpireTimeRespVO> respVOList = list.stream().map(do_ -> {
|
|
|
+ UserWebExpireTimeRespVO respVO = BeanUtils.toBean(do_, UserWebExpireTimeRespVO.class);
|
|
|
+ if (do_.getUserId() != null) {
|
|
|
+ respVO.setUserName(userMap.get(do_.getUserId()));
|
|
|
+ AdminUserDO user = userDoMap.get(do_.getUserId());
|
|
|
if (user != null && user.getTenantId() != null) {
|
|
|
respVO.setTenantName(tenantMap.get(user.getTenantId()));
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
return respVO;
|
|
|
}).collect(Collectors.toList());
|
|
|
|
|
|
- // 3. 进行内存筛选
|
|
|
- List<UserWebExpireTimeRespVO> filteredRespVOList = respVOList;
|
|
|
-
|
|
|
- // 按用户名筛选
|
|
|
+ // 内存筛选:按用户名、租户名称模糊匹配
|
|
|
+ List<UserWebExpireTimeRespVO> filteredList = respVOList;
|
|
|
if (pageReqVO.getUserName() != null && !pageReqVO.getUserName().isEmpty()) {
|
|
|
- filteredRespVOList = filteredRespVOList.stream()
|
|
|
- .filter(respVO -> {
|
|
|
- if (respVO.getUserName() == null) {
|
|
|
- return false;
|
|
|
- }
|
|
|
- return respVO.getUserName().contains(pageReqVO.getUserName());
|
|
|
- })
|
|
|
+ filteredList = filteredList.stream()
|
|
|
+ .filter(r -> r.getUserName() != null && r.getUserName().contains(pageReqVO.getUserName()))
|
|
|
.collect(Collectors.toList());
|
|
|
}
|
|
|
-
|
|
|
- // 按租户名称筛选
|
|
|
if (pageReqVO.getTenantName() != null && !pageReqVO.getTenantName().isEmpty()) {
|
|
|
- filteredRespVOList = filteredRespVOList.stream()
|
|
|
- .filter(respVO -> {
|
|
|
- if (respVO.getTenantName() == null) {
|
|
|
- return false;
|
|
|
- }
|
|
|
- return respVO.getTenantName().contains(pageReqVO.getTenantName());
|
|
|
- })
|
|
|
+ filteredList = filteredList.stream()
|
|
|
+ .filter(r -> r.getTenantName() != null && r.getTenantName().contains(pageReqVO.getTenantName()))
|
|
|
.collect(Collectors.toList());
|
|
|
}
|
|
|
|
|
|
- // 4. 对筛选后的结果进行分页
|
|
|
+ // 内存分页
|
|
|
int pageNo = pageReqVO.getPageNo();
|
|
|
int pageSize = pageReqVO.getPageSize();
|
|
|
- int total = filteredRespVOList.size();
|
|
|
-
|
|
|
- // 计算分页起始位置
|
|
|
+ int total = filteredList.size();
|
|
|
int start = (pageNo - 1) * pageSize;
|
|
|
int end = Math.min(start + pageSize, total);
|
|
|
-
|
|
|
- // 截取当前页数据
|
|
|
- List<UserWebExpireTimeRespVO> pagedList = (start < end) ? filteredRespVOList.subList(start, end) : Collections.emptyList();
|
|
|
+ List<UserWebExpireTimeRespVO> pagedList = (start < end) ? filteredList.subList(start, end) : Collections.emptyList();
|
|
|
|
|
|
- // 5. 返回正确的分页结果
|
|
|
return new PageResult<>(pagedList, (long) total);
|
|
|
}
|
|
|
|