Explorar el Código

add 增加分页工具

疯狂的狮子li hace 4 años
padre
commit
9f5a03edcd

+ 128 - 0
ruoyi-common/src/main/java/com/ruoyi/common/core/page/PagePlus.java

@@ -0,0 +1,128 @@
+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<T,K> implements IPage<T> {
+
+    protected List<T> records;
+    protected List<K> recordsVo;
+    protected long total;
+    protected long size;
+    protected long current;
+    protected List<OrderItem> 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<K> 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<T, K> addOrder(OrderItem... items) {
+        this.orders.addAll(Arrays.asList(items));
+        return this;
+    }
+
+    public PagePlus<T, K> addOrder(List<OrderItem> items) {
+        this.orders.addAll(items);
+        return this;
+    }
+
+    @Override
+    public List<OrderItem> orders() {
+        return this.getOrders();
+    }
+
+    @Override
+    public boolean optimizeCountSql() {
+        return this.optimizeCountSql;
+    }
+
+    @Override
+    public boolean isSearchCount() {
+        return this.total < 0L ? false : this.isSearchCount;
+    }
+
+    public PagePlus<T, K> setSearchCount(boolean isSearchCount) {
+        this.isSearchCount = isSearchCount;
+        return this;
+    }
+
+}
+

+ 3 - 2
ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java

@@ -1,6 +1,7 @@
 package com.ruoyi.common.core.page;
 
-import lombok.*;
+import lombok.Data;
+import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
 
 import java.io.Serializable;
@@ -37,7 +38,7 @@ public class TableDataInfo<T> implements Serializable
      * @param list 列表数据
      * @param total 总记录数
      */
-    public TableDataInfo(List<T> list, int total)
+    public TableDataInfo(List<T> list, long total)
     {
         this.rows = list;
         this.total = total;

+ 101 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/PageUtils.java

@@ -0,0 +1,101 @@
+package com.ruoyi.common.utils;
+
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpStatus;
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.page.PagePlus;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.utils.sql.SqlUtil;
+
+import java.util.List;
+
+/**
+ * 分页工具
+ *
+ * @author Lion Li
+ */
+public class PageUtils {
+
+    /**
+     * 当前记录起始索引
+     */
+    public static final String PAGE_NUM = "pageNum";
+
+    /**
+     * 每页显示记录数
+     */
+    public static final String PAGE_SIZE = "pageSize";
+
+    /**
+     * 排序列
+     */
+    public static final String ORDER_BY_COLUMN = "orderByColumn";
+
+    /**
+     * 排序的方向 "desc" 或者 "asc".
+     */
+    public static final String IS_ASC = "isAsc";
+
+    public static <T, K> PagePlus<T, K> buildPagePlus() {
+        Integer pageNum = ServletUtils.getParameterToInt(PAGE_NUM);
+        Integer pageSize = ServletUtils.getParameterToInt(PAGE_SIZE);
+        String orderByColumn = ServletUtils.getParameter(ORDER_BY_COLUMN);
+        String isAsc = ServletUtils.getParameter(IS_ASC);
+        PagePlus<T, K> page = new PagePlus<>(pageNum, pageSize);
+        if (StrUtil.isNotBlank(orderByColumn)) {
+            String orderBy = SqlUtil.escapeOrderBySql(orderByColumn);
+            if ("asc".equals(isAsc)) {
+                page.addOrder(OrderItem.asc(orderBy));
+            } else if ("desc".equals(isAsc)) {
+                page.addOrder(OrderItem.desc(orderBy));
+            }
+        }
+        return page;
+    }
+
+    public static <T> Page<T> buildPage() {
+        Integer pageNum = ServletUtils.getParameterToInt(PAGE_NUM);
+        Integer pageSize = ServletUtils.getParameterToInt(PAGE_SIZE);
+        String orderByColumn = ServletUtils.getParameter(ORDER_BY_COLUMN);
+        String isAsc = ServletUtils.getParameter(IS_ASC);
+        Page<T> page = new Page<>(pageNum, pageSize);
+        if (StrUtil.isNotBlank(orderByColumn)) {
+            String orderBy = SqlUtil.escapeOrderBySql(orderByColumn);
+            if ("asc".equals(isAsc)) {
+                page.addOrder(OrderItem.asc(orderBy));
+            } else if ("desc".equals(isAsc)) {
+                page.addOrder(OrderItem.desc(orderBy));
+            }
+        }
+        return page;
+    }
+
+    public static <T, K> TableDataInfo<K> buildDataInfo(PagePlus<T, K> page) {
+        TableDataInfo<K> rspData = new TableDataInfo<>();
+        rspData.setCode(HttpStatus.HTTP_OK);
+        rspData.setMsg("查询成功");
+        rspData.setRows(page.getRecordsVo());
+        rspData.setTotal(page.getTotal());
+        return rspData;
+    }
+
+    public static <T> TableDataInfo<T> buildDataInfo(Page<T> page) {
+        TableDataInfo<T> rspData = new TableDataInfo<>();
+        rspData.setCode(HttpStatus.HTTP_OK);
+        rspData.setMsg("查询成功");
+        rspData.setRows(page.getRecords());
+        rspData.setTotal(page.getTotal());
+        return rspData;
+    }
+
+    public static <T> TableDataInfo<T> buildDataInfo(List<T> list) {
+        TableDataInfo<T> rspData = new TableDataInfo<>();
+        rspData.setCode(HttpStatus.HTTP_OK);
+        rspData.setMsg("查询成功");
+        rspData.setRows(list);
+        rspData.setTotal(list.size());
+        return rspData;
+    }
+
+}