| | |
| | | package com.zy.asrs.wms.common.domain; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.TableField; |
| | | 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.common.DateUtils; |
| | | import com.zy.asrs.wms.utils.Utils; |
| | | |
| | | import java.lang.reflect.Field; |
| | | import java.lang.reflect.Modifier; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.function.Consumer; |
| | | |
| | | /** |
| | | * 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; |
| | | |
| | | private final Class<T> cls; |
| | | |
| | | public PageParam() { |
| | | this(null); |
| | | } |
| | | |
| | | public PageParam(U where) { |
| | | this(where, true); |
| | | } |
| | | |
| | | public PageParam(U where, Class<T> cls) { |
| | | this(where, true, cls); |
| | | } |
| | | |
| | | public PageParam(U where, boolean isToUnderlineCase) { |
| | | this(where, isToUnderlineCase, null); |
| | | } |
| | | |
| | | |
| | | public PageParam(U where, boolean isToUnderlineCase, Class<T> cls) { |
| | | super(); |
| | | this.where = where; |
| | | this.isToUnderlineCase = isToUnderlineCase; |
| | | this.cls = cls; |
| | | if (where != null) { |
| | | if (where.getCurrent() != null) { |
| | | setCurrent(where.getCurrent()); |
| | | } |
| | | if (where.getPageSize() != null) { |
| | | setSize(where.getPageSize()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | public QueryWrapper<T> buildWrapper() { |
| | | return this.buildWrapper(false); |
| | | } |
| | | |
| | | public QueryWrapper<T> buildWrapper(Consumer<QueryWrapper<T>> consumer) { |
| | | return this.buildWrapper(false, consumer); |
| | | } |
| | | |
| | | public QueryWrapper<T> buildWrapper(boolean like) { |
| | | return this.buildWrapper(like, null); |
| | | } |
| | | |
| | | @SuppressWarnings("all") |
| | | public QueryWrapper<T> buildWrapper(boolean like, Consumer<QueryWrapper<T>> consumer) { |
| | | QueryWrapper<T> queryWrapper = new QueryWrapper<>(); |
| | | Map<String, Object> map = where.getMap(); |
| | | for (String key : map.keySet()) { |
| | | Object val = map.get(key); |
| | | if (val == null) { |
| | | continue; |
| | | } |
| | | |
| | | if (key.contains("Range")) { |
| | | ArrayList<String> list = null; |
| | | if (val instanceof ArrayList) { |
| | | list = (ArrayList<String>) val; |
| | | } |
| | | 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 if (key.equals("_param")) { |
| | | Map param = (Map) val; |
| | | for (Object value : param.entrySet()) { |
| | | Map.Entry entry = (Map.Entry) value; |
| | | String paramKey = entry.getKey().toString(); |
| | | if (this.isToUnderlineCase) { |
| | | paramKey = Utils.toSymbolCase(paramKey, '_'); |
| | | } |
| | | if (!Cools.isEmpty(entry.getValue())) { |
| | | queryWrapper.like(paramKey, entry.getValue()); |
| | | } |
| | | } |
| | | } else if (val instanceof List) { |
| | | if (this.isToUnderlineCase) { |
| | | key = Utils.toSymbolCase(key, '_'); |
| | | } |
| | | queryWrapper.in(key, (List) val); |
| | | } else { |
| | | if (this.isToUnderlineCase) { |
| | | key = Utils.toSymbolCase(key, '_'); |
| | | } |
| | | if (like) { |
| | | queryWrapper.like(key, val); |
| | | } else { |
| | | queryWrapper.eq(key, val); |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | if (null != consumer) { |
| | | consumer.accept(queryWrapper); |
| | | } |
| | | |
| | | Field[] fields = null; |
| | | if (!Cools.isEmpty(cls)) { |
| | | fields = Cools.getAllFields(cls); |
| | | for (Field field : fields) { |
| | | if ("id".equals(field.getName())) { |
| | | queryWrapper.orderByDesc("id"); |
| | | } else if ("createTime".equals(field.getName())) { |
| | | queryWrapper.orderByDesc(Utils.toSymbolCase(field.getName(), '_')); |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (!Cools.isEmpty(where.getCondition()) && !Cools.isEmpty(fields)) { |
| | | List<String> columns = new ArrayList<>(); |
| | | for (Field field : fields){ |
| | | if (Modifier.isFinal(field.getModifiers()) |
| | | || Modifier.isStatic(field.getModifiers()) |
| | | || Modifier.isTransient(field.getModifiers())){ |
| | | continue; |
| | | } |
| | | |
| | | if (field.isAnnotationPresent(TableField.class)){ |
| | | TableField annotation = field.getAnnotation(TableField.class); |
| | | if (!annotation.exist()) { |
| | | continue; |
| | | } |
| | | } |
| | | |
| | | String column = Utils.toSymbolCase(field.getName(), '_'); |
| | | columns.add(column); |
| | | } |
| | | if (!columns.isEmpty()) { |
| | | for (int i=0;i<columns.size();i++){ |
| | | String column = columns.get(i); |
| | | String condition = where.getCondition(); |
| | | |
| | | if (i == 0) { |
| | | queryWrapper.and(wrapper -> wrapper.like(column, condition)); |
| | | } else { |
| | | queryWrapper.or().like(column, condition); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | return queryWrapper; |
| | | } |
| | | |
| | | public Map<String, Object> pickOutMap() { |
| | | return pickOutMap(false); |
| | | } |
| | | |
| | | public Map<String, Object> pickOutMap(boolean mergeCondition) { |
| | | Map<String, Object> map = where.getMap(); |
| | | if (mergeCondition) { |
| | | if (!Cools.isEmpty(where.getCondition())) { |
| | | map.put("condition", where.getCondition()); |
| | | } |
| | | } |
| | | return map; |
| | | } |
| | | |
| | | } |
| | | package com.zy.asrs.wms.common.domain;
|
| | |
|
| | | import com.baomidou.mybatisplus.annotation.TableField;
|
| | | 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.common.DateUtils;
|
| | | import com.zy.asrs.wms.utils.Utils;
|
| | |
|
| | | import java.lang.reflect.Field;
|
| | | import java.lang.reflect.Modifier;
|
| | | import java.util.ArrayList;
|
| | | import java.util.List;
|
| | | import java.util.Map;
|
| | | import java.util.function.Consumer;
|
| | |
|
| | | /**
|
| | | * 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;
|
| | |
|
| | | private final Class<T> cls;
|
| | |
|
| | | public PageParam() {
|
| | | this(null);
|
| | | }
|
| | |
|
| | | public PageParam(U where) {
|
| | | this(where, true);
|
| | | }
|
| | |
|
| | | public PageParam(U where, Class<T> cls) {
|
| | | this(where, true, cls);
|
| | | }
|
| | |
|
| | | public PageParam(U where, boolean isToUnderlineCase) {
|
| | | this(where, isToUnderlineCase, null);
|
| | | }
|
| | |
|
| | |
|
| | | public PageParam(U where, boolean isToUnderlineCase, Class<T> cls) {
|
| | | super();
|
| | | this.where = where;
|
| | | this.isToUnderlineCase = isToUnderlineCase;
|
| | | this.cls = cls;
|
| | | if (where != null) {
|
| | | if (where.getCurrent() != null) {
|
| | | setCurrent(where.getCurrent());
|
| | | }
|
| | | if (where.getPageSize() != null) {
|
| | | setSize(where.getPageSize());
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | public QueryWrapper<T> buildWrapper() {
|
| | | return this.buildWrapper(false);
|
| | | }
|
| | |
|
| | | public QueryWrapper<T> buildWrapper(Consumer<QueryWrapper<T>> consumer) {
|
| | | return this.buildWrapper(false, consumer);
|
| | | }
|
| | |
|
| | | public QueryWrapper<T> buildWrapper(boolean like) {
|
| | | return this.buildWrapper(like, null);
|
| | | }
|
| | |
|
| | | @SuppressWarnings("all")
|
| | | public QueryWrapper<T> buildWrapper(boolean like, Consumer<QueryWrapper<T>> consumer) {
|
| | | QueryWrapper<T> queryWrapper = new QueryWrapper<>();
|
| | | Map<String, Object> map = where.getMap();
|
| | | for (String key : map.keySet()) {
|
| | | Object val = map.get(key);
|
| | | if (val == null) {
|
| | | continue;
|
| | | }
|
| | |
|
| | | if (key.contains("Range")) {
|
| | | ArrayList<String> list = null;
|
| | | if (val instanceof ArrayList) {
|
| | | list = (ArrayList<String>) val;
|
| | | }
|
| | | 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 if (key.equals("_param")) {
|
| | | Map param = (Map) val;
|
| | | for (Object value : param.entrySet()) {
|
| | | Map.Entry entry = (Map.Entry) value;
|
| | | String paramKey = entry.getKey().toString();
|
| | | if (this.isToUnderlineCase) {
|
| | | paramKey = Utils.toSymbolCase(paramKey, '_');
|
| | | }
|
| | | if (!Cools.isEmpty(entry.getValue())) {
|
| | | queryWrapper.like(paramKey, entry.getValue());
|
| | | }
|
| | | }
|
| | | } else if (val instanceof List) {
|
| | | if (this.isToUnderlineCase) {
|
| | | key = Utils.toSymbolCase(key, '_');
|
| | | }
|
| | | queryWrapper.in(key, (List) val);
|
| | | } else {
|
| | | if (this.isToUnderlineCase) {
|
| | | key = Utils.toSymbolCase(key, '_');
|
| | | }
|
| | | if (like) {
|
| | | queryWrapper.like(key, val);
|
| | | } else {
|
| | | queryWrapper.eq(key, val);
|
| | | }
|
| | |
|
| | | }
|
| | | }
|
| | |
|
| | | if (null != consumer) {
|
| | | consumer.accept(queryWrapper);
|
| | | }
|
| | |
|
| | | Field[] fields = null;
|
| | | if (!Cools.isEmpty(cls)) {
|
| | | fields = Cools.getAllFields(cls);
|
| | | for (Field field : fields) {
|
| | | if ("id".equals(field.getName())) {
|
| | | queryWrapper.orderByDesc("id");
|
| | | } else if ("createTime".equals(field.getName())) {
|
| | | queryWrapper.orderByDesc(Utils.toSymbolCase(field.getName(), '_'));
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | if (!Cools.isEmpty(where.getCondition()) && !Cools.isEmpty(fields)) {
|
| | | List<String> columns = new ArrayList<>();
|
| | | for (Field field : fields){
|
| | | if (Modifier.isFinal(field.getModifiers())
|
| | | || Modifier.isStatic(field.getModifiers())
|
| | | || Modifier.isTransient(field.getModifiers())){
|
| | | continue;
|
| | | }
|
| | |
|
| | | if (field.isAnnotationPresent(TableField.class)){
|
| | | TableField annotation = field.getAnnotation(TableField.class);
|
| | | if (!annotation.exist()) {
|
| | | continue;
|
| | | }
|
| | | }
|
| | |
|
| | | String column = Utils.toSymbolCase(field.getName(), '_');
|
| | | columns.add(column);
|
| | | }
|
| | | if (!columns.isEmpty()) {
|
| | | for (int i=0;i<columns.size();i++){
|
| | | String column = columns.get(i);
|
| | | String condition = where.getCondition();
|
| | |
|
| | | if (i == 0) {
|
| | | queryWrapper.and(wrapper -> wrapper.like(column, condition));
|
| | | } else {
|
| | | queryWrapper.or().like(column, condition);
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | return queryWrapper;
|
| | | }
|
| | |
|
| | | public Map<String, Object> pickOutMap() {
|
| | | return pickOutMap(false);
|
| | | }
|
| | |
|
| | | public Map<String, Object> pickOutMap(boolean mergeCondition) {
|
| | | Map<String, Object> map = where.getMap();
|
| | | if (mergeCondition) {
|
| | | if (!Cools.isEmpty(where.getCondition())) {
|
| | | map.put("condition", where.getCondition());
|
| | | }
|
| | | }
|
| | | return map;
|
| | | }
|
| | |
|
| | | }
|