【fix sonar】QueryGenerator文件
This commit is contained in:
+118
-87
@@ -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,32 +159,7 @@ public class QueryGenerator {
|
|||||||
doIntervalQuery(queryWrapper, parameterMap, type, name, column);
|
doIntervalQuery(queryWrapper, parameterMap, type, name, column);
|
||||||
//判断单值 参数带不同标识字符串 走不同的查询
|
//判断单值 参数带不同标识字符串 走不同的查询
|
||||||
//TODO 这种前后带逗号的支持分割后模糊查询需要否 使多选字段的查询生效
|
//TODO 这种前后带逗号的支持分割后模糊查询需要否 使多选字段的查询生效
|
||||||
if (null != value && value.toString().startsWith(COMMA) && value.toString().endsWith(COMMA)) {
|
addQueryWapper(queryWrapper, column, value);
|
||||||
String multiLikeval = value.toString().replace(",,", COMMA);
|
|
||||||
String[] vals = multiLikeval.substring(1, multiLikeval.length()).split(COMMA);
|
|
||||||
final String field = oConvertUtils.camelToUnderline(column);
|
|
||||||
if(vals.length>1) {
|
|
||||||
queryWrapper.and(j -> {
|
|
||||||
j = j.like(field,vals[0]);
|
|
||||||
for (int k=1;k<vals.length;k++) {
|
|
||||||
j = j.or().like(field,vals[k]);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}else {
|
|
||||||
queryWrapper.and(j -> j.like(field,vals[0]));
|
|
||||||
}
|
|
||||||
}else {
|
|
||||||
//根据参数值带什么关键字符串判断走什么类型的查询
|
|
||||||
QueryRuleEnum rule = convert2Rule(value);
|
|
||||||
value = replaceValue(rule,value);
|
|
||||||
// add -begin 添加判断为字符串时设为全模糊查询
|
|
||||||
//if( (rule==null || QueryRuleEnum.EQ.equals(rule)) && "class java.lang.String".equals(type)) {
|
|
||||||
// 可以设置左右模糊或全模糊,因人而异
|
|
||||||
//rule = QueryRuleEnum.LIKE;
|
|
||||||
//}
|
|
||||||
// add -end 添加判断为字符串时设为全模糊查询
|
|
||||||
addEasyQuery(queryWrapper, column, rule, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error(e.getMessage(), e);
|
log.error(e.getMessage(), e);
|
||||||
@@ -197,6 +174,35 @@ public class QueryGenerator {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void addQueryWapper(QueryWrapper<?> queryWrapper, String column, Object value) {
|
||||||
|
if (null != value && value.toString().startsWith(COMMA) && value.toString().endsWith(COMMA)) {
|
||||||
|
String multiLikeval = value.toString().replace(",,", COMMA);
|
||||||
|
String[] vals = multiLikeval.substring(1, multiLikeval.length()).split(COMMA);
|
||||||
|
final String field = oConvertUtils.camelToUnderline(column);
|
||||||
|
if(vals.length>1) {
|
||||||
|
queryWrapper.and(j -> {
|
||||||
|
j = j.like(field,vals[0]);
|
||||||
|
for (int k=1;k<vals.length;k++) {
|
||||||
|
j = j.or().like(field,vals[k]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}else {
|
||||||
|
queryWrapper.and(j -> j.like(field,vals[0]));
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
//根据参数值带什么关键字符串判断走什么类型的查询
|
||||||
|
QueryRuleEnum rule = convert2Rule(value);
|
||||||
|
value = replaceValue(rule,value);
|
||||||
|
// add -begin 添加判断为字符串时设为全模糊查询
|
||||||
|
//if( (rule==null || QueryRuleEnum.EQ.equals(rule)) && "class java.lang.String".equals(type)) {
|
||||||
|
// 可以设置左右模糊或全模糊,因人而异
|
||||||
|
//rule = QueryRuleEnum.LIKE;
|
||||||
|
//}
|
||||||
|
// add -end 添加判断为字符串时设为全模糊查询
|
||||||
|
addEasyQuery(queryWrapper, column, rule, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 区间查询
|
* 区间查询
|
||||||
@@ -281,31 +287,8 @@ public class QueryGenerator {
|
|||||||
}
|
}
|
||||||
log.info("---高级查询参数-->" + conditions.toString());
|
log.info("---高级查询参数-->" + conditions.toString());
|
||||||
queryWrapper.and(andWrapper -> {
|
queryWrapper.and(andWrapper -> {
|
||||||
for (int i = 0; i < conditions.size(); i++) {
|
andQueryWapper(fieldColumnMap, matchType, conditions, andWrapper);
|
||||||
QueryCondition rule = conditions.get(i);
|
});
|
||||||
if (oConvertUtils.isNotEmpty(rule.getField())
|
|
||||||
&& oConvertUtils.isNotEmpty(rule.getRule())
|
|
||||||
&& oConvertUtils.isNotEmpty(rule.getVal())) {
|
|
||||||
|
|
||||||
log.debug("SuperQuery ==> " + rule.toString());
|
|
||||||
|
|
||||||
//update-begin-author:taoyan date:20201228 for: 【高级查询】 oracle 日期等于查询报错
|
|
||||||
Object queryValue = rule.getVal();
|
|
||||||
if("date".equals(rule.getType())){
|
|
||||||
queryValue = DateUtils.str2Date(rule.getVal(),DateUtils.date_sdf.get());
|
|
||||||
}else if("datetime".equals(rule.getType())){
|
|
||||||
queryValue = DateUtils.str2Date(rule.getVal(), DateUtils.datetimeFormat.get());
|
|
||||||
}
|
|
||||||
addEasyQuery(andWrapper, fieldColumnMap.get(rule.getField()), QueryRuleEnum.getByValue(rule.getRule()), queryValue);
|
|
||||||
//update-end-author:taoyan date:20201228 for: 【高级查询】 oracle 日期等于查询报错
|
|
||||||
|
|
||||||
// 如果拼接方式是OR,就拼接OR
|
|
||||||
if (MatchTypeEnum.OR == matchType && i < (conditions.size() - 1)) {
|
|
||||||
andWrapper.or();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} catch (UnsupportedEncodingException e) {
|
} catch (UnsupportedEncodingException e) {
|
||||||
log.error("--高级查询参数转码失败:" + superQueryParams, e);
|
log.error("--高级查询参数转码失败:" + superQueryParams, e);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@@ -315,6 +298,34 @@ public class QueryGenerator {
|
|||||||
// update-end--Author:sunjianlei Date:20200325 for:高级查询的条件要用括号括起来,防止和用户的其他条件冲突 -------
|
// 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++) {
|
||||||
|
QueryCondition rule = conditions.get(i);
|
||||||
|
if (oConvertUtils.isNotEmpty(rule.getField())
|
||||||
|
&& oConvertUtils.isNotEmpty(rule.getRule())
|
||||||
|
&& oConvertUtils.isNotEmpty(rule.getVal())) {
|
||||||
|
|
||||||
|
log.debug("SuperQuery ==> " + rule.toString());
|
||||||
|
|
||||||
|
//update-begin-author:taoyan date:20201228 for: 【高级查询】 oracle 日期等于查询报错
|
||||||
|
Object queryValue = rule.getVal();
|
||||||
|
if("date".equals(rule.getType())){
|
||||||
|
queryValue = DateUtils.str2Date(rule.getVal(),DateUtils.date_sdf.get());
|
||||||
|
}else if("datetime".equals(rule.getType())){
|
||||||
|
queryValue = DateUtils.str2Date(rule.getVal(), DateUtils.datetimeFormat.get());
|
||||||
|
}
|
||||||
|
addEasyQuery(andWrapper, fieldColumnMap.get(rule.getField()), QueryRuleEnum.getByValue(rule.getRule()), queryValue);
|
||||||
|
//update-end-author:taoyan date:20201228 for: 【高级查询】 oracle 日期等于查询报错
|
||||||
|
|
||||||
|
// 如果拼接方式是OR,就拼接OR
|
||||||
|
if (MatchTypeEnum.OR == matchType && i < (conditions.size() - 1)) {
|
||||||
|
andWrapper.or();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据所传的值 转化成对应的比较方式
|
* 根据所传的值 转化成对应的比较方式
|
||||||
* 支持><= 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,26 +881,36 @@ 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);
|
||||||
if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())){
|
}
|
||||||
if(str.startsWith("'") && str.endsWith("'")){
|
}
|
||||||
return "N"+str;
|
|
||||||
}else{
|
@NotNull
|
||||||
return "N"+"'"+str+"'";
|
private static String getReturn(String str) {
|
||||||
}
|
if(str.contains("%")) {
|
||||||
}else{
|
return getSubReturn(str);
|
||||||
if(str.startsWith("'") && str.endsWith("'")){
|
}else {
|
||||||
return str;
|
if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())){
|
||||||
}else{
|
return "N'%"+str+"%'";
|
||||||
return "'"+str+"'";
|
}else{
|
||||||
}
|
return "'%"+str+"%'";
|
||||||
}
|
}
|
||||||
}else {
|
}
|
||||||
if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())){
|
}
|
||||||
return "N'%"+str+"%'";
|
|
||||||
}else{
|
@NotNull
|
||||||
return "'%"+str+"%'";
|
private static String getSubReturn(String str) {
|
||||||
}
|
if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())){
|
||||||
|
if(str.startsWith("'") && str.endsWith("'")){
|
||||||
|
return "N"+str;
|
||||||
|
}else{
|
||||||
|
return "N"+"'"+str+"'";
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
if(str.startsWith("'") && str.endsWith("'")){
|
||||||
|
return 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