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