fix: 代码生成器 系统模板
This commit is contained in:
parent
5e47425ab5
commit
2d75478bb7
@ -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<UserTemplateRepository> repositories = repositoryMapper.selectEnabledByUserId(userId);
|
||||
|
||||
|
||||
// 按分组组织模板
|
||||
Map<String, List<JSONObject>> 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<UserTemplate> userEnabledTemplates = userTemplateMapper.selectList(
|
||||
new LambdaQueryWrapper<UserTemplate>()
|
||||
.eq(UserTemplate::getUserId, userId)
|
||||
.eq(UserTemplate::getIsEnabled, 1)
|
||||
.eq(UserTemplate::getStatus, 1) // 只包含发布状态的模板
|
||||
new LambdaQueryWrapper<UserTemplate>()
|
||||
.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<String, List<JSONObject>> 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<TemplateRepositoryDTO> getAvailableTemplates(Long 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
|
||||
));
|
||||
|
||||
.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<UserTemplate> 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<UserTemplateRepository> existingRepos = repositoryMapper.selectAllByUserId(userId);
|
||||
Set<String> 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<UserTemplateRepository> 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<UserTemplate> 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);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user