fwq
2023-07-12 d07e5cacbf0f3c1e1b5b42e115e1de574de55aea
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
package com.hz.his.util;
 
import com.github.pagehelper.PageInfo;
 
import java.util.List;
 
/**
 * @author fwq
 * PageHelperTool
 * 分页工具类:对查询结果处理后再进行分页
 */
public class PageHelperUtil {
 
    public static <T> PageInfo<T> pageInfo(Integer currentPage, Integer pageSize, List list) {
 
        int fromIndex = 0;
        int toIndex = 0;
        //取出总记录数
        int total = list.size();
        //当前页码
        if (currentPage == null || currentPage <= 0) {
            currentPage = 1;
        }
        //当前页条目数
        if (pageSize == null || pageSize <= 0 || pageSize > 500) {
            pageSize = 20;
        }
 
        if (total / pageSize == 0 && total % pageSize > 0) {
            fromIndex = 0;
            toIndex = total;
        } else {
            if (total / pageSize >= 1 && total % pageSize >= 0) {
                fromIndex = pageSize * (currentPage - 1);
                if (pageSize * currentPage >= total) {
                    toIndex = total;
                } else {
                    toIndex = pageSize * currentPage;
                }
            }
        }
 
        List pageList = list.subList(fromIndex, toIndex);
        PageInfo pageInfo = new PageInfo<>(pageList);
        return initPageInfoObj(currentPage, total, pageSize, pageInfo);
    }
 
    private static <T> PageInfo<T> initPageInfoObj(int currentPage, int total, int pageSize, PageInfo<T> pageInfo) {
        pageInfo.setNextPage(currentPage < ((total + pageSize - 1) / pageSize) ? currentPage + 1 : currentPage);
        pageInfo.setTotal(total);
        pageInfo.setPageNum(currentPage);
        pageInfo.setPages((total + pageSize - 1) / pageSize);
        pageInfo.setPrePage(currentPage > 1 ? currentPage - 1 : currentPage);
        pageInfo.setIsFirstPage(currentPage == 1);
        pageInfo.setIsLastPage(currentPage == (total + pageSize - 1) / pageSize);
        pageInfo.setHasPreviousPage(currentPage != 1);
        pageInfo.setHasNextPage(currentPage != (total + pageSize - 1) / pageSize);
        return calcNavigatepageNums(pageInfo);
    }
 
    private static <T> PageInfo<T> calcNavigatepageNums(PageInfo<T> pageInfo) {
        //当总页数小于或等于导航页码数时
        if (pageInfo.getPages() <= pageInfo.getNavigatePages()) {
            pageInfo.setNavigatepageNums(new int[pageInfo.getPages()]);
            for (int i = 0; i < pageInfo.getPages(); i++) {
                pageInfo.getNavigatepageNums()[i] = i + 1;
            }
        } else { //当总页数大于导航页码数时
            pageInfo.setNavigatepageNums(new int[pageInfo.getNavigatePages()]);
            int startNum = pageInfo.getPageNum() - pageInfo.getNavigatePages() / 2;
            int endNum = pageInfo.getPageNum() + pageInfo.getNavigatePages() / 2;
 
            if (startNum < 1) {
                startNum = 1;
                //(最前navigatePages页
                for (int i = 0; i < pageInfo.getNavigatePages(); i++) {
                    pageInfo.getNavigatepageNums()[i] = startNum++;
                }
            } else if (endNum > pageInfo.getPages()) {
                endNum = pageInfo.getPages();
                //最后navigatePages页
                for (int i = pageInfo.getNavigatePages() - 1; i >= 0; i--) {
                    pageInfo.getNavigatepageNums()[i] = endNum--;
                }
            } else {
                //所有中间页
                for (int i = 0; i < pageInfo.getNavigatePages(); i++) {
                    pageInfo.getNavigatepageNums()[i] = startNum++;
                }
            }
        }
        return pageInfo;
    }
 
 
}