Quellcode durchsuchen

QueryCriteria的处理移到服务内部,不对外暴露了。便

yucheng vor 3 Jahren
Ursprung
Commit
0e24b442bf

+ 113 - 0
dc-business/dc-digital/src/main/java/com/persagy/dc/basic/utils/QueryCriteriaHelper.java

@@ -0,0 +1,113 @@
+package com.persagy.dc.basic.utils;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.persagy.dc.basic.model.QueryCriteria;
+import com.persagy.dc.common.model.entity.BaseEntity;
+
+import java.util.Iterator;
+
+/**
+ * 查询条件 助手
+ * @author Charlie Yu
+ * @date 2021-06-25
+ */
+public class QueryCriteriaHelper {
+
+    /**
+     * 转换为Page分页信息
+     * @param criteria
+     * @return
+     */
+    public static Page toPage(QueryCriteria criteria) {
+        if(criteria == null) {
+            criteria = new QueryCriteria();
+        }
+        // 当前页默认为1
+        if(criteria.getPage() == null || criteria.getPage() < 1) {
+            criteria.setPage(1L);
+        }
+        // 没有每页行数表示不分页
+        if(criteria.getSize() == null || criteria.getSize() < 1) {
+            criteria.setSize(-1L);
+        }
+        Page pageInfo = new Page();
+        pageInfo.setCurrent(criteria.getPage());
+        pageInfo.setSize(criteria.getSize());
+        pageInfo.setOrders(criteria.getOrders());
+        pageInfo.setSearchCount(!criteria.isWithoutCount());
+        return pageInfo;
+    }
+
+    /**
+     * 转换为查询条件
+     * @param wrapper
+     */
+    public static <T extends BaseEntity> void toWrapper(QueryWrapper<T> wrapper, QueryCriteria criteria) {
+        if(criteria == null || criteria.getCriteria() == null || criteria.getCriteria().isEmpty(null)) {
+            return;
+        }
+        Iterator<String> fields = criteria.getCriteria().fieldNames();
+        // 按字段循环
+        while(fields.hasNext()) {
+            String field = fields.next();
+            JsonNode fieldValue = criteria.getCriteria().get(field);
+            String dbField = StrUtil.toUnderlineCase(field);
+            // 值节点
+            if(fieldValue.isValueNode()) {
+                wrapper.eq(dbField, JsonNodeUtils.getNodeValue(fieldValue));
+                continue;
+            }
+            // 数组
+            if(fieldValue.isArray()) {
+                wrapper.in(dbField, JsonNodeUtils.getListValue(fieldValue));
+                continue;
+            }
+            // 对象
+            if(fieldValue.isObject()) {
+                Iterator<String> valueOperators = fieldValue.fieldNames();
+                while(valueOperators.hasNext()) {
+                    String valueOperator = valueOperators.next();
+                    JsonNode operatorValue = fieldValue.get(valueOperator);
+                    addCondition(wrapper, dbField, valueOperator,operatorValue);
+                }
+            }
+        }
+    }
+
+    /**
+     * 按条件类型添加查询条件
+     * @param wrapper
+     * @param field
+     * @param operator
+     * @param valueNode
+     */
+    private static <T extends BaseEntity> void addCondition(QueryWrapper<T> wrapper, String field, String operator, JsonNode valueNode) {
+        if("$ne".equalsIgnoreCase(operator)) {
+            wrapper.ne(field, JsonNodeUtils.getNodeValue(valueNode));
+        } else if("$gt".equalsIgnoreCase(operator)) {
+            wrapper.gt(field, JsonNodeUtils.getNodeValue(valueNode));
+        } else if("$gte".equalsIgnoreCase(operator)) {
+            wrapper.ge(field, JsonNodeUtils.getNodeValue(valueNode));
+        } else if("$lt".equalsIgnoreCase(operator)) {
+            wrapper.lt(field, JsonNodeUtils.getNodeValue(valueNode));
+        } else if("$lte".equalsIgnoreCase(operator)) {
+            wrapper.le(field, JsonNodeUtils.getNodeValue(valueNode));
+        } else if("$in".equalsIgnoreCase(operator)) {
+            wrapper.in(field, JsonNodeUtils.getListValue(valueNode));
+        } else if("$like".equalsIgnoreCase(operator)) {
+            wrapper.like(field, JsonNodeUtils.getNodeValue(valueNode));
+        } else if("$notLike".equalsIgnoreCase(operator)) {
+            wrapper.notLike(field, JsonNodeUtils.getNodeValue(valueNode));
+        } else if("$null".equalsIgnoreCase(operator)) {
+            boolean nullFlag = valueNode.booleanValue();
+            if(nullFlag) {
+                wrapper.isNull(field);
+            } else {
+                wrapper.isNotNull(field);
+            }
+        }
+    }
+}

