Helius
2022-07-08 4e95eb7d3040d9dc38e843b8ab8cd75a89f38984
修改文章解析下一篇和上一篇,分页并发问题
4 files modified
112 ■■■■■ changed files
src/main/java/com/xcong/farmer/cms/core/handler/ArticleDataParserHandler.java 33 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/core/handler/ChildDataParserHandler.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/core/handler/PageDataParserHandler.java 74 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/core/node/Template.java 2 ●●● patch | view | raw | blame | history
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);
    }
}
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);
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);
    }
    /**
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<>();