From 852eb05cbff80b7b18ac05503d5c039bf3464860 Mon Sep 17 00:00:00 2001 From: cuijiawang Date: Sun, 28 Sep 2025 09:31:09 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BB=A3=E7=A0=81=E7=94=9F=E6=88=90?= =?UTF-8?q?=E5=99=A8=20=E6=A8=A1=E6=9D=BF=E5=86=85=E5=AE=B9=E9=A2=84?= =?UTF-8?q?=E8=A7=88=20=E7=B3=BB=E7=BB=9F=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/GeneratorController.java | 12 +++++ .../codegen/service/GeneratorServiceImpl.java | 48 +++++++++++++++++++ .../codegen/service/IGeneratorService.java | 9 ++++ .../codegen/util/FreemarkerUtil.java | 35 ++++++++++++++ 4 files changed, 104 insertions(+) diff --git a/agileboot-system/wol-codegenerator/src/main/java/com/agileboot/codegen/controller/GeneratorController.java b/agileboot-system/wol-codegenerator/src/main/java/com/agileboot/codegen/controller/GeneratorController.java index b9c94d6..d0685c2 100644 --- a/agileboot-system/wol-codegenerator/src/main/java/com/agileboot/codegen/controller/GeneratorController.java +++ b/agileboot-system/wol-codegenerator/src/main/java/com/agileboot/codegen/controller/GeneratorController.java @@ -105,6 +105,18 @@ public class GeneratorController { } } + @GetMapping("/template/content") + public R getTemplateContent(@RequestParam("templateSource") String templateSource, + @RequestParam("templateId") String templateId) { + try { + String content = generatorService.getTemplateContentBySource(templateSource, templateId); + return R.ok("获取成功", content); + } catch (Exception e) { + log.error("获取模板内容失败", e); + return R.fail(e.getMessage()); + } + } + @GetMapping("/template/preview") public R previewTemplateGet(@RequestParam("templateSource") String templateSource, @RequestParam("templateId") String templateId, diff --git a/agileboot-system/wol-codegenerator/src/main/java/com/agileboot/codegen/service/GeneratorServiceImpl.java b/agileboot-system/wol-codegenerator/src/main/java/com/agileboot/codegen/service/GeneratorServiceImpl.java index acc92e8..3bbf71d 100644 --- a/agileboot-system/wol-codegenerator/src/main/java/com/agileboot/codegen/service/GeneratorServiceImpl.java +++ b/agileboot-system/wol-codegenerator/src/main/java/com/agileboot/codegen/service/GeneratorServiceImpl.java @@ -145,6 +145,54 @@ public class GeneratorServiceImpl implements IGeneratorService { } } + @Override + public String getTemplateContentBySource(String templateSource, String templateId) { + try { + if ("user".equals(templateSource)) { + // 用户模板:从数据库获取 + return userTemplateService.getTemplateContent(Long.valueOf(templateId)); + } else if ("system".equals(templateSource)) { + // 系统模板:从文件系统获取 + return getSystemTemplateContent(templateId); + } else { + throw new RuntimeException("不支持的模板来源: " + templateSource); + } + } catch (Exception e) { + log.error("获取模板内容失败: templateSource={}, templateId={}", templateSource, templateId, e); + throw new RuntimeException("获取模板内容失败: " + e.getMessage()); + } + } + + /** + * 获取系统模板内容 + */ + private String getSystemTemplateContent(String templateId) { + try { + // 从template.json配置中找到对应模板的文件路径 + JSONArray allTemplates = JSONArray.parseArray(getTemplateConfig()); + for (Object groupObj : allTemplates) { + 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"))) { + String templateName = template.getString("name"); + String templatePath = groupName + "/" + templateName + ".ftl"; + + // 读取模板文件内容 + return FreemarkerUtil.getTemplateContent(templatePath); + } + } + } + return "// 系统模板不存在: " + templateId; + } catch (Exception e) { + log.error("获取系统模板内容失败", e); + return "// 获取系统模板内容失败: " + e.getMessage(); + } + } + @Override public String previewSingleTemplate(String templateSource, String templateId, String templateContent, Map options) { try { diff --git a/agileboot-system/wol-codegenerator/src/main/java/com/agileboot/codegen/service/IGeneratorService.java b/agileboot-system/wol-codegenerator/src/main/java/com/agileboot/codegen/service/IGeneratorService.java index dbe2ec3..ed98587 100644 --- a/agileboot-system/wol-codegenerator/src/main/java/com/agileboot/codegen/service/IGeneratorService.java +++ b/agileboot-system/wol-codegenerator/src/main/java/com/agileboot/codegen/service/IGeneratorService.java @@ -36,4 +36,13 @@ public interface IGeneratorService { * @return 生成的代码内容 */ String previewSingleTemplate(String templateSource, String templateId, String templateContent, Map options); + + /** + * 根据模板来源和ID获取模板原始内容 + * + * @param templateSource 模板来源(system/user) + * @param templateId 模板ID + * @return 模板原始内容 + */ + String getTemplateContentBySource(String templateSource, String templateId); } diff --git a/agileboot-system/wol-codegenerator/src/main/java/com/agileboot/codegen/util/FreemarkerUtil.java b/agileboot-system/wol-codegenerator/src/main/java/com/agileboot/codegen/util/FreemarkerUtil.java index 2171e32..5de8f6c 100644 --- a/agileboot-system/wol-codegenerator/src/main/java/com/agileboot/codegen/util/FreemarkerUtil.java +++ b/agileboot-system/wol-codegenerator/src/main/java/com/agileboot/codegen/util/FreemarkerUtil.java @@ -81,4 +81,39 @@ public class FreemarkerUtil { return false; } } + + /** + * 获取模板文件的原始内容 + * + * @param templateName 模板名称 + * @return 模板原始内容 + */ + public static String getTemplateContent(String templateName) { + try { + Template template = configuration.getTemplate(templateName); + // 通过反射或其他方式获取模板源内容 + // 这里使用简单的方法:读取模板文件 + return readTemplateFile(templateName); + } catch (IOException e) { + log.error("获取模板内容失败: {}", templateName, e); + return "// 模板文件不存在或读取失败: " + templateName; + } + } + + /** + * 读取模板文件内容 + */ + private static String readTemplateFile(String templatePath) { + try { + java.io.InputStream inputStream = FreemarkerUtil.class.getResourceAsStream("/templates/code-generator/" + templatePath); + if (inputStream != null) { + return new String(inputStream.readAllBytes(), "UTF-8"); + } else { + return "// 模板文件不存在: " + templatePath; + } + } catch (Exception e) { + log.error("读取模板文件失败: {}", templatePath, e); + return "// 读取模板文件失败: " + e.getMessage(); + } + } }