package com.zy.asrs.wcs.common.domain;
|
|
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableLogic;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.zy.asrs.framework.common.Cools;
|
import com.zy.asrs.framework.domain.QueryField;
|
import com.zy.asrs.framework.domain.QueryType;
|
import com.zy.asrs.wcs.utils.Utils;
|
|
import java.lang.reflect.Field;
|
import java.util.Arrays;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* Created by vincent on 2/13/2024
|
*/
|
public class PageParam<T, U extends BaseParam> extends Page<T> {
|
|
private static final long serialVersionUID = 1L;
|
|
private final U where;
|
|
/**
|
* 是否把字段名称驼峰转下划线
|
*/
|
private final boolean isToUnderlineCase;
|
|
public PageParam() {
|
this(null);
|
}
|
|
public PageParam(U where) {
|
this(where, true);
|
}
|
|
public PageParam(U where, boolean isToUnderlineCase) {
|
super();
|
this.where = where;
|
this.isToUnderlineCase = isToUnderlineCase;
|
if (where != null) {
|
if (where.getPageIdx() != null) {
|
setCurrent(where.getPageIdx());
|
}
|
if (where.getPageSize() != null) {
|
setSize(where.getPageSize());
|
}
|
}
|
}
|
|
/**
|
* @param excludes 不包含的字段
|
*/
|
public QueryWrapper<T> getWrapper(String... excludes) {
|
return buildWrapper(null, Arrays.asList(excludes));
|
}
|
|
/**
|
* @param columns 只包含的字段
|
*/
|
public QueryWrapper<T> getWrapperWith(String... columns) {
|
return buildWrapper(Arrays.asList(columns), null);
|
}
|
|
|
private QueryWrapper<T> buildWrapper(List<String> columns, List<String> excludes) {
|
QueryWrapper<T> queryWrapper = new QueryWrapper<>();
|
Map<String, Object> map = Cools.conver(where);
|
for (String fieldName : map.keySet()) {
|
Object fieldValue = map.get(fieldName);
|
Field field = Cools.getField(where.getClass(), fieldName);
|
assert field != null;
|
// 过滤不包含的字段
|
if (columns != null && !columns.contains(fieldName)) {
|
continue;
|
}
|
|
// 过滤排除的字段
|
if (excludes != null && excludes.contains(fieldName)) {
|
continue;
|
}
|
|
// 过滤逻辑删除字段
|
if (field.getAnnotation(TableLogic.class) != null) {
|
continue;
|
}
|
|
// 过滤租户id字段
|
if (fieldName.equals("hostId")) {
|
continue;
|
}
|
|
// 获取注解指定的查询字段及查询方式
|
QueryType queryType = QueryType.LIKE;
|
QueryField queryField = field.getAnnotation(QueryField.class);
|
if (queryField != null) {
|
if (!Cools.isEmpty(queryField.value())) {
|
fieldName = queryField.value();
|
}
|
queryField.type();
|
queryType = queryField.type();
|
} else {
|
// 过滤非本表的字段
|
TableField tableField = field.getAnnotation(TableField.class);
|
if (tableField != null && !tableField.exist()) {
|
continue;
|
}
|
}
|
|
// 字段名驼峰转下划线
|
if (this.isToUnderlineCase) {
|
fieldName = Utils.toSymbolCase(fieldName, '_');
|
}
|
|
switch (queryType) {
|
case EQ:
|
queryWrapper.eq(fieldName, fieldValue);
|
break;
|
case NE:
|
queryWrapper.ne(fieldName, fieldValue);
|
break;
|
case GT:
|
queryWrapper.gt(fieldName, fieldValue);
|
break;
|
case GE:
|
queryWrapper.ge(fieldName, fieldValue);
|
break;
|
case LT:
|
queryWrapper.lt(fieldName, fieldValue);
|
break;
|
case LE:
|
queryWrapper.le(fieldName, fieldValue);
|
break;
|
case LIKE:
|
queryWrapper.like(fieldName, fieldValue);
|
break;
|
case NOT_LIKE:
|
queryWrapper.notLike(fieldName, fieldValue);
|
break;
|
case LIKE_LEFT:
|
queryWrapper.likeLeft(fieldName, fieldValue);
|
break;
|
case LIKE_RIGHT:
|
queryWrapper.likeRight(fieldName, fieldValue);
|
break;
|
case IS_NULL:
|
queryWrapper.isNull(fieldName);
|
break;
|
case IS_NOT_NULL:
|
queryWrapper.isNotNull(fieldName);
|
break;
|
case IN:
|
queryWrapper.in(fieldName, fieldValue);
|
break;
|
case NOT_IN:
|
queryWrapper.notIn(fieldName, fieldValue);
|
break;
|
case IN_STR:
|
if (fieldValue instanceof String) {
|
queryWrapper.in(fieldName, Arrays.asList(((String) fieldValue).split(",")));
|
}
|
break;
|
case NOT_IN_STR:
|
if (fieldValue instanceof String) {
|
queryWrapper.notIn(fieldName, Arrays.asList(((String) fieldValue).split(",")));
|
}
|
break;
|
}
|
}
|
return queryWrapper;
|
}
|
|
}
|