From 2ac34e313a0e1d92aaedb1f6e4d6e62611ca17e9 Mon Sep 17 00:00:00 2001 From: ZhangYue <949384116@qq.com> Date: Tue, 16 Sep 2025 10:26:39 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E5=88=87=E6=8D=A2?= =?UTF-8?q?=E7=9F=A5=E8=AF=86=E5=BA=93=E7=9A=84=E6=97=B6=E5=80=99=E5=8F=AA?= =?UTF-8?q?=E6=9C=89ID=E4=B8=BA1L=E6=89=8D=E8=83=BD=E6=9F=A5=E7=9C=8B?= =?UTF-8?q?=E6=89=80=E6=9C=89=E7=9F=A5=E8=AF=86=E5=BA=93=EF=BC=8C=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E5=8F=AF=E4=BB=A5=E6=9F=A5=E7=9C=8B=E8=87=AA=E5=B7=B1?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E7=9A=84=E7=9F=A5=E8=AF=86=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../knowledge/KnowledgeInfoServiceImpl.java | 97 +++++++++++-------- 1 file changed, 59 insertions(+), 38 deletions(-) diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/KnowledgeInfoServiceImpl.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/KnowledgeInfoServiceImpl.java index 12ccab1f..b1544f13 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/KnowledgeInfoServiceImpl.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/KnowledgeInfoServiceImpl.java @@ -92,45 +92,66 @@ public class KnowledgeInfoServiceImpl implements IKnowledgeInfoService { public TableDataInfo queryPageListByRole(KnowledgeInfoBo bo, PageQuery pageQuery) { // 查询用户关联角色 LoginUser loginUser = LoginHelper.getLoginUser(); - if (StringUtils.isEmpty(loginUser.getKroleGroupIds()) || StringUtils.isEmpty(loginUser.getKroleGroupType())) { - return new TableDataInfo<>(); - } - - // 角色/角色组id列表 - List groupIdList = Arrays.stream(loginUser.getKroleGroupIds().split(",")) - .filter(StringUtils::isNotEmpty) - .toList(); - List knowledgeRoles; - LambdaQueryWrapper roleLqw = Wrappers.lambdaQuery(); - if ("role".equals(loginUser.getKroleGroupType())) { - roleLqw.in(KnowledgeRole::getId, groupIdList); - } else { - roleLqw.in(KnowledgeRole::getGroupId, groupIdList); - } - knowledgeRoles = knowledgeRoleMapper.selectList(roleLqw); - - if (CollectionUtils.isEmpty(knowledgeRoles)) { - return new TableDataInfo<>(); - } - - // 查询知识库id列表 - LambdaQueryWrapper relationLqw = Wrappers.lambdaQuery(); - relationLqw.in(KnowledgeRoleRelation::getKnowledgeRoleId, knowledgeRoles.stream().map(KnowledgeRole::getId).filter(Objects::nonNull).collect(Collectors.toList())); - List knowledgeRoleRelations = knowledgeRoleRelationMapper.selectList(relationLqw); - - if (CollectionUtils.isEmpty(knowledgeRoleRelations)) { - return new TableDataInfo<>(); - } - + + // 构建查询条件 LambdaQueryWrapper lqw = buildQueryWrapper(bo); - // 在查询用户创建的知识库条件下,拼接角色分配知识库 - lqw.or(q -> q.in( - KnowledgeInfo::getId, - knowledgeRoleRelations.stream() - .map(KnowledgeRoleRelation::getKnowledgeId) - .filter(Objects::nonNull) - .collect(Collectors.toList()) - )); + + // 管理员用户直接查询所有数据 + if (Objects.equals(loginUser.getUserId(), 1L)) { + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + // 检查用户是否配置了角色信息 + if (StringUtils.isNotEmpty(loginUser.getKroleGroupIds()) && StringUtils.isNotEmpty(loginUser.getKroleGroupType())) { + // 角色/角色组id列表 + List groupIdList = Arrays.stream(loginUser.getKroleGroupIds().split(",")) + .filter(StringUtils::isNotEmpty) + .toList(); + + // 查询用户关联的角色 + List knowledgeRoles = new ArrayList<>(); + LambdaQueryWrapper roleLqw = Wrappers.lambdaQuery(); + if ("role".equals(loginUser.getKroleGroupType())) { + roleLqw.in(KnowledgeRole::getId, groupIdList); + } else { + roleLqw.in(KnowledgeRole::getGroupId, groupIdList); + } + knowledgeRoles = knowledgeRoleMapper.selectList(roleLqw); + + // 如果用户有关联角色 + if (!CollectionUtils.isEmpty(knowledgeRoles)) { + // 查询这些角色关联的知识库 + LambdaQueryWrapper relationLqw = Wrappers.lambdaQuery(); + relationLqw.in(KnowledgeRoleRelation::getKnowledgeRoleId, + knowledgeRoles.stream().map(KnowledgeRole::getId).filter(Objects::nonNull).collect(Collectors.toList())); + List knowledgeRoleRelations = knowledgeRoleRelationMapper.selectList(relationLqw); + + // 如果角色关联了知识库 + if (!CollectionUtils.isEmpty(knowledgeRoleRelations)) { + // 查询用户自己的知识库和角色分配的知识库 + lqw.and(q -> q.eq(KnowledgeInfo::getUid, loginUser.getUserId()) + .or() + .in(KnowledgeInfo::getId, + knowledgeRoleRelations.stream() + .map(KnowledgeRoleRelation::getKnowledgeId) + .filter(Objects::nonNull) + .collect(Collectors.toList()) + ) + ); + } else { + // 用户没有关联任何知识库,只显示自己的 + lqw.eq(KnowledgeInfo::getUid, loginUser.getUserId()); + } + } else { + // 用户没有关联角色,只显示自己的 + lqw.eq(KnowledgeInfo::getUid, loginUser.getUserId()); + } + } else { + // 用户没有配置角色信息,只显示自己的 + lqw.eq(KnowledgeInfo::getUid, loginUser.getUserId()); + } + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); return TableDataInfo.build(result); }