From c85211348895e1d657a25e39c051ebe792019048 Mon Sep 17 00:00:00 2001 From: "1437892690@qq.com" <1437892690@qq.com> Date: Wed, 7 Aug 2024 15:59:31 +0800 Subject: [PATCH 1/2] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20=E8=A1=A8=E5=8D=95?= =?UTF-8?q?=E4=B8=8B=E6=8B=89=E6=A1=86=E5=BC=95=E7=94=A8=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E7=9F=A9=E9=98=B5=E5=92=8C=E8=A7=86=E5=9B=BE=E7=9F=A9?= =?UTF-8?q?=E9=98=B5=E6=97=B6=EF=BC=8C=E5=AD=97=E6=AE=B5=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E5=80=BC=E5=A4=AA=E5=A4=9A=E4=BC=9A=E5=BC=95=E5=8F=91=E5=BE=AA?= =?UTF-8?q?=E7=8E=AF=E6=9F=A5=E8=AF=A2=E6=95=B0=E6=8D=AE=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 关联 #[1213024554156032]表单下拉框引用自定义矩阵和视图矩阵时,字段重复值太多会引发循环查询数据库 http://192.168.0.96:8090/demo/rdm.html#/story-detail/939050947543040/939050947543042/1213024554156032 --- .../tenant/api/matrix/MatrixColumnDataSearchForSelectApi.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/neatlogic/module/tenant/api/matrix/MatrixColumnDataSearchForSelectApi.java b/src/main/java/neatlogic/module/tenant/api/matrix/MatrixColumnDataSearchForSelectApi.java index de8d130d..5d5f02c2 100644 --- a/src/main/java/neatlogic/module/tenant/api/matrix/MatrixColumnDataSearchForSelectApi.java +++ b/src/main/java/neatlogic/module/tenant/api/matrix/MatrixColumnDataSearchForSelectApi.java @@ -304,6 +304,7 @@ public class MatrixColumnDataSearchForSelectApi extends PrivateApiComponentBase deduplicateData(null, valueField, textField, resultList); } else { List> previousPageList = new ArrayList<>(); + dataVo.setIsDistinct(true); int startPage = dataVo.getCurrentPage(); int pageSize = dataVo.getPageSize(); int currentPage = 0; -- Gitee From 7c76cc479e17990afd77d30f1e21bfd92c127b0d Mon Sep 17 00:00:00 2001 From: "1437892690@qq.com" <1437892690@qq.com> Date: Wed, 7 Aug 2024 18:07:24 +0800 Subject: [PATCH 2/2] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20=E8=A1=A8=E5=8D=95?= =?UTF-8?q?=E4=B8=8B=E6=8B=89=E6=A1=86=E5=BC=95=E7=94=A8=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E7=9F=A9=E9=98=B5=E5=92=8C=E8=A7=86=E5=9B=BE=E7=9F=A9?= =?UTF-8?q?=E9=98=B5=E6=97=B6=EF=BC=8C=E5=AD=97=E6=AE=B5=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E5=80=BC=E5=A4=AA=E5=A4=9A=E4=BC=9A=E5=BC=95=E5=8F=91=E5=BE=AA?= =?UTF-8?q?=E7=8E=AF=E6=9F=A5=E8=AF=A2=E6=95=B0=E6=8D=AE=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 关联 #[1213024554156032]表单下拉框引用自定义矩阵和视图矩阵时,字段重复值太多会引发循环查询数据库 http://192.168.0.96:8090/demo/rdm.html#/story-detail/939050947543040/939050947543042/1213024554156032 --- .../MatrixColumnDataSearchForSelectApi.java | 166 ++++++++++++------ 1 file changed, 112 insertions(+), 54 deletions(-) diff --git a/src/main/java/neatlogic/module/tenant/api/matrix/MatrixColumnDataSearchForSelectApi.java b/src/main/java/neatlogic/module/tenant/api/matrix/MatrixColumnDataSearchForSelectApi.java index 5d5f02c2..2e34c376 100644 --- a/src/main/java/neatlogic/module/tenant/api/matrix/MatrixColumnDataSearchForSelectApi.java +++ b/src/main/java/neatlogic/module/tenant/api/matrix/MatrixColumnDataSearchForSelectApi.java @@ -263,8 +263,6 @@ public class MatrixColumnDataSearchForSelectApi extends PrivateApiComponentBase columnList.add(hiddenField); } } - dataVo.setColumnList(columnList); - dataVo.setNotNullColumnList(new ArrayList<>(notNullColumnSet)); String keywordColumn = dataVo.getKeywordColumn(); String keywordColumnUniqueIdentifier = dataVo.getKeywordColumnUniqueIdentifier(); @@ -277,6 +275,8 @@ public class MatrixColumnDataSearchForSelectApi extends PrivateApiComponentBase } JSONArray defaultValue = dataVo.getDefaultValue(); if (CollectionUtils.isNotEmpty(defaultValue)) { + dataVo.setColumnList(columnList); + dataVo.setNotNullColumnList(new ArrayList<>(notNullColumnSet)); List defaultValueFilterList = new ArrayList<>(); for (Object defaultValueObject : defaultValue) { if (defaultValueObject instanceof JSONObject) { @@ -299,28 +299,63 @@ public class MatrixColumnDataSearchForSelectApi extends PrivateApiComponentBase } dataVo.setDefaultValueFilterList(defaultValueFilterList); dataVo.setDefaultValue(null); - + dataVo.setPageSize(1); resultList = matrixDataSourceHandler.searchTableDataNew(dataVo); - deduplicateData(null, valueField, textField, resultList); +// deduplicateData(null, valueField, textField, resultList); } else { - List> previousPageList = new ArrayList<>(); +// List> previousPageList = new ArrayList<>(); +// dataVo.setIsDistinct(true); +// int startPage = dataVo.getCurrentPage(); +// int pageSize = dataVo.getPageSize(); +// int currentPage = 0; +// while (resultList.size() < pageSize) { +// currentPage++; +// dataVo.setCurrentPage(currentPage); +// List> list = matrixDataSourceHandler.searchTableDataNew(dataVo); +// deduplicateData(previousPageList, valueField, textField, list); +// previousPageList.addAll(list); +// if (currentPage >= startPage) { +// resultList.addAll(list); +// } +// if (currentPage >= dataVo.getPageCount()) { +// break; +// } +// } + List previousPageList = new ArrayList<>(); + List valueList = new ArrayList<>(); + dataVo.setColumnList(Collections.singletonList(valueField)); dataVo.setIsDistinct(true); int startPage = dataVo.getCurrentPage(); int pageSize = dataVo.getPageSize(); int currentPage = 0; - while (resultList.size() < pageSize) { + while (valueList.size() < pageSize) { currentPage++; + System.out.println("currentPage = " + currentPage); dataVo.setCurrentPage(currentPage); - List> list = matrixDataSourceHandler.searchTableDataNew(dataVo); - deduplicateData(previousPageList, valueField, textField, list); - previousPageList.addAll(list); + List> dataList = matrixDataSourceHandler.searchTableDataNew(dataVo); + List list = deduplicateData(previousPageList, valueField, dataList); if (currentPage >= startPage) { - resultList.addAll(list); + valueList.addAll(list); } if (currentPage >= dataVo.getPageCount()) { break; } } + dataVo.setIsDistinct(false); + dataVo.setColumnList(columnList); + dataVo.setNotNullColumnList(new ArrayList<>(notNullColumnSet)); + List defaultValueFilterList = new ArrayList<>(); + for (String value : valueList) { + MatrixDefaultValueFilterVo matrixDefaultValueFilterVo = new MatrixDefaultValueFilterVo( + new MatrixKeywordFilterVo(valueField, SearchExpression.EQ.getExpression(), value), + null + ); + defaultValueFilterList.add(matrixDefaultValueFilterVo); + } + dataVo.setDefaultValueFilterList(defaultValueFilterList); + dataVo.setDefaultValue(null); + dataVo.setPageSize(1); + resultList = matrixDataSourceHandler.searchTableDataNew(dataVo); } JSONArray dataList = new JSONArray(); if (CollectionUtils.isNotEmpty(resultList)) { @@ -383,57 +418,80 @@ public class MatrixColumnDataSearchForSelectApi extends PrivateApiComponentBase return returnObj; } - private void deduplicateData(List> previousPageList, String valueField, String textField, List> resultList) { - List duplicateValue = new ArrayList<>(); - List duplicateText = new ArrayList<>(); - if (CollectionUtils.isNotEmpty(previousPageList)) { - for (Map resultObj : previousPageList) { - JSONObject firstObj = resultObj.get(valueField); - if (MapUtils.isEmpty(firstObj)) { - continue; - } - JSONObject secondObj = resultObj.get(textField); - if (MapUtils.isEmpty(secondObj)) { - continue; - } - String value = firstObj.getString("value"); - if (duplicateValue.contains(value)) { - continue; - } else { - duplicateValue.add(value); - } - String text = secondObj.getString("text"); - if (!duplicateText.contains(text)) { - duplicateText.add(text); - } - } - } - Iterator> iterator = resultList.iterator(); - while (iterator.hasNext()) { - Map resultObj = iterator.next(); +// private void deduplicateData(List> previousPageList, String valueField, String textField, List> resultList) { +// List duplicateValue = new ArrayList<>(); +// List duplicateText = new ArrayList<>(); +// if (CollectionUtils.isNotEmpty(previousPageList)) { +// for (Map resultObj : previousPageList) { +// JSONObject firstObj = resultObj.get(valueField); +// if (MapUtils.isEmpty(firstObj)) { +// continue; +// } +// JSONObject secondObj = resultObj.get(textField); +// if (MapUtils.isEmpty(secondObj)) { +// continue; +// } +// String value = firstObj.getString("value"); +// if (duplicateValue.contains(value)) { +// continue; +// } else { +// duplicateValue.add(value); +// } +// String text = secondObj.getString("text"); +// if (!duplicateText.contains(text)) { +// duplicateText.add(text); +// } +// } +// } +// Iterator> iterator = resultList.iterator(); +// while (iterator.hasNext()) { +// Map resultObj = iterator.next(); +// JSONObject firstObj = resultObj.get(valueField); +// if (MapUtils.isEmpty(firstObj)) { +// iterator.remove(); +// continue; +// } +// JSONObject secondObj = resultObj.get(textField); +// if (MapUtils.isEmpty(secondObj)) { +// iterator.remove(); +// continue; +// } +// String value = firstObj.getString("value"); +// if (duplicateValue.contains(value)) { +// iterator.remove(); +// continue; +// } else { +// duplicateValue.add(value); +// } +// String text = secondObj.getString("text"); +// if (duplicateText.contains(text)) { +// iterator.remove(); +// } else { +// duplicateText.add(text); +// } +// } +// } + + /** + * 只根据value值去重 + * @param previousPageList + * @param valueField + * @param dataList + */ + private List deduplicateData(List previousPageList, String valueField, List> dataList) { + List resultList = new ArrayList<>(); + for (Map resultObj : dataList) { JSONObject firstObj = resultObj.get(valueField); if (MapUtils.isEmpty(firstObj)) { - iterator.remove(); - continue; - } - JSONObject secondObj = resultObj.get(textField); - if (MapUtils.isEmpty(secondObj)) { - iterator.remove(); continue; } String value = firstObj.getString("value"); - if (duplicateValue.contains(value)) { - iterator.remove(); + if (previousPageList.contains(value)) { continue; - } else { - duplicateValue.add(value); - } - String text = secondObj.getString("text"); - if (duplicateText.contains(text)) { - iterator.remove(); - } else { - duplicateText.add(text); } + previousPageList.add(value); + resultList.add(value); } + return resultList; } } -- Gitee