diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/dto/RepositoryProjectDTO.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/dto/RepositoryProjectDTO.java index fc10af56..e4998755 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/dto/RepositoryProjectDTO.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/dto/RepositoryProjectDTO.java @@ -35,6 +35,8 @@ public class RepositoryProjectDTO extends BaseDTO { private Long repoGroupId; + private String repoGroupName; + private Long repoProjectId; /** diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/RepositoryProjectServiceImpl.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/RepositoryProjectServiceImpl.java index 0849523f..5e42e983 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/RepositoryProjectServiceImpl.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/RepositoryProjectServiceImpl.java @@ -304,17 +304,54 @@ public class RepositoryProjectServiceImpl extends BaseServiceImpl page(RepositoryProjectQuery query) { Page page = super.page(query); - fillBranchCounts(page.getContent()); - return page; + fillExtendedFields(page.getContent()); + return new PageImpl<>(page.getContent(), page.getPageable(), page.getTotalElements()); } @Override public List findAll(RepositoryProjectQuery query) { List list = super.findAll(query); - fillBranchCounts(list); + fillExtendedFields(list); return list; } - + + /** + * 批量填充扩展字段:repoGroupName、branchCount + *

使用批量查询避免N+1问题 + */ + private void fillExtendedFields(List projects) { + if (projects.isEmpty()) { + return; + } + + // 1. 收集所有仓库组ID + Set repoGroupIds = projects.stream() + .map(RepositoryProjectDTO::getRepoGroupId) + .filter(id -> id != null) + .collect(Collectors.toSet()); + + // 2. 批量查询仓库组信息 + Map repoGroupMap = Collections.emptyMap(); + if (!repoGroupIds.isEmpty()) { + repoGroupMap = repositoryGroupRepository.findAllById(repoGroupIds).stream() + .collect(Collectors.toMap(RepositoryGroup::getId, Function.identity())); + } + + // 3. 填充仓库组名称 + Map finalRepoGroupMap = repoGroupMap; + projects.forEach(project -> { + if (project.getRepoGroupId() != null) { + RepositoryGroup group = finalRepoGroupMap.get(project.getRepoGroupId()); + if (group != null) { + project.setRepoGroupName(group.getName()); + } + } + }); + + // 4. 填充分支数量 + fillBranchCounts(projects); + } + /** * 批量填充项目的分支数量(解决N+1查询问题) */