diff --git a/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlQueryProvider.java b/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlQueryProvider.java index 2b00456caf..359e5e822c 100644 --- a/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlQueryProvider.java @@ -848,48 +848,66 @@ public class MysqlQueryProvider extends QueryProvider { List list = new ArrayList<>(); for (ChartExtFilterRequest request : requestList) { List value = request.getValue(); - DatasetTableField field = request.getDatasetTableField(); - if (CollectionUtils.isEmpty(value) || ObjectUtils.isEmpty(field)) { - continue; - } - String whereName = ""; - String whereTerm = transMysqlFilterTerm(request.getOperator()); - 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(MysqlConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getDataeaseName()); + List whereNameList = new ArrayList<>(); + List fieldList = new ArrayList<>(); + if (request.getIsTree()) { + fieldList.addAll(request.getDatasetTableFieldList()); } else { - originName = String.format(MysqlConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getDataeaseName()); + fieldList.add(request.getDatasetTableField()); } - if (field.getDeType() == 1) { - if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5 || field.getDeExtractType() == 1) { - whereName = String.format(MysqlConstants.STR_TO_DATE, originName, MysqlConstants.DEFAULT_DATE_FORMAT); + for (DatasetTableField field : fieldList) { + if (CollectionUtils.isEmpty(value) || ObjectUtils.isEmpty(field)) { + continue; } - if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { - String cast = String.format(MysqlConstants.CAST, originName, MysqlConstants.DEFAULT_INT_FORMAT) + "/1000"; - whereName = String.format(MysqlConstants.FROM_UNIXTIME, cast, MysqlConstants.DEFAULT_DATE_FORMAT); + 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(MysqlConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getDataeaseName()); + } else { + originName = String.format(MysqlConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getDataeaseName()); } - } else if (field.getDeType() == 0 && field.getDeExtractType() == 0) { - whereName = String.format(MysqlConstants.CAST, originName, MysqlConstants.CHAR); - } else if (field.getDeType() == 2 || field.getDeType() == 3) { - if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { - whereName = String.format(MysqlConstants.CAST, originName, MysqlConstants.DEFAULT_FLOAT_FORMAT); - } - if (field.getDeExtractType() == 1) { - whereName = String.format(MysqlConstants.UNIX_TIMESTAMP, originName) + "*1000"; - } - if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { + + if (field.getDeType() == 1) { + if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5 || field.getDeExtractType() == 1) { + whereName = String.format(MysqlConstants.STR_TO_DATE, originName, MysqlConstants.DEFAULT_DATE_FORMAT); + } + if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { + String cast = String.format(MysqlConstants.CAST, originName, MysqlConstants.DEFAULT_INT_FORMAT) + "/1000"; + whereName = String.format(MysqlConstants.FROM_UNIXTIME, cast, MysqlConstants.DEFAULT_DATE_FORMAT); + } + } else if (field.getDeType() == 0 && field.getDeExtractType() == 0) { + whereName = String.format(MysqlConstants.CAST, originName, MysqlConstants.CHAR); + } else if (field.getDeType() == 2 || field.getDeType() == 3) { + if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { + whereName = String.format(MysqlConstants.CAST, originName, MysqlConstants.DEFAULT_FLOAT_FORMAT); + } + if (field.getDeExtractType() == 1) { + whereName = String.format(MysqlConstants.UNIX_TIMESTAMP, originName) + "*1000"; + } + if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { + whereName = originName; + } + } else { whereName = originName; } - } else { - whereName = originName; + whereNameList.add(whereName); } + String whereName = ""; + if (request.getIsTree()) { + whereName = "CONCAT(" + StringUtils.join(whereNameList, ",',',") + ")"; + } else { + whereName = whereNameList.get(0); + } + String whereTerm = transMysqlFilterTerm(request.getOperator()); + String whereValue = ""; if (StringUtils.containsIgnoreCase(request.getOperator(), "in")) { whereValue = "('" + StringUtils.join(value, "','") + "')"; 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 b091838562..112892e331 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 @@ -829,50 +829,67 @@ public class MysqlQueryProvider extends QueryProvider { List list = new ArrayList<>(); for (ChartExtFilterRequest request : requestList) { List value = request.getValue(); - DatasetTableField field = request.getDatasetTableField(); - if (CollectionUtils.isEmpty(value) || ObjectUtils.isEmpty(field)) { - continue; + + List whereNameList = new ArrayList<>(); + List fieldList = new ArrayList<>(); + if (request.getIsTree()) { + fieldList.addAll(request.getDatasetTableFieldList()); + } else { + fieldList.add(request.getDatasetTableField()); } + + for (DatasetTableField field : fieldList) { + if (CollectionUtils.isEmpty(value) || 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(MySQLConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); + } else { + originName = String.format(MySQLConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); + } + + if (field.getDeType() == 1) { + if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { + whereName = String.format(MySQLConstants.STR_TO_DATE, originName, MySQLConstants.DEFAULT_DATE_FORMAT); + } + if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { + String cast = String.format(MySQLConstants.CAST, originName, MySQLConstants.DEFAULT_INT_FORMAT) + "/1000"; + whereName = String.format(MySQLConstants.FROM_UNIXTIME, cast, MySQLConstants.DEFAULT_DATE_FORMAT); + } + if (field.getDeExtractType() == 1) { + whereName = originName; + } + } else if (field.getDeType() == 2 || field.getDeType() == 3) { + if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { + whereName = String.format(MySQLConstants.CAST, originName, MySQLConstants.DEFAULT_FLOAT_FORMAT); + } + if (field.getDeExtractType() == 1) { + whereName = String.format(MySQLConstants.UNIX_TIMESTAMP, originName); + } + if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { + whereName = originName; + } + } else { + whereName = originName; + } + whereNameList.add(whereName); + } + String whereName = ""; + if (request.getIsTree()) { + whereName = "CONCAT(" + StringUtils.join(whereNameList, ",',',") + ")"; + } else { + whereName = whereNameList.get(0); + } String whereTerm = transMysqlFilterTerm(request.getOperator()); 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(MySQLConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); - } else { - originName = String.format(MySQLConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); - } - - if (field.getDeType() == 1) { - if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { - whereName = String.format(MySQLConstants.STR_TO_DATE, originName, MySQLConstants.DEFAULT_DATE_FORMAT); - } - if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { - String cast = String.format(MySQLConstants.CAST, originName, MySQLConstants.DEFAULT_INT_FORMAT) + "/1000"; - whereName = String.format(MySQLConstants.FROM_UNIXTIME, cast, MySQLConstants.DEFAULT_DATE_FORMAT); - } - if (field.getDeExtractType() == 1) { - whereName = originName; - } - } else if (field.getDeType() == 2 || field.getDeType() == 3) { - if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { - whereName = String.format(MySQLConstants.CAST, originName, MySQLConstants.DEFAULT_FLOAT_FORMAT); - } - if (field.getDeExtractType() == 1) { - whereName = String.format(MySQLConstants.UNIX_TIMESTAMP, originName); - } - if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { - whereName = originName; - } - } else { - whereName = originName; - } - - if (StringUtils.containsIgnoreCase(request.getOperator(), "in")) { whereValue = "('" + StringUtils.join(value, "','") + "')"; } else if (StringUtils.containsIgnoreCase(request.getOperator(), "like")) { diff --git a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java index d4ec1cfd96..b3c6aad78b 100644 --- a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java +++ b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java @@ -542,8 +542,10 @@ public class ChartViewService { if (ObjectUtils.isEmpty(view)) { throw new RuntimeException(Translator.get("i18n_chart_delete")); } - Type tokenType = new TypeToken>() {}.getType(); - Type filterTokenType = new TypeToken>() {}.getType(); + Type tokenType = new TypeToken>() { + }.getType(); + Type filterTokenType = new TypeToken>() { + }.getType(); List viewFields = gson.fromJson(view.getViewFields(), tokenType); Map> extFieldsMap = null; @@ -640,24 +642,50 @@ public class ChartViewService { String fieldId = request.getFieldId(); if (StringUtils.isNotEmpty(fieldId)) { String[] fieldIds = fieldId.split(","); - for (String fId : fieldIds) { + if (request.getIsTree()) { ChartExtFilterRequest filterRequest = new ChartExtFilterRequest(); BeanUtils.copyBean(filterRequest, request); - filterRequest.setFieldId(fId); - - DatasetTableField datasetTableField = dataSetTableFieldsService.get(fId); - if (datasetTableField == null) { - continue; + filterRequest.setDatasetTableFieldList(new ArrayList<>()); + for (String fId : fieldIds) { + DatasetTableField datasetTableField = dataSetTableFieldsService.get(fId); + if (datasetTableField == null) { + continue; + } + if (!desensitizationList.contains(datasetTableField.getDataeaseName()) && dataeaseNames.contains(datasetTableField.getDataeaseName())) { + if (StringUtils.equalsIgnoreCase(datasetTableField.getTableId(), view.getTableId())) { + if (CollectionUtils.isNotEmpty(filterRequest.getViewIds())) { + if (filterRequest.getViewIds().contains(view.getId())) { + filterRequest.getDatasetTableFieldList().add(datasetTableField); + } + } else { + filterRequest.getDatasetTableFieldList().add(datasetTableField); + } + } + } } - if (!desensitizationList.contains(datasetTableField.getDataeaseName()) && dataeaseNames.contains(datasetTableField.getDataeaseName())) { - filterRequest.setDatasetTableField(datasetTableField); - if (StringUtils.equalsIgnoreCase(datasetTableField.getTableId(), view.getTableId())) { - if (CollectionUtils.isNotEmpty(filterRequest.getViewIds())) { - if (filterRequest.getViewIds().contains(view.getId())) { + if (CollectionUtils.isNotEmpty(filterRequest.getDatasetTableFieldList())) { + extFilterList.add(filterRequest); + } + } else { + for (String fId : fieldIds) { + ChartExtFilterRequest filterRequest = new ChartExtFilterRequest(); + BeanUtils.copyBean(filterRequest, request); + filterRequest.setFieldId(fId); + + DatasetTableField datasetTableField = dataSetTableFieldsService.get(fId); + if (datasetTableField == null) { + continue; + } + if (!desensitizationList.contains(datasetTableField.getDataeaseName()) && dataeaseNames.contains(datasetTableField.getDataeaseName())) { + filterRequest.setDatasetTableField(datasetTableField); + if (StringUtils.equalsIgnoreCase(datasetTableField.getTableId(), view.getTableId())) { + if (CollectionUtils.isNotEmpty(filterRequest.getViewIds())) { + if (filterRequest.getViewIds().contains(view.getId())) { + extFilterList.add(filterRequest); + } + } else { extFilterList.add(filterRequest); } - } else { - extFilterList.add(filterRequest); } } }