【fix sonar】QueryGenerator文件

This commit is contained in:
梁琦涛
2023-03-10 18:04:50 +08:00
parent f765bf905f
commit 649c901b46
@@ -15,6 +15,8 @@ import com.jero.common.util.oConvertUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.springframework.util.NumberUtils; import org.springframework.util.NumberUtils;
import java.beans.PropertyDescriptor; import java.beans.PropertyDescriptor;
@@ -157,6 +159,22 @@ public class QueryGenerator {
doIntervalQuery(queryWrapper, parameterMap, type, name, column); doIntervalQuery(queryWrapper, parameterMap, type, name, column);
//判断单值 参数带不同标识字符串 走不同的查询 //判断单值 参数带不同标识字符串 走不同的查询
//TODO 这种前后带逗号的支持分割后模糊查询需要否 使多选字段的查询生效 //TODO 这种前后带逗号的支持分割后模糊查询需要否 使多选字段的查询生效
addQueryWapper(queryWrapper, column, value);
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
// 排序逻辑 处理
doMultiFieldsOrder(queryWrapper, parameterMap);
//高级查询
doSuperQuery(queryWrapper, parameterMap, fieldColumnMap);
// update-end--Author:taoyan Date:20200923 forissues/1671 如果字段加注解了@TableField(exist = false),不走DB查询-------
}
private static void addQueryWapper(QueryWrapper<?> queryWrapper, String column, Object value) {
if (null != value && value.toString().startsWith(COMMA) && value.toString().endsWith(COMMA)) { if (null != value && value.toString().startsWith(COMMA) && value.toString().endsWith(COMMA)) {
String multiLikeval = value.toString().replace(",,", COMMA); String multiLikeval = value.toString().replace(",,", COMMA);
String[] vals = multiLikeval.substring(1, multiLikeval.length()).split(COMMA); String[] vals = multiLikeval.substring(1, multiLikeval.length()).split(COMMA);
@@ -183,18 +201,6 @@ public class QueryGenerator {
// add -end 添加判断为字符串时设为全模糊查询 // add -end 添加判断为字符串时设为全模糊查询
addEasyQuery(queryWrapper, column, rule, value); addEasyQuery(queryWrapper, column, rule, value);
} }
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
// 排序逻辑 处理
doMultiFieldsOrder(queryWrapper, parameterMap);
//高级查询
doSuperQuery(queryWrapper, parameterMap, fieldColumnMap);
// update-end--Author:taoyan Date:20200923 forissues/1671 如果字段加注解了@TableField(exist = false),不走DB查询-------
} }
@@ -281,6 +287,19 @@ public class QueryGenerator {
} }
log.info("---高级查询参数-->" + conditions.toString()); log.info("---高级查询参数-->" + conditions.toString());
queryWrapper.and(andWrapper -> { queryWrapper.and(andWrapper -> {
andQueryWapper(fieldColumnMap, matchType, conditions, andWrapper);
});
} catch (UnsupportedEncodingException e) {
log.error("--高级查询参数转码失败:" + superQueryParams, e);
} catch (Exception e) {
log.error("--高级查询拼接失败:" + e.getMessage());
e.printStackTrace();
}
// update-end--Author:sunjianlei Date:20200325 for:高级查询的条件要用括号括起来,防止和用户的其他条件冲突 -------
}
}
private static void andQueryWapper(Map<String, String> fieldColumnMap, MatchTypeEnum matchType, List<QueryCondition> conditions, QueryWrapper<?> andWrapper) {
for (int i = 0; i < conditions.size(); i++) { for (int i = 0; i < conditions.size(); i++) {
QueryCondition rule = conditions.get(i); QueryCondition rule = conditions.get(i);
if (oConvertUtils.isNotEmpty(rule.getField()) if (oConvertUtils.isNotEmpty(rule.getField())
@@ -305,16 +324,8 @@ public class QueryGenerator {
} }
} }
} }
});
} catch (UnsupportedEncodingException e) {
log.error("--高级查询参数转码失败:" + superQueryParams, e);
} catch (Exception e) {
log.error("--高级查询拼接失败:" + e.getMessage());
e.printStackTrace();
}
// update-end--Author:sunjianlei Date:20200325 for:高级查询的条件要用括号括起来,防止和用户的其他条件冲突 -------
}
} }
/** /**
* 根据所传的值 转化成对应的比较方式 * 根据所传的值 转化成对应的比较方式
* 支持><= like in ! * 支持><= like in !
@@ -345,15 +356,7 @@ public class QueryGenerator {
//update-end--Author:scott Date:20190724 forinitQueryWrapper组装sql查询条件错误 #284--------------------- //update-end--Author:scott Date:20190724 forinitQueryWrapper组装sql查询条件错误 #284---------------------
// step 3 like // step 3 like
if (rule == null && val.contains(STAR)) { rule = getQueryRuleEnum(val, rule);
if (val.startsWith(STAR) && val.endsWith(STAR)) {
rule = QueryRuleEnum.LIKE;
} else if (val.startsWith(STAR)) {
rule = QueryRuleEnum.LEFT_LIKE;
} else if(val.endsWith(STAR)){
rule = QueryRuleEnum.RIGHT_LIKE;
}
}
// step 4 in // step 4 in
if (rule == null && val.contains(COMMA)) { if (rule == null && val.contains(COMMA)) {
@@ -379,6 +382,20 @@ public class QueryGenerator {
return rule != null ? rule : QueryRuleEnum.EQ; return rule != null ? rule : QueryRuleEnum.EQ;
} }
@Nullable
private static QueryRuleEnum getQueryRuleEnum(String val, QueryRuleEnum rule) {
if (rule == null && val.contains(STAR)) {
if (val.startsWith(STAR) && val.endsWith(STAR)) {
rule = QueryRuleEnum.LIKE;
} else if (val.startsWith(STAR)) {
rule = QueryRuleEnum.LEFT_LIKE;
} else if(val.endsWith(STAR)){
rule = QueryRuleEnum.RIGHT_LIKE;
}
}
return rule;
}
/** /**
* 替换掉关键字字符 * 替换掉关键字字符
* *
@@ -864,7 +881,25 @@ public class QueryGenerator {
return "'"+str.substring(0,str.length()-1)+"%'"; return "'"+str.substring(0,str.length()-1)+"%'";
} }
}else { }else {
if(str.indexOf("%")>=0) { return getReturn(str);
}
}
@NotNull
private static String getReturn(String str) {
if(str.contains("%")) {
return getSubReturn(str);
}else {
if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())){
return "N'%"+str+"%'";
}else{
return "'%"+str+"%'";
}
}
}
@NotNull
private static String getSubReturn(String str) {
if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())){ if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())){
if(str.startsWith("'") && str.endsWith("'")){ if(str.startsWith("'") && str.endsWith("'")){
return "N"+str; return "N"+str;
@@ -878,14 +913,6 @@ public class QueryGenerator {
return "'"+str+"'"; return "'"+str+"'";
} }
} }
}else {
if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())){
return "N'%"+str+"%'";
}else{
return "'%"+str+"%'";
}
}
}
} }
/** /**
@@ -900,13 +927,7 @@ public class QueryGenerator {
Map<String,SysPermissionDataRuleModel> ruleMap = getRuleMap(); Map<String,SysPermissionDataRuleModel> ruleMap = getRuleMap();
PropertyDescriptor[] origDescriptors = PropertyUtils.getPropertyDescriptors(clazz); PropertyDescriptor[] origDescriptors = PropertyUtils.getPropertyDescriptors(clazz);
String sqlAnd = " and "; String sqlAnd = " and ";
for (Map.Entry<String,SysPermissionDataRuleModel> entry : ruleMap.entrySet()) { appendStr(sb, ruleMap, sqlAnd);
String c = entry.getKey();
SysPermissionDataRuleModel sysPermissionDataRuleModel = entry.getValue();
if(oConvertUtils.isNotEmpty(c) && c.startsWith(SQL_RULES_COLUMN)){
sb.append(sqlAnd).append(getSqlRuleValue(sysPermissionDataRuleModel.getRuleValue()));
}
}
String name; String name;
String column; String column;
for (int i = 0; i < origDescriptors.length; i++) { for (int i = 0; i < origDescriptors.length; i++) {
@@ -937,6 +958,16 @@ public class QueryGenerator {
return sb.toString(); return sb.toString();
} }
private static void appendStr(StringBuilder sb, Map<String, SysPermissionDataRuleModel> ruleMap, String sqlAnd) {
for (Map.Entry<String,SysPermissionDataRuleModel> entry : ruleMap.entrySet()) {
String c = entry.getKey();
SysPermissionDataRuleModel sysPermissionDataRuleModel = entry.getValue();
if(oConvertUtils.isNotEmpty(c) && c.startsWith(SQL_RULES_COLUMN)){
sb.append(sqlAnd).append(getSqlRuleValue(sysPermissionDataRuleModel.getRuleValue()));
}
}
}
/** /**
* 根据权限相关配置 组装mp需要的权限 * 根据权限相关配置 组装mp需要的权限
* @param queryWrapper * @param queryWrapper