From fe37d09a9e8900ff259e6682962791fa624389ac Mon Sep 17 00:00:00 2001 From: junjie Date: Fri, 17 Dec 2021 18:16:18 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E8=A7=86=E5=9B=BE):=20=E6=96=87=E6=9C=AC?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E8=BF=87=E6=BB=A4=E7=BB=84=E4=BB=B6=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E6=9E=9A=E4=B8=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/chart/ChartFieldCustomFilterDTO.java | 2 + .../dto/chart/ChartViewFieldBaseDTO.java | 2 + .../query/mysql/MysqlQueryProvider.java | 114 +++++++------ frontend/src/lang/en.js | 6 +- frontend/src/lang/tw.js | 6 +- frontend/src/lang/zh.js | 6 +- .../components/filter/ResultFilterEditor.vue | 156 ++++++++++++------ frontend/src/views/chart/view/ChartEdit.vue | 32 +++- 8 files changed, 211 insertions(+), 113 deletions(-) diff --git a/backend/src/main/java/io/dataease/dto/chart/ChartFieldCustomFilterDTO.java b/backend/src/main/java/io/dataease/dto/chart/ChartFieldCustomFilterDTO.java index 57a9c8d2ae..27b5599ed8 100644 --- a/backend/src/main/java/io/dataease/dto/chart/ChartFieldCustomFilterDTO.java +++ b/backend/src/main/java/io/dataease/dto/chart/ChartFieldCustomFilterDTO.java @@ -17,4 +17,6 @@ public class ChartFieldCustomFilterDTO extends ChartViewFieldBaseDTO implements private List filter; private DatasetTableField field; + + private List enumCheckField; } diff --git a/backend/src/main/java/io/dataease/dto/chart/ChartViewFieldBaseDTO.java b/backend/src/main/java/io/dataease/dto/chart/ChartViewFieldBaseDTO.java index 1f84afc654..3cfd008370 100644 --- a/backend/src/main/java/io/dataease/dto/chart/ChartViewFieldBaseDTO.java +++ b/backend/src/main/java/io/dataease/dto/chart/ChartViewFieldBaseDTO.java @@ -48,4 +48,6 @@ public class ChartViewFieldBaseDTO implements Serializable { private ChartFieldCompareDTO compareCalc; private String logic; + + private String filterType; } 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 e893451d5f..11f857ad71 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 @@ -735,62 +735,74 @@ public class MysqlQueryProvider 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(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); } - 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(MySQLConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); - } else { - originName = String.format(MySQLConstants.KEYWORD_FIX, tableObj.getTableAlias(), field.getOriginName()); + 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.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.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(MySQLConstants.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) { + if (ObjectUtils.isEmpty(field)) { + continue; + } + 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(MySQLConstants.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/frontend/src/lang/en.js b/frontend/src/lang/en.js index 83b6f52052..a7738681b5 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -994,7 +994,11 @@ export default { data_percent: 'Percent', compare_calc_expression: 'Expression', and: 'And', - or: 'Or' + or: 'Or', + logic_exp: 'Logic', + enum_exp: 'Enum', + pls_slc: 'Please Select', + filter_exp: 'Filter Value' }, dataset: { sheet_warn: 'There are multiple sheet pages, and the first one is extracted by default', diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index 067bec6119..85efa381fc 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -994,7 +994,11 @@ export default { data_percent: '差值百分比', compare_calc_expression: '計算公式', and: '與', - or: '或' + or: '或', + logic_exp: '邏輯條件', + enum_exp: '枚舉條件', + pls_slc: '請選擇', + filter_exp: '過濾條件' }, dataset: { sheet_warn: '有多個 Sheet 頁,默認抽取第一個', diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index 8f7bb6ffd0..5630a294a4 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -997,7 +997,11 @@ export default { data_percent: '差值百分比', compare_calc_expression: '计算公式', and: '与', - or: '或' + or: '或', + logic_exp: '逻辑条件', + enum_exp: '枚举条件', + pls_slc: '请选择', + filter_exp: '过滤条件' }, dataset: { sheet_warn: '有多个 Sheet 页,默认抽取第一个', diff --git a/frontend/src/views/chart/components/filter/ResultFilterEditor.vue b/frontend/src/views/chart/components/filter/ResultFilterEditor.vue index d7af98883f..0e8f7815ff 100644 --- a/frontend/src/views/chart/components/filter/ResultFilterEditor.vue +++ b/frontend/src/views/chart/components/filter/ResultFilterEditor.vue @@ -1,52 +1,84 @@