feat(generator): 生成预览支持批量

This commit is contained in:
2024-12-12 20:51:26 +08:00
parent 75d2662365
commit a7296a3627
4 changed files with 90 additions and 75 deletions

View File

@@ -45,51 +45,50 @@ public enum FormTypeEnum implements BaseEnum<Integer> {
*/
INPUT_PASSWORD(3, "密码输入框"),
/**
* 文本域
*/
TEXT_AREA(4, "文本域"),
/**
* 下拉框
*/
SELECT(4, "下拉框"),
SELECT(5, "下拉框"),
/**
* 单选框
*/
RADIO(5, "单选框"),
RADIO(6, "单选框"),
/**
* 开关
*/
SWITCH(6, "开关"),
SWITCH(7, "开关"),
/**
* 复选框
*/
CHECK_BOX(7, "复选框"),
/**
* 文本域
*/
TEXT_AREA(8, "文本域"),
/**
* 时间框
*/
TIME(9, "时间框"),
/**
* 日期框
*/
DATE(10, "日期框"),
CHECK_BOX(8, "复选框"),
/**
* 树形选择
*/
TREE_SELECT(11, "树选择"),
TREE_SELECT(9, "树选择"),
/**
* 时间框
*/
DATE_TIME(12, "日期时间框"),
;
TIME(10, "时间框"),
/**
* 日期框
*/
DATE(11, "日期框"),
/**
* 时间框
*/
DATE_TIME(12, "日期时间框"),;
private final Integer value;
private final String description;

View File

@@ -74,15 +74,15 @@ public interface GeneratorService {
/**
* 生成预览
*
* @param tableName 表名称
* @param tableNames 表名称列表
* @return 预览信息
*/
List<GeneratePreviewResp> preview(String tableName);
List<GeneratePreviewResp> preview(List<String> tableNames);
/**
* 生成代码
*
* @param tableNames 表明层
* @param tableNames 表名称列表
* @param response 响应对象
*/
void generate(List<String> tableNames, HttpServletResponse response);

View File

@@ -217,52 +217,10 @@ public class GeneratorServiceImpl implements GeneratorService {
}
@Override
public List<GeneratePreviewResp> preview(String tableName) {
public List<GeneratePreviewResp> preview(List<String> tableNames) {
List<GeneratePreviewResp> generatePreviewList = new ArrayList<>();
// 初始化配置
GenConfigDO genConfig = genConfigMapper.selectById(tableName);
CheckUtils.throwIfNull(genConfig, "请先进行数据表 [{}] 生成配置", tableName);
List<FieldConfigDO> fieldConfigList = fieldConfigMapper.selectListByTableName(tableName);
CheckUtils.throwIfEmpty(fieldConfigList, "请先进行数据表 [{}] 字段配置", tableName);
InnerGenConfigDO innerGenConfig = new InnerGenConfigDO(genConfig);
// 渲染代码
String classNamePrefix = innerGenConfig.getClassNamePrefix();
Map<String, GeneratorProperties.TemplateConfig> templateConfigMap = generatorProperties.getTemplateConfigs();
TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig("templates", TemplateConfig.ResourceMode.CLASSPATH));
if (engine instanceof FreemarkerEngine) {
((FreemarkerEngine) engine).getConfiguration().setSharedVariable("statics", BeansWrapper.getDefaultInstance().getStaticModels());
}
for (Map.Entry<String, GeneratorProperties.TemplateConfig> templateConfigEntry : templateConfigMap.entrySet()) {
GeneratorProperties.TemplateConfig templateConfig = templateConfigEntry.getValue();
// 移除需要忽略的字段
innerGenConfig.setFieldConfigs(fieldConfigList.stream()
.filter(fieldConfig -> !StrUtil.equalsAny(fieldConfig.getFieldName(), templateConfig
.getExcludeFields()))
.toList());
// 预处理配置
this.pretreatment(innerGenConfig);
// 处理其他配置
innerGenConfig.setSubPackageName(templateConfig.getPackageName());
String classNameSuffix = templateConfigEntry.getKey();
String className = classNamePrefix + classNameSuffix;
innerGenConfig.setClassName(className);
boolean isBackend = templateConfig.isBackend();
String extension = templateConfig.getExtension();
GeneratePreviewResp generatePreview = new GeneratePreviewResp();
generatePreview.setBackend(isBackend);
generatePreviewList.add(generatePreview);
String fileName = className + extension;
if (!isBackend) {
fileName = ".vue".equals(extension) && "index".equals(classNameSuffix)
? "index.vue"
: this.getFrontendFileName(classNamePrefix, className, extension);
}
generatePreview.setFileName(fileName);
generatePreview.setContent(engine.getTemplate(templateConfig.getTemplatePath())
.render(BeanUtil.beanToMap(innerGenConfig)));
this.setPreviewPath(generatePreview, innerGenConfig, templateConfig);
for (String tableName : tableNames) {
generatePreviewList.addAll(this.preview(tableName));
}
return generatePreviewList;
}
@@ -314,6 +272,64 @@ public class GeneratorServiceImpl implements GeneratorService {
}
}
/**
* 生成预览
*
* @param tableName 表名称
* @return 预览信息
*/
private List<GeneratePreviewResp> preview(String tableName) {
List<GeneratePreviewResp> generatePreviewList = new ArrayList<>();
// 初始化配置
GenConfigDO genConfig = genConfigMapper.selectById(tableName);
CheckUtils.throwIfNull(genConfig, "请先进行数据表 [{}] 生成配置", tableName);
List<FieldConfigDO> fieldConfigList = fieldConfigMapper.selectListByTableName(tableName);
CheckUtils.throwIfEmpty(fieldConfigList, "请先进行数据表 [{}] 字段配置", tableName);
InnerGenConfigDO innerGenConfig = new InnerGenConfigDO(genConfig);
// 渲染代码
String classNamePrefix = innerGenConfig.getClassNamePrefix();
Map<String, GeneratorProperties.TemplateConfig> templateConfigMap = generatorProperties.getTemplateConfigs();
TemplateEngine engine = TemplateUtil
.createEngine(new TemplateConfig("templates", TemplateConfig.ResourceMode.CLASSPATH));
if (engine instanceof FreemarkerEngine) {
((FreemarkerEngine)engine).getConfiguration()
.setSharedVariable("statics", BeansWrapper.getDefaultInstance().getStaticModels());
}
for (Map.Entry<String, GeneratorProperties.TemplateConfig> templateConfigEntry : templateConfigMap.entrySet()) {
GeneratorProperties.TemplateConfig templateConfig = templateConfigEntry.getValue();
// 移除需要忽略的字段
innerGenConfig.setFieldConfigs(fieldConfigList.stream()
.filter(fieldConfig -> !StrUtil.equalsAny(fieldConfig.getFieldName(), templateConfig
.getExcludeFields()))
.toList());
// 预处理配置
this.pretreatment(innerGenConfig);
// 处理其他配置
innerGenConfig.setSubPackageName(templateConfig.getPackageName());
String classNameSuffix = templateConfigEntry.getKey();
String className = classNamePrefix + classNameSuffix;
innerGenConfig.setClassName(className);
boolean isBackend = templateConfig.isBackend();
String extension = templateConfig.getExtension();
GeneratePreviewResp generatePreview = new GeneratePreviewResp();
generatePreview.setBackend(isBackend);
generatePreviewList.add(generatePreview);
String fileName = className + extension;
if (!isBackend) {
fileName = ".vue".equals(extension) && "index".equals(classNameSuffix)
? "index.vue"
: this.getFrontendFileName(classNamePrefix, className, extension);
}
generatePreview.setFileName(fileName);
generatePreview.setContent(engine.getTemplate(templateConfig.getTemplatePath())
.render(BeanUtil.beanToMap(innerGenConfig)));
this.setPreviewPath(generatePreview, innerGenConfig, templateConfig);
}
return generatePreviewList;
}
/**
* 生成代码
*