Helius
2022-07-06 6fbac8efa5662ac933ab72f9121860b9cb08c025
finish @page
3 files added
1 files deleted
3 files modified
364 ■■■■ changed files
src/main/java/com/xcong/farmer/cms/core/handler/PageDataParserHandler.java 95 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/core/tag/TagsEnum.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/core/tag/data/PageChildData.java 34 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/core/tag/data/PageData.java 88 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/core/tag/model/Page.java 47 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/core/tag/model/Pagination.java 88 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/core/template/TemplateConfiguration.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/core/handler/PageDataParserHandler.java
@@ -1,15 +1,110 @@
package com.xcong.farmer.cms.core.handler;
import cn.hutool.core.collection.CollUtil;
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.core.node.AttrNode;
import com.xcong.farmer.cms.core.node.Template;
import com.xcong.farmer.cms.core.tag.data.PageChildData;
import com.xcong.farmer.cms.core.tag.data.PageData;
import com.xcong.farmer.cms.core.tag.model.Article;
import com.xcong.farmer.cms.core.tag.model.Pagination;
import com.xcong.farmer.cms.modules.system.entity.ArticleEntity;
import com.xcong.farmer.cms.modules.system.mapper.ArticleMapper;
import com.xcong.farmer.cms.utils.SpringContextHolder;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.List;
/**
 * @author wzy
 * @date 2022-07-05
 **/
@Slf4j
public class PageDataParserHandler implements DataParserHandler {
    private ArticleMapper articleMapper = SpringContextHolder.getBean(ArticleMapper.class);
    private CmsProperties cmsProperties = SpringContextHolder.getBean(CmsProperties.class);
    @Override
    public void dataParser(AttrNode attrNode) {
        log.info("分页解析");
        Template.HAS_PAGING = true;
        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);
        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";
            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));
    }
                list.add(child);
            }
            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;
        }
        attrNode.setData(pageData);
    }
    /**
     * (x + y)/2 = index
     * y - x= size  解二元一次方程
     *
     * @param index 当前页码
     * @param totalPage 总页数
     * @param size 分页大小
     * @return
     */
    public int[] pageStartAndEnd(int index, int totalPage, int size) {
        int[] page = new int[2];
        int end = ((index * 2) + size) / 2;;
        int start = end - size + 1;
        if (start < 1) {
            start = 1;
        }
        if (end > totalPage) {
            end = totalPage;
        }
        page[0] = start;
        page[1] = end;
        return page;
    }
}
src/main/java/com/xcong/farmer/cms/core/tag/TagsEnum.java
@@ -10,7 +10,7 @@
    ARTICLES("@articles", "com.xcong.farmer.cms.core.tag.model.Articles", "com.xcong.farmer.cms.core.handler.ArticlesDataParserHandler",2),
    ARTICLE("@article", "com.xcong.farmer.cms.core.tag.model.Article", "com.xcong.farmer.cms.core.handler.ArticleDataParserHandler",2),
    CHILD("@child", "com.xcong.farmer.cms.core.tag.model.Child", "com.xcong.farmer.cms.core.handler.ChildDataParserHandler",2),
    PAGE("@page", "com.xcong.farmer.cms.core.tag.model.Page", "com.xcong.farmer.cms.core.handler.PageDataParserHandler",2),
    PAGE("@page", "com.xcong.farmer.cms.core.tag.model.Pagination", "com.xcong.farmer.cms.core.handler.PageDataParserHandler",2),
//    AD("@ad", "com.xcong.farmer.cms.core.tag.model.Ad", "",2),
//    COLUMNS("@columns", "com.xcong.farmer.cms.core.tag.model.Columns", "",2),
    COLUMN("@column", "com.xcong.farmer.cms.core.tag.model.Column", "com.xcong.farmer.cms.core.handler.ColumnDataParserHandler",2);
src/main/java/com/xcong/farmer/cms/core/tag/data/PageChildData.java
New file
@@ -0,0 +1,34 @@
package com.xcong.farmer.cms.core.tag.data;
/**
 * @author wzy
 * @date 2022-07-06
 **/
public class PageChildData {
    /**
     * 页码
     */
    private int index;
    /**
     * 链接
     */
    private String path;
    public int getIndex() {
        return index;
    }
    public void setIndex(int index) {
        this.index = index;
    }
    public String getPath() {
        return path;
    }
    public void setPath(String path) {
        this.path = path;
    }
}
src/main/java/com/xcong/farmer/cms/core/tag/data/PageData.java
New file
@@ -0,0 +1,88 @@
package com.xcong.farmer.cms.core.tag.data;
import java.util.List;
/**
 * @author wzy
 * @date 2022-07-06
 **/
public class PageData {
    /**
     * 当前页
     */
    private Integer index;
    /**
     * 下一页链接
     */
    private String next;
    /**
     * 上一页链接
     */
    private String prev;
    /**
     * 总页数
     */
    private int totalPage;
    /**
     * 总条数
     */
    private int totalCnt;
    /**
     * 页码
     */
    private List<PageChildData> children;
    public List<PageChildData> getChildren() {
        return children;
    }
    public void setChildren(List<PageChildData> children) {
        this.children = children;
    }
    public Integer getIndex() {
        return index;
    }
    public void setIndex(Integer index) {
        this.index = index;
    }
    public String getNext() {
        return next;
    }
    public void setNext(String next) {
        this.next = next;
    }
    public String getPrev() {
        return prev;
    }
    public void setPrev(String prev) {
        this.prev = prev;
    }
    public int getTotalPage() {
        return totalPage;
    }
    public void setTotalPage(int totalPage) {
        this.totalPage = totalPage;
    }
    public int getTotalCnt() {
        return totalCnt;
    }
    public void setTotalCnt(int totalCnt) {
        this.totalCnt = totalCnt;
    }
}
src/main/java/com/xcong/farmer/cms/core/tag/model/Page.java
File was deleted
src/main/java/com/xcong/farmer/cms/core/tag/model/Pagination.java
New file
@@ -0,0 +1,88 @@
package com.xcong.farmer.cms.core.tag.model;
/**
 * @author wzy
 * @date 2022-07-05
 **/
public class Pagination {
    /**
     * 栏目ID
     */
    private String colId;
    /**
     * 栏目编码
     */
    private String code;
    /**
     * 分页数字显示几个
     */
    private String size;
    /**
     * 对象名称
     */
    private String field;
    /**
     * 每页数量
     */
    private String limit;
    /**
     * 页码
     */
    private String page;
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getSize() {
        return size;
    }
    public void setSize(String size) {
        this.size = size;
    }
    public String getLimit() {
        return limit;
    }
    public void setLimit(String limit) {
        this.limit = limit;
    }
    public String getPage() {
        return page;
    }
    public void setPage(String page) {
        this.page = page;
    }
    public String getColId() {
        return colId;
    }
    public void setColId(String colId) {
        this.colId = colId;
    }
    public String getField() {
        return field;
    }
    public void setField(String field) {
        this.field = field;
    }
}
src/main/java/com/xcong/farmer/cms/core/template/TemplateConfiguration.java
@@ -34,6 +34,16 @@
        this.templateLoader.data(map);
        Template template = template(templateName);
        template.output(this.outputPath);
        // 判断是否有分页,有则执行。从第二页开始
        int i = 2;
        while(Template.HAS_PAGING) {
            map.put("page", i);
            this.templateLoader.data(map);
            Template pageTemplate = template(templateName);
            pageTemplate.output(this.outputPath);
            i++;
        }
    }
    public Template template(String templateName) {