fix: 性能优化
This commit is contained in:
parent
852eb05cbf
commit
a4d6306259
@ -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<TemplateRepositoryDTO> getAvailableTemplates(Long userId) {
|
||||
// 确保用户仓库已初始化
|
||||
initUserRepository(userId);
|
||||
|
||||
List<TemplateRepositoryDTO> result = new ArrayList<>();
|
||||
|
||||
// 一次性获取用户的所有仓库配置,避免N+1查询
|
||||
List<UserTemplateRepository> userRepositories = repositoryMapper.selectAllByUserId(userId);
|
||||
|
||||
// 如果用户没有任何仓库配置,才进行初始化
|
||||
if (userRepositories.isEmpty()) {
|
||||
initUserRepository(userId);
|
||||
// 重新获取初始化后的配置
|
||||
userRepositories = repositoryMapper.selectAllByUserId(userId);
|
||||
}
|
||||
|
||||
Map<String, UserTemplateRepository> 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<UserTemplateRepository> existingRepos = repositoryMapper.selectAllByUserId(userId);
|
||||
Set<String> existingKeys = existingRepos.stream()
|
||||
.map(repo -> repo.getTemplateSource() + ":" + repo.getTemplateId())
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
int sortOrder = repositoryMapper.getMaxSortOrder(userId) + 1;
|
||||
List<UserTemplateRepository> 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<UserTemplate> publicTemplates = userTemplateMapper.selectPublicTemplates(null);
|
||||
for (UserTemplate template : publicTemplates) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user