| | |
| | | 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.framework.common.DateUtils; |
| | | import com.zy.asrs.wcs.utils.Utils; |
| | | |
| | | import java.lang.reflect.Field; |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | | import java.util.ArrayList; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @param excludes 不包含的字段 |
| | | */ |
| | | public QueryWrapper<T> getWrapper(String... excludes) { |
| | | return buildWrapper(null, Arrays.asList(excludes)); |
| | | public QueryWrapper<T> buildWrapper() { |
| | | return this.buildWrapper(false); |
| | | } |
| | | |
| | | /** |
| | | * @param columns 只包含的字段 |
| | | */ |
| | | public QueryWrapper<T> getWrapperWith(String... columns) { |
| | | return buildWrapper(Arrays.asList(columns), null); |
| | | } |
| | | |
| | | |
| | | private QueryWrapper<T> buildWrapper(List<String> columns, List<String> excludes) { |
| | | @SuppressWarnings("all") |
| | | public QueryWrapper<T> buildWrapper(boolean like) { |
| | | 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; |
| | | } |
| | | Map<String, Object> map = where.getMap(); |
| | | for (String key : map.keySet()) { |
| | | Object val = map.get(key); |
| | | |
| | | // 过滤排除的字段 |
| | | 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(); |
| | | if (key.contains("Range")) { |
| | | ArrayList<String> list = null; |
| | | if (val instanceof ArrayList) { |
| | | list = (ArrayList<String>) val; |
| | | } |
| | | queryField.type(); |
| | | queryType = queryField.type(); |
| | | if (null != list) { |
| | | key = key.replaceAll("Range", ""); |
| | | if (this.isToUnderlineCase) { |
| | | key = Utils.toSymbolCase(key, '_'); |
| | | } |
| | | queryWrapper.ge(key, DateUtils.convert(list.get(0))); |
| | | queryWrapper.le(key, DateUtils.convert(list.get(1))); |
| | | } |
| | | } else { |
| | | // 过滤非本表的字段 |
| | | TableField tableField = field.getAnnotation(TableField.class); |
| | | if (tableField != null && !tableField.exist()) { |
| | | continue; |
| | | if (this.isToUnderlineCase) { |
| | | key = Utils.toSymbolCase(key, '_'); |
| | | } |
| | | if (like) { |
| | | queryWrapper.like(key, val); |
| | | } else { |
| | | queryWrapper.eq(key, val); |
| | | } |
| | | |
| | | } |
| | | |
| | | // 字段名驼峰转下划线 |
| | | 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; |
| | | } |
| | | // 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; |
| | | } |