From 853b3da7f705938071156fadcddb668b7546e719 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Tue, 05 Jul 2022 17:37:55 +0800
Subject: [PATCH] fix 完成文件输出

---
 src/main/java/com/xcong/farmer/cms/core/template/TemplateLoader.java                   |   17 ----
 src/main/java/com/xcong/farmer/cms/modules/core/service/impl/CmsCoreServiceImpl.java   |    7 +
 src/main/java/com/xcong/farmer/cms/core/node/Template.java                             |   97 ++++++++++++++++++++++-
 src/main/java/com/xcong/farmer/cms/core/template/TemplateConfiguration.java            |   33 -------
 src/main/java/com/xcong/farmer/cms/modules/core/service/ICmsCoreService.java           |    2 
 src/main/java/com/xcong/farmer/cms/core/handler/ColumnDataParserHandler.java           |    9 +-
 src/main/java/com/xcong/farmer/cms/core/node/AttrNode.java                             |   23 +----
 src/main/java/com/xcong/farmer/cms/core/handler/NavDataParserHandler.java              |   12 +-
 src/main/java/com/xcong/farmer/cms/core/handler/ArticlesDataParserHandler.java         |    5 
 src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/ReleaseServiceImpl.java |    4 
 10 files changed, 122 insertions(+), 87 deletions(-)

diff --git a/src/main/java/com/xcong/farmer/cms/core/handler/ArticlesDataParserHandler.java b/src/main/java/com/xcong/farmer/cms/core/handler/ArticlesDataParserHandler.java
index 61ecde7..2a0f273 100644
--- a/src/main/java/com/xcong/farmer/cms/core/handler/ArticlesDataParserHandler.java
+++ b/src/main/java/com/xcong/farmer/cms/core/handler/ArticlesDataParserHandler.java
@@ -4,6 +4,7 @@
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.xcong.farmer.cms.configurations.properties.CmsProperties;
 import com.xcong.farmer.cms.conversion.ArticleConversion;
 import com.xcong.farmer.cms.core.node.AttrNode;
 import com.xcong.farmer.cms.core.tag.data.ArticleData;
