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 7bef6c7ee2b641d64e071d502e0ef9f7bfd09abe..e896fdc57f8243cbfacc7d86bf34f74154c2cad5 100644 --- a/src/main/java/neatlogic/module/tenant/api/matrix/MatrixColumnDataSearchForSelectApi.java +++ b/src/main/java/neatlogic/module/tenant/api/matrix/MatrixColumnDataSearchForSelectApi.java @@ -76,7 +76,7 @@ public class MatrixColumnDataSearchForSelectApi extends PrivateApiComponentBase @Param(name = "valueField", desc = "value属性uuid", type = ApiParamType.STRING, isRequired = true), @Param(name = "textField", desc = "text属性uuid", type = ApiParamType.STRING, isRequired = true), @Param(name = "hiddenFieldList", desc = "隐藏属性uuid列表", type = ApiParamType.JSONARRAY), - @Param(name = "pageSize", desc = "显示条目数", type = ApiParamType.INTEGER), + @Param(name = "currentPage", desc = "当前页", type = ApiParamType.INTEGER), @Param(name = "pageSize", desc = "显示条目数", type = ApiParamType.INTEGER), @Param(name = "defaultValue", desc = "精确匹配回显数据参数", type = ApiParamType.JSONARRAY), @Param(name = "filterList", desc = "过滤条件集合", type = ApiParamType.JSONARRAY) @@ -165,6 +165,7 @@ public class MatrixColumnDataSearchForSelectApi extends PrivateApiComponentBase if (!attributeList.contains(textField)) { throw new MatrixAttributeNotFoundException(matrixVo.getName(), textField); } + List> resultList = new ArrayList<>(); dataVo.setKeywordColumn(textField); notNullColumnSet.add(textField); List columnList = new ArrayList<>(); @@ -209,10 +210,33 @@ public class MatrixColumnDataSearchForSelectApi extends PrivateApiComponentBase } dataVo.setDefaultValueFilterList(defaultValueFilterList); dataVo.setDefaultValue(null); + + resultList = matrixDataSourceHandler.searchTableDataNew(dataVo); + deduplicateData(null, valueField, textField, resultList); + } else { + List> previousPageList = new ArrayList<>(); + int startPage = dataVo.getCurrentPage(); + int pageSize = dataVo.getPageSize(); + int currentPage = 0; + while (resultList.size() < pageSize && currentPage < 100) { + currentPage++; + dataVo.setCurrentPage(currentPage); + if (currentPage < startPage) { + List> list = matrixDataSourceHandler.searchTableDataNew(dataVo); + deduplicateData(previousPageList, valueField, textField, list); + previousPageList.addAll(list); + } else { + List> list = matrixDataSourceHandler.searchTableDataNew(dataVo); + deduplicateData(previousPageList, valueField, textField, list); + previousPageList.addAll(list); + resultList.addAll(list); + } + if (currentPage >= dataVo.getPageCount()) { + break; + } + } } JSONArray dataList = new JSONArray(); - List> resultList = matrixDataSourceHandler.searchTableDataNew(dataVo); - deduplicateData(valueField, textField, resultList); if (CollectionUtils.isNotEmpty(resultList)) { for (Map result : resultList) { JSONObject element = new JSONObject(); @@ -254,9 +278,33 @@ public class MatrixColumnDataSearchForSelectApi extends PrivateApiComponentBase return returnObj; } - private void deduplicateData(String valueField, String textField, List> resultList) { + 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)) { + continue; + } else { + duplicateText.add(text); + } + } + } Iterator> iterator = resultList.iterator(); while (iterator.hasNext()) { Map resultObj = iterator.next();