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