@@ -26,8 +27,8 @@
 public class ArticlesDataParserHandler implements DataParserHandler  {
 
     private ArticleMapper articleMapper = SpringContextHolder.getBean(ArticleMapper.class);
+    private CmsProperties cmsProperties = SpringContextHolder.getBean(CmsProperties.class);
 
-    private String BASE_URL = "http://192.168.0.1";
     @Override
     public void dataParser(AttrNode node) {
         log.info("文章列表解析");
@@ -60,7 +61,7 @@
         if (article.getType() == 2) {
             articleData.setUrl(article.getArticleUrl());
         } else {
-            articleData.setUrl(BASE_URL + article.getPath() + "/" + article.getId() + ".html");
+            articleData.setUrl(cmsProperties.getBaseUrl() + article.getPath() + "/" + article.getId() + ".html");
         }
 
 
diff --git a/src/main/java/com/xcong/farmer/cms/core/handler/ColumnDataParserHandler.java b/src/main/java/com/xcong/farmer/cms/core/handler/ColumnDataParserHandler.java
index 7a742e7..0ec80b8 100644
--- a/src/main/java/com/xcong/farmer/cms/core/handler/ColumnDataParserHandler.java
+++ b/src/main/java/com/xcong/farmer/cms/core/handler/ColumnDataParserHandler.java
@@ -1,6 +1,7 @@
 package com.xcong.farmer.cms.core.handler;
 
 import cn.hutool.core.collection.CollUtil;
+import com.xcong.farmer.cms.configurations.properties.CmsProperties;
 import com.xcong.farmer.cms.conversion.ColumnConversion;
 import com.xcong.farmer.cms.core.node.AttrNode;
 import com.xcong.farmer.cms.core.tag.data.ColumnData;
@@ -25,7 +26,7 @@
 
     private ColumnMapper columnMapper = SpringContextHolder.getBean(ColumnMapper.class);
     private ArticleMapper articleMapper = SpringContextHolder.getBean(ArticleMapper.class);
-    private String BASE_URL = "http://192.168.0.1";
+    private CmsProperties cmsProperties = SpringContextHolder.getBean(CmsProperties.class);
 
     @Override
     public void dataParser(AttrNode attrNode) {
@@ -55,14 +56,14 @@
     public ColumnData columnToData(ColumnEntity column) {
         ColumnData columnData = ColumnConversion.INSTANCE.entityToData(column);
 
-        columnData.setUrl(BASE_URL + column.getPath());
+        columnData.setUrl(cmsProperties.getBaseUrl() + column.getPath());
         if (column.getType() == 2) {
             if (column.getTargetType() == 1) {
                 ArticleEntity article = this.articleMapper.selectArticleById(Long.parseLong(column.getTargetUrl()));
-                columnData.setUrl(BASE_URL + article.getPath() + "/" + article.getId() + ".html");
+                columnData.setUrl(cmsProperties.getBaseUrl() + article.getPath() + "/" + article.getId() + ".html");
             } else if (column.getTargetType() == 2) {
                 ColumnEntity columnEntity = this.columnMapper.selectByCodeAndCompanyId(column.getTargetUrl(), column.getCompanyId());
-                columnData.setUrl(BASE_URL + columnEntity.getPath());
+                columnData.setUrl(cmsProperties.getBaseUrl() + columnEntity.getPath());
             } else {
                 columnData.setUrl(column.getTargetUrl());
             }
diff --git a/src/main/java/com/xcong/farmer/cms/core/handler/NavDataParserHandler.java b/src/main/java/com/xcong/farmer/cms/core/handler/NavDataParserHandler.java
index ab64db2..b50a231 100644
--- a/src/main/java/com/xcong/farmer/cms/core/handler/NavDataParserHandler.java
+++ b/src/main/java/com/xcong/farmer/cms/core/handler/NavDataParserHandler.java
@@ -1,6 +1,7 @@
 package com.xcong.farmer.cms.core.handler;
 
 import cn.hutool.core.collection.CollUtil;
+import com.xcong.farmer.cms.configurations.properties.CmsProperties;
 import com.xcong.farmer.cms.conversion.ColumnConversion;
 import com.xcong.farmer.cms.core.node.AttrNode;
 import com.xcong.farmer.cms.core.tag.data.NavData;
@@ -27,7 +28,8 @@
 
     private ColumnMapper columnMapper = SpringContextHolder.getBean(ColumnMapper.class);
     private ArticleMapper articleMapper = SpringContextHolder.getBean(ArticleMapper.class);
-    private String BASE_URL = "http://192.168.0.1";
+    private CmsProperties cmsProperties = SpringContextHolder.getBean(CmsProperties.class);
+
     @Override
     public void dataParser(AttrNode node) {
         log.info("导航栏解析");
@@ -43,7 +45,7 @@
 
         NavData index = new NavData();
         index.setTitle("首页");
-        index.setUrl(BASE_URL);
+        index.setUrl(cmsProperties.getBaseUrl());
         index.setCode("index");
         list.add(index);
 
@@ -73,14 +75,14 @@
     public NavData columnToNav(ColumnEntity column) {
         NavData navData = ColumnConversion.INSTANCE.columnToNav(column);
 
-        navData.setUrl(BASE_URL + column.getPath());
+        navData.setUrl(cmsProperties.getBaseUrl() + column.getPath());
         if (column.getType() == 2) {
             if (column.getTargetType() == 1) {
                 ArticleEntity article = this.articleMapper.selectArticleById(Long.parseLong(column.getTargetUrl()));
-                navData.setUrl(BASE_URL + article.getPath() + "/" + article.getId() + ".html");
+                navData.setUrl(cmsProperties.getBaseUrl() + article.getPath() + "/" + article.getId() + ".html");
             } else if (column.getTargetType() == 2) {
                 ColumnEntity columnEntity = this.columnMapper.selectByCodeAndCompanyId(column.getTargetUrl(), column.getCompanyId());
-                navData.setUrl(BASE_URL + columnEntity.getPath());
+                navData.setUrl(cmsProperties.getBaseUrl() + columnEntity.getPath());
             } else {
                 navData.setUrl(column.getTargetUrl());
             }
diff --git a/src/main/java/com/xcong/farmer/cms/core/node/AttrNode.java b/src/main/java/com/xcong/farmer/cms/core/node/AttrNode.java
index ebf2177..b11eae9 100644
--- a/src/main/java/com/xcong/farmer/cms/core/node/AttrNode.java
+++ b/src/main/java/com/xcong/farmer/cms/core/node/AttrNode.java
@@ -52,22 +52,6 @@
         this.parserData = parserData;
     }
 
-    public static void main(String[] args) {
-//        String data = "{id=[1,2,3], page=1, limit=5, field=art}";
-//        Articles articles = new AttrNode().parserTag(data, Articles.class);
-
-//        String value = "{id=${col.id}, page=1, limit=5, field=art}";
-//        String pattern = "(?<=\\$\\{)[\\s\\S]*?(?=\\})";
-//        Matcher matcher = Pattern.compile(pattern).matcher(value);
-//        while (matcher.find()) {
-//            String group = matcher.group();
-//            System.out.println(1);
-//        }
-
-
-        System.out.println(1);
-    }
-
     private boolean isNeedEmpty() {
         Elements children = this.element.children();
         if (CollUtil.isNotEmpty(children)) {
@@ -112,6 +96,7 @@
             i++;
 
             try {
+                Template.TAGS.add(tagsEnum.getName());
                 // {id=${col.id}, page=1, limit=5, field=art} ${col.id} 形式需先设置值
                 String tagValue = attributes.get(tagsEnum.getName());
                 tagValue = attrValueFormat(tagValue);
@@ -139,6 +124,10 @@
     public void runDataInject() {
         Attributes attributes = this.element.attributes();
         for (Attribute attribute : attributes) {
+            if (attribute.getKey().startsWith("\\$")) {
+                Template.TAGS.add(attribute.getKey());
+            }
+
             String key = attribute.getKey().replaceAll("\\$", "");
             String value = attribute.getValue();
 
@@ -158,9 +147,7 @@
                 this.element.removeAttr("class");
                 this.element.attr("class", evaluate);
             } else if (value.contains( "${")) {
-
                 String result = attrValueFormat(value);
-                System.out.println(result);
                 if ("text".equals(key)) {
                     this.element.text(result);
                 } else {
diff --git a/src/main/java/com/xcong/farmer/cms/core/node/Template.java b/src/main/java/com/xcong/farmer/cms/core/node/Template.java
index 98501ea..aef600e 100644
--- a/src/main/java/com/xcong/farmer/cms/core/node/Template.java
+++ b/src/main/java/com/xcong/farmer/cms/core/node/Template.java
@@ -2,14 +2,15 @@
 
 import cn.hutool.core.collection.CollUtil;
 import com.xcong.farmer.cms.core.node.PartNode;
+import org.jsoup.Jsoup;
 import org.jsoup.nodes.Document;
 import org.jsoup.nodes.Element;
 import org.jsoup.select.Elements;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.*;
 
 /**
  * @author wzy
@@ -17,15 +18,63 @@
  **/
 public class Template {
 
-    private String name;
+    // 文件名称
+    private String name = "index";
+    // 文件保存路径
+    private String path;
 
     private Document document;
-
     private Map<String, Map<String, Object>> params = new HashMap<>();
     private Map<String, Object> system;
     private List<PartNode> partNodes = new ArrayList<>();
 
-    private static boolean HAS_PAGING = false;
+
+    // 页面中包含的标签
+    public static Set<String> TAGS;
+    public static boolean HAS_PAGING = false;
+
+    public Template() {
+        TAGS = new HashSet<>();
+    }
+
+    public Template(File file, Map<String, Object> system) {
+        TAGS = new HashSet<>();
+
+        Document document = null;
+        try {
+            document = Jsoup.parse(file, "utf-8");
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+        if (document == null) {
+            throw new NullPointerException();
+        }
+
+        this.document = document;
+        this.system = system;
+
+        Object templatePath = system.get("templatePath");
+        if (templatePath != null) {
+            this.path = (String) templatePath;
+        }
+
+        Object templateType = system.get("templateType");
+        if ("article".equals(templateType)) {
+            Object templateName = system.get("templateName");
+            if (templateName != null) {
+                this.name = (String) templateName;
+            }
+        } else if ("column".equals(templateType)) {
+            Object page = system.get("page");
+            if (!new Integer(1).equals(page)) {
+                this.name = name + "_" + page;
+            }
+        } else {
+
+        }
+
+    }
 
     public void parser() {
         Elements children = document.body().children();
@@ -39,6 +88,40 @@
         }
     }
 
+    public void output(String outputPath) {
+        String suffix = ".html";
+        Document document = this.document;
+        List<PartNode> partNodes = this.partNodes;
+        StringBuilder sb = new StringBuilder();
+        for (PartNode partNode : partNodes) {
+            sb.append(partNode.getHtml());
+        }
+        document.body().empty().html(sb.toString());
+        String outPath = path(outputPath);
+
+        String html = document.html();
+        try {
+            String path = outPath + path(this.path);
+            File file = new File(path);
+            if (!file.exists()) {
+                file.mkdirs();
+            }
+
+            FileOutputStream outputStream = new FileOutputStream(path +this.name + suffix);
+            outputStream.write(html.getBytes());
+            outputStream.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    private String path(String path) {
+        if (!path.endsWith("/")) {
+            path = path + "/";
+        }
+        return path;
+    }
+
     public String getName() {
         return name;
     }
diff --git a/src/main/java/com/xcong/farmer/cms/core/template/TemplateConfiguration.java b/src/main/java/com/xcong/farmer/cms/core/template/TemplateConfiguration.java
index f6b078a..6fec7de 100644
--- a/src/main/java/com/xcong/farmer/cms/core/template/TemplateConfiguration.java
+++ b/src/main/java/com/xcong/farmer/cms/core/template/TemplateConfiguration.java
@@ -32,9 +32,9 @@
         }
 
         this.templateLoader.data(map);
-        output(template(templateName));
+        Template template = template(templateName);
+        template.output(this.outputPath);
     }
-
 
     public Template template(String templateName) {
         return template(new File(path(this.templatePath) + templateName));
@@ -46,35 +46,6 @@
         }
 
         return this.templateLoader.template(file);
-    }
-
-//    public void columnProcess(Map<String, Object> data, String templateName) {
-//        process;
-//    }
-//
-//
-//    public void articleProcess(Map<String, Object> data, String templateName) {
-//        process(data, templateName);
-//    }
-
-    public void output(Template template) {
-        Document document = template.getDocument();
-        List<PartNode> partNodes = template.getPartNodes();
-        StringBuilder sb = new StringBuilder();
-        for (PartNode partNode : partNodes) {
-            sb.append(partNode.getHtml());
-        }
-        document.body().empty().html(sb.toString());
-        String outPath = path(this.outputPath);
-
-        String html = document.html();
-        try {
-            FileOutputStream outputStream = new FileOutputStream(outPath + template.getName());
-            outputStream.write(html.getBytes());
-            outputStream.close();
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
     }
 
     private String path(String path) {
diff --git a/src/main/java/com/xcong/farmer/cms/core/template/TemplateLoader.java b/src/main/java/com/xcong/farmer/cms/core/template/TemplateLoader.java
index 647da06..a45bc4d 100644
--- a/src/main/java/com/xcong/farmer/cms/core/template/TemplateLoader.java
+++ b/src/main/java/com/xcong/farmer/cms/core/template/TemplateLoader.java
@@ -22,22 +22,7 @@
     }
 
     public Template template(File file) {
-        Document document = null;
-        try {
-            document = Jsoup.parse(file, "utf-8");
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-
-        if (document == null) {
-            throw new NullPointerException();
-        }
-
-        Template template = new Template();
-        template.setDocument(document);
-        template.setName(file.getName());
-        template.systemData(this.systemData);
-
+        Template template = new Template(file, this.systemData);
         template.parser();
         return template;
     }
diff --git a/src/main/java/com/xcong/farmer/cms/modules/core/service/ICmsCoreService.java b/src/main/java/com/xcong/farmer/cms/modules/core/service/ICmsCoreService.java
index 4814a0a..0d933a8 100644
--- a/src/main/java/com/xcong/farmer/cms/modules/core/service/ICmsCoreService.java
+++ b/src/main/java/com/xcong/farmer/cms/modules/core/service/ICmsCoreService.java
@@ -10,7 +10,7 @@
      * @param id
      * @param templateName
      */
-    void articleProcess(Long id, String templateName);
+    void articleProcess(Long id, String templateName, String templatPath);
 
     /**
      * 栏目编译
diff --git a/src/main/java/com/xcong/farmer/cms/modules/core/service/impl/CmsCoreServiceImpl.java b/src/main/java/com/xcong/farmer/cms/modules/core/service/impl/CmsCoreServiceImpl.java
index 331ebe6..538f32e 100644
--- a/src/main/java/com/xcong/farmer/cms/modules/core/service/impl/CmsCoreServiceImpl.java
+++ b/src/main/java/com/xcong/farmer/cms/modules/core/service/impl/CmsCoreServiceImpl.java
@@ -22,10 +22,13 @@
     private TemplateConfiguration cfg;
 
     @Override
-    public void articleProcess(Long id, String templateName) {
+    public void articleProcess(Long id, String templateName, String templatePath) {
         Map<String, Object> data = new HashMap<>();
         data.put("id", id);
         data.put("companyId", 23L);
+        data.put("templateType", "article");
+        data.put("templatePath", templatePath);
+        data.put("templateName", id);
         if (StrUtil.isEmpty(templateName)) {
             templateName = "defualt.artile.html";
         }
@@ -35,6 +38,8 @@
     @Override
     public void columnProcess(Map<String, Object> data, String templateName, boolean article) {
         data.put("companyId", 23L);
+        data.put("templateType", "column");
+        data.put("page", 1);
         if (StrUtil.isEmpty(templateName)) {
             templateName = "defualt.list.html";
         }
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/ReleaseServiceImpl.java b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/ReleaseServiceImpl.java
index 12f1d89..ce2f7d4 100644
--- a/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/ReleaseServiceImpl.java
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/ReleaseServiceImpl.java
@@ -35,7 +35,7 @@
         ArticleEntity article = articleMapper.selectById(id);
 
         ColumnEntity column = columnMapper.selectById(article.getColumnId());
-        cmsCoreService.articleProcess(article.getId(), column.getArticleTemplate());
+        cmsCoreService.articleProcess(article.getId(), column.getArticleTemplate(), column.getPath());
     }
 
     @Override
@@ -50,7 +50,7 @@
             ColumnEntity parent = columnMapper.selectById(columnEntity.getParentId());
             map.put("parentCode", parent.getColumnCode());
         }
-
+        map.put("templatePath", columnEntity.getPath());
         cmsCoreService.columnProcess(map, columnEntity.getListTemplate(), article);
     }
 }

--
Gitblit v1.9.1