|
@@ -1,17 +1,24 @@
|
|
|
package cn.iocoder.byzs.module.system.service.userwebexpiretime;
|
|
package cn.iocoder.byzs.module.system.service.userwebexpiretime;
|
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
|
|
+import cn.iocoder.byzs.framework.common.pojo.PageParam;
|
|
|
import cn.iocoder.byzs.framework.common.pojo.PageResult;
|
|
import cn.iocoder.byzs.framework.common.pojo.PageResult;
|
|
|
import cn.iocoder.byzs.framework.common.util.object.BeanUtils;
|
|
import cn.iocoder.byzs.framework.common.util.object.BeanUtils;
|
|
|
import cn.iocoder.byzs.module.system.controller.admin.userwebexpiretime.vo.UserWebExpireTimePageReqVO;
|
|
import cn.iocoder.byzs.module.system.controller.admin.userwebexpiretime.vo.UserWebExpireTimePageReqVO;
|
|
|
|
|
+import cn.iocoder.byzs.module.system.controller.admin.userwebexpiretime.vo.UserWebExpireTimeRespVO;
|
|
|
import cn.iocoder.byzs.module.system.controller.admin.userwebexpiretime.vo.UserWebExpireTimeSaveReqVO;
|
|
import cn.iocoder.byzs.module.system.controller.admin.userwebexpiretime.vo.UserWebExpireTimeSaveReqVO;
|
|
|
|
|
+import cn.iocoder.byzs.module.system.dal.dataobject.tenant.TenantDO;
|
|
|
|
|
+import cn.iocoder.byzs.module.system.dal.dataobject.user.AdminUserDO;
|
|
|
import cn.iocoder.byzs.module.system.dal.dataobject.userwebexpiretime.UserWebExpireTimeDO;
|
|
import cn.iocoder.byzs.module.system.dal.dataobject.userwebexpiretime.UserWebExpireTimeDO;
|
|
|
|
|
+import cn.iocoder.byzs.module.system.dal.mysql.tenant.TenantMapper;
|
|
|
|
|
+import cn.iocoder.byzs.module.system.dal.mysql.user.AdminUserMapper;
|
|
|
import cn.iocoder.byzs.module.system.dal.mysql.userwebexpiretime.UserWebExpireTimeMapper;
|
|
import cn.iocoder.byzs.module.system.dal.mysql.userwebexpiretime.UserWebExpireTimeMapper;
|
|
|
import jakarta.annotation.Resource;
|
|
import jakarta.annotation.Resource;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.validation.annotation.Validated;
|
|
import org.springframework.validation.annotation.Validated;
|
|
|
|
|
|
|
|
-import java.util.List;
|
|
|
|
|
|
|
+import java.util.*;
|
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
import static cn.iocoder.byzs.framework.common.exception.util.ServiceExceptionUtil.exception;
|
|
import static cn.iocoder.byzs.framework.common.exception.util.ServiceExceptionUtil.exception;
|
|
|
import static cn.iocoder.byzs.module.system.enums.ErrorCodeConstants.USER_WEB_EXPIRE_TIME_NOT_EXISTS;
|
|
import static cn.iocoder.byzs.module.system.enums.ErrorCodeConstants.USER_WEB_EXPIRE_TIME_NOT_EXISTS;
|
|
@@ -28,6 +35,12 @@ public class UserWebExpireTimeServiceImpl implements UserWebExpireTimeService {
|
|
|
@Resource
|
|
@Resource
|
|
|
private UserWebExpireTimeMapper userWebExpireTimeMapper;
|
|
private UserWebExpireTimeMapper userWebExpireTimeMapper;
|
|
|
|
|
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private AdminUserMapper userMapper;
|
|
|
|
|
+
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private TenantMapper tenantMapper;
|
|
|
|
|
+
|
|
|
@Override
|
|
@Override
|
|
|
public Long createUserWebExpireTime(UserWebExpireTimeSaveReqVO createReqVO) {
|
|
public Long createUserWebExpireTime(UserWebExpireTimeSaveReqVO createReqVO) {
|
|
|
// 插入
|
|
// 插入
|
|
@@ -81,8 +94,90 @@ public class UserWebExpireTimeServiceImpl implements UserWebExpireTimeService {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
- public PageResult<UserWebExpireTimeDO> getUserWebExpireTimePage(UserWebExpireTimePageReqVO pageReqVO) {
|
|
|
|
|
- return userWebExpireTimeMapper.selectPage(pageReqVO);
|
|
|
|
|
|
|
+ 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();
|
|
|
|
|
+
|
|
|
|
|
+ // 恢复分页参数
|
|
|
|
|
+ pageReqVO.setPageSize(originalPageSize);
|
|
|
|
|
+ pageReqVO.setPageNo(originalPageNo);
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 转换为RespVO并填充关联数据
|
|
|
|
|
+ // 取所有用户ID
|
|
|
|
|
+ Set<Long> userIdSet = list.stream().map(UserWebExpireTimeDO::getUserId).filter(Objects::nonNull).collect(Collectors.toSet());
|
|
|
|
|
+ List<AdminUserDO> userList = userIdSet.isEmpty() ? Collections.emptyList() : userMapper.selectBatchIds(userIdSet);
|
|
|
|
|
+ Map<Long, String> userMap = userList.stream().collect(Collectors.toMap(AdminUserDO::getId, AdminUserDO::getNickname));
|
|
|
|
|
+
|
|
|
|
|
+ // 取所有租户ID
|
|
|
|
|
+ Set<Long> tenantIdSet = userList.stream().map(AdminUserDO::getTenantId).filter(Objects::nonNull).collect(Collectors.toSet());
|
|
|
|
|
+ List<TenantDO> tenantList = tenantIdSet.isEmpty() ? Collections.emptyList() : 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);
|
|
|
|
|
+ if (user != null && user.getTenantId() != null) {
|
|
|
|
|
+ respVO.setTenantName(tenantMap.get(user.getTenantId()));
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return respVO;
|
|
|
|
|
+ }).collect(Collectors.toList());
|
|
|
|
|
+
|
|
|
|
|
+ // 3. 进行内存筛选
|
|
|
|
|
+ List<UserWebExpireTimeRespVO> filteredRespVOList = 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());
|
|
|
|
|
+ })
|
|
|
|
|
+ .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());
|
|
|
|
|
+ })
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 4. 对筛选后的结果进行分页
|
|
|
|
|
+ int pageNo = pageReqVO.getPageNo();
|
|
|
|
|
+ int pageSize = pageReqVO.getPageSize();
|
|
|
|
|
+ int total = filteredRespVOList.size();
|
|
|
|
|
+
|
|
|
|
|
+ // 计算分页起始位置
|
|
|
|
|
+ int start = (pageNo - 1) * pageSize;
|
|
|
|
|
+ int end = Math.min(start + pageSize, total);
|
|
|
|
|
+
|
|
|
|
|
+ // 截取当前页数据
|
|
|
|
|
+ List<UserWebExpireTimeRespVO> pagedList = (start < end) ? filteredRespVOList.subList(start, end) : Collections.emptyList();
|
|
|
|
|
+
|
|
|
|
|
+ // 5. 返回正确的分页结果
|
|
|
|
|
+ return new PageResult<>(pagedList, (long) total);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|