mirror of
https://github.com/continew-org/continew-admin.git
synced 2025-11-10 02:57:17 +08:00
feat(generator): 生成预览支持批量
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 生成代码
|
* 生成代码
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user