+ 3 - 2
dc-business/dc-digital/src/main/java/com/persagy/dc/define/controller/GraphDefineController.java

@@ -3,6 +3,7 @@ package com.persagy.dc.define.controller;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.persagy.dc.basic.model.QueryCriteria;
+import com.persagy.dc.basic.utils.QueryCriteriaHelper;
 import com.persagy.dc.common.constant.ResponseCode;
 import com.persagy.dc.common.exception.BusinessException;
 import com.persagy.dc.common.model.response.CommonResult;
@@ -35,8 +36,8 @@ public class GraphDefineController {
         }
         QueryWrapper<GraphDefine> wrapper = new QueryWrapper<>();
         // 转换查询条件
-        criteria.toWrapper(wrapper);
-        Page page = service.queryByCondition(criteria.toPage(), wrapper);
+        QueryCriteriaHelper.toWrapper(wrapper, criteria);
+        Page page = service.queryByCondition(QueryCriteriaHelper.toPage(criteria), wrapper);
         return ResultHelper.multi(page.getRecords(), page.getTotal());
     }
 

+ 4 - 3
dc-business/dc-digital/src/main/java/com/persagy/dc/define/controller/ObjectInfoController.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.persagy.dc.basic.model.QueryCriteria;
 import com.persagy.dc.basic.utils.DigitalCommonUtils;
+import com.persagy.dc.basic.utils.QueryCriteriaHelper;
 import com.persagy.dc.common.constant.ResponseCode;
 import com.persagy.dc.common.exception.BusinessException;
 import com.persagy.dc.common.model.response.CommonResult;
@@ -42,13 +43,13 @@ public class ObjectInfoController {
         // 添加所属项目条件
         DigitalCommonUtils.ensureProjectCriteria(wrapper);
         // 转换查询条件
-        criteria.toWrapper(wrapper);
-        Page page = criteria.toPage();
+        QueryCriteriaHelper.toWrapper(wrapper, criteria);
+        Page page = QueryCriteriaHelper.toPage(criteria);
         // 没有排序条件时,按默认条件排序
         if(CollUtil.isEmpty(page.getOrders())) {
             wrapper.orderByAsc("show_order");
         }
-        page = service.queryByCondition(criteria.toPage(), wrapper);
+        page = service.queryByCondition(page, wrapper);
         return ResultHelper.multi(page.getRecords(), page.getTotal());
     }
 

+ 3 - 2
dc-business/dc-digital/src/main/java/com/persagy/dc/define/controller/ObjectTypeController.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.persagy.dc.basic.model.QueryCriteria;
 import com.persagy.dc.basic.utils.DigitalCommonUtils;
+import com.persagy.dc.basic.utils.QueryCriteriaHelper;
 import com.persagy.dc.common.constant.ResponseCode;
 import com.persagy.dc.common.exception.BusinessException;
 import com.persagy.dc.common.model.response.CommonResult;
