From e9a4418c14ef68fb454300b092c413e8df259ec2 Mon Sep 17 00:00:00 2001
From: Junjie <xjj@123>
Date: 星期六, 13 四月 2024 11:50:56 +0800
Subject: [PATCH] #

---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/common/domain/PageParam.java |  219 +++++++++++++++++++++++++++++-------------------------
 1 files changed, 119 insertions(+), 100 deletions(-)

diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/common/domain/PageParam.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/common/domain/PageParam.java
index a5d610f..83c0a9e 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/common/domain/PageParam.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/common/domain/PageParam.java
@@ -1,16 +1,18 @@
 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.QueryType;
+import com.zy.asrs.framework.common.DateUtils;
+import com.zy.asrs.wcs.utils.CommonUtils;
 
 import java.lang.reflect.Field;
-import java.util.Arrays;
+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
@@ -21,17 +23,38 @@
 
     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.getPageIdx() != null) {
-                setCurrent(where.getPageIdx());
+            if (where.getCurrent() != null) {
+                setCurrent(where.getCurrent());
             }
             if (where.getPageSize() != null) {
                 setSize(where.getPageSize());
@@ -39,116 +62,112 @@
         }
     }
 
-    public QueryWrapper<T> getWrapper(String... excludes) {
-        return buildWrapper(null, Arrays.asList(excludes));
+    public QueryWrapper<T> buildWrapper() {
+        return this.buildWrapper(false);
     }
 
-    private QueryWrapper<T> buildWrapper(List<String> columns, List<String> excludes) {
+    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 = 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;
                 }
-                if (queryField.type() != null) {
-                    queryType = queryField.type();
+                if (null != list) {
+                    key = key.replaceAll("Range", "");
+                    if (this.isToUnderlineCase) {
+                        key = CommonUtils.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 = CommonUtils.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 ("createTime".equals(field.getName())) {
+                    queryWrapper.orderByDesc(CommonUtils.toSymbolCase(field.getName(), '_'));
                 }
             }
+        }
 
-            // 瀛楁鍚嶉┘宄拌浆涓嬪垝绾�
-            if (this.isToUnderlineCase) {
-                fieldName = Utils.toSymbolCase(fieldName, '_');
+        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 =  CommonUtils.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();
 
-            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(",")));
+                    if (i == 0) {
+                        queryWrapper.and(wrapper -> wrapper.like(column, condition));
+                    } else {
+                        queryWrapper.or().like(column, condition);
                     }
-                    break;
-                case NOT_IN_STR:
-                    if (fieldValue instanceof String) {
-                        queryWrapper.notIn(fieldName, Arrays.asList(((String) fieldValue).split(",")));
-                    }
-                    break;
+                }
             }
         }
         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;
+    }
+
 }

--
Gitblit v1.9.1