Pārlūkot izejas kodu

用户web权限管理绑定用户和租户查询分页

liyanbo 2 mēneši atpakaļ
vecāks
revīzija
e5226e581f

+ 4 - 4
byzs-module-system/src/main/java/cn/iocoder/byzs/module/system/controller/admin/userwebexpiretime/UserWebExpireTimeController.java

@@ -82,8 +82,8 @@ public class UserWebExpireTimeController {
     @Operation(summary = "获得用户平台权限有效期分页")
     @PreAuthorize("@ss.hasPermission('system:user-web-expire-time:query')")
     public CommonResult<PageResult<UserWebExpireTimeRespVO>> getUserWebExpireTimePage(@Valid UserWebExpireTimePageReqVO pageReqVO) {
-        PageResult<UserWebExpireTimeDO> pageResult = userWebExpireTimeService.getUserWebExpireTimePage(pageReqVO);
-        return success(BeanUtils.toBean(pageResult, UserWebExpireTimeRespVO.class));
+        PageResult<UserWebExpireTimeRespVO> pageResult = userWebExpireTimeService.getUserWebExpireTimePage(pageReqVO);
+        return success(pageResult);
     }
 
     @GetMapping("/export-excel")
@@ -93,10 +93,10 @@ public class UserWebExpireTimeController {
     public void exportUserWebExpireTimeExcel(@Valid UserWebExpireTimePageReqVO pageReqVO,
               HttpServletResponse response) throws IOException {
         pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
-        List<UserWebExpireTimeDO> list = userWebExpireTimeService.getUserWebExpireTimePage(pageReqVO).getList();
+        List<UserWebExpireTimeRespVO> list = userWebExpireTimeService.getUserWebExpireTimePage(pageReqVO).getList();
         // 导出 Excel
         ExcelUtils.write(response, "用户平台权限有效期.xls", "数据", UserWebExpireTimeRespVO.class,
-                        BeanUtils.toBean(list, UserWebExpireTimeRespVO.class));
+                list);
     }
 
 }

+ 4 - 0
byzs-module-system/src/main/java/cn/iocoder/byzs/module/system/controller/admin/userwebexpiretime/vo/UserWebExpireTimePageReqVO.java

@@ -13,6 +13,10 @@ import static cn.iocoder.byzs.framework.common.util.date.DateUtils.FORMAT_YEAR_M
 @Data
 public class UserWebExpireTimePageReqVO extends PageParam {
 
+
+    private String userName;
+    private String tenantName;
+
     @Schema(description = "课程权限过期时间")
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] courseExpireTime;

+ 3 - 0
byzs-module-system/src/main/java/cn/iocoder/byzs/module/system/controller/admin/userwebexpiretime/vo/UserWebExpireTimeRespVO.java

@@ -16,6 +16,9 @@ public class UserWebExpireTimeRespVO {
     @ExcelProperty("用户id")
     private Long userId;
 
+    private String userName;
+    private String tenantName;
+
     @Schema(description = "课程权限过期时间")
     @ExcelProperty("课程权限过期时间")
     private LocalDateTime courseExpireTime;

+ 2 - 1
byzs-module-system/src/main/java/cn/iocoder/byzs/module/system/service/userwebexpiretime/UserWebExpireTimeService.java

@@ -2,6 +2,7 @@ package cn.iocoder.byzs.module.system.service.userwebexpiretime;
 
 import cn.iocoder.byzs.framework.common.pojo.PageResult;
 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.dal.dataobject.userwebexpiretime.UserWebExpireTimeDO;
 import jakarta.validation.Valid;
@@ -58,6 +59,6 @@ public interface UserWebExpireTimeService {
      * @param pageReqVO 分页查询
      * @return 用户平台权限有效期分页
      */
-    PageResult<UserWebExpireTimeDO> getUserWebExpireTimePage(UserWebExpireTimePageReqVO pageReqVO);
+    PageResult<UserWebExpireTimeRespVO> getUserWebExpireTimePage(UserWebExpireTimePageReqVO pageReqVO);
 
 }

+ 98 - 3
byzs-module-system/src/main/java/cn/iocoder/byzs/module/system/service/userwebexpiretime/UserWebExpireTimeServiceImpl.java

@@ -1,17 +1,24 @@
 package cn.iocoder.byzs.module.system.service.userwebexpiretime;
 
 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.util.object.BeanUtils;
 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.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.mysql.tenant.TenantMapper;
+import cn.iocoder.byzs.module.system.dal.mysql.user.AdminUserMapper;
 import cn.iocoder.byzs.module.system.dal.mysql.userwebexpiretime.UserWebExpireTimeMapper;
 import jakarta.annotation.Resource;
 import org.springframework.stereotype.Service;
 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.module.system.enums.ErrorCodeConstants.USER_WEB_EXPIRE_TIME_NOT_EXISTS;
@@ -28,6 +35,12 @@ public class UserWebExpireTimeServiceImpl implements UserWebExpireTimeService {
     @Resource
     private UserWebExpireTimeMapper userWebExpireTimeMapper;
 
+    @Resource
+    private AdminUserMapper userMapper;
+
+    @Resource
+    private TenantMapper tenantMapper;
+
     @Override
     public Long createUserWebExpireTime(UserWebExpireTimeSaveReqVO createReqVO) {
         // 插入
@@ -81,8 +94,90 @@ public class UserWebExpireTimeServiceImpl implements UserWebExpireTimeService {
     }
 
     @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);
     }
 
 }