@@ -42,8 +43,8 @@ public class ObjectTypeController {
         // 添加所属项目条件
         DigitalCommonUtils.ensureProjectCriteria(wrapper);
         // 转换查询条件
-        criteria.toWrapper(wrapper);
-        Page page = service.queryByCondition(criteria.toPage(), wrapper);
+        QueryCriteriaHelper.toWrapper(wrapper, criteria);
+        Page page = service.queryByCondition(QueryCriteriaHelper.toPage(criteria), wrapper);
         return ResultHelper.multi(page.getRecords(), page.getTotal());
     }
 

+ 3 - 2
dc-business/dc-digital/src/main/java/com/persagy/dc/define/controller/RelationDefineController.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.persagy.dc.basic.model.QueryCriteria;
 import com.persagy.dc.basic.utils.DigitalCommonUtils;
+import com.persagy.dc.basic.utils.QueryCriteriaHelper;
 import com.persagy.dc.common.constant.ResponseCode;
 import com.persagy.dc.common.exception.BusinessException;
 import com.persagy.dc.common.model.response.CommonResult;
@@ -39,8 +40,8 @@ public class RelationDefineController {
         // 添加所属项目条件
         DigitalCommonUtils.ensureProjectCriteria(wrapper);
         // 转换查询条件
-        criteria.toWrapper(wrapper);
-        Page page = service.queryByCondition(criteria.toPage(), wrapper);
+        QueryCriteriaHelper.toWrapper(wrapper, criteria);
+        Page page = service.queryByCondition(QueryCriteriaHelper.toPage(criteria), wrapper);
         return ResultHelper.multi(page.getRecords(), page.getTotal());
     }
 

+ 3 - 2
dc-business/dc-digital/src/main/java/com/persagy/dc/digital/controller/ObjectDigitalController.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.persagy.dc.basic.model.QueryCriteria;
 import com.persagy.dc.basic.utils.DigitalCommonUtils;
+import com.persagy.dc.basic.utils.QueryCriteriaHelper;
 import com.persagy.dc.common.constant.ResponseCode;
 import com.persagy.dc.common.exception.BusinessException;
 import com.persagy.dc.common.model.response.CommonResult;
@@ -42,8 +43,8 @@ public class ObjectDigitalController {
         // 添加所属项目条件
         DigitalCommonUtils.ensureProjectCriteria(wrapper);
         // 转换查询条件
-        criteria.toWrapper(wrapper);
-        Page page = service.queryByCondition(criteria.toPage(), wrapper);
+        QueryCriteriaHelper.toWrapper(wrapper, criteria);
+        Page page = service.queryByCondition(QueryCriteriaHelper.toPage(criteria), wrapper);
         return ResultHelper.multi(page.getRecords(), page.getTotal());
     }
 

+ 3 - 2
dc-business/dc-digital/src/main/java/com/persagy/dc/digital/controller/ObjectRelationController.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.persagy.dc.basic.model.QueryCriteria;
 import com.persagy.dc.basic.utils.DigitalCommonUtils;
+import com.persagy.dc.basic.utils.QueryCriteriaHelper;
 import com.persagy.dc.common.constant.ResponseCode;
 import com.persagy.dc.common.exception.BusinessException;
 import com.persagy.dc.common.model.response.CommonResult;
@@ -42,8 +43,8 @@ public class ObjectRelationController {
         // 添加所属项目条件
         DigitalCommonUtils.ensureProjectCriteria(wrapper);
         // 转换查询条件
-        criteria.toWrapper(wrapper);
-        Page page = service.queryByCondition(criteria.toPage(), wrapper);
+        QueryCriteriaHelper.toWrapper(wrapper, criteria);
+        Page page = service.queryByCondition(QueryCriteriaHelper.toPage(criteria), wrapper);
         return ResultHelper.multi(page.getRecords(), page.getTotal());
     }
 

+ 0 - 98
dc-comp/dc-digital-starter/src/main/java/com/persagy/dc/basic/model/QueryCriteria.java

@@ -1,16 +1,9 @@
 package com.persagy.dc.basic.model;
 
-import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.OrderItem;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.persagy.dc.basic.utils.JsonNodeUtils;
-import com.persagy.dc.common.model.entity.BaseEntity;
 import lombok.Data;
 
