diff --git a/backend/src/main/java/io/dataease/controller/chart/ChartViewFieldController.java b/backend/src/main/java/io/dataease/controller/chart/ChartViewFieldController.java new file mode 100644 index 0000000000..98638c78d0 --- /dev/null +++ b/backend/src/main/java/io/dataease/controller/chart/ChartViewFieldController.java @@ -0,0 +1,86 @@ +package io.dataease.controller.chart; + +import com.github.xiaoymin.knife4j.annotations.ApiSupport; +import io.dataease.auth.annotation.DePermission; +import io.dataease.commons.constants.DePermissionType; +import io.dataease.commons.constants.ResourceAuthLevel; +import io.dataease.commons.exception.DEException; +import io.dataease.controller.request.dataset.DataSetTableRequest; +import io.dataease.controller.response.ChartViewField4Type; +import io.dataease.i18n.Translator; +import io.dataease.plugins.common.base.domain.ChartViewField; +import io.dataease.plugins.common.base.domain.DatasetTable; +import io.dataease.plugins.common.base.domain.DatasetTableField; +import io.dataease.service.chart.ChartViewFieldService; +import io.dataease.service.dataset.DataSetTableService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.BeanUtils; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.Collections; +import java.util.List; + +/** + * @Author gin + */ +@Api(tags = "视图:字段") +@ApiSupport(order = 130) +@RestController +@RequestMapping("/chart/field") +public class ChartViewFieldController { + @Resource + private ChartViewFieldService chartViewFieldService; + @Resource + private DataSetTableService dataSetTableService; + + @DePermission(type = DePermissionType.PANEL, level = ResourceAuthLevel.PANNEL_LEVEL_MANAGE) + @ApiOperation("保存") + @PostMapping("/save/{panelId}") + public ChartViewField save(@PathVariable String panelId, @RequestBody ChartViewField chartViewField) { + try { + // 执行一次sql,确保数据集中所有字段均能正确执行 + DatasetTable datasetTable = dataSetTableService.get(chartViewField.getTableId()); + DataSetTableRequest dataSetTableRequest = new DataSetTableRequest(); + BeanUtils.copyProperties(datasetTable, dataSetTableRequest); + DatasetTableField datasetTableField = new DatasetTableField(); + BeanUtils.copyProperties(chartViewField, datasetTableField); + dataSetTableService.getPreviewData(dataSetTableRequest, 1, 1, Collections.singletonList(datasetTableField)); + } catch (Exception e) { + DEException.throwException(Translator.get("i18n_calc_field_error")); + } + return chartViewFieldService.save(chartViewField); + } + + @DePermission(type = DePermissionType.PANEL, level = ResourceAuthLevel.PANNEL_LEVEL_MANAGE, paramIndex = 1) + @ApiOperation("删除") + @PostMapping("/delete/{id}/{panelId}") + public void delete(@PathVariable String id, @PathVariable String panelId) { + chartViewFieldService.delete(id); + } + + @DePermission(type = DePermissionType.PANEL, level = ResourceAuthLevel.PANNEL_LEVEL_MANAGE, paramIndex = 1) + @ApiOperation("删除视图的字段") + @PostMapping("/deleteByChartId/{chartId}/{panelId}") + public void deleteByChartId(@PathVariable String chartId, @PathVariable String panelId) { + chartViewFieldService.deleteByChartId(chartId); + } + + @DePermission(type = DePermissionType.PANEL, level = ResourceAuthLevel.PANNEL_LEVEL_VIEW, paramIndex = 1) + @ApiOperation("分组查询表下属字段") + @PostMapping("listByDQ/{chartId}/{panelId}") + public ChartViewField4Type listByDQ(@PathVariable String chartId, @PathVariable String panelId) { + ChartViewField chartViewField = new ChartViewField(); + chartViewField.setChartId(chartId); + chartViewField.setGroupType("d"); + List dimensionList = chartViewFieldService.list(chartViewField); + chartViewField.setGroupType("q"); + List quotaList = chartViewFieldService.list(chartViewField); + + ChartViewField4Type chartViewField4Type = new ChartViewField4Type(); + chartViewField4Type.setDimensionList(dimensionList); + chartViewField4Type.setQuotaList(quotaList); + return chartViewField4Type; + } +} diff --git a/backend/src/main/java/io/dataease/controller/response/ChartViewField4Type.java b/backend/src/main/java/io/dataease/controller/response/ChartViewField4Type.java new file mode 100644 index 0000000000..8646e98db9 --- /dev/null +++ b/backend/src/main/java/io/dataease/controller/response/ChartViewField4Type.java @@ -0,0 +1,15 @@ +package io.dataease.controller.response; + +import io.dataease.plugins.common.base.domain.ChartViewField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class ChartViewField4Type { + @ApiModelProperty("维度") + List dimensionList; + @ApiModelProperty("指标") + List quotaList; +} diff --git a/backend/src/main/java/io/dataease/service/chart/ChartViewFieldService.java b/backend/src/main/java/io/dataease/service/chart/ChartViewFieldService.java new file mode 100644 index 0000000000..4cee1015c8 --- /dev/null +++ b/backend/src/main/java/io/dataease/service/chart/ChartViewFieldService.java @@ -0,0 +1,80 @@ +package io.dataease.service.chart; + +import io.dataease.commons.exception.DEException; +import io.dataease.commons.utils.TableUtils; +import io.dataease.i18n.Translator; +import io.dataease.plugins.common.base.domain.ChartViewField; +import io.dataease.plugins.common.base.domain.ChartViewFieldExample; +import io.dataease.plugins.common.base.mapper.ChartViewFieldMapper; +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.List; +import java.util.UUID; + +/** + * Author: Gin + */ +@Service +public class ChartViewFieldService { + @Resource + private ChartViewFieldMapper chartViewFieldMapper; + + public ChartViewField save(ChartViewField chartViewField) { + checkFieldName(chartViewField); + if (StringUtils.isEmpty(chartViewField.getId())) { + chartViewField.setId(UUID.randomUUID().toString()); + // 若dataeasename为空,则用MD5(id)作为dataeasename + if (StringUtils.isEmpty(chartViewField.getDataeaseName())) { + chartViewField.setDataeaseName(TableUtils.columnName(chartViewField.getId())); + } + if (ObjectUtils.isEmpty(chartViewField.getLastSyncTime())) { + chartViewField.setLastSyncTime(System.currentTimeMillis()); + } + chartViewFieldMapper.insert(chartViewField); + } else { + chartViewFieldMapper.updateByPrimaryKeySelective(chartViewField); + } + return chartViewField; + } + + public List list(ChartViewField chartViewField) { + ChartViewFieldExample chartViewFieldExample = new ChartViewFieldExample(); + ChartViewFieldExample.Criteria criteria = chartViewFieldExample.createCriteria(); + if (StringUtils.isNotEmpty(chartViewField.getChartId())) { + criteria.andChartIdEqualTo(chartViewField.getChartId()); + } + if (StringUtils.isNotEmpty(chartViewField.getGroupType())) { + criteria.andGroupTypeEqualTo(chartViewField.getGroupType()); + } + return chartViewFieldMapper.selectByExampleWithBLOBs(chartViewFieldExample); + } + + public void delete(String id) { + chartViewFieldMapper.deleteByPrimaryKey(id); + } + + public void deleteByChartId(String chartId) { + ChartViewFieldExample chartViewFieldExample = new ChartViewFieldExample(); + chartViewFieldExample.createCriteria().andChartIdEqualTo(chartId); + chartViewFieldMapper.deleteByExample(chartViewFieldExample); + } + + public void checkFieldName(ChartViewField chartViewField) { + if (StringUtils.isNotEmpty(chartViewField.getName()) && StringUtils.isNotEmpty(chartViewField.getChartId())) { + ChartViewFieldExample chartViewFieldExample = new ChartViewFieldExample(); + ChartViewFieldExample.Criteria criteria = chartViewFieldExample.createCriteria(); + criteria.andNameEqualTo(chartViewField.getName()).andChartIdEqualTo(chartViewField.getChartId()); + if (StringUtils.isNotEmpty(chartViewField.getId())) { + criteria.andIdNotEqualTo(chartViewField.getId()); + } + List datasetTableFields = chartViewFieldMapper.selectByExample(chartViewFieldExample); + if (CollectionUtils.isNotEmpty(datasetTableFields)) { + DEException.throwException(Translator.get("i18n_field_name_repeat")); + } + } + } +} diff --git a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java index 16f2bcfb12..7eb54431d5 100644 --- a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java +++ b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java @@ -577,10 +577,10 @@ public class ChartViewService { //将没有权限的列删掉 List dataeaseNames = columnPermissionFields.stream().map(DatasetTableField::getDataeaseName).collect(Collectors.toList()); dataeaseNames.add("*"); - fieldCustomFilter = fieldCustomFilter.stream().filter(item -> !desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); - extStack = extStack.stream().filter(item -> !desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); - extBubble = extBubble.stream().filter(item -> !desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); - drill = drill.stream().filter(item -> !desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); + fieldCustomFilter = fieldCustomFilter.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); + extStack = extStack.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); + extBubble = extBubble.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); + drill = drill.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); //行权限 @@ -597,7 +597,7 @@ public class ChartViewService { switch (view.getType()) { case "label": - xAxis = xAxis.stream().filter(item -> !desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); + xAxis = xAxis.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); yAxis = new ArrayList<>(); if (CollectionUtils.isEmpty(xAxis)) { return emptyChartViewDTO(view); @@ -607,25 +607,25 @@ public class ChartViewService { case "gauge": case "liquid": xAxis = new ArrayList<>(); - yAxis = yAxis.stream().filter(item -> !desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); + yAxis = yAxis.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); if (CollectionUtils.isEmpty(yAxis)) { return emptyChartViewDTO(view); } break; case "table-info": yAxis = new ArrayList<>(); - xAxis = xAxis.stream().filter(item -> dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); + xAxis = xAxis.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); if (CollectionUtils.isEmpty(xAxis)) { return emptyChartViewDTO(view); } break; case "table-normal": - xAxis = xAxis.stream().filter(item -> dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); - yAxis = yAxis.stream().filter(item -> dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); + xAxis = xAxis.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); + yAxis = yAxis.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); break; default: - xAxis = xAxis.stream().filter(item -> !desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); - yAxis = yAxis.stream().filter(item -> !desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); + xAxis = xAxis.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); + yAxis = yAxis.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); } // 过滤来自仪表板的条件