【fix sonar】QueryGenerator文件
This commit is contained in:
+77
-46
@@ -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 for:issues/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 for:issues/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 for:initQueryWrapper组装sql查询条件错误 #284---------------------
|
//update-end--Author:scott Date:20190724 for:initQueryWrapper组装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
|
||||||
|
|||||||
Reference in New Issue
Block a user