From 8b7d1d84cb49003c82c63268a6c382231797fb05 Mon Sep 17 00:00:00 2001 From: ls Date: Sun, 5 Jan 2025 10:31:16 +0800 Subject: [PATCH] update --- .../common/system/query/QueryGenerator.java | 81 ++++++++++--------- .../controller/ExperimentController.java | 1 + 2 files changed, 45 insertions(+), 37 deletions(-) diff --git a/physical-base-core/src/main/java/org/jeecg/common/system/query/QueryGenerator.java b/physical-base-core/src/main/java/org/jeecg/common/system/query/QueryGenerator.java index 5ff4d54..0c4e00f 100644 --- a/physical-base-core/src/main/java/org/jeecg/common/system/query/QueryGenerator.java +++ b/physical-base-core/src/main/java/org/jeecg/common/system/query/QueryGenerator.java @@ -4,12 +4,11 @@ import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.beanutils.PropertyUtils; +import org.apache.commons.lang3.StringUtils; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.constant.DataBaseConstant; import org.jeecg.common.exception.JeecgBootException; -import org.jeecg.common.system.util.JeecgDataAutorUtils; -import org.jeecg.common.system.util.JwtUtil; -import org.jeecg.common.system.util.SqlConcatUtil; +import org.jeecg.common.system.util.*; import org.jeecg.common.system.vo.SysPermissionDataRuleModel; import org.jeecg.common.util.*; import org.springframework.util.NumberUtils; @@ -33,19 +32,19 @@ import java.util.stream.Collectors; public class QueryGenerator { public static final String SQL_RULES_COLUMN = "SQL_RULES_COLUMN"; - private static final String BEGIN = "_begin"; - private static final String END = "_end"; + private static final String BEGIN = "_begin"; + private static final String END = "_end"; /** * 数字类型字段,拼接此后缀 接受多值参数 */ - private static final String MULTI = "_MultiString"; - private static final String STAR = "*"; - private static final String COMMA = ","; + private static final String MULTI = "_MultiString"; + private static final String STAR = "*"; + private static final String COMMA = ","; /** * 查询 逗号转义符 相当于一个逗号【作废】 */ - public static final String QUERY_COMMA_ESCAPE = "++"; - private static final String NOT_EQUAL = "!"; + public static final String QUERY_COMMA_ESCAPE = "++"; + private static final String NOT_EQUAL = "!"; /** * 页面带有规则值查询,空格作为分隔符 */ @@ -53,7 +52,7 @@ public class QueryGenerator { /** * 高级查询前端传来的参数名 */ - private static final String SUPER_QUERY_PARAMS = "superQueryParams"; + private static final String SUPER_QUERY_PARAMS = "superQueryParams"; /** * 高级查询前端传来的拼接方式参数名 */ @@ -61,16 +60,16 @@ public class QueryGenerator { /** * 单引号 */ - public static final String SQL_SQ = "'"; + public static final String SQL_SQ = "'"; /** * 排序列 */ - private static final String ORDER_COLUMN = "column"; + private static final String ORDER_COLUMN = "column"; /** * 排序方式 */ - private static final String ORDER_TYPE = "order"; - private static final String ORDER_TYPE_ASC = "ASC"; + private static final String ORDER_TYPE = "order"; + private static final String ORDER_TYPE_ASC = "ASC"; /** * mysql 模糊查询之特殊字符下划线 (_、\) @@ -126,7 +125,8 @@ public class QueryGenerator { * @param customRuleMap 自定义字段查询规则 {field:QueryRuleEnum} * @return QueryWrapper实例 */ - public static QueryWrapper initQueryWrapper(T searchObj, Map parameterMap, Map customRuleMap) { + public static QueryWrapper initQueryWrapper(T searchObj, Map parameterMap, + Map customRuleMap) { long start = System.currentTimeMillis(); QueryWrapper queryWrapper = new QueryWrapper(); installMplus(queryWrapper, searchObj, parameterMap, customRuleMap); @@ -144,7 +144,8 @@ public class QueryGenerator { *
正确示例:QueryWrapper queryWrapper = new QueryWrapper(); *
3.也可以不使用这个方法直接调用 {@link #initQueryWrapper}直接获取实例 */ - private static void installMplus(QueryWrapper queryWrapper, Object searchObj, Map parameterMap, Map customRuleMap) { + private static void installMplus(QueryWrapper queryWrapper, Object searchObj, Map parameterMap, + Map customRuleMap) { /* * 注意:权限查询由前端配置数据规则 当一个人有多个所属部门时候 可以在规则配置包含条件 orgCode 包含 #{sys_org_code} 但是不支持在自定义SQL中写orgCode in #{sys_org_code} @@ -242,7 +243,6 @@ public class QueryGenerator { } - /** * 区间查询 * @@ -252,7 +252,8 @@ public class QueryGenerator { * @param filedName 字段名称 * @param columnName 列名称 */ - private static void doIntervalQuery(QueryWrapper queryWrapper, Map parameterMap, String type, String filedName, String columnName) throws ParseException { + private static void doIntervalQuery(QueryWrapper queryWrapper, Map parameterMap, String type, String filedName, + String columnName) throws ParseException { // 添加 判断是否有区间值 String endValue = null, beginValue = null; if (parameterMap != null && parameterMap.containsKey(filedName + BEGIN)) { @@ -271,7 +272,8 @@ public class QueryGenerator { } } - private static void doMultiFieldsOrder(QueryWrapper queryWrapper, Map parameterMap, Map fieldColumnMap) { + private static void doMultiFieldsOrder(QueryWrapper queryWrapper, Map parameterMap, + Map fieldColumnMap) { Set allFields = fieldColumnMap.keySet(); String column = null, order = null; if (parameterMap != null && parameterMap.containsKey(ORDER_COLUMN)) { @@ -367,7 +369,8 @@ public class QueryGenerator { private static void doSuperQuery(QueryWrapper queryWrapper, Map parameterMap, Map fieldColumnMap) { if (parameterMap != null && parameterMap.containsKey(SUPER_QUERY_PARAMS)) { String superQueryParams = parameterMap.get(SUPER_QUERY_PARAMS)[0]; - String superQueryMatchType = parameterMap.get(SUPER_QUERY_MATCH_TYPE) != null ? parameterMap.get(SUPER_QUERY_MATCH_TYPE)[0] : MatchTypeEnum.AND.getValue(); + String superQueryMatchType = parameterMap.get(SUPER_QUERY_MATCH_TYPE) != null ? parameterMap.get(SUPER_QUERY_MATCH_TYPE)[0] + : MatchTypeEnum.AND.getValue(); MatchTypeEnum matchType = MatchTypeEnum.getByValue(superQueryMatchType); // update-begin--Author:sunjianlei Date:20200325 for:高级查询的条件要用括号括起来,防止和用户的其他条件冲突 ------- try { @@ -378,10 +381,8 @@ public class QueryGenerator { } // update-begin-author:sunjianlei date:20220119 for: 【JTC-573】 过滤空条件查询,防止 sql 拼接多余的 and List filterConditions = conditions.stream().filter( - rule -> oConvertUtils.isNotEmpty(rule.getField()) - && oConvertUtils.isNotEmpty(rule.getRule()) - && oConvertUtils.isNotEmpty(rule.getVal()) - ).collect(Collectors.toList()); + rule -> oConvertUtils.isNotEmpty(rule.getField()) && oConvertUtils.isNotEmpty(rule.getRule()) + && oConvertUtils.isNotEmpty(rule.getVal())).collect(Collectors.toList()); if (filterConditions.size() == 0) { return; } @@ -391,8 +392,7 @@ public class QueryGenerator { queryWrapper.and(andWrapper -> { for (int i = 0; i < filterConditions.size(); i++) { QueryCondition rule = filterConditions.get(i); - if (oConvertUtils.isNotEmpty(rule.getField()) - && oConvertUtils.isNotEmpty(rule.getRule()) + if (oConvertUtils.isNotEmpty(rule.getField()) && oConvertUtils.isNotEmpty(rule.getRule()) && oConvertUtils.isNotEmpty(rule.getVal())) { log.debug("SuperQuery ==> " + rule.toString()); @@ -438,7 +438,8 @@ public class QueryGenerator { } } // update-begin--author:sunjianlei date:20210702 for:【/issues/I3VR8E】高级查询没有类型转换,查询参数都是字符串类型 ---- - addEasyQuery(andWrapper, fieldColumnMap.get(rule.getField()), QueryRuleEnum.getByValue(rule.getRule()), queryValue); + addEasyQuery(andWrapper, fieldColumnMap.get(rule.getField()), QueryRuleEnum.getByValue(rule.getRule()), + queryValue); //update-end-author:taoyan date:20201228 for: 【高级查询】 oracle 日期等于查询报错 // 如果拼接方式是OR,就拼接OR @@ -563,11 +564,17 @@ public class QueryGenerator { //mysql 模糊查询之特殊字符下划线 (_、\) value = specialStrConvert(value.toString()); } else if (rule == QueryRuleEnum.LEFT_LIKE || rule == QueryRuleEnum.NE) { - value = val.substring(1); + value = val; + if (StringUtils.startsWith(val, "%")) { + value = val.substring(1); + } //mysql 模糊查询之特殊字符下划线 (_、\) value = specialStrConvert(value.toString()); } else if (rule == QueryRuleEnum.RIGHT_LIKE) { - value = val.substring(0, val.length() - 1); + value = val; + if (StringUtils.endsWith(val, "%")) { + value = val.substring(0, val.length() - 1); + } //mysql 模糊查询之特殊字符下划线 (_、\) value = specialStrConvert(value.toString()); } else if (rule == QueryRuleEnum.IN) { @@ -587,7 +594,8 @@ public class QueryGenerator { return value; } - private static void addQueryByRule(QueryWrapper queryWrapper, String name, String type, String value, QueryRuleEnum rule) throws ParseException { + private static void addQueryByRule(QueryWrapper queryWrapper, String name, String type, String value, QueryRuleEnum rule) + throws ParseException { if (oConvertUtils.isNotEmpty(value)) { //update-begin--Author:sunjianlei Date:20220104 for:【JTC-409】修复逗号分割情况下没有转换类型,导致类型严格的数据库查询报错 ------------------- // 针对数字类型字段,多值查询 @@ -752,7 +760,7 @@ public class QueryGenerator { else if (value.getClass().isArray()) { vals = (Object[]) value; } else { - vals = new Object[]{value}; + vals = new Object[] {value}; } queryWrapper.and(j -> { log.info("---查询过滤器,Query规则---field:{}, rule:{}, value:{}", nameFinal, "like", vals[0]); @@ -775,12 +783,10 @@ public class QueryGenerator { * @return */ private static boolean judgedIsUselessField(String name) { - return "class".equals(name) || "ids".equals(name) - || "page".equals(name) || "rows".equals(name) - || "sort".equals(name) || "order".equals(name); + return "class".equals(name) || "ids".equals(name) || "page".equals(name) || "rows".equals(name) || "sort".equals(name) + || "order".equals(name); } - /** * 获取请求对应的数据权限规则 TODO 相同列权限多个 有问题 * @@ -811,7 +817,8 @@ public class QueryGenerator { return ruleMap; } - private static void addRuleToQueryWrapper(SysPermissionDataRuleModel dataRule, String name, Class propertyType, QueryWrapper queryWrapper) { + private static void addRuleToQueryWrapper(SysPermissionDataRuleModel dataRule, String name, Class propertyType, + QueryWrapper queryWrapper) { QueryRuleEnum rule = QueryRuleEnum.getByValue(dataRule.getRuleConditions()); if (rule.equals(QueryRuleEnum.IN) && !propertyType.equals(String.class)) { String[] values = dataRule.getRuleValue().split(","); diff --git a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ExperimentController.java b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ExperimentController.java index 91547d6..3c8fafe 100644 --- a/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ExperimentController.java +++ b/physical-module-system/physical-system-biz/src/main/java/org/jeecg/modules/database/controller/ExperimentController.java @@ -86,6 +86,7 @@ public class ExperimentController extends JeecgController customeRuleMap = new HashMap<>(); // 自定义duoXuan字段的查询规则为:LIKE_WITH_OR customeRuleMap.put("startDate", QueryRuleEnum.RIGHT_LIKE); + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(experiment, req.getParameterMap(), customeRuleMap); Page page = new Page<>(pageNo, pageSize); IPage pageList = experimentService.page(page, queryWrapper);