package com.ruoyi.common.core.page; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.OrderItem; import lombok.Data; import lombok.experimental.Accessors; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @Data @Accessors(chain = true) public class PagePlus implements IPage { protected List records; protected List recordsVo; protected long total; protected long size; protected long current; protected List orders; protected boolean optimizeCountSql; protected boolean isSearchCount; protected boolean hitCount; protected String countId; protected Long maxLimit; public PagePlus() { this.records = Collections.emptyList(); this.recordsVo = Collections.emptyList(); this.total = 0L; this.size = 10L; this.current = 1L; this.orders = new ArrayList(); this.optimizeCountSql = true; this.isSearchCount = true; this.hitCount = false; } public PagePlus(long current, long size) { this(current, size, 0L); } public PagePlus(long current, long size, long total) { this(current, size, total, true); } public PagePlus(long current, long size, boolean isSearchCount) { this(current, size, 0L, isSearchCount); } public PagePlus(long current, long size, long total, boolean isSearchCount) { this.records = Collections.emptyList(); this.total = 0L; this.size = 10L; this.current = 1L; this.orders = new ArrayList(); this.optimizeCountSql = true; this.isSearchCount = true; this.hitCount = false; if (current > 1L) { this.current = current; } this.size = size; this.total = total; this.isSearchCount = isSearchCount; } public boolean hasPrevious() { return this.current > 1L; } public boolean hasNext() { return this.current < this.getPages(); } public void recordsToVo(Class kClass) { this.recordsVo = this.records.stream() .map(any -> BeanUtil.toBean(any, kClass)) .collect(Collectors.toList()); } @Override public String countId() { return this.getCountId(); } @Override public Long maxLimit() { return this.getMaxLimit(); } public PagePlus addOrder(OrderItem... items) { this.orders.addAll(Arrays.asList(items)); return this; } public PagePlus addOrder(List items) { this.orders.addAll(items); return this; } @Override public List orders() { return this.getOrders(); } @Override public boolean optimizeCountSql() { return this.optimizeCountSql; } @Override public boolean isSearchCount() { return this.total < 0L ? false : this.isSearchCount; } public PagePlus setSearchCount(boolean isSearchCount) { this.isSearchCount = isSearchCount; return this; } }