【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 org.apache.commons.beanutils.PropertyUtils;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.springframework.util.NumberUtils;
|
||||
|
||||
import java.beans.PropertyDescriptor;
|
||||
@@ -157,32 +159,7 @@ public class QueryGenerator {
|
||||
doIntervalQuery(queryWrapper, parameterMap, type, name, column);
|
||||
//判断单值 参数带不同标识字符串 走不同的查询
|
||||
//TODO 这种前后带逗号的支持分割后模糊查询需要否 使多选字段的查询生效
|
||||
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);
|
||||
}
|
||||
addQueryWapper(queryWrapper, column, value);
|
||||
|
||||
} catch (Exception 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());
|
||||
queryWrapper.and(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
andQueryWapper(fieldColumnMap, matchType, conditions, andWrapper);
|
||||
});
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
log.error("--高级查询参数转码失败:" + superQueryParams, e);
|
||||
} catch (Exception e) {
|
||||
@@ -315,6 +298,34 @@ public class QueryGenerator {
|
||||
// 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 !
|
||||
@@ -345,15 +356,7 @@ public class QueryGenerator {
|
||||
//update-end--Author:scott Date:20190724 for:initQueryWrapper组装sql查询条件错误 #284---------------------
|
||||
|
||||
// step 3 like
|
||||
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;
|
||||
}
|
||||
}
|
||||
rule = getQueryRuleEnum(val, rule);
|
||||
|
||||
// step 4 in
|
||||
if (rule == null && val.contains(COMMA)) {
|
||||
@@ -379,6 +382,20 @@ public class QueryGenerator {
|
||||
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)+"%'";
|
||||
}
|
||||
}else {
|
||||
if(str.indexOf("%")>=0) {
|
||||
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+"'";
|
||||
}
|
||||
}
|
||||
}else {
|
||||
if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())){
|
||||
return "N'%"+str+"%'";
|
||||
}else{
|
||||
return "'%"+str+"%'";
|
||||
}
|
||||
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(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();
|
||||
PropertyDescriptor[] origDescriptors = PropertyUtils.getPropertyDescriptors(clazz);
|
||||
String sqlAnd = " and ";
|
||||
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()));
|
||||
}
|
||||
}
|
||||
appendStr(sb, ruleMap, sqlAnd);
|
||||
String name;
|
||||
String column;
|
||||
for (int i = 0; i < origDescriptors.length; i++) {
|
||||
@@ -937,6 +958,16 @@ public class QueryGenerator {
|
||||
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需要的权限
|
||||
* @param queryWrapper
|
||||
|
||||
Reference in New Issue
Block a user