diff --git a/backend/src/main/java/io/dataease/provider/query/ck/CKQueryProvider.java b/backend/src/main/java/io/dataease/provider/query/ck/CKQueryProvider.java index 9b73bd8fef..138a9feb8d 100644 --- a/backend/src/main/java/io/dataease/provider/query/ck/CKQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/query/ck/CKQueryProvider.java @@ -770,79 +770,88 @@ public class CKQueryProvider extends QueryProvider { for (ChartFieldCustomFilterDTO request : requestList) { List list = new ArrayList<>(); DatasetTableField field = request.getField(); - List filter = request.getFilter(); - for (ChartCustomFilterItemDTO filterItemDTO : filter) { - if (ObjectUtils.isEmpty(field)) { - continue; + + if (ObjectUtils.isEmpty(field)) { + continue; + } + String whereName = ""; + String originName; + if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 2) { + // 解析origin name中有关联的字段生成sql表达式 + originName = calcFieldRegex(field.getOriginName(), tableObj); + } else if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 1) { + originName = String.format(CKConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); + } else { + originName = String.format(CKConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); + } + if (field.getDeType() == DeTypeConstants.DE_TIME) { + if (field.getDeExtractType() == DeTypeConstants.DE_STRING || field.getDeExtractType() == 5) { + whereName = String.format(CKConstants.toDateTime, originName); } - String value = filterItemDTO.getValue(); - String whereName = ""; - String whereTerm = transMysqlFilterTerm(filterItemDTO.getTerm()); - String whereValue = ""; - String originName; - if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 2) { - // 解析origin name中有关联的字段生成sql表达式 - originName = calcFieldRegex(field.getOriginName(), tableObj); - } else if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 1) { - originName = String.format(CKConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); - } else { - originName = String.format(CKConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); + if (field.getDeExtractType() == DeTypeConstants.DE_INT || field.getDeExtractType() == DeTypeConstants.DE_FLOAT || field.getDeExtractType() == 4) { + String cast = String.format(CKConstants.toFloat64, originName); + whereName = String.format(CKConstants.toDateTime, cast); } - if (field.getDeType() == DeTypeConstants.DE_TIME) { - if (field.getDeExtractType() == DeTypeConstants.DE_STRING || field.getDeExtractType() == 5) { - whereName = String.format(CKConstants.toDateTime, originName); - } - if (field.getDeExtractType() == DeTypeConstants.DE_INT || field.getDeExtractType() == DeTypeConstants.DE_FLOAT || field.getDeExtractType() == 4) { - String cast = String.format(CKConstants.toFloat64, originName); - whereName = String.format(CKConstants.toDateTime, cast); - } - if (field.getDeExtractType() == 1) { - whereName = originName; - } - } else { + if (field.getDeExtractType() == 1) { whereName = originName; } - if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "null")) { - whereValue = ""; - } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_null")) { - whereValue = ""; - } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "empty")) { - whereValue = "''"; - } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_empty")) { - whereValue = "''"; - } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "in")) { - whereValue = "('" + StringUtils.join(value, "','") + "')"; - } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "like")) { - whereValue = "'%" + value + "%'"; - } else { - if (field.getDeType() == DeTypeConstants.DE_TIME) { - whereValue = String.format(CKConstants.toDateTime, "'" + value + "'"); + } else { + whereName = originName; + } + + if (StringUtils.equalsIgnoreCase(request.getFilterType(), "enum")) { + if (CollectionUtils.isNotEmpty(request.getEnumCheckField())) { + res.add("(" + whereName + " IN ('" + String.join("','", request.getEnumCheckField()) + "'))"); + } + } else { + List filter = request.getFilter(); + for (ChartCustomFilterItemDTO filterItemDTO : filter) { + String value = filterItemDTO.getValue(); + String whereTerm = transMysqlFilterTerm(filterItemDTO.getTerm()); + String whereValue = ""; + + if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "null")) { + whereValue = ""; + } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_null")) { + whereValue = ""; + } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "empty")) { + whereValue = "''"; + } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_empty")) { + whereValue = "''"; + } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "in")) { + whereValue = "('" + StringUtils.join(value, "','") + "')"; + } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "like")) { + whereValue = "'%" + value + "%'"; } else { - whereValue = String.format(CKConstants.WHERE_VALUE_VALUE, value); + if (field.getDeType() == DeTypeConstants.DE_TIME) { + whereValue = String.format(CKConstants.toDateTime, "'" + value + "'"); + } else { + whereValue = String.format(CKConstants.WHERE_VALUE_VALUE, value); + } + } + if (field.getDeType() == DeTypeConstants.DE_TIME && StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "null")) { + list.add(SQLObj.builder() + .whereField(whereName) + .whereTermAndValue("is null") + .build()); + } else if (field.getDeType() == DeTypeConstants.DE_TIME && StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_null")) { + list.add(SQLObj.builder() + .whereField(whereName) + .whereTermAndValue("is not null") + .build()); + } else { + list.add(SQLObj.builder() + .whereField(whereName) + .whereTermAndValue(whereTerm + whereValue) + .build()); } } - if (field.getDeType() == DeTypeConstants.DE_TIME && StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "null")) { - list.add(SQLObj.builder() - .whereField(whereName) - .whereTermAndValue("is null") - .build()); - } else if (field.getDeType() == DeTypeConstants.DE_TIME && StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_null")) { - list.add(SQLObj.builder() - .whereField(whereName) - .whereTermAndValue("is not null") - .build()); - } else { - list.add(SQLObj.builder() - .whereField(whereName) - .whereTermAndValue(whereTerm + whereValue) - .build()); + List strList = new ArrayList<>(); + list.forEach(ele -> strList.add(ele.getWhereField() + " " + ele.getWhereTermAndValue())); + if (CollectionUtils.isNotEmpty(list)) { + res.add("(" + String.join(" " + getLogic(request.getLogic()) + " ", strList) + ")"); } } - List strList = new ArrayList<>(); - list.forEach(ele -> strList.add(ele.getWhereField() + " " + ele.getWhereTermAndValue())); - if (CollectionUtils.isNotEmpty(list)) { - res.add("(" + String.join(" " + getLogic(request.getLogic()) + " ", strList) + ")"); - } } return CollectionUtils.isNotEmpty(res) ? "(" + String.join(" AND ", res) + ")" : null; } diff --git a/backend/src/main/java/io/dataease/provider/query/db2/Db2QueryProvider.java b/backend/src/main/java/io/dataease/provider/query/db2/Db2QueryProvider.java index eeaefb2ef2..7e2528444b 100644 --- a/backend/src/main/java/io/dataease/provider/query/db2/Db2QueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/query/db2/Db2QueryProvider.java @@ -737,68 +737,77 @@ public class Db2QueryProvider extends QueryProvider { for (ChartFieldCustomFilterDTO request : requestList) { List list = new ArrayList<>(); DatasetTableField field = request.getField(); - List filter = request.getFilter(); - for (ChartCustomFilterItemDTO filterItemDTO : filter) { - if (ObjectUtils.isEmpty(field)) { - continue; + + if (ObjectUtils.isEmpty(field)) { + continue; + } + String whereName = ""; + String originName; + if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 2) { + // 解析origin name中有关联的字段生成sql表达式 + originName = calcFieldRegex(field.getOriginName(), tableObj); + } else if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 1) { + originName = String.format(Db2Constants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); + } else { + originName = String.format(Db2Constants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); + } + if (field.getDeType() == DeTypeConstants.DE_TIME) { + if (field.getDeExtractType() == DeTypeConstants.DE_STRING || field.getDeExtractType() == 5) { + originName = String.format(Db2Constants.STR_TO_DATE, originName); + whereName = String.format(Db2Constants.DATE_FORMAT, originName, Db2Constants.DEFAULT_DATE_FORMAT); } - String value = filterItemDTO.getValue(); - String whereName = ""; - String whereTerm = transMysqlFilterTerm(filterItemDTO.getTerm()); - String whereValue = ""; - String originName; - if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 2) { - // 解析origin name中有关联的字段生成sql表达式 - originName = calcFieldRegex(field.getOriginName(), tableObj); - } else if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 1) { - originName = String.format(Db2Constants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); - } else { - originName = String.format(Db2Constants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); + if (field.getDeExtractType() == DeTypeConstants.DE_INT || field.getDeExtractType() == DeTypeConstants.DE_FLOAT) { + String cast = String.format(Db2Constants.CAST, originName, Db2Constants.DEFAULT_INT_FORMAT); + whereName = String.format(Db2Constants.FROM_UNIXTIME, cast, Db2Constants.DEFAULT_DATE_FORMAT); } - if (field.getDeType() == DeTypeConstants.DE_TIME) { - if (field.getDeExtractType() == DeTypeConstants.DE_STRING || field.getDeExtractType() == 5) { - originName = String.format(Db2Constants.STR_TO_DATE, originName); - whereName = String.format(Db2Constants.DATE_FORMAT, originName, Db2Constants.DEFAULT_DATE_FORMAT); - } - if (field.getDeExtractType() == DeTypeConstants.DE_INT || field.getDeExtractType() == DeTypeConstants.DE_FLOAT) { - String cast = String.format(Db2Constants.CAST, originName, Db2Constants.DEFAULT_INT_FORMAT); - whereName = String.format(Db2Constants.FROM_UNIXTIME, cast, Db2Constants.DEFAULT_DATE_FORMAT); - } - if (field.getDeExtractType() == DeTypeConstants.DE_TIME) { - whereName = originName; - } - } else { + if (field.getDeExtractType() == DeTypeConstants.DE_TIME) { whereName = originName; } - if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "null")) { - whereValue = ""; - } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_null")) { - whereValue = ""; - } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "empty")) { - whereValue = "''"; - } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_empty")) { - whereValue = "''"; - } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "in")) { - whereValue = "('" + StringUtils.join(value, "','") + "')"; - } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "like")) { - whereValue = "'%" + value + "%'"; - } else { - if (field.getDeType().equals(DeTypeConstants.DE_TIME)) { - whereValue = String.format(Db2Constants.DATE_FORMAT, "'" + value + "'", Db2Constants.DEFAULT_DATE_FORMAT); - } else { - whereValue = String.format(Db2Constants.WHERE_VALUE_VALUE, value); - } - } - list.add(SQLObj.builder() - .whereField(whereName) - .whereTermAndValue(whereTerm + whereValue) - .build()); + } else { + whereName = originName; } - List strList = new ArrayList<>(); - list.forEach(ele -> strList.add(ele.getWhereField() + " " + ele.getWhereTermAndValue())); - if (CollectionUtils.isNotEmpty(list)) { - res.add("(" + String.join(" " + getLogic(request.getLogic()) + " ", strList) + ")"); + if (StringUtils.equalsIgnoreCase(request.getFilterType(), "enum")) { + if (CollectionUtils.isNotEmpty(request.getEnumCheckField())) { + res.add("(" + whereName + " IN ('" + String.join("','", request.getEnumCheckField()) + "'))"); + } + } else { + List filter = request.getFilter(); + for (ChartCustomFilterItemDTO filterItemDTO : filter) { + String value = filterItemDTO.getValue(); + String whereTerm = transMysqlFilterTerm(filterItemDTO.getTerm()); + String whereValue = ""; + + if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "null")) { + whereValue = ""; + } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_null")) { + whereValue = ""; + } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "empty")) { + whereValue = "''"; + } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_empty")) { + whereValue = "''"; + } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "in")) { + whereValue = "('" + StringUtils.join(value, "','") + "')"; + } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "like")) { + whereValue = "'%" + value + "%'"; + } else { + if (field.getDeType().equals(DeTypeConstants.DE_TIME)) { + whereValue = String.format(Db2Constants.DATE_FORMAT, "'" + value + "'", Db2Constants.DEFAULT_DATE_FORMAT); + } else { + whereValue = String.format(Db2Constants.WHERE_VALUE_VALUE, value); + } + } + list.add(SQLObj.builder() + .whereField(whereName) + .whereTermAndValue(whereTerm + whereValue) + .build()); + } + + List strList = new ArrayList<>(); + list.forEach(ele -> strList.add(ele.getWhereField() + " " + ele.getWhereTermAndValue())); + if (CollectionUtils.isNotEmpty(list)) { + res.add("(" + String.join(" " + getLogic(request.getLogic()) + " ", strList) + ")"); + } } } return CollectionUtils.isNotEmpty(res) ? "(" + String.join(" AND ", res) + ")" : null; diff --git a/backend/src/main/java/io/dataease/provider/query/doris/DorisQueryProvider.java b/backend/src/main/java/io/dataease/provider/query/doris/DorisQueryProvider.java index 5485ff430b..4c25c8868b 100644 --- a/backend/src/main/java/io/dataease/provider/query/doris/DorisQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/query/doris/DorisQueryProvider.java @@ -752,68 +752,76 @@ public class DorisQueryProvider extends QueryProvider { for (ChartFieldCustomFilterDTO request : requestList) { List list = new ArrayList<>(); DatasetTableField field = request.getField(); - List filter = request.getFilter(); - for (ChartCustomFilterItemDTO filterItemDTO : filter) { - if (ObjectUtils.isEmpty(field)) { - continue; - } - String value = filterItemDTO.getValue(); - String whereName = ""; - String whereTerm = transMysqlFilterTerm(filterItemDTO.getTerm()); - String whereValue = ""; - String originName; - if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 2) { - // 解析origin name中有关联的字段生成sql表达式 - originName = calcFieldRegex(field.getOriginName(), tableObj); - } else if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 1) { - originName = String.format(DorisConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getDataeaseName()); - } else { - originName = String.format(DorisConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getDataeaseName()); - } - - if (field.getDeType() == 1) { - if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5 || field.getDeExtractType() == 1) { - whereName = String.format(DorisConstants.STR_TO_DATE, originName, DorisConstants.DEFAULT_DATE_FORMAT); - } - if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { - String cast = String.format(DorisConstants.CAST, originName, DorisConstants.DEFAULT_INT_FORMAT) + "/1000"; - whereName = String.format(DorisConstants.FROM_UNIXTIME, cast, DorisConstants.DEFAULT_DATE_FORMAT); - } - } else if (field.getDeType() == 0) { - whereName = String.format(DorisConstants.CAST, originName, DorisConstants.VARCHAR); - } else { - whereName = originName; - } - if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "null")) { - whereValue = ""; - } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_null")) { - whereValue = ""; - } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "empty")) { - whereValue = "''"; - } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_empty")) { - whereValue = "''"; - } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "in")) { - whereValue = "('" + StringUtils.join(value, "','") + "')"; - } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "like")) { - whereValue = "'%" + value + "%'"; - } else { - if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { - whereValue = String.format(DorisConstants.WHERE_NUMBER_VALUE, value); - } else { - whereValue = String.format(DorisConstants.WHERE_VALUE_VALUE, value); - } - } - list.add(SQLObj.builder() - .whereField(whereName) - .whereTermAndValue(whereTerm + whereValue) - .build()); + if (ObjectUtils.isEmpty(field)) { + continue; + } + String whereName = ""; + String originName; + if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 2) { + // 解析origin name中有关联的字段生成sql表达式 + originName = calcFieldRegex(field.getOriginName(), tableObj); + } else if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 1) { + originName = String.format(DorisConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getDataeaseName()); + } else { + originName = String.format(DorisConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getDataeaseName()); } - List strList = new ArrayList<>(); - list.forEach(ele -> strList.add(ele.getWhereField() + " " + ele.getWhereTermAndValue())); - if (CollectionUtils.isNotEmpty(list)) { - res.add("(" + String.join(" " + getLogic(request.getLogic()) + " ", strList) + ")"); + if (field.getDeType() == 1) { + if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5 || field.getDeExtractType() == 1) { + whereName = String.format(DorisConstants.STR_TO_DATE, originName, DorisConstants.DEFAULT_DATE_FORMAT); + } + if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { + String cast = String.format(DorisConstants.CAST, originName, DorisConstants.DEFAULT_INT_FORMAT) + "/1000"; + whereName = String.format(DorisConstants.FROM_UNIXTIME, cast, DorisConstants.DEFAULT_DATE_FORMAT); + } + } else if (field.getDeType() == 0) { + whereName = String.format(DorisConstants.CAST, originName, DorisConstants.VARCHAR); + } else { + whereName = originName; + } + + if (StringUtils.equalsIgnoreCase(request.getFilterType(), "enum")) { + if (CollectionUtils.isNotEmpty(request.getEnumCheckField())) { + res.add("(" + whereName + " IN ('" + String.join("','", request.getEnumCheckField()) + "'))"); + } + } else { + List filter = request.getFilter(); + for (ChartCustomFilterItemDTO filterItemDTO : filter) { + String value = filterItemDTO.getValue(); + String whereTerm = transMysqlFilterTerm(filterItemDTO.getTerm()); + String whereValue = ""; + + if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "null")) { + whereValue = ""; + } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_null")) { + whereValue = ""; + } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "empty")) { + whereValue = "''"; + } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_empty")) { + whereValue = "''"; + } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "in")) { + whereValue = "('" + StringUtils.join(value, "','") + "')"; + } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "like")) { + whereValue = "'%" + value + "%'"; + } else { + if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { + whereValue = String.format(DorisConstants.WHERE_NUMBER_VALUE, value); + } else { + whereValue = String.format(DorisConstants.WHERE_VALUE_VALUE, value); + } + } + list.add(SQLObj.builder() + .whereField(whereName) + .whereTermAndValue(whereTerm + whereValue) + .build()); + } + + List strList = new ArrayList<>(); + list.forEach(ele -> strList.add(ele.getWhereField() + " " + ele.getWhereTermAndValue())); + if (CollectionUtils.isNotEmpty(list)) { + res.add("(" + String.join(" " + getLogic(request.getLogic()) + " ", strList) + ")"); + } } } return CollectionUtils.isNotEmpty(res) ? "(" + String.join(" AND ", res) + ")" : null; diff --git a/backend/src/main/java/io/dataease/provider/query/es/EsQueryProvider.java b/backend/src/main/java/io/dataease/provider/query/es/EsQueryProvider.java index a8e42128de..b1d131ad0b 100644 --- a/backend/src/main/java/io/dataease/provider/query/es/EsQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/query/es/EsQueryProvider.java @@ -704,63 +704,71 @@ public class EsQueryProvider extends QueryProvider { for (ChartFieldCustomFilterDTO request : requestList) { List list = new ArrayList<>(); DatasetTableField field = request.getField(); - List filter = request.getFilter(); - for (ChartCustomFilterItemDTO filterItemDTO : filter) { - if (ObjectUtils.isEmpty(field)) { - continue; + + if (ObjectUtils.isEmpty(field)) { + continue; + } + String whereName = ""; + String originName; + if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 2) { + // 解析origin name中有关联的字段生成sql表达式 + originName = calcFieldRegex(field.getOriginName(), tableObj); + } else if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 1) { + originName = String.format(EsSqlLConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); + } else { + originName = String.format(EsSqlLConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); + } + if (field.getDeType() == DeTypeConstants.DE_TIME) { + if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { + whereName = String.format(EsSqlLConstants.CAST, originName, "timestamp"); } - String value = filterItemDTO.getValue(); - String whereName = ""; - String whereTerm = transMysqlFilterTerm(filterItemDTO.getTerm()); - String whereValue = ""; - String originName; - if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 2) { - // 解析origin name中有关联的字段生成sql表达式 - originName = calcFieldRegex(field.getOriginName(), tableObj); - } else if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 1) { - originName = String.format(EsSqlLConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); - } else { - originName = String.format(EsSqlLConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); + if (field.getDeExtractType() == DeTypeConstants.DE_INT || field.getDeExtractType() == DeTypeConstants.DE_FLOAT || field.getDeExtractType() == DeTypeConstants.DE_BOOL) { + String cast = String.format(EsSqlLConstants.CAST, originName, "timestamp"); + whereName = String.format(EsSqlLConstants.DATETIME_FORMAT, cast, EsSqlLConstants.DEFAULT_DATE_FORMAT); } - if (field.getDeType() == DeTypeConstants.DE_TIME) { - if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { - whereName = String.format(EsSqlLConstants.CAST, originName, "timestamp"); - } - if (field.getDeExtractType() == DeTypeConstants.DE_INT || field.getDeExtractType() == DeTypeConstants.DE_FLOAT || field.getDeExtractType() == DeTypeConstants.DE_BOOL) { - String cast = String.format(EsSqlLConstants.CAST, originName, "timestamp"); - whereName = String.format(EsSqlLConstants.DATETIME_FORMAT, cast, EsSqlLConstants.DEFAULT_DATE_FORMAT); - } - if (field.getDeExtractType() == 1) { - whereName = originName; - } - } else { + if (field.getDeExtractType() == 1) { whereName = originName; } - if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "null")) { - whereValue = ""; - } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_null")) { - whereValue = ""; - } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "empty")) { - whereValue = "''"; - } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_empty")) { - whereValue = "''"; - } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "in")) { - whereValue = "('" + StringUtils.join(value, "','") + "')"; - } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "like")) { - whereValue = "'%" + value + "%'"; - } else { - whereValue = String.format(EsSqlLConstants.WHERE_VALUE_VALUE, value); - } - list.add(SQLObj.builder() - .whereField(whereName) - .whereTermAndValue(whereTerm + whereValue) - .build()); + } else { + whereName = originName; } - List strList = new ArrayList<>(); - list.forEach(ele -> strList.add(ele.getWhereField() + " " + ele.getWhereTermAndValue())); - if (CollectionUtils.isNotEmpty(list)) { - res.add("(" + String.join(" " + getLogic(request.getLogic()) + " ", strList) + ")"); + if (StringUtils.equalsIgnoreCase(request.getFilterType(), "enum")) { + if (CollectionUtils.isNotEmpty(request.getEnumCheckField())) { + res.add("(" + whereName + " IN ('" + String.join("','", request.getEnumCheckField()) + "'))"); + } + } else { + List filter = request.getFilter(); + for (ChartCustomFilterItemDTO filterItemDTO : filter) { + String value = filterItemDTO.getValue(); + String whereTerm = transMysqlFilterTerm(filterItemDTO.getTerm()); + String whereValue = ""; + + if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "null")) { + whereValue = ""; + } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_null")) { + whereValue = ""; + } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "empty")) { + whereValue = "''"; + } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_empty")) { + whereValue = "''"; + } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "in")) { + whereValue = "('" + StringUtils.join(value, "','") + "')"; + } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "like")) { + whereValue = "'%" + value + "%'"; + } else { + whereValue = String.format(EsSqlLConstants.WHERE_VALUE_VALUE, value); + } + list.add(SQLObj.builder() + .whereField(whereName) + .whereTermAndValue(whereTerm + whereValue) + .build()); + } + List strList = new ArrayList<>(); + list.forEach(ele -> strList.add(ele.getWhereField() + " " + ele.getWhereTermAndValue())); + if (CollectionUtils.isNotEmpty(list)) { + res.add("(" + String.join(" " + getLogic(request.getLogic()) + " ", strList) + ")"); + } } } return CollectionUtils.isNotEmpty(res) ? "(" + String.join(" AND ", res) + ")" : null; diff --git a/backend/src/main/java/io/dataease/provider/query/hive/HiveQueryProvider.java b/backend/src/main/java/io/dataease/provider/query/hive/HiveQueryProvider.java index 8a8293e6a0..25f4b095a9 100644 --- a/backend/src/main/java/io/dataease/provider/query/hive/HiveQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/query/hive/HiveQueryProvider.java @@ -731,63 +731,72 @@ public class HiveQueryProvider extends QueryProvider { for (ChartFieldCustomFilterDTO request : requestList) { List list = new ArrayList<>(); DatasetTableField field = request.getField(); - List filter = request.getFilter(); - for (ChartCustomFilterItemDTO filterItemDTO : filter) { - if (ObjectUtils.isEmpty(field)) { - continue; + + if (ObjectUtils.isEmpty(field)) { + continue; + } + String whereName = ""; + String originName; + if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 2) { + // 解析origin name中有关联的字段生成sql表达式 + originName = calcFieldRegex(field.getOriginName(), tableObj); + } else if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 1) { + originName = String.format(HiveConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); + } else { + originName = String.format(HiveConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); + } + if (field.getDeType() == DeTypeConstants.DE_TIME) { + if (field.getDeExtractType() == DeTypeConstants.DE_STRING || field.getDeExtractType() == 5) { + whereName = String.format(HiveConstants.STR_TO_DATE, originName, HiveConstants.DEFAULT_DATE_FORMAT); } - String value = filterItemDTO.getValue(); - String whereName = ""; - String whereTerm = transMysqlFilterTerm(filterItemDTO.getTerm()); - String whereValue = ""; - String originName; - if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 2) { - // 解析origin name中有关联的字段生成sql表达式 - originName = calcFieldRegex(field.getOriginName(), tableObj); - } else if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 1) { - originName = String.format(HiveConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); - } else { - originName = String.format(HiveConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); + if (field.getDeExtractType() == DeTypeConstants.DE_INT || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { + String cast = String.format(HiveConstants.CAST, originName, HiveConstants.DEFAULT_INT_FORMAT) + "/1000"; + whereName = String.format(HiveConstants.FROM_UNIXTIME, cast, HiveConstants.DEFAULT_DATE_FORMAT); } - if (field.getDeType() == DeTypeConstants.DE_TIME) { - if (field.getDeExtractType() == DeTypeConstants.DE_STRING || field.getDeExtractType() == 5) { - whereName = String.format(HiveConstants.STR_TO_DATE, originName, HiveConstants.DEFAULT_DATE_FORMAT); - } - if (field.getDeExtractType() == DeTypeConstants.DE_INT || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { - String cast = String.format(HiveConstants.CAST, originName, HiveConstants.DEFAULT_INT_FORMAT) + "/1000"; - whereName = String.format(HiveConstants.FROM_UNIXTIME, cast, HiveConstants.DEFAULT_DATE_FORMAT); - } - if (field.getDeExtractType() == DeTypeConstants.DE_TIME) { - whereName = originName; - } - } else { + if (field.getDeExtractType() == DeTypeConstants.DE_TIME) { whereName = originName; } - if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "null")) { - whereValue = ""; - } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_null")) { - whereValue = ""; - } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "empty")) { - whereValue = "''"; - } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_empty")) { - whereValue = "''"; - } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "in")) { - whereValue = "('" + StringUtils.join(value, "','") + "')"; - } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "like")) { - whereValue = "'%" + value + "%'"; - } else { - whereValue = String.format(HiveConstants.WHERE_VALUE_VALUE, value); - } - list.add(SQLObj.builder() - .whereField(whereName) - .whereTermAndValue(whereTerm + whereValue) - .build()); + } else { + whereName = originName; } - List strList = new ArrayList<>(); - list.forEach(ele -> strList.add(ele.getWhereField() + " " + ele.getWhereTermAndValue())); - if (CollectionUtils.isNotEmpty(list)) { - res.add("(" + String.join(" " + getLogic(request.getLogic()) + " ", strList) + ")"); + if (StringUtils.equalsIgnoreCase(request.getFilterType(), "enum")) { + if (CollectionUtils.isNotEmpty(request.getEnumCheckField())) { + res.add("(" + whereName + " IN ('" + String.join("','", request.getEnumCheckField()) + "'))"); + } + } else { + List filter = request.getFilter(); + for (ChartCustomFilterItemDTO filterItemDTO : filter) { + String value = filterItemDTO.getValue(); + String whereTerm = transMysqlFilterTerm(filterItemDTO.getTerm()); + String whereValue = ""; + + if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "null")) { + whereValue = ""; + } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_null")) { + whereValue = ""; + } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "empty")) { + whereValue = "''"; + } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_empty")) { + whereValue = "''"; + } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "in")) { + whereValue = "('" + StringUtils.join(value, "','") + "')"; + } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "like")) { + whereValue = "'%" + value + "%'"; + } else { + whereValue = String.format(HiveConstants.WHERE_VALUE_VALUE, value); + } + list.add(SQLObj.builder() + .whereField(whereName) + .whereTermAndValue(whereTerm + whereValue) + .build()); + } + + List strList = new ArrayList<>(); + list.forEach(ele -> strList.add(ele.getWhereField() + " " + ele.getWhereTermAndValue())); + if (CollectionUtils.isNotEmpty(list)) { + res.add("(" + String.join(" " + getLogic(request.getLogic()) + " ", strList) + ")"); + } } } return CollectionUtils.isNotEmpty(res) ? "(" + String.join(" AND ", res) + ")" : null; diff --git a/backend/src/main/java/io/dataease/provider/query/mongodb/MongoQueryProvider.java b/backend/src/main/java/io/dataease/provider/query/mongodb/MongoQueryProvider.java index ae50621c29..c1b600f8eb 100644 --- a/backend/src/main/java/io/dataease/provider/query/mongodb/MongoQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/query/mongodb/MongoQueryProvider.java @@ -710,50 +710,59 @@ public class MongoQueryProvider extends QueryProvider { for (ChartFieldCustomFilterDTO request : requestList) { List list = new ArrayList<>(); DatasetTableField field = request.getField(); - List filter = request.getFilter(); - for (ChartCustomFilterItemDTO filterItemDTO : filter) { - if (ObjectUtils.isEmpty(field)) { - continue; - } - String value = filterItemDTO.getValue(); - String whereName = ""; - String whereTerm = transMysqlFilterTerm(filterItemDTO.getTerm()); - String whereValue = ""; - String originName; - if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == DeTypeConstants.DE_INT) { - // 解析origin name中有关联的字段生成sql表达式 - originName = calcFieldRegex(field.getOriginName(), tableObj); - } else if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == DeTypeConstants.DE_TIME) { - originName = String.format(MongoConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); - } else { - originName = String.format(MongoConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); - } - whereName = originName; - if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "null")) { - whereValue = ""; - } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_null")) { - whereValue = ""; - } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "empty")) { - whereValue = "''"; - } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_empty")) { - whereValue = "''"; - } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "in")) { - whereValue = "('" + StringUtils.join(value, "','") + "')"; - } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "like")) { - whereValue = "'%" + value + "%'"; - } else { - whereValue = String.format(MongoConstants.WHERE_VALUE_VALUE, value); - } - list.add(SQLObj.builder() - .whereField(whereName) - .whereTermAndValue(whereTerm + whereValue) - .build()); - } - List strList = new ArrayList<>(); - list.forEach(ele -> strList.add(ele.getWhereField() + " " + ele.getWhereTermAndValue())); - if (CollectionUtils.isNotEmpty(list)) { - res.add("(" + String.join(" " + getLogic(request.getLogic()) + " ", strList) + ")"); + if (ObjectUtils.isEmpty(field)) { + continue; + } + String whereName = ""; + String originName; + if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == DeTypeConstants.DE_INT) { + // 解析origin name中有关联的字段生成sql表达式 + originName = calcFieldRegex(field.getOriginName(), tableObj); + } else if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == DeTypeConstants.DE_TIME) { + originName = String.format(MongoConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); + } else { + originName = String.format(MongoConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); + } + whereName = originName; + + if (StringUtils.equalsIgnoreCase(request.getFilterType(), "enum")) { + if (CollectionUtils.isNotEmpty(request.getEnumCheckField())) { + res.add("(" + whereName + " IN ('" + String.join("','", request.getEnumCheckField()) + "'))"); + } + } else { + List filter = request.getFilter(); + for (ChartCustomFilterItemDTO filterItemDTO : filter) { + String value = filterItemDTO.getValue(); + String whereTerm = transMysqlFilterTerm(filterItemDTO.getTerm()); + String whereValue = ""; + + if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "null")) { + whereValue = ""; + } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_null")) { + whereValue = ""; + } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "empty")) { + whereValue = "''"; + } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_empty")) { + whereValue = "''"; + } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "in")) { + whereValue = "('" + StringUtils.join(value, "','") + "')"; + } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "like")) { + whereValue = "'%" + value + "%'"; + } else { + whereValue = String.format(MongoConstants.WHERE_VALUE_VALUE, value); + } + list.add(SQLObj.builder() + .whereField(whereName) + .whereTermAndValue(whereTerm + whereValue) + .build()); + } + + List strList = new ArrayList<>(); + list.forEach(ele -> strList.add(ele.getWhereField() + " " + ele.getWhereTermAndValue())); + if (CollectionUtils.isNotEmpty(list)) { + res.add("(" + String.join(" " + getLogic(request.getLogic()) + " ", strList) + ")"); + } } } return CollectionUtils.isNotEmpty(res) ? "(" + String.join(" AND ", res) + ")" : null; diff --git a/backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java b/backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java index 11f857ad71..794cb65940 100644 --- a/backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java @@ -771,9 +771,6 @@ public class MysqlQueryProvider extends QueryProvider { } else { List filter = request.getFilter(); for (ChartCustomFilterItemDTO filterItemDTO : filter) { - if (ObjectUtils.isEmpty(field)) { - continue; - } String value = filterItemDTO.getValue(); String whereTerm = transMysqlFilterTerm(filterItemDTO.getTerm()); String whereValue = ""; diff --git a/backend/src/main/java/io/dataease/provider/query/oracle/OracleQueryProvider.java b/backend/src/main/java/io/dataease/provider/query/oracle/OracleQueryProvider.java index 6df28b1841..a70f9bc33f 100644 --- a/backend/src/main/java/io/dataease/provider/query/oracle/OracleQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/query/oracle/OracleQueryProvider.java @@ -786,69 +786,77 @@ public class OracleQueryProvider extends QueryProvider { for (ChartFieldCustomFilterDTO request : requestList) { List list = new ArrayList<>(); DatasetTableField field = request.getField(); - List filter = request.getFilter(); - for (ChartCustomFilterItemDTO filterItemDTO : filter) { - if (ObjectUtils.isEmpty(field)) { - continue; - } - String value = filterItemDTO.getValue(); - String whereName = ""; - String whereTerm = transMysqlFilterTerm(filterItemDTO.getTerm()); - String whereValue = ""; - String originName; - if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 2) { - // 解析origin name中有关联的字段生成sql表达式 - originName = calcFieldRegex(field.getOriginName(), tableObj); - } else if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 1) { - originName = String.format(OracleConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); - } else { - originName = String.format(OracleConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); - } - - if (field.getDeType() == 1) { - if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { - whereName = String.format(OracleConstants.TO_DATE, originName, OracleConstants.DEFAULT_DATE_FORMAT); - } - if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { - String cast = String.format(OracleConstants.CAST, originName, OracleConstants.DEFAULT_INT_FORMAT) + "/1000"; - whereName = String.format(OracleConstants.FROM_UNIXTIME, cast, OracleConstants.DEFAULT_DATE_FORMAT); - } - if (field.getDeExtractType() == 1) { - whereName = originName; - } - } else { - whereName = originName; - } - if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "null")) { - whereValue = ""; - } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_null")) { - whereValue = ""; - } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "empty")) { - whereValue = "''"; - } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_empty")) { - whereValue = "''"; - } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "in")) { - whereValue = "('" + StringUtils.join(value, "','") + "')"; - } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "like")) { - whereValue = "'%" + value + "%'"; - } else { - if (field.getDeType() == 1) { - whereValue = String.format(OracleConstants.TO_DATE, "'" + value + "'", OracleConstants.DEFAULT_DATE_FORMAT); - } else { - whereValue = String.format(OracleConstants.WHERE_VALUE_VALUE, value); - } - } - list.add(SQLObj.builder() - .whereField(whereName) - .whereTermAndValue(whereTerm + whereValue) - .build()); + if (ObjectUtils.isEmpty(field)) { + continue; + } + String whereName = ""; + String originName; + if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 2) { + // 解析origin name中有关联的字段生成sql表达式 + originName = calcFieldRegex(field.getOriginName(), tableObj); + } else if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 1) { + originName = String.format(OracleConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); + } else { + originName = String.format(OracleConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); } - List strList = new ArrayList<>(); - list.forEach(ele -> strList.add(ele.getWhereField() + " " + ele.getWhereTermAndValue())); - if (CollectionUtils.isNotEmpty(list)) { - res.add("(" + String.join(" " + getLogic(request.getLogic()) + " ", strList) + ")"); + if (field.getDeType() == 1) { + if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { + whereName = String.format(OracleConstants.TO_DATE, originName, OracleConstants.DEFAULT_DATE_FORMAT); + } + if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { + String cast = String.format(OracleConstants.CAST, originName, OracleConstants.DEFAULT_INT_FORMAT) + "/1000"; + whereName = String.format(OracleConstants.FROM_UNIXTIME, cast, OracleConstants.DEFAULT_DATE_FORMAT); + } + if (field.getDeExtractType() == 1) { + whereName = originName; + } + } else { + whereName = originName; + } + + if (StringUtils.equalsIgnoreCase(request.getFilterType(), "enum")) { + if (CollectionUtils.isNotEmpty(request.getEnumCheckField())) { + res.add("(" + whereName + " IN ('" + String.join("','", request.getEnumCheckField()) + "'))"); + } + } else { + List filter = request.getFilter(); + for (ChartCustomFilterItemDTO filterItemDTO : filter) { + String value = filterItemDTO.getValue(); + String whereTerm = transMysqlFilterTerm(filterItemDTO.getTerm()); + String whereValue = ""; + + if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "null")) { + whereValue = ""; + } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_null")) { + whereValue = ""; + } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "empty")) { + whereValue = "''"; + } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_empty")) { + whereValue = "''"; + } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "in")) { + whereValue = "('" + StringUtils.join(value, "','") + "')"; + } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "like")) { + whereValue = "'%" + value + "%'"; + } else { + if (field.getDeType() == 1) { + whereValue = String.format(OracleConstants.TO_DATE, "'" + value + "'", OracleConstants.DEFAULT_DATE_FORMAT); + } else { + whereValue = String.format(OracleConstants.WHERE_VALUE_VALUE, value); + } + } + list.add(SQLObj.builder() + .whereField(whereName) + .whereTermAndValue(whereTerm + whereValue) + .build()); + } + + List strList = new ArrayList<>(); + list.forEach(ele -> strList.add(ele.getWhereField() + " " + ele.getWhereTermAndValue())); + if (CollectionUtils.isNotEmpty(list)) { + res.add("(" + String.join(" " + getLogic(request.getLogic()) + " ", strList) + ")"); + } } } return CollectionUtils.isNotEmpty(res) ? "(" + String.join(" AND ", res) + ")" : null; diff --git a/backend/src/main/java/io/dataease/provider/query/pg/PgQueryProvider.java b/backend/src/main/java/io/dataease/provider/query/pg/PgQueryProvider.java index 67d19614e0..157acc46a0 100644 --- a/backend/src/main/java/io/dataease/provider/query/pg/PgQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/query/pg/PgQueryProvider.java @@ -762,63 +762,72 @@ public class PgQueryProvider extends QueryProvider { for (ChartFieldCustomFilterDTO request : requestList) { List list = new ArrayList<>(); DatasetTableField field = request.getField(); - List filter = request.getFilter(); - for (ChartCustomFilterItemDTO filterItemDTO : filter) { - if (ObjectUtils.isEmpty(field)) { - continue; + + if (ObjectUtils.isEmpty(field)) { + continue; + } + String whereName = ""; + String originName; + if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 2) { + // 解析origin name中有关联的字段生成sql表达式 + originName = calcFieldRegex(field.getOriginName(), tableObj); + } else if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 1) { + originName = String.format(PgConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); + } else { + originName = String.format(PgConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); + } + if (field.getDeType() == 1) { + if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { + whereName = String.format(PgConstants.CAST, originName, "timestamp"); } - String value = filterItemDTO.getValue(); - String whereName = ""; - String whereTerm = transMysqlFilterTerm(filterItemDTO.getTerm()); - String whereValue = ""; - String originName; - if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 2) { - // 解析origin name中有关联的字段生成sql表达式 - originName = calcFieldRegex(field.getOriginName(), tableObj); - } else if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 1) { - originName = String.format(PgConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); - } else { - originName = String.format(PgConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); + if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { + String cast = String.format(PgConstants.CAST, originName, "bigint"); + whereName = String.format(PgConstants.FROM_UNIXTIME, cast); } - if (field.getDeType() == 1) { - if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { - whereName = String.format(PgConstants.CAST, originName, "timestamp"); - } - if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { - String cast = String.format(PgConstants.CAST, originName, "bigint"); - whereName = String.format(PgConstants.FROM_UNIXTIME, cast); - } - if (field.getDeExtractType() == 1) { - whereName = originName; - } - } else { + if (field.getDeExtractType() == 1) { whereName = originName; } - if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "null")) { - whereValue = ""; - } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_null")) { - whereValue = ""; - } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "empty")) { - whereValue = "''"; - } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_empty")) { - whereValue = "''"; - } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "in")) { - whereValue = "('" + StringUtils.join(value, "','") + "')"; - } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "like")) { - whereValue = "'%" + value + "%'"; - } else { - whereValue = String.format(PgConstants.WHERE_VALUE_VALUE, value); - } - list.add(SQLObj.builder() - .whereField(whereName) - .whereTermAndValue(whereTerm + whereValue) - .build()); + } else { + whereName = originName; } - List strList = new ArrayList<>(); - list.forEach(ele -> strList.add(ele.getWhereField() + " " + ele.getWhereTermAndValue())); - if (CollectionUtils.isNotEmpty(list)) { - res.add("(" + String.join(" " + getLogic(request.getLogic()) + " ", strList) + ")"); + if (StringUtils.equalsIgnoreCase(request.getFilterType(), "enum")) { + if (CollectionUtils.isNotEmpty(request.getEnumCheckField())) { + res.add("(" + whereName + " IN ('" + String.join("','", request.getEnumCheckField()) + "'))"); + } + } else { + List filter = request.getFilter(); + for (ChartCustomFilterItemDTO filterItemDTO : filter) { + String value = filterItemDTO.getValue(); + String whereTerm = transMysqlFilterTerm(filterItemDTO.getTerm()); + String whereValue = ""; + + if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "null")) { + whereValue = ""; + } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_null")) { + whereValue = ""; + } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "empty")) { + whereValue = "''"; + } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_empty")) { + whereValue = "''"; + } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "in")) { + whereValue = "('" + StringUtils.join(value, "','") + "')"; + } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "like")) { + whereValue = "'%" + value + "%'"; + } else { + whereValue = String.format(PgConstants.WHERE_VALUE_VALUE, value); + } + list.add(SQLObj.builder() + .whereField(whereName) + .whereTermAndValue(whereTerm + whereValue) + .build()); + } + + List strList = new ArrayList<>(); + list.forEach(ele -> strList.add(ele.getWhereField() + " " + ele.getWhereTermAndValue())); + if (CollectionUtils.isNotEmpty(list)) { + res.add("(" + String.join(" " + getLogic(request.getLogic()) + " ", strList) + ")"); + } } } return CollectionUtils.isNotEmpty(res) ? "(" + String.join(" AND ", res) + ")" : null; diff --git a/backend/src/main/java/io/dataease/provider/query/redshift/RedshiftQueryProvider.java b/backend/src/main/java/io/dataease/provider/query/redshift/RedshiftQueryProvider.java index 7fdd3af2c7..9737c22050 100644 --- a/backend/src/main/java/io/dataease/provider/query/redshift/RedshiftQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/query/redshift/RedshiftQueryProvider.java @@ -703,59 +703,68 @@ public class RedshiftQueryProvider extends QueryProvider { for (ChartFieldCustomFilterDTO request : requestList) { List list = new ArrayList<>(); DatasetTableField field = request.getField(); - List filter = request.getFilter(); - for (ChartCustomFilterItemDTO filterItemDTO : filter) { - if (ObjectUtils.isEmpty(field)) { - continue; + + if (ObjectUtils.isEmpty(field)) { + continue; + } + String whereName = ""; + String originName; + if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 2) { + // 解析origin name中有关联的字段生成sql表达式 + originName = calcFieldRegex(field.getOriginName(), tableObj); + } else if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 1) { + originName = String.format(PgConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); + } else { + originName = String.format(PgConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); + } + if (field.getDeType() == 1) { + if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { + whereName = String.format(PgConstants.CAST, originName, "timestamp"); } - String value = filterItemDTO.getValue(); - String whereName = ""; - String whereTerm = transMysqlFilterTerm(filterItemDTO.getTerm()); - String whereValue = ""; - String originName; - if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 2) { - // 解析origin name中有关联的字段生成sql表达式 - originName = calcFieldRegex(field.getOriginName(), tableObj); - } else if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 1) { - originName = String.format(PgConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); - } else { - originName = String.format(PgConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); + if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { + String cast = String.format(PgConstants.CAST, originName, "bigint"); + whereName = String.format(PgConstants.FROM_UNIXTIME, cast); } - if (field.getDeType() == 1) { - if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { - whereName = String.format(PgConstants.CAST, originName, "timestamp"); - } - if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { - String cast = String.format(PgConstants.CAST, originName, "bigint"); - whereName = String.format(PgConstants.FROM_UNIXTIME, cast); - } - if (field.getDeExtractType() == 1) { - whereName = originName; - } - } else { + if (field.getDeExtractType() == 1) { whereName = originName; } - if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "null")) { - whereValue = PgConstants.WHERE_VALUE_NULL; - } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_null")) { - whereTerm = String.format(whereTerm, originName); - } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "in")) { - whereValue = "('" + StringUtils.join(value, "','") + "')"; - } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "like")) { - whereValue = "'%" + value + "%'"; - } else { - whereValue = String.format(PgConstants.WHERE_VALUE_VALUE, value); - } - list.add(SQLObj.builder() - .whereField(whereName) - .whereTermAndValue(whereTerm + whereValue) - .build()); + } else { + whereName = originName; } - List strList = new ArrayList<>(); - list.forEach(ele -> strList.add(ele.getWhereField() + " " + ele.getWhereTermAndValue())); - if (CollectionUtils.isNotEmpty(list)) { - res.add("(" + String.join(" " + getLogic(request.getLogic()) + " ", strList) + ")"); + if (StringUtils.equalsIgnoreCase(request.getFilterType(), "enum")) { + if (CollectionUtils.isNotEmpty(request.getEnumCheckField())) { + res.add("(" + whereName + " IN ('" + String.join("','", request.getEnumCheckField()) + "'))"); + } + } else { + List filter = request.getFilter(); + for (ChartCustomFilterItemDTO filterItemDTO : filter) { + String value = filterItemDTO.getValue(); + String whereTerm = transMysqlFilterTerm(filterItemDTO.getTerm()); + String whereValue = ""; + + if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "null")) { + whereValue = PgConstants.WHERE_VALUE_NULL; + } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_null")) { + whereTerm = String.format(whereTerm, originName); + } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "in")) { + whereValue = "('" + StringUtils.join(value, "','") + "')"; + } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "like")) { + whereValue = "'%" + value + "%'"; + } else { + whereValue = String.format(PgConstants.WHERE_VALUE_VALUE, value); + } + list.add(SQLObj.builder() + .whereField(whereName) + .whereTermAndValue(whereTerm + whereValue) + .build()); + } + + List strList = new ArrayList<>(); + list.forEach(ele -> strList.add(ele.getWhereField() + " " + ele.getWhereTermAndValue())); + if (CollectionUtils.isNotEmpty(list)) { + res.add("(" + String.join(" " + getLogic(request.getLogic()) + " ", strList) + ")"); + } } } return CollectionUtils.isNotEmpty(res) ? "(" + String.join(" AND ", res) + ")" : null; diff --git a/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java b/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java index da2e5cbed6..d93f8ef27c 100644 --- a/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java @@ -796,63 +796,72 @@ public class SqlserverQueryProvider extends QueryProvider { for (ChartFieldCustomFilterDTO request : requestList) { List list = new ArrayList<>(); DatasetTableField field = request.getField(); - List filter = request.getFilter(); - for (ChartCustomFilterItemDTO filterItemDTO : filter) { - if (ObjectUtils.isEmpty(field)) { - continue; + + if (ObjectUtils.isEmpty(field)) { + continue; + } + String whereName = ""; + String originName; + if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 2) { + // 解析origin name中有关联的字段生成sql表达式 + originName = calcFieldRegex(field.getOriginName(), tableObj); + } else if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 1) { + originName = String.format(SqlServerSQLConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); + } else { + originName = String.format(SqlServerSQLConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); + } + if (field.getDeType() == 1) { + if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { + whereName = String.format(SqlServerSQLConstants.STRING_TO_DATE, originName); } - String value = filterItemDTO.getValue(); - String whereName = ""; - String whereTerm = transMysqlFilterTerm(filterItemDTO.getTerm()); - String whereValue = ""; - String originName; - if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 2) { - // 解析origin name中有关联的字段生成sql表达式 - originName = calcFieldRegex(field.getOriginName(), tableObj); - } else if (ObjectUtils.isNotEmpty(field.getExtField()) && field.getExtField() == 1) { - originName = String.format(SqlServerSQLConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); - } else { - originName = String.format(SqlServerSQLConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); + if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { + String cast = String.format(SqlServerSQLConstants.LONG_TO_DATE, originName + "/1000"); + whereName = String.format(SqlServerSQLConstants.FROM_UNIXTIME, cast); } - if (field.getDeType() == 1) { - if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { - whereName = String.format(SqlServerSQLConstants.STRING_TO_DATE, originName); - } - if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { - String cast = String.format(SqlServerSQLConstants.LONG_TO_DATE, originName + "/1000"); - whereName = String.format(SqlServerSQLConstants.FROM_UNIXTIME, cast); - } - if (field.getDeExtractType() == 1) { - whereName = originName; - } - } else { + if (field.getDeExtractType() == 1) { whereName = originName; } - if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "null")) { - whereValue = ""; - } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_null")) { - whereValue = ""; - } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "empty")) { - whereValue = "''"; - } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_empty")) { - whereValue = "''"; - } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "in")) { - whereValue = "('" + StringUtils.join(value, "','") + "')"; - } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "like")) { - whereValue = "'%" + value + "%'"; - } else { - whereValue = String.format(SqlServerSQLConstants.WHERE_VALUE_VALUE, value); - } - list.add(SQLObj.builder() - .whereField(whereName) - .whereTermAndValue(whereTerm + whereValue) - .build()); + } else { + whereName = originName; } - List strList = new ArrayList<>(); - list.forEach(ele -> strList.add(ele.getWhereField() + " " + ele.getWhereTermAndValue())); - if (CollectionUtils.isNotEmpty(list)) { - res.add("(" + String.join(" " + getLogic(request.getLogic()) + " ", strList) + ")"); + if (StringUtils.equalsIgnoreCase(request.getFilterType(), "enum")) { + if (CollectionUtils.isNotEmpty(request.getEnumCheckField())) { + res.add("(" + whereName + " IN ('" + String.join("','", request.getEnumCheckField()) + "'))"); + } + } else { + List filter = request.getFilter(); + for (ChartCustomFilterItemDTO filterItemDTO : filter) { + String value = filterItemDTO.getValue(); + String whereTerm = transMysqlFilterTerm(filterItemDTO.getTerm()); + String whereValue = ""; + + if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "null")) { + whereValue = ""; + } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_null")) { + whereValue = ""; + } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "empty")) { + whereValue = "''"; + } else if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "not_empty")) { + whereValue = "''"; + } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "in")) { + whereValue = "('" + StringUtils.join(value, "','") + "')"; + } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "like")) { + whereValue = "'%" + value + "%'"; + } else { + whereValue = String.format(SqlServerSQLConstants.WHERE_VALUE_VALUE, value); + } + list.add(SQLObj.builder() + .whereField(whereName) + .whereTermAndValue(whereTerm + whereValue) + .build()); + } + + List strList = new ArrayList<>(); + list.forEach(ele -> strList.add(ele.getWhereField() + " " + ele.getWhereTermAndValue())); + if (CollectionUtils.isNotEmpty(list)) { + res.add("(" + String.join(" " + getLogic(request.getLogic()) + " ", strList) + ")"); + } } } return CollectionUtils.isNotEmpty(res) ? "(" + String.join(" AND ", res) + ")" : null;