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 5f757ba78c6b812ba6a15042d2fee5700495ef9e..658dbfea4356c873091ec477086a3af82940d50f 100644 --- a/src/main/java/neatlogic/module/tenant/api/matrix/MatrixColumnDataSearchForSelectApi.java +++ b/src/main/java/neatlogic/module/tenant/api/matrix/MatrixColumnDataSearchForSelectApi.java @@ -322,42 +322,28 @@ public class MatrixColumnDataSearchForSelectApi extends PrivateApiComponentBase // } // } 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 (valueList.size() < pageSize) { + while (resultList.size() < pageSize) { currentPage++; dataVo.setCurrentPage(currentPage); List> dataList = matrixDataSourceHandler.searchTableDataNew(dataVo); - List list = deduplicateData(previousPageList, valueField, textField, dataList); + List list = deduplicateData(previousPageList, valueField, dataList); if (currentPage >= startPage) { - valueList.addAll(list); + for (String value: list) { + Map options = getOptionsByValue(matrixVo, columnList, new ArrayList<>(notNullColumnSet), valueField, textField, value); + if (options != null) { + resultList.add(options); + } + } } if (currentPage >= dataVo.getPageCount()) { break; } } - dataVo.setIsDistinct(false); - dataVo.setColumnList(columnList); - dataVo.setNotNullColumnList(new ArrayList<>(notNullColumnSet)); - dataVo.setDefaultValue(null); - dataVo.setPageSize(1); - for (String value : valueList) { - List defaultValueFilterList = new ArrayList<>(); - MatrixDefaultValueFilterVo matrixDefaultValueFilterVo = new MatrixDefaultValueFilterVo( - new MatrixKeywordFilterVo(valueField, SearchExpression.EQ.getExpression(), value), - new MatrixKeywordFilterVo(textField, SearchExpression.NOTNULL.getExpression(), null) - ); - defaultValueFilterList.add(matrixDefaultValueFilterVo); - dataVo.setDefaultValueFilterList(defaultValueFilterList); - List> dataList = matrixDataSourceHandler.searchTableDataNew(dataVo); - if (CollectionUtils.isNotEmpty(dataList)) { - resultList.add(dataList.get(0)); - } - } } JSONArray dataList = new JSONArray(); if (CollectionUtils.isNotEmpty(resultList)) { @@ -474,14 +460,36 @@ public class MatrixColumnDataSearchForSelectApi extends PrivateApiComponentBase // } // } + private Map getOptionsByValue(MatrixVo matrixVo, List columnList, List notNullColumnList, String valueField, String textField, String value) { + MatrixDataVo dataVo = new MatrixDataVo(); + dataVo.setMatrixUuid(matrixVo.getUuid()); + dataVo.setIsDistinct(false); + dataVo.setColumnList(columnList); + dataVo.setNotNullColumnList(notNullColumnList); + dataVo.setDefaultValue(null); + dataVo.setPageSize(1); + List defaultValueFilterList = new ArrayList<>(); + MatrixDefaultValueFilterVo matrixDefaultValueFilterVo = new MatrixDefaultValueFilterVo( + new MatrixKeywordFilterVo(valueField, SearchExpression.EQ.getExpression(), value), + new MatrixKeywordFilterVo(textField, SearchExpression.NOTNULL.getExpression(), null) + ); + defaultValueFilterList.add(matrixDefaultValueFilterVo); + dataVo.setDefaultValueFilterList(defaultValueFilterList); + IMatrixDataSourceHandler matrixDataSourceHandler = MatrixDataSourceHandlerFactory.getHandler(matrixVo.getType()); + List> dataList = matrixDataSourceHandler.searchTableDataNew(dataVo); + return getFirstElement(dataList, valueField, textField); + } + /** - * 只根据value值去重 - * @param previousPageList - * @param valueField + * 找出第一个符合value不为空且text不为空的元素 * @param dataList + * @param valueField + * @param textField */ - private List deduplicateData(List previousPageList, String valueField, String textField, List> dataList) { - List resultList = new ArrayList<>(); + private Map getFirstElement(List> dataList, String valueField, String textField) { + if (CollectionUtils.isEmpty(dataList)) { + return null; + } for (Map resultObj : dataList) { JSONObject firstObj = resultObj.get(valueField); if (MapUtils.isEmpty(firstObj)) { @@ -491,9 +499,6 @@ public class MatrixColumnDataSearchForSelectApi extends PrivateApiComponentBase if (StringUtils.isBlank(value)) { continue; } - if (previousPageList.contains(value)) { - continue; - } JSONObject secondObj = resultObj.get(textField); if (MapUtils.isEmpty(secondObj)) { continue; @@ -502,6 +507,31 @@ public class MatrixColumnDataSearchForSelectApi extends PrivateApiComponentBase if (StringUtils.isBlank(text)) { continue; } + return resultObj; + } + return null; + } + + /** + * 只根据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)) { + continue; + } + String value = firstObj.getString("value"); + if (StringUtils.isBlank(value)) { + continue; + } + if (previousPageList.contains(value)) { + continue; + } previousPageList.add(value); resultList.add(value); }