Commit c336bb43050fa4bf772c2a5991f5f0bcb81fbc1f

Authored by zhangdaihao
1 parent 5e13ced3

解决initQueryWrapper组装sql查询条件错误 #284

jeecg-boot/jeecg-boot-base-common/src/main/java/org/jeecg/common/system/query/QueryGenerator.java
... ... @@ -39,6 +39,8 @@ public class QueryGenerator {
39 39 private static final String STAR = "*";
40 40 private static final String COMMA = ",";
41 41 private static final String NOT_EQUAL = "!";
  42 + /**页面带有规则值查询,空格作为分隔符*/
  43 + private static final String QUERY_SEPARATE_KEYWORD = " ";
42 44 /**高级查询前端传来的参数名*/
43 45 private static final String SUPER_QUERY_PARAMS = "superQueryParams";
44 46  
... ... @@ -150,6 +152,12 @@ public class QueryGenerator {
150 152 //根据参数值带什么关键字符串判断走什么类型的查询
151 153 QueryRuleEnum rule = convert2Rule(value);
152 154 value = replaceValue(rule,value);
  155 + // add -begin 添加判断为字符串时设为全模糊查询
  156 + if( (rule==null || QueryRuleEnum.EQ.equals(rule)) && "class java.lang.String".equals(type)) {
  157 + // 可以设置左右模糊或全模糊,因人而异
  158 + rule = QueryRuleEnum.LIKE;
  159 + }
  160 + // add -end 添加判断为字符串时设为全模糊查询
153 161 addEasyQuery(queryWrapper, name, rule, value);
154 162 }
155 163  
... ... @@ -221,7 +229,7 @@ public class QueryGenerator {
221 229 * @param value
222 230 * @return
223 231 */
224   - public static QueryRuleEnum convert2Rule(Object value) {
  232 + private static QueryRuleEnum convert2Rule(Object value) {
225 233 // 避免空数据
226 234 if (value == null) {
227 235 return null;
... ... @@ -231,15 +239,23 @@ public class QueryGenerator {
231 239 return null;
232 240 }
233 241 QueryRuleEnum rule =null;
  242 +
  243 + //update-begin--Author:scott Date:20190724 for:initQueryWrapper组装sql查询条件错误 #284-------------------
  244 + //TODO 此处规则,只适用于 le lt ge gt
234 245 // step 2 .>= =<
235   - if (rule == null && val.length() >= 2) {
236   - rule = QueryRuleEnum.getByValue(val.substring(0, 2));
  246 + if (rule == null && val.length() >= 3) {
  247 + if(QUERY_SEPARATE_KEYWORD.equals(val.substring(2, 3))){
  248 + rule = QueryRuleEnum.getByValue(val.substring(0, 2));
  249 + }
237 250 }
238 251 // step 1 .> <
239   - if (rule == null && val.length() >= 1) {
240   - rule = QueryRuleEnum.getByValue(val.substring(0, 1));
  252 + if (rule == null && val.length() >= 2) {
  253 + if(QUERY_SEPARATE_KEYWORD.equals(val.substring(1, 2))){
  254 + rule = QueryRuleEnum.getByValue(val.substring(0, 1));
  255 + }
241 256 }
242   -
  257 + //update-end--Author:scott Date:20190724 for:initQueryWrapper组装sql查询条件错误 #284---------------------
  258 +
243 259 // step 3 like
244 260 if (rule == null && val.contains(STAR)) {
245 261 if (val.startsWith(STAR) && val.endsWith(STAR)) {
... ... @@ -269,7 +285,7 @@ public class QueryGenerator {
269 285 * @param value
270 286 * @return
271 287 */
272   - public static Object replaceValue(QueryRuleEnum rule, Object value) {
  288 + private static Object replaceValue(QueryRuleEnum rule, Object value) {
273 289 if (rule == null) {
274 290 return null;
275 291 }
... ... @@ -286,7 +302,14 @@ public class QueryGenerator {
286 302 } else if (rule == QueryRuleEnum.IN) {
287 303 value = val.split(",");
288 304 } else {
289   - value = val.replace(rule.getValue(),"");
  305 + //update-begin--Author:scott Date:20190724 for:initQueryWrapper组装sql查询条件错误 #284-------------------
  306 + if(val.startsWith(rule.getValue())){
  307 + //TODO 此处逻辑应该注释掉-> 如果查询内容中带有查询匹配规则符号,就会被截取的(比如:>=您好)
  308 + value = val.replaceFirst(rule.getValue(),"");
  309 + }else if(val.startsWith(rule.getCondition()+QUERY_SEPARATE_KEYWORD)){
  310 + value = val.replaceFirst(rule.getCondition()+QUERY_SEPARATE_KEYWORD,"").trim();
  311 + }
  312 + //update-end--Author:scott Date:20190724 for:initQueryWrapper组装sql查询条件错误 #284-------------------
290 313 }
291 314 return value;
292 315 }
... ...