From 4e95eb7d3040d9dc38e843b8ab8cd75a89f38984 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Fri, 08 Jul 2022 15:31:56 +0800
Subject: [PATCH] 修改文章解析下一篇和上一篇,分页并发问题

---
 src/main/java/com/xcong/farmer/cms/core/node/Template.java                    |    2 
 src/main/java/com/xcong/farmer/cms/core/handler/PageDataParserHandler.java    |   74 +++++++++++++++++++------------------
 src/main/java/com/xcong/farmer/cms/core/handler/ChildDataParserHandler.java   |    3 +
 src/main/java/com/xcong/farmer/cms/core/handler/ArticleDataParserHandler.java |   33 +++++++++++-----
 4 files changed, 64 insertions(+), 48 deletions(-)

diff --git a/src/main/java/com/xcong/farmer/cms/core/handler/ArticleDataParserHandler.java b/src/main/java/com/xcong/farmer/cms/core/handler/ArticleDataParserHandler.java
index a8c1e0d..c73ba7b 100644
--- a/src/main/java/com/xcong/farmer/cms/core/handler/ArticleDataParserHandler.java
+++ b/src/main/java/com/xcong/farmer/cms/core/handler/ArticleDataParserHandler.java
@@ -32,25 +32,36 @@
         Article tag = (Article) node.getParam();
         ArticleEntity data = articleMapper.selectById(tag.getId());
 
+        ArticleData articleData = ArticleConversion.INSTANCE.entityToData(data);
+
         ArticleEntity prevEntity = articleMapper.selectPrevOrNextArticle(data.getId(), data.getColumnId(), 1);
-        ArticleData prev = ArticleConversion.INSTANCE.entityToData(prevEntity);
-        if (prevEntity.getType() == 2) {
-            prev.setUrl(prevEntity.getArticleUrl());
+        if (prevEntity != null) {
+            ArticleData prev = ArticleConversion.INSTANCE.entityToData(prevEntity);
+            if (prevEntity.getType() == 2) {
+                prev.setUrl(prevEntity.getArticleUrl());
+            } else {
+                prev.setUrl(cmsProperties.getBaseUrl() + prevEntity.getPath() + "/" + prevEntity.getId() + ".html");
+            }
+
+            articleData.setPrev(prev);
         } else {
-            prev.setUrl(cmsProperties.getBaseUrl() + prevEntity.getPath() + "/" + prevEntity.getId() + ".html");
+            articleData.setPrev(new ArticleData());
         }
 
         ArticleEntity nextEntity = articleMapper.selectPrevOrNextArticle(data.getId(), data.getColumnId(), 2);
-        ArticleData next = ArticleConversion.INSTANCE.entityToData(nextEntity);
-        if (nextEntity.getType() == 2) {
-            next.setUrl(prevEntity.getArticleUrl());
+        if (nextEntity != null) {
+            ArticleData next = ArticleConversion.INSTANCE.entityToData(nextEntity);
+            if (nextEntity.getType() == 2) {
+                next.setUrl(nextEntity.getArticleUrl());
+            } else {
+                next.setUrl(cmsProperties.getBaseUrl() + nextEntity.getPath() + "/" + nextEntity.getId() + ".html");
+            }
+
+            articleData.setNext(next);
         } else {
-            next.setUrl(cmsProperties.getBaseUrl() + nextEntity.getPath() + "/" + nextEntity.getId() + ".html");
+            articleData.setNext(new ArticleData());
         }
 
-        ArticleData articleData = ArticleConversion.INSTANCE.entityToData(data);
-        articleData.setNext(next);
-        articleData.setPrev(prev);
         node.setData(articleData);
     }
 }
diff --git a/src/main/java/com/xcong/farmer/cms/core/handler/ChildDataParserHandler.java b/src/main/java/com/xcong/farmer/cms/core/handler/ChildDataParserHandler.java
index 94a06e2..7e27891 100644
--- a/src/main/java/com/xcong/farmer/cms/core/handler/ChildDataParserHandler.java
+++ b/src/main/java/com/xcong/farmer/cms/core/handler/ChildDataParserHandler.java
@@ -25,6 +25,9 @@
         String obj = param.getObj();
 
         Object o = parserData.get(obj);
+        if (o == null) {
+            return;
+        }
         Object state = JSONObject.parseObject(JSONObject.toJSONString(o)).get("state");
         List children = JSONObject.parseObject(JSONObject.toJSONString(state)).getObject("children", List.class);
         attrNode.setData(children);
