dongyukun
8 天以前 a23e66f179586eeffc55d116f5a3bb53eab9cb09
提交 | 用户 | 时间
e7c126 1 package com.iailab.framework.common.util.object;
H 2
3 import cn.hutool.core.collection.CollUtil;
4 import cn.hutool.core.lang.func.Func1;
5 import cn.hutool.core.lang.func.LambdaUtil;
6 import cn.hutool.core.util.ArrayUtil;
7 import com.iailab.framework.common.pojo.PageParam;
8 import com.iailab.framework.common.pojo.SortablePageParam;
9 import com.iailab.framework.common.pojo.SortingField;
10 import org.springframework.util.Assert;
11
12 import static java.util.Collections.singletonList;
13
14 /**
15  * {@link com.iailab.framework.common.pojo.PageParam} 工具类
16  *
17  * @author iailab
18  */
19 public class PageUtils {
20
21     private static final Object[] ORDER_TYPES = new String[]{SortingField.ORDER_ASC, SortingField.ORDER_DESC};
22
23     public static int getStart(PageParam pageParam) {
24         return (pageParam.getPageNo() - 1) * pageParam.getPageSize();
25     }
26
27     /**
28      * 构建排序字段(默认倒序)
29      *
30      * @param func 排序字段的 Lambda 表达式
31      * @param <T>  排序字段所属的类型
32      * @return 排序字段
33      */
34     public static <T> SortingField buildSortingField(Func1<T, ?> func) {
35         return buildSortingField(func, SortingField.ORDER_DESC);
36     }
37
38     /**
39      * 构建排序字段
40      *
41      * @param func  排序字段的 Lambda 表达式
42      * @param order 排序类型 {@link SortingField#ORDER_ASC} {@link SortingField#ORDER_DESC}
43      * @param <T>   排序字段所属的类型
44      * @return 排序字段
45      */
46     public static <T> SortingField buildSortingField(Func1<T, ?> func, String order) {
47         Assert.isTrue(ArrayUtil.contains(ORDER_TYPES, order), String.format("字段的排序类型只能是 %s/%s", ORDER_TYPES));
48
49         String fieldName = LambdaUtil.getFieldName(func);
50         return new SortingField(fieldName, order);
51     }
52
53     /**
54      * 构建默认的排序字段
55      * 如果排序字段为空,则设置排序字段;否则忽略
56      *
57      * @param sortablePageParam 排序分页查询参数
58      * @param func              排序字段的 Lambda 表达式
59      * @param <T>               排序字段所属的类型
60      */
61     public static <T> void buildDefaultSortingField(SortablePageParam sortablePageParam, Func1<T, ?> func) {
62         if (sortablePageParam != null && CollUtil.isEmpty(sortablePageParam.getSortingFields())) {
63             sortablePageParam.setSortingFields(singletonList(buildSortingField(func)));
64         }
65     }
66
67 }