package com.thtf.zwdsj.fangjia.utils;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
@Data
public class Page implements Serializable {
// 页数(第几页)
private int currentpage;
// 查询数据库里面对应的数据有多少条
private int total;// 从数据库查处的总记录数
// 每页查5条
private int size;
// 下页
private int next;
// 数据
private List rowData;
// 最后一页
private int last;
private int lpage;
private int rpage;
//从哪条开始查
private int start;
//全局偏移量
public int offsize = 2;
//从哪条结束查
private int end;
// 动态表头
private List<Map> head;
public Page() {
}
/****
*
* @param list 总记录数
* @param currentpage 当前页
* @param pagesize 每页显示多少条
*/
public Page(List list, int currentpage, int pagesize) {
initPage(list, currentpage, pagesize);
}
/****
* 初始化分页
* @param list
* @param currentpage
* @param pagesize
*/
public void initPage(List list, int currentpage, int pagesize) {
//总记录数
this.total = list.size();
//每页显示多少条
this.size = pagesize;
//计算当前页和数据库查询起始值以及总页数
setCurrentpage(currentpage, total, pagesize);
//分页计算
int leftcount = this.offsize, //需要向上一页执行多少次
rightcount = this.offsize;
//起点页
this.lpage = currentpage;
//结束页
this.rpage = currentpage;
//2点判断
this.lpage = currentpage - leftcount; //正常情况下的起点
this.rpage = currentpage + rightcount; //正常情况下的终点
//页差=总页数和结束页的差
int topdiv = this.last - rpage; //判断是否大于最大页数
/***
* 起点页
* 1、页差<0 起点页=起点页+页差值
* 2、页差>=0 起点和终点判断
*/
this.lpage = topdiv < 0 ? this.lpage + topdiv : this.lpage;
/***
* 结束页
* 1、起点页<=0 结束页=|起点页|+1
* 2、起点页>0 结束页
*/
this.rpage = this.lpage <= 0 ? this.rpage + (this.lpage * -1) + 1 : this.rpage;
/***
* 当起点页<=0 让起点页为第一页
* 否则不管
*/
this.lpage = this.lpage <= 0 ? 1 : this.lpage;
/***
* 如果结束页>总页数 结束页=总页数
* 否则不管
*/
this.rpage = this.rpage > last ? this.last : this.rpage;
/**
* 如果结束条条数
*/
this.end = (this.start+pagesize)>total?total:(this.start+pagesize);
/**
* 截取分页数据
*/
this.rowData=list.subList(start,end);
}
/****
*
* @param currentpage
* @param total
* @param pagesize
*/
public void setCurrentpage(int currentpage, int total, int pagesize) {
//可以整除的情况下
int pagecount = total / pagesize;
//如果整除表示正好分N页,如果不能整除在N页的基础上+1页
int totalPages = (int) (total % pagesize == 0 ? total / pagesize : (total / pagesize) + 1);
//总页数
this.last = totalPages;
//判断当前页是否越界,如果越界,我们就查最后一页
if (currentpage > totalPages) {
this.currentpage = totalPages;
} else {
this.currentpage = currentpage;
}
//计算start
this.start = ((this.currentpage - 1)<0?0:(this.currentpage - 1)) * pagesize;
}
//上一页
public int getUpper() {
return currentpage > 1 ? currentpage - 1 : currentpage;
}
//总共有多少页,即末页
public void setLast(int last) {
this.last = (int) (total % size == 0 ? total / size : (total / size) + 1);
}
public int getNext() {
return currentpage < last ? currentpage + 1 : last;
}
}