From 2d75478bb7c0da8166dd7ef70a6a5714f8c1f772 Mon Sep 17 00:00:00 2001 From: cuijiawang Date: Mon, 29 Sep 2025 16:55:30 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BB=A3=E7=A0=81=E7=94=9F=E6=88=90?= =?UTF-8?q?=E5=99=A8=20=E7=B3=BB=E7=BB=9F=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/TemplateRepositoryServiceImpl.java | 130 +++++++++--------- 1 file changed, 62 insertions(+), 68 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 eacd9a4..3308d02 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 @@ -3,7 +3,6 @@ package com.agileboot.codegen.service.impl; import com.agileboot.codegen.dto.TemplateRepositoryDTO; import com.agileboot.codegen.entity.UserTemplate; import com.agileboot.codegen.entity.UserTemplateRepository; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.agileboot.codegen.mapper.UserTemplateMapper; import com.agileboot.codegen.mapper.UserTemplateRepositoryMapper; import com.agileboot.codegen.service.IGeneratorService; @@ -16,17 +15,12 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; 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.*; import java.util.stream.Collectors; /** * 模板仓库 Service实现类 - * + * * @author system * @date 2025-09-26 */ @@ -43,51 +37,51 @@ public class TemplateRepositoryServiceImpl implements ITemplateRepositoryService public JSONArray getUserTemplateConfig(Long userId) { // 获取用户启用的模板仓库配置(公开模板) List repositories = repositoryMapper.selectEnabledByUserId(userId); - + // 按分组组织模板 Map> groupedTemplates = new HashMap<>(); - + for (UserTemplateRepository repo : repositories) { String group = repo.getTemplateGroup(); - + JSONObject template = new JSONObject(); template.put("id", repo.getTemplateId()); template.put("name", repo.getTemplateName()); template.put("description", repo.getTemplateName()); template.put("source", repo.getTemplateSource()); // 添加来源标识 - + groupedTemplates.computeIfAbsent(group, k -> new ArrayList<>()).add(template); } - + // 添加用户自己的启用模板(包括私有模板) List userEnabledTemplates = userTemplateMapper.selectList( - new LambdaQueryWrapper() - .eq(UserTemplate::getUserId, userId) - .eq(UserTemplate::getIsEnabled, 1) - .eq(UserTemplate::getStatus, 1) // 只包含发布状态的模板 + new LambdaQueryWrapper() + .eq(UserTemplate::getUserId, userId) + .eq(UserTemplate::getIsEnabled, 1) + .eq(UserTemplate::getStatus, 1) // 只包含发布状态的模板 ); - + for (UserTemplate userTemplate : userEnabledTemplates) { // 如果是公开模板且已经在仓库配置中,跳过(避免重复) if (userTemplate.getIsPublic() == 1) { boolean alreadyInRepo = repositories.stream() - .anyMatch(repo -> "user".equals(repo.getTemplateSource()) && - userTemplate.getId().toString().equals(repo.getTemplateId())); + .anyMatch(repo -> "user".equals(repo.getTemplateSource()) && + userTemplate.getId().toString().equals(repo.getTemplateId())); if (alreadyInRepo) { continue; } } - + String group = userTemplate.getTemplateGroup(); JSONObject template = new JSONObject(); template.put("id", userTemplate.getId().toString()); template.put("name", userTemplate.getTemplateName()); template.put("description", userTemplate.getTemplateName()); template.put("source", "user"); - + groupedTemplates.computeIfAbsent(group, k -> new ArrayList<>()).add(template); } - + // 如果用户没有配置任何模板,先初始化用户仓库,然后重新获取 if (groupedTemplates.isEmpty()) { log.info("用户 {} 没有模板配置,自动初始化用户仓库", userId); @@ -97,13 +91,13 @@ public class TemplateRepositoryServiceImpl implements ITemplateRepositoryService repositories = repositoryMapper.selectEnabledByUserId(userId); for (UserTemplateRepository repo : repositories) { String group = repo.getTemplateGroup(); - + JSONObject template = new JSONObject(); template.put("id", repo.getTemplateId()); template.put("name", repo.getTemplateName()); template.put("description", repo.getTemplateName()); template.put("source", repo.getTemplateSource()); - + groupedTemplates.computeIfAbsent(group, k -> new ArrayList<>()).add(template); } } else { @@ -111,7 +105,7 @@ public class TemplateRepositoryServiceImpl implements ITemplateRepositoryService return JSONArray.parseArray(generatorService.getTemplateConfig()); } } - + // 转换为JSONArray格式 JSONArray result = new JSONArray(); for (Map.Entry> entry : groupedTemplates.entrySet()) { @@ -120,7 +114,7 @@ public class TemplateRepositoryServiceImpl implements ITemplateRepositoryService group.put("templates", entry.getValue()); result.add(group); } - + return result; } @@ -132,23 +126,23 @@ public class TemplateRepositoryServiceImpl implements ITemplateRepositoryService @Override public List getAvailableTemplates(Long 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 - )); - + .collect(Collectors.toMap( + repo -> repo.getTemplateSource() + ":" + repo.getTemplateId(), + repo -> repo + )); + // 1. 添加系统模板 try { JSONArray systemTemplates = JSONArray.parseArray(generatorService.getTemplateConfig()); @@ -156,7 +150,7 @@ public class TemplateRepositoryServiceImpl implements ITemplateRepositoryService JSONObject group = (JSONObject) groupObj; String groupName = group.getString("group"); JSONArray templates = group.getJSONArray("templates"); - + for (Object templateObj : templates) { JSONObject template = (JSONObject) templateObj; TemplateRepositoryDTO dto = new TemplateRepositoryDTO(); @@ -165,19 +159,19 @@ public class TemplateRepositoryServiceImpl implements ITemplateRepositoryService dto.setTemplateName(template.getString("name")); dto.setTemplateGroup(groupName); dto.setDescription(template.getString("description")); // 系统模板描述 - + // 从内存中获取显示状态,避免数据库查询 String key = "system:" + template.getString("id"); UserTemplateRepository userRepo = repoMap.get(key); - dto.setIsEnabled(userRepo != null ? userRepo.getIsEnabled() : 1); // 默认显示 - + dto.setIsEnabled(userRepo != null ? userRepo.getIsEnabled() : 0); // 默认显示 + result.add(dto); } } } catch (Exception e) { log.error("解析系统模板配置失败", e); } - + // 2. 添加公开的用户模板 List publicTemplates = userTemplateMapper.selectPublicTemplates(null); for (UserTemplate template : publicTemplates) { @@ -187,27 +181,27 @@ public class TemplateRepositoryServiceImpl implements ITemplateRepositoryService dto.setTemplateName(template.getTemplateName()); dto.setTemplateGroup(template.getTemplateGroup()); dto.setDescription(template.getDescription()); // 用户模板描述 - + // 从内存中获取显示状态,避免数据库查询 String key = "user:" + template.getId().toString(); UserTemplateRepository userRepo = repoMap.get(key); - dto.setIsEnabled(userRepo != null ? userRepo.getIsEnabled() : 1); // 默认显示 - + dto.setIsEnabled(userRepo != null ? userRepo.getIsEnabled() : 0); // 默认显示 + result.add(dto); } - + return result; } @Override @Transactional - public boolean addTemplateToRepository(Long userId, String templateSource, String templateId, - String templateName, String templateGroup) { + public boolean addTemplateToRepository(Long userId, String templateSource, String templateId, + String templateName, String templateGroup) { // 检查是否已存在 if (repositoryMapper.checkTemplateExists(userId, templateSource, templateId) > 0) { return false; } - + UserTemplateRepository repository = new UserTemplateRepository(); repository.setUserId(userId); repository.setTemplateSource(templateSource); @@ -216,7 +210,7 @@ public class TemplateRepositoryServiceImpl implements ITemplateRepositoryService repository.setTemplateGroup(templateGroup); repository.setIsEnabled(1); repository.setSortOrder(repositoryMapper.getMaxSortOrder(userId) + 1); - + return repositoryMapper.insert(repository) > 0; } @@ -233,11 +227,11 @@ public class TemplateRepositoryServiceImpl implements ITemplateRepositoryService if (repositoryMapper.checkTemplateExists(userId, templateSource, templateId) == 0) { // 记录不存在,需要先创建 log.info("模板记录不存在,先创建记录: userId={}, templateSource={}, templateId={}", userId, templateSource, templateId); - + // 获取模板信息 String templateName = ""; String templateGroup = ""; - + if ("system".equals(templateSource)) { // 系统模板,从配置中获取信息 try { @@ -246,7 +240,7 @@ public class TemplateRepositoryServiceImpl implements ITemplateRepositoryService JSONObject group = (JSONObject) groupObj; String groupName = group.getString("group"); JSONArray templates = group.getJSONArray("templates"); - + for (Object templateObj : templates) { JSONObject template = (JSONObject) templateObj; if (templateId.equals(template.getString("id"))) { @@ -274,12 +268,12 @@ public class TemplateRepositoryServiceImpl implements ITemplateRepositoryService return false; } } - + if (templateName.isEmpty()) { log.error("无法获取模板信息: templateSource={}, templateId={}", templateSource, templateId); return false; } - + // 创建记录 UserTemplateRepository repository = new UserTemplateRepository(); repository.setUserId(userId); @@ -289,7 +283,7 @@ public class TemplateRepositoryServiceImpl implements ITemplateRepositoryService repository.setTemplateGroup(templateGroup); repository.setIsEnabled(isEnabled); repository.setSortOrder(repositoryMapper.getMaxSortOrder(userId) + 1); - + return repositoryMapper.insert(repository) > 0; } else { // 记录存在,直接更新状态 @@ -319,25 +313,25 @@ public class TemplateRepositoryServiceImpl implements ITemplateRepositoryService // 先获取用户已有的仓库配置 List existingRepos = repositoryMapper.selectAllByUserId(userId); Set existingKeys = existingRepos.stream() - .map(repo -> repo.getTemplateSource() + ":" + repo.getTemplateId()) - .collect(Collectors.toSet()); - + .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()); - + for (Object groupObj : systemTemplates) { JSONObject group = (JSONObject) groupObj; String groupName = group.getString("group"); JSONArray templates = group.getJSONArray("templates"); - + for (Object templateObj : templates) { JSONObject template = (JSONObject) templateObj; String templateId = template.getString("id"); String key = "system:" + templateId; - + // 从内存中检查是否已存在,避免数据库查询 if (!existingKeys.contains(key)) { UserTemplateRepository repository = new UserTemplateRepository(); @@ -346,24 +340,24 @@ public class TemplateRepositoryServiceImpl implements ITemplateRepositoryService repository.setTemplateId(templateId); repository.setTemplateName(template.getString("name")); repository.setTemplateGroup(groupName); - repository.setIsEnabled(1); // 系统模板默认启用 + repository.setIsEnabled(0); // 系统模板默认启用 repository.setSortOrder(sortOrder++); - + toInsert.add(repository); } } } - + // 批量插入,减少数据库交互 for (UserTemplateRepository repo : toInsert) { repositoryMapper.insert(repo); } - + // 2. 将公开的用户模板添加到用户仓库(如果不存在) List publicTemplates = userTemplateMapper.selectPublicTemplates(null); for (UserTemplate template : publicTemplates) { String templateId = template.getId().toString(); - + // 检查是否已存在 if (repositoryMapper.checkTemplateExists(userId, "user", templateId) == 0) { UserTemplateRepository repository = new UserTemplateRepository(); @@ -374,11 +368,11 @@ public class TemplateRepositoryServiceImpl implements ITemplateRepositoryService repository.setTemplateGroup(template.getTemplateGroup()); repository.setIsEnabled(1); // 公开模板默认启用 repository.setSortOrder(sortOrder++); - + repositoryMapper.insert(repository); } } - + return true; } catch (Exception e) { log.error("初始化用户模板仓库失败", e);