diff --git a/src/main/java/com/xcong/farmer/cms/core/handler/PageDataParserHandler.java b/src/main/java/com/xcong/farmer/cms/core/handler/PageDataParserHandler.java
index 4b97d98..f405ed2 100644
--- a/src/main/java/com/xcong/farmer/cms/core/handler/PageDataParserHandler.java
+++ b/src/main/java/com/xcong/farmer/cms/core/handler/PageDataParserHandler.java
@@ -31,53 +31,55 @@
     @Override
     public void dataParser(AttrNode attrNode) {
         log.info("分页解析");
-        Template.HAS_PAGING = true;
+        synchronized (this) {
+            Template.HAS_PAGING = true;
 
-        Long companyId = (Long) attrNode.getSystemDataValue("companyId");
-        Pagination param = (Pagination) attrNode.getParam();
+            Long companyId = (Long) attrNode.getSystemDataValue("companyId");
+            Pagination param = (Pagination) attrNode.getParam();
 
-        Page<ArticleEntity> page = new Page<>(Integer.parseInt(param.getPage()), Integer.parseInt(param.getLimit()));
-        ArticleEntity article = new ArticleEntity();
-        article.setColumnCode(param.getCode());
-        article.setCompanyId(companyId);
-        IPage<ArticleEntity> pageList = articleMapper.selectArticleInPage(page, article);
+            Page<ArticleEntity> page = new Page<>(Integer.parseInt(param.getPage()), Integer.parseInt(param.getLimit()));
+            ArticleEntity article = new ArticleEntity();
+            article.setColumnCode(param.getCode());
+            article.setCompanyId(companyId);
+            IPage<ArticleEntity> pageList = articleMapper.selectArticleInPage(page, article);
 
-        PageData pageData = new PageData();
-        pageData.setTotalPage((int) pageList.getPages());
-        pageData.setIndex(Integer.parseInt(param.getPage()));
-        pageData.setTotalCnt((int) pageList.getSize());
+            PageData pageData = new PageData();
+            pageData.setTotalPage((int) pageList.getPages());
+            pageData.setIndex(Integer.parseInt(param.getPage()));
+            pageData.setTotalCnt((int) pageList.getSize());
 
-        if (CollUtil.isNotEmpty(pageList.getRecords())) {
-            String path = cmsProperties.getBaseUrl() + "/" + param.getCode();
-            String filename = "index_{}.html";
+            if (CollUtil.isNotEmpty(pageList.getRecords())) {
+                String path = cmsProperties.getBaseUrl() + "/" + param.getCode();
+                String filename = "index_{}.html";
 
-            List<PageChildData> list = new ArrayList<>();
-            int pageNo = Integer.parseInt(param.getPage());
+                List<PageChildData> list = new ArrayList<>();
+                int pageNo = Integer.parseInt(param.getPage());
 
-            // 计算出页面显示分页的最大和最小值
-            int[] startAndEnd = pageStartAndEnd(pageNo, (int) pageList.getPages(), Integer.parseInt(param.getSize()));
-            for (int i = startAndEnd[0]; i <= startAndEnd[1] ; i++) {
-                PageChildData child = new PageChildData();
-                child.setIndex(i);
-                if (pageNo == 1) {
-                    child.setPath(path + "/index.html");
-                } else {
-                    child.setPath(path + "/" + StrUtil.format(filename, i));
+                // 计算出页面显示分页的最大和最小值
+                int[] startAndEnd = pageStartAndEnd(pageNo, (int) pageList.getPages(), Integer.parseInt(param.getSize()));
+                for (int i = startAndEnd[0]; i <= startAndEnd[1]; i++) {
+                    PageChildData child = new PageChildData();
+                    child.setIndex(i);
+                    if (pageNo == 1) {
+                        child.setPath(path + "/index.html");
+                    } else {
+                        child.setPath(path + "/" + StrUtil.format(filename, i));
+                    }
+                    list.add(child);
                 }
-                list.add(child);
+
+                pageData.setChildren(list);
+            } else {
+                pageData.setNext("javascript:void(0)");
+                pageData.setPrev("javascript:void(0)");
             }
 
-            pageData.setChildren(list);
-        } else {
-            pageData.setNext("javascript:void(0)");
-            pageData.setPrev("javascript:void(0)");
-        }
+            if (Integer.parseInt(param.getPage()) == pageList.getPages()) {
+                Template.HAS_PAGING = false;
+            }
 
-        if (Integer.parseInt(param.getPage()) == pageList.getPages()) {
-            Template.HAS_PAGING = false;
+            attrNode.setData(pageData);
         }
-
-        attrNode.setData(pageData);
     }
 
     /**
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 e1ef6e0..51d5c27 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
@@ -31,7 +31,7 @@
 
     // 页面中包含的标签
     public static Set<String> TAGS;
-    public static boolean HAS_PAGING = false;
+    public volatile static boolean HAS_PAGING = false;
 
     public Template() {
         TAGS = new HashSet<>();

--
Gitblit v1.9.1