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, "密码输入框"), INPUT_PASSWORD(3, "密码输入框"),
/**
* 文本域
*/
TEXT_AREA(4, "文本域"),
/** /**
* 下拉框 * 下拉框
*/ */
SELECT(4, "下拉框"), SELECT(5, "下拉框"),
/** /**
* 单选框 * 单选框
*/ */
RADIO(5, "单选框"), RADIO(6, "单选框"),
/** /**
* 开关 * 开关
*/ */
SWITCH(6, "开关"), SWITCH(7, "开关"),
/** /**
* 复选框 * 复选框
*/ */
CHECK_BOX(7, "复选框"), CHECK_BOX(8, "复选框"),
/**
* 文本域
*/
TEXT_AREA(8, "文本域"),
/**
* 时间框
*/
TIME(9, "时间框"),
/**
* 日期框
*/
DATE(10, "日期框"),
/** /**
* 树形选择 * 树形选择
*/ */
TREE_SELECT(11, "树选择"), TREE_SELECT(9, "树选择"),
/** /**
* 时间框 * 时间框
*/ */
DATE_TIME(12, "日期时间框"), TIME(10, "时间框"),
;
/**
* 日期框
*/
DATE(11, "日期框"),
/**
* 时间框
*/
DATE_TIME(12, "日期时间框"),;
private final Integer value; private final Integer value;
private final String description; private final String description;

View File

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

View File

@@ -217,52 +217,10 @@ public class GeneratorServiceImpl implements GeneratorService {
} }
@Override @Override
public List<GeneratePreviewResp> preview(String tableName) { public List<GeneratePreviewResp> preview(List<String> tableNames) {
List<GeneratePreviewResp> generatePreviewList = new ArrayList<>(); List<GeneratePreviewResp> generatePreviewList = new ArrayList<>();
// 初始化配置 for (String tableName : tableNames) {
GenConfigDO genConfig = genConfigMapper.selectById(tableName); generatePreviewList.addAll(this.preview(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; 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;
}
/** /**
* 生成代码 * 生成代码
* *

View File

@@ -89,15 +89,15 @@ public class GeneratorController {
} }
@Operation(summary = "生成预览", description = "预览生成代码") @Operation(summary = "生成预览", description = "预览生成代码")
@Parameter(name = "tableName", description = "表名称", required = true, example = "sys_user", in = ParameterIn.PATH) @Parameter(name = "tableNames", description = "表名称", required = true, example = "sys_user", in = ParameterIn.PATH)
@SaCheckPermission("code:generator:preview") @SaCheckPermission("code:generator:preview")
@GetMapping("/preview/{tableName}") @GetMapping("/preview/{tableNames}")
public List<GeneratePreviewResp> preview(@PathVariable String tableName) { public List<GeneratePreviewResp> preview(@PathVariable List<String> tableNames) {
return baseService.preview(tableName); return baseService.preview(tableNames);
} }
@Operation(summary = "生成代码", description = "生成代码") @Operation(summary = "生成代码", description = "生成代码")
@Parameter(name = "tableName", description = "表名称", required = true, example = "sys_user", in = ParameterIn.PATH) @Parameter(name = "tableNames", description = "表名称", required = true, example = "sys_user", in = ParameterIn.PATH)
@SaCheckPermission("code:generator:generate") @SaCheckPermission("code:generator:generate")
@PostMapping("/{tableNames}") @PostMapping("/{tableNames}")
public void generate(@PathVariable List<String> tableNames, HttpServletResponse response) { public void generate(@PathVariable List<String> tableNames, HttpServletResponse response) {