-import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
@@ -64,95 +57,4 @@ public class QueryCriteria {
     private List<OrderItem> orders;
     /** 额外返回的扩展字段清单 */
     private Set<String> withColumns;
-
-    /**
-     * 转换为Page分页信息
-     * @return
-     */
-    public Page toPage() {
-        // 当前页默认为1
-        if(page == null || page < 1) {
-            page = 1L;
-        }
-        // 没有每页行数表示不分页
-        if(size == null || size < 1) {
-            size = -1L;
-        }
-        Page pageInfo = new Page();
-        pageInfo.setCurrent(page);
-        pageInfo.setSize(size);
-        pageInfo.setOrders(orders);
-        pageInfo.setSearchCount(!withoutCount);
-        return pageInfo;
-    }
-
-    /**
-     * 转换为查询条件
-     * @param wrapper
-     */
-    public <T extends BaseEntity> void toWrapper(QueryWrapper<T> wrapper) {
-        if(criteria == null || criteria.isEmpty(null)) {
-            return;
-        }
-        Iterator<String> fields = criteria.fieldNames();
-        // 按字段循环
-        while(fields.hasNext()) {
-            String field = fields.next();
-            JsonNode fieldValue = criteria.get(field);
-            String dbField = StrUtil.toUnderlineCase(field);
-            // 值节点
-            if(fieldValue.isValueNode()) {
-                wrapper.eq(dbField, JsonNodeUtils.getNodeValue(fieldValue));
-                continue;
-            }
-            // 数组
-            if(fieldValue.isArray()) {
-                wrapper.in(dbField, JsonNodeUtils.getListValue(fieldValue));
-                continue;
-            }
-            // 对象
-            if(fieldValue.isObject()) {
-                Iterator<String> valueOperators = fieldValue.fieldNames();
-                while(valueOperators.hasNext()) {
-                    String valueOperator = valueOperators.next();
-                    JsonNode operatorValue = fieldValue.get(valueOperator);
-                    addCondition(wrapper, dbField, valueOperator,operatorValue);
-                }
-            }
-        }
-    }
-
-    /**
-     * 按条件类型添加查询条件
-     * @param wrapper
-     * @param field
-     * @param operator
-     * @param valueNode
-     */
-    private <T extends BaseEntity> void addCondition(QueryWrapper<T> wrapper, String field, String operator, JsonNode valueNode) {
-        if("$ne".equalsIgnoreCase(operator)) {
-            wrapper.ne(field, JsonNodeUtils.getNodeValue(valueNode));
-        } else if("$gt".equalsIgnoreCase(operator)) {
-            wrapper.gt(field, JsonNodeUtils.getNodeValue(valueNode));
-        } else if("$gte".equalsIgnoreCase(operator)) {
-            wrapper.ge(field, JsonNodeUtils.getNodeValue(valueNode));
-        } else if("$lt".equalsIgnoreCase(operator)) {
-            wrapper.lt(field, JsonNodeUtils.getNodeValue(valueNode));
-        } else if("$lte".equalsIgnoreCase(operator)) {
-            wrapper.le(field, JsonNodeUtils.getNodeValue(valueNode));
-        } else if("$in".equalsIgnoreCase(operator)) {
-            wrapper.in(field, JsonNodeUtils.getListValue(valueNode));
-        } else if("$like".equalsIgnoreCase(operator)) {
-            wrapper.like(field, JsonNodeUtils.getNodeValue(valueNode));
-        } else if("$notLike".equalsIgnoreCase(operator)) {
-            wrapper.notLike(field, JsonNodeUtils.getNodeValue(valueNode));
-        } else if("$null".equalsIgnoreCase(operator)) {
-            boolean nullFlag = valueNode.booleanValue();
-            if(nullFlag) {
-                wrapper.isNull(field);
-            } else {
-                wrapper.isNotNull(field);
-            }
-        }
-    }
 }