From bcee4124a11c20a1018d3e26c3bdc78144cf844a Mon Sep 17 00:00:00 2001 From: Parker Date: Thu, 4 Mar 2021 17:16:37 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=9D=A1=E4=BB=B6=E6=9E=84?= =?UTF-8?q?=E9=80=A0=E5=99=A8=E3=80=81=E5=88=86=E9=A1=B5=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/opsli/core/persistence/Page.java | 30 +++- .../querybuilder/WebQueryBuilder.java | 131 ++++++++++++++---- .../querybuilder/conf/WebQueryConf.java | 62 +++++++++ .../table/web/TableRestController.java | 2 +- .../backend/web/TemplateRestController.html | 2 +- .../system/area/mapper/SysAreaMapper.java | 3 +- .../system/area/mapper/xml/SysAreaMapper.xml | 4 +- .../dict/web/DictDetailRestController.java | 2 +- .../system/dict/web/DictRestController.java | 2 +- .../system/logs/web/LogsRestController.java | 2 +- .../system/menu/web/MenuRestController.java | 2 +- .../options/web/SysOptionsRestController.java | 2 +- .../system/org/mapper/SysOrgMapper.java | 5 +- .../system/org/mapper/xml/SysOrgMapper.xml | 8 +- .../system/role/web/RoleRestController.java | 2 +- .../tenant/web/TenantRestController.java | 2 +- .../system/user/mapper/UserMapper.java | 4 +- .../system/user/mapper/xml/UserMapper.xml | 4 +- .../system/user/web/UserRestController.java | 2 +- .../carinfo/web/TestCarRestController.java | 2 +- .../user/web/TestUserRestController.java | 2 +- .../modulars/test/web/TestRestController.java | 2 +- .../test/web/TestRestRestController.java | 2 +- 23 files changed, 211 insertions(+), 68 deletions(-) create mode 100644 opsli-base-support/opsli-core/src/main/java/org/opsli/core/persistence/querybuilder/conf/WebQueryConf.java diff --git a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/persistence/Page.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/persistence/Page.java index 14fcff8d..a7c44330 100644 --- a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/persistence/Page.java +++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/persistence/Page.java @@ -19,13 +19,12 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageSerializable; +import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.opsli.api.base.warpper.ApiWrapper; import org.opsli.core.base.entity.BaseEntity; -import java.util.HashMap; import java.util.List; -import java.util.Map; /** * 分页类 @@ -106,11 +105,11 @@ public class Page extends PageSeriali * 获取bootstrap data分页数据 * @return map对象 */ - public Map getBootstrapData(){ - Map map = new HashMap<>(2); - map.put("rows", this.getList()); - map.put("total", this.getTotal()); - return map; + public Page.PageData getPageData(){ + Page.PageData pageData = new PageData(); + pageData.setRows(this.getList()); + pageData.setTotal(this.getTotal()); + return pageData; } @@ -140,4 +139,21 @@ public class Page extends PageSeriali this.queryWrapper = queryWrapper; } + + ////////////////////////////////////////////////////////// + + /** + * 分页对象 + */ + @Data + public static class PageData { + + /** 条数 */ + private Long total; + + /** 行 */ + private List rows; + + } + } diff --git a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/persistence/querybuilder/WebQueryBuilder.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/persistence/querybuilder/WebQueryBuilder.java index 624683c3..dd842bfb 100644 --- a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/persistence/querybuilder/WebQueryBuilder.java +++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/persistence/querybuilder/WebQueryBuilder.java @@ -21,6 +21,7 @@ import org.apache.commons.lang3.StringUtils; import org.opsli.common.constants.MyBatisConstants; import org.opsli.common.utils.HumpUtil; import org.opsli.core.base.entity.BaseEntity; +import org.opsli.core.persistence.querybuilder.conf.WebQueryConf; import java.util.Map; @@ -52,6 +53,8 @@ public class WebQueryBuilder implements QueryBuilder{ private final Class entityClazz; /** 默认排序字段 */ private final String defaultOrderField; + /** 配置类 */ + private WebQueryConf conf; /** * 构造函数 只是生产 查询器 @@ -64,6 +67,18 @@ public class WebQueryBuilder implements QueryBuilder{ this.defaultOrderField = MyBatisConstants.FIELD_UPDATE_TIME; } + /** + * 构造函数 只是生产 查询器 + * @param entityClazz Entity 的 clazz + * @param parameterMap request 参数 + */ + public WebQueryBuilder(Class entityClazz, Map parameterMap, WebQueryConf conf){ + this.parameterMap = parameterMap; + this.entityClazz = entityClazz; + this.defaultOrderField = MyBatisConstants.FIELD_UPDATE_TIME; + this.conf = conf; + } + /** * 构造函数 只是生产 查询器 * @param entityClazz Entity 的 clazz @@ -77,6 +92,22 @@ public class WebQueryBuilder implements QueryBuilder{ this.defaultOrderField = defaultOrderField; } + /** + * 构造函数 只是生产 查询器 + * @param entityClazz Entity 的 clazz + * @param parameterMap request 参数 + * @param defaultOrderField 默认排序字段 + * @param conf 配置 + */ + public WebQueryBuilder(Class entityClazz, Map parameterMap, + String defaultOrderField, WebQueryConf conf){ + this.parameterMap = parameterMap; + this.entityClazz = entityClazz; + this.defaultOrderField = defaultOrderField; + this.conf = conf; + } + + @Override public QueryWrapper build() { QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -85,7 +116,7 @@ public class WebQueryBuilder implements QueryBuilder{ /** * 创建 查询条件构造器 - * @return + * @return QueryWrapper */ private QueryWrapper createQueryWrapper(QueryWrapper queryWrapper){ if(this.parameterMap == null){ @@ -106,16 +137,18 @@ public class WebQueryBuilder implements QueryBuilder{ if(keyHandle.length < 2){ continue; } + + // 键 + String key = keyHandle[0]; + // 操作 + String handle = keyHandle[1]; + // 判断 字段是否合法 - boolean hasField = this.validationField(keyHandle); + boolean hasField = this.validationField(key); if(hasField){ // 验证操作是否合法 - boolean hasHandle = this.validationHandle(keyHandle); + boolean hasHandle = this.validationHandle(handle); if(hasHandle){ - // 操作 - String handle = keyHandle[1]; - // 键 - String key = keyHandle[0]; // 处理值 String value = values[0]; // 赋值 @@ -130,7 +163,21 @@ public class WebQueryBuilder implements QueryBuilder{ // 如果没有排序 默认按照 修改时间倒叙排序 if(orderCount == 0){ if(StringUtils.isNotEmpty(this.defaultOrderField)){ - queryWrapper.orderByDesc(HumpUtil.humpToUnderline(this.defaultOrderField)); + String key = this.defaultOrderField; + String keyStr = null; + if(conf != null){ + keyStr = conf.get(key); + } + + // 检测 Conf 配置中是否已经指定该配置 + if(StringUtils.isNotEmpty(keyStr)){ + key = keyStr; + }else{ + // 转换驼峰 为 数据库下划线字段 + key = HumpUtil.humpToUnderline(key); + } + + queryWrapper.orderByDesc(key); } } return queryWrapper; @@ -150,8 +197,19 @@ public class WebQueryBuilder implements QueryBuilder{ ){ return; } - // 转换驼峰 为 数据库下划线字段 - key = HumpUtil.humpToUnderline(key); + String keyStr = null; + if(conf != null){ + keyStr = conf.get(key); + } + + // 检测 Conf 配置中是否已经指定该配置 + if(StringUtils.isNotEmpty(keyStr)){ + key = keyStr; + }else{ + // 转换驼峰 为 数据库下划线字段 + key = HumpUtil.humpToUnderline(key); + } + switch (handle) { case EQ: // 全值匹配 @@ -186,37 +244,50 @@ public class WebQueryBuilder implements QueryBuilder{ /** * 检测 字段是否合法 - * @param keyHandle - * @return + * @param key key值 + * @return boolean */ - private boolean validationField(String[] keyHandle){ - if(entityClazz == null || keyHandle == null || StringUtils.isEmpty(keyHandle[0])){ + private boolean validationField(String key){ + if(StringUtils.isEmpty(key)){ return false; } + + boolean ret; + // 先判断 conf 文件中是否包含 改 key + if(conf != null){ + ret = conf.hashKey(key); + if(ret){ + return true; + } + } + + // entity 对象是否为空 + if(entityClazz == null){ + return false; + } + // 判断当前传入参数 是否是Entity的字段 - return ReflectUtil.hasField(entityClazz, keyHandle[0]); + return ReflectUtil.hasField(entityClazz, key); } /** * 检测 操作是否合法 - * @param keyHandle - * @return + * @param handle 操作 + * @return boolean */ - private boolean validationHandle(String[] keyHandle){ - if(keyHandle == null || StringUtils.isEmpty(keyHandle[1])){ + private boolean validationHandle(String handle){ + if(StringUtils.isEmpty(handle)){ return false; } - String handle = keyHandle[1]; - if (EQ.equals(handle)) { - return true; - } else if (LIKE.equals(handle)) { - return true; - } else if (BEGIN.equals(handle)) { - return true; - } else if (END.equals(handle)) { - return true; + switch (handle) { + case EQ: + case END: + case LIKE: + case BEGIN: + return true; + default: + return ORDER.equals(handle); } - return ORDER.equals(handle); } -} +} \ No newline at end of file diff --git a/opsli-base-support/opsli-core/src/main/java/org/opsli/core/persistence/querybuilder/conf/WebQueryConf.java b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/persistence/querybuilder/conf/WebQueryConf.java new file mode 100644 index 00000000..2ea38c2c --- /dev/null +++ b/opsli-base-support/opsli-core/src/main/java/org/opsli/core/persistence/querybuilder/conf/WebQueryConf.java @@ -0,0 +1,62 @@ +/** + * Copyright 2020 OPSLI 快速开发平台 https://www.opsli.com + *

+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package org.opsli.core.persistence.querybuilder.conf; + +import java.util.HashMap; +import java.util.Map; + +/** + * Web 请求配置类 + * + * @author Parker + * @date 2021年3月3日17:12:08 + */ +public class WebQueryConf { + + private final Map queryMap; + + public WebQueryConf(){ + queryMap = new HashMap<>(); + } + + + /** + * 判断是否包含 Key + * @param key key + * @param value 值 + */ + public void pub(String key, String value){ + queryMap.putIfAbsent(key, value); + } + + /** + * 判断是否包含 Key + * @param key key + */ + public String get(String key){ + return queryMap.get(key); + } + + /** + * 判断是否包含 Key + * @param key key + * @return boolean + */ + public boolean hashKey(String key){ + return queryMap.containsKey(key); + } + +} \ No newline at end of file diff --git a/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/modulars/creater/table/web/TableRestController.java b/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/modulars/creater/table/web/TableRestController.java index 03007321..6de89d1c 100644 --- a/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/modulars/creater/table/web/TableRestController.java +++ b/opsli-modulars/opsli-modulars-creater/src/main/java/org/opsli/modulars/creater/table/web/TableRestController.java @@ -111,7 +111,7 @@ public class TableRestController extends BaseRestController { * 是否有下级 * @return List */ - List hasChildren(@Param("ew") Wrapper wrapper); + List hasChildren(@Param(Constants.WRAPPER) Wrapper wrapper); } diff --git a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/area/mapper/xml/SysAreaMapper.xml b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/area/mapper/xml/SysAreaMapper.xml index 1c0e191a..223d988a 100644 --- a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/area/mapper/xml/SysAreaMapper.xml +++ b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/area/mapper/xml/SysAreaMapper.xml @@ -9,9 +9,7 @@ count(0) as `count` from sys_area - - ${ew.sqlSegment} - + ${ew.customSqlSegment} diff --git a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/dict/web/DictDetailRestController.java b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/dict/web/DictDetailRestController.java index 4f27c38e..290bce63 100644 --- a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/dict/web/DictDetailRestController.java +++ b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/dict/web/DictDetailRestController.java @@ -97,7 +97,7 @@ public class DictDetailRestController extends BaseRestController { * 是否有下级 * @return */ - List hasChildren(@Param("ew") Wrapper wrapper); + List hasChildren(@Param(Constants.WRAPPER) Wrapper wrapper); /** * 是否被引用 * @return */ - Integer hasUse(@Param("ew") Wrapper wrapper); + Integer hasUse(@Param(Constants.WRAPPER) Wrapper wrapper); } diff --git a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/org/mapper/xml/SysOrgMapper.xml b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/org/mapper/xml/SysOrgMapper.xml index 1eea036d..4e7f7d64 100644 --- a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/org/mapper/xml/SysOrgMapper.xml +++ b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/org/mapper/xml/SysOrgMapper.xml @@ -8,9 +8,7 @@ count(0) as `count` from sys_org - - ${ew.sqlSegment} - + ${ew.customSqlSegment} diff --git a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/web/RoleRestController.java b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/web/RoleRestController.java index 54aa6c8c..c0d4bcd8 100644 --- a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/web/RoleRestController.java +++ b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/web/RoleRestController.java @@ -98,7 +98,7 @@ public class RoleRestController extends BaseRestController { * 查询集合 * @return */ - List findList(@Param("ew") Wrapper wrapper); + List findList(@Param(Constants.WRAPPER) Wrapper wrapper); } diff --git a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/user/mapper/xml/UserMapper.xml b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/user/mapper/xml/UserMapper.xml index 5143e146..f544e5a0 100644 --- a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/user/mapper/xml/UserMapper.xml +++ b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/user/mapper/xml/UserMapper.xml @@ -46,9 +46,7 @@ from sys_user a - - ${ew.sqlSegment} - + ${ew.customSqlSegment}