From a4d6306259ace501cc36dac99752573a3e48fd19 Mon Sep 17 00:00:00 2001 From: cuijiawang Date: Sun, 28 Sep 2025 10:41:05 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=80=A7=E8=83=BD=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/TemplateRepositoryServiceImpl.java | 50 +++++++++++++++---- 1 file changed, 40 insertions(+), 10 deletions(-) diff --git a/agileboot-system/wol-codegenerator/src/main/java/com/agileboot/codegen/service/impl/TemplateRepositoryServiceImpl.java b/agileboot-system/wol-codegenerator/src/main/java/com/agileboot/codegen/service/impl/TemplateRepositoryServiceImpl.java index 2d867f8..eacd9a4 100644 --- a/agileboot-system/wol-codegenerator/src/main/java/com/agileboot/codegen/service/impl/TemplateRepositoryServiceImpl.java +++ b/agileboot-system/wol-codegenerator/src/main/java/com/agileboot/codegen/service/impl/TemplateRepositoryServiceImpl.java @@ -18,8 +18,10 @@ import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.stream.Collectors; /** @@ -129,11 +131,24 @@ public class TemplateRepositoryServiceImpl implements ITemplateRepositoryService @Override public List getAvailableTemplates(Long userId) { - // 确保用户仓库已初始化 - initUserRepository(userId); - List result = new ArrayList<>(); + // 一次性获取用户的所有仓库配置,避免N+1查询 + List userRepositories = repositoryMapper.selectAllByUserId(userId); + + // 如果用户没有任何仓库配置,才进行初始化 + if (userRepositories.isEmpty()) { + initUserRepository(userId); + // 重新获取初始化后的配置 + userRepositories = repositoryMapper.selectAllByUserId(userId); + } + + Map repoMap = userRepositories.stream() + .collect(Collectors.toMap( + repo -> repo.getTemplateSource() + ":" + repo.getTemplateId(), + repo -> repo + )); + // 1. 添加系统模板 try { JSONArray systemTemplates = JSONArray.parseArray(generatorService.getTemplateConfig()); @@ -151,8 +166,9 @@ public class TemplateRepositoryServiceImpl implements ITemplateRepositoryService dto.setTemplateGroup(groupName); dto.setDescription(template.getString("description")); // 系统模板描述 - // 从用户仓库获取显示状态 - UserTemplateRepository userRepo = repositoryMapper.selectByTemplate(userId, "system", template.getString("id")); + // 从内存中获取显示状态,避免数据库查询 + String key = "system:" + template.getString("id"); + UserTemplateRepository userRepo = repoMap.get(key); dto.setIsEnabled(userRepo != null ? userRepo.getIsEnabled() : 1); // 默认显示 result.add(dto); @@ -172,8 +188,9 @@ public class TemplateRepositoryServiceImpl implements ITemplateRepositoryService dto.setTemplateGroup(template.getTemplateGroup()); dto.setDescription(template.getDescription()); // 用户模板描述 - // 从用户仓库获取显示状态 - UserTemplateRepository userRepo = repositoryMapper.selectByTemplate(userId, "user", template.getId().toString()); + // 从内存中获取显示状态,避免数据库查询 + String key = "user:" + template.getId().toString(); + UserTemplateRepository userRepo = repoMap.get(key); dto.setIsEnabled(userRepo != null ? userRepo.getIsEnabled() : 1); // 默认显示 result.add(dto); @@ -299,7 +316,14 @@ public class TemplateRepositoryServiceImpl implements ITemplateRepositoryService @Transactional public boolean initUserRepository(Long userId) { try { + // 先获取用户已有的仓库配置 + List existingRepos = repositoryMapper.selectAllByUserId(userId); + Set existingKeys = existingRepos.stream() + .map(repo -> repo.getTemplateSource() + ":" + repo.getTemplateId()) + .collect(Collectors.toSet()); + int sortOrder = repositoryMapper.getMaxSortOrder(userId) + 1; + List toInsert = new ArrayList<>(); // 1. 将系统默认模板添加到用户仓库(如果不存在) JSONArray systemTemplates = JSONArray.parseArray(generatorService.getTemplateConfig()); @@ -312,9 +336,10 @@ public class TemplateRepositoryServiceImpl implements ITemplateRepositoryService for (Object templateObj : templates) { JSONObject template = (JSONObject) templateObj; String templateId = template.getString("id"); + String key = "system:" + templateId; - // 检查是否已存在 - if (repositoryMapper.checkTemplateExists(userId, "system", templateId) == 0) { + // 从内存中检查是否已存在,避免数据库查询 + if (!existingKeys.contains(key)) { UserTemplateRepository repository = new UserTemplateRepository(); repository.setUserId(userId); repository.setTemplateSource("system"); @@ -324,11 +349,16 @@ public class TemplateRepositoryServiceImpl implements ITemplateRepositoryService repository.setIsEnabled(1); // 系统模板默认启用 repository.setSortOrder(sortOrder++); - repositoryMapper.insert(repository); + toInsert.add(repository); } } } + // 批量插入,减少数据库交互 + for (UserTemplateRepository repo : toInsert) { + repositoryMapper.insert(repo); + } + // 2. 将公开的用户模板添加到用户仓库(如果不存在) List publicTemplates = userTemplateMapper.selectPublicTemplates(null); for (UserTemplate template : publicTemplates) {