package com.cim.idm.utils; import java.io.Serializable; import java.util.Collection; import java.util.Collections; import java.util.List; /** * 分页数据返回统一类型 * Author:zhangp * Date:2023/09/19 */ public class PageResult implements Serializable{ private static final long serialVersionUID = 1L; public static final int DEFAULT_NAVIGATE_PAGES = 8; public static final PageResult EMPTY = new PageResult(Collections.emptyList(), 0, 0, 0); /** * 总记录数 */ protected long total; /** * 结果集 */ protected List list; /** * 当前页的页码 */ private int pageNum; /** * 每页的数量 */ private int pageSize; /** * 当前页的数量 */ private int size; /** * 当前页面第一个元素在数据库中的行号 * 可以在页面中显示startRow到endRow 共size条数据 */ private long startRow; /** * 当前页面最后一个元素在数据库中的行号 */ private long endRow; /** * 总页数 */ private int pages; /** * prePage */ private int prePage; /** * 下一页 */ private int nextPage; /** * 是否为第一页 */ private boolean isFirstPage = false; /** * 是否为最后一页 */ private boolean isLastPage = false; /** * 是否有前一页 */ private boolean hasPreviousPage = false; /** * 是否有下一页 */ private boolean hasNextPage = false; /** * 导航页码数 */ private int navigatePages; /** * 所有导航页号 */ private int[] navigatepageNums; /** * 导航条上的第一页 */ private int navigateFirstPage; /** * 导航条上的最后一页 */ private int navigateLastPage; public PageResult() { } /** * 包装Page对象 * * @param list */ public PageResult(List list) { this(list, DEFAULT_NAVIGATE_PAGES, DEFAULT_NAVIGATE_PAGES, DEFAULT_NAVIGATE_PAGES); } /** * 包装Page对象 * * @param list page结果 * @param navigatePages 页码数量 */ public PageResult(List list, int navigatePages , int sum, int pageNumber) { this.list = list; this.total = (long)sum; if (list instanceof Collection) { // this.pageNum = 1; this.pageNum = pageNumber; this.pageSize = list.size(); // this.pages = this.pageSize > 0 ? 1 : 0; this.pages = navigatePages; this.size = list.size(); this.startRow = 0; this.endRow = list.size() > 0 ? list.size() - 1 : 0; } if (list instanceof Collection) { calcByNavigatePages(navigatePages); } } public static PageResult of(List list) { return new PageResult(list); } public static PageResult of(List list, int navigatePages) { return new PageResult(list, navigatePages, navigatePages, navigatePages); } public static PageResult emptyPageInfo() { return EMPTY; } public void calcByNavigatePages(int navigatePages) { setNavigatePages(navigatePages); //计算导航页 calcNavigatepageNums(); //计算前后页,第一页,最后一页 calcPage(); //判断页面边界 judgePageBoudary(); } /** * 计算导航页 */ private void calcNavigatepageNums() { if (pages <= navigatePages) { navigatepageNums = new int[pages]; for (int i = 0; i < pages; i++) { navigatepageNums[i] = i + 1; } } else { navigatepageNums = new int[navigatePages]; int startNum = pageNum - navigatePages / 2; int endNum = pageNum + navigatePages / 2; if (startNum < 1) { startNum = 1; for (int i = 0; i < navigatePages; i++) { navigatepageNums[i] = startNum++; } } else if (endNum > pages) { endNum = pages; for (int i = navigatePages - 1; i >= 0; i--) { navigatepageNums[i] = endNum--; } } else { for (int i = 0; i < navigatePages; i++) { navigatepageNums[i] = startNum++; } } } } /** * 计算前后页,第一页,最后一页 */ private void calcPage() { if (navigatepageNums != null && navigatepageNums.length > 0) { navigateFirstPage = navigatepageNums[0]; navigateLastPage = navigatepageNums[navigatepageNums.length - 1]; if (pageNum > 1) { prePage = pageNum - 1; } if (pageNum < pages) { nextPage = pageNum + 1; } } } /** * 判断页面边界 */ private void judgePageBoudary() { isFirstPage = pageNum == 1; isLastPage = pageNum == pages || pages == 0; hasPreviousPage = pageNum > 1; hasNextPage = pageNum < pages; } public boolean hasContent() { return this.size > 0; } public long getTotal() { return this.total; } public void setTotal(long total) { this.total = total; } public List getList() { return this.list; } public void setList(List list) { this.list = list; } public int getPageNum() { return pageNum; } public void setPageNum(int pageNum) { this.pageNum = pageNum; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getSize() { return size; } public void setSize(int size) { this.size = size; } public long getStartRow() { return startRow; } public void setStartRow(long startRow) { this.startRow = startRow; } public long getEndRow() { return endRow; } public void setEndRow(long endRow) { this.endRow = endRow; } public int getPages() { return pages; } public void setPages(int pages) { this.pages = pages; } public int getPrePage() { return prePage; } public void setPrePage(int prePage) { this.prePage = prePage; } public int getNextPage() { return nextPage; } public void setNextPage(int nextPage) { this.nextPage = nextPage; } public boolean isIsFirstPage() { return isFirstPage; } public void setIsFirstPage(boolean isFirstPage) { this.isFirstPage = isFirstPage; } public boolean isIsLastPage() { return isLastPage; } public void setIsLastPage(boolean isLastPage) { this.isLastPage = isLastPage; } public boolean isHasPreviousPage() { return hasPreviousPage; } public void setHasPreviousPage(boolean hasPreviousPage) { this.hasPreviousPage = hasPreviousPage; } public boolean isHasNextPage() { return hasNextPage; } public void setHasNextPage(boolean hasNextPage) { this.hasNextPage = hasNextPage; } public int getNavigatePages() { return navigatePages; } public void setNavigatePages(int navigatePages) { this.navigatePages = navigatePages; } public int[] getNavigatepageNums() { return navigatepageNums; } public void setNavigatepageNums(int[] navigatepageNums) { this.navigatepageNums = navigatepageNums; } public int getNavigateFirstPage() { return navigateFirstPage; } public int getNavigateLastPage() { return navigateLastPage; } public void setNavigateFirstPage(int navigateFirstPage) { this.navigateFirstPage = navigateFirstPage; } public void setNavigateLastPage(int navigateLastPage) { this.navigateLastPage = navigateLastPage; } @Override public String toString() { final StringBuilder sb = new StringBuilder("PageInfo{"); sb.append("pageNum=").append(pageNum); sb.append(", pageSize=").append(pageSize); sb.append(", size=").append(size); sb.append(", startRow=").append(startRow); sb.append(", endRow=").append(endRow); sb.append(", total=").append(total); sb.append(", pages=").append(pages); sb.append(", list=").append(list); sb.append(", prePage=").append(prePage); sb.append(", nextPage=").append(nextPage); sb.append(", isFirstPage=").append(isFirstPage); sb.append(", isLastPage=").append(isLastPage); sb.append(", hasPreviousPage=").append(hasPreviousPage); sb.append(", hasNextPage=").append(hasNextPage); sb.append(", navigatePages=").append(navigatePages); sb.append(", navigateFirstPage=").append(navigateFirstPage); sb.append(", navigateLastPage=").append(navigateLastPage); sb.append(", navigatepageNums="); if (navigatepageNums == null) { sb.append("null"); } else { sb.append('['); for (int i = 0; i < navigatepageNums.length; ++i) { sb.append(i == 0 ? "" : ", ").append(navigatepageNums[i]); } sb.append(']'); } sb.append('}'); return sb.toString(); } }