| package com.doumee.core.model; | 
|   | 
| import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | 
| import lombok.Data; | 
| import io.swagger.annotations.ApiModel; | 
| import io.swagger.annotations.ApiModelProperty; | 
|   | 
| import java.io.Serializable; | 
| import java.util.ArrayList; | 
| import java.util.List; | 
|   | 
| /** | 
|  * 分页请求参数 | 
|  * @author Eva.Caesar Liu | 
|  * @date 2023/03/21 14:49 | 
|  */ | 
| @Data | 
| @ApiModel("分页请求参数") | 
| public class PageWrap<M> implements Serializable { | 
|   | 
|     // 降序 | 
|     public static final String DESC = "DESC"; | 
|   | 
|     // 升序 | 
|     public static final String ASC = "ASC"; | 
|   | 
|     @ApiModelProperty(value = "条件参数",required = true) | 
|     private M model; | 
|   | 
|     @ApiModelProperty("目标页 ") | 
|     private int page; | 
|   | 
|     @ApiModelProperty("一页多少行") | 
|     private int capacity; | 
|   | 
|     @ApiModelProperty("排序参数") | 
|     private List<SortData> sorts; | 
|   | 
|     /** | 
|      * 处理异常排序对象 | 
|      * @author Eva.Caesar Liu | 
|      * @date 2023/03/21 14:49 | 
|      */ | 
|     public List<SortData> getSorts () { | 
|         List<SortData> sorts = new ArrayList<>(); | 
|         if (this.sorts == null) { | 
|             return sorts; | 
|         } | 
|         for (SortData sort: this.sorts) { | 
|             if (sort.getProperty() == null || sort.getProperty().trim().length() == 0) { | 
|                 continue; | 
|             } | 
|             if (sort.getDirection() == null || sort.getDirection().trim().length() == 0 || (!sort.getDirection().trim().equalsIgnoreCase("asc") && !sort.getDirection().trim().equalsIgnoreCase("desc"))) { | 
|                 continue; | 
|             } | 
|             sorts.add(sort); | 
|         } | 
|         return sorts; | 
|     } | 
|   | 
|     public List<SortData> getSorts1 () { | 
|         return sorts; | 
|     } | 
|   | 
|   | 
|   | 
|     /** | 
|      * 处理异常页码 | 
|      * @author Eva.Caesar Liu | 
|      * @date 2023/03/21 14:49 | 
|      */ | 
|     public int getPage () { | 
|         return page <= 0 ? 1 : page; | 
|     } | 
|   | 
|     /** | 
|      * 处理异常页容量 | 
|      * @author Eva.Caesar Liu | 
|      * @date 2023/03/21 14:49 | 
|      */ | 
|     public int getCapacity () { | 
|         return capacity <= 0 ? 10 : capacity; | 
|     } | 
|   | 
|     /** | 
|      * 获取排序字符串 | 
|      * @author Eva.Caesar Liu | 
|      * @date 2023/03/21 14:49 | 
|      */ | 
|     @ApiModelProperty(hidden = true) | 
|     public String getOrderByClause () { | 
|         List<SortData> sorts = this.getSorts(); | 
|         StringBuilder stringBuilder = new StringBuilder(); | 
|         for (SortData sortData: sorts) { | 
|             // 防注入 | 
|             if (!sortData.getProperty().matches("[a-zA-Z0-9_\\.]+")) { | 
|                 continue; | 
|             } | 
|             stringBuilder.append(sortData.getProperty().trim()); | 
|             stringBuilder.append(" "); | 
|             stringBuilder.append(sortData.getDirection().trim()); | 
|             stringBuilder.append(","); | 
|         } | 
|         if (stringBuilder.length() == 0) { | 
|             return null; | 
|         } | 
|         return "ORDER BY " + stringBuilder.substring(0, stringBuilder.length() - 1); | 
|     } | 
|   | 
|     /** | 
|      * 排序对象 | 
|      * @author Eva.Caesar Liu | 
|      * @date 2023/03/21 14:49 | 
|      */ | 
|     @Data | 
|     @ApiModel("排序对象") | 
|     public static class SortData { | 
|   | 
|         @ApiModelProperty("排序字段 ") | 
|         private String property; | 
|   | 
|         @ApiModelProperty("排序方向(ASC:升序,DESC:降序)") | 
|         private String direction; | 
|     } | 
|   | 
|     public <T> Page<T> toPage() { | 
|         return new Page<>(page, capacity); | 
|     } | 
| } |