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