diff --git a/core/backend/src/main/java/io/dataease/service/chart/build/SelectBuild.java b/core/backend/src/main/java/io/dataease/service/chart/build/SelectBuild.java index 5a55d50488..079b4253b8 100644 --- a/core/backend/src/main/java/io/dataease/service/chart/build/SelectBuild.java +++ b/core/backend/src/main/java/io/dataease/service/chart/build/SelectBuild.java @@ -1,11 +1,18 @@ package io.dataease.service.chart.build; +import cn.hutool.core.bean.BeanUtil; +import io.dataease.commons.utils.LogUtil; +import io.dataease.controller.dataset.DataSetTableFieldController; +import io.dataease.controller.request.dataset.MultFieldValuesRequest; import io.dataease.dto.chart.FilterParamTO; +import io.dataease.dto.dataset.DeSortDTO; import io.dataease.service.chart.FilterBuildTemplate; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -14,6 +21,10 @@ import java.util.stream.Collectors; @Service("selectWidget") public class SelectBuild extends FilterBuildTemplate { + + @Resource + private DataSetTableFieldController dataSetTableFieldController; + @Override protected FilterParamTO buildParam(Map component) { FilterParamTO result = new FilterParamTO(); @@ -23,30 +34,34 @@ public class SelectBuild extends FilterBuildTemplate { Object valueObj = null; List realValues = null; - if(ObjectUtils.isEmpty(component.get("options"))) return result; - Map options = (Map)component.get("options"); + if (ObjectUtils.isEmpty(component.get("options"))) return result; + Map options = (Map) component.get("options"); valueObj = options.get("value"); String defaultValue = ""; Map attrs = (Map) options.get("attrs"); boolean multiple = (boolean) attrs.get("multiple"); - if(!ObjectUtils.isEmpty(valueObj)) { - if(valueObj instanceof List) { + if (!ObjectUtils.isEmpty(valueObj)) { + if (valueObj instanceof List) { defaultValue = ""; - }else { + } else { defaultValue = valueObj.toString(); } } - if(multiple) { + boolean isSelectFirst = StringUtils.equals("custom", component.get("type").toString()) && ObjectUtils.isNotEmpty(attrs.get("selectFirst")) && (boolean) attrs.get("selectFirst"); + if (isSelectFirst) { + defaultValue = getFirst(attrs); + } + if (multiple) { if (StringUtils.isBlank(defaultValue)) { realValues = new ArrayList<>(); - }else { + } else { realValues = Arrays.asList(defaultValue.split(",")); } } else { if (StringUtils.isBlank(defaultValue)) { realValues = new ArrayList<>(); - }else { + } else { realValues = Arrays.asList(defaultValue.split(",")).stream().limit(1).collect(Collectors.toList()); } } @@ -54,4 +69,22 @@ public class SelectBuild extends FilterBuildTemplate { result.setValue(realValues); return result; } + + private String getFirst(Map attrs) { + MultFieldValuesRequest request = new MultFieldValuesRequest(); + request.setFieldIds(Arrays.stream(attrs.get("fieldId").toString().split(",")).collect(Collectors.toList())); + if (ObjectUtils.isNotEmpty(attrs.get("sort"))) { + DeSortDTO sort = BeanUtil.copyProperties(attrs.get("sort"), DeSortDTO.class); + request.setSort(sort); + } + List list = null; + try { + list = dataSetTableFieldController.multFieldValues(request); + } catch (Exception e) { + LogUtil.error(e.getMessage()); + return null; + } + if (CollectionUtils.isEmpty(list)) return null; + return list.get(0).toString